www.narcisivalter.it
| |||
Translate Page
|
OROLOGIO DIGITALE A LED con PIC16F886(LED-Digital Clock based on Microchip PIC16F886 Microcontroller)Indice: INTRODUZIONE [ TORNA ALL'INDICE ] In questa pagina descrivo come realizzare un preciso orologio digitale a LED (formato HH:MM) utilizzando un microcontrollore della Microchip, il PIC16F886. Di seguito, le caratteristiche principali di questo Orologio Digitale:
Nel seguente disegno è raffigurato lo schema elettrico completo dell'Orologio Digitale a LED. Esso è stato diviso in due sezioni ben distinte: la sezione MAIN (Principale) e la sezione DISPLAY, dando origine a 2 PCB diversi. PRINCIPIO DI FUNZIONAMENTO FIRMWARE [ TORNA ALL'INDICE ] Il principio di funzionamento di questo orologio a LED è abbastanza semplice.
Normalmente il ciclo infinito del programma, se non ci sono altre richieste, non fa altro che richiamare la rutine di AGGIORNAMENTO che visualizza le ORE e i MINUTI sul display. Il clock per il tempo avviene per mezzo di un oscillatore quarzato da 1 Hz collegato alla porta RB0/INT, quest'ultima programmata per generare un INTERRUPT ad ogni impulso. Così facendo, il firmware dà la massima priorità agli impulsi provenienti dalla porta RB0: questo significa che l'aggiornamento del tempo è prioritario rispetto a tutte le altre istruzioni presenti nel firmware. Per impostare l'interrupt esterno (RB0/INT) si usa la seguente istruzione: Quando arriva l'impulso sulla porta RB0/INT del microcontrollore (ovvero ogni secondo), il programma sospende qualsiasi operazione in corso ed esegue immediatamente la rutine di INTERRUPT (ISR, Interrupt Service Routine). Nella rutine di INTERRUPT (che dovrebbe sempre essere la più corta possibile) ci sono solo un paio di istruzioni: una che incrementa la variabile SECONDI (che può assumere valori da 0 a 59) e l'altra che azzera la variabile stessa nel caso essa abbia raggiunto il valore 60: in quest'ultimo caso, si incrementa la variabile MINUTI. La rutine di INTERRUPT è tutta qui ma se è stata programmata la scansione audio dei secondi, la ISR invia anche un impulso da 1 ms alla porta B5 che si traduce nel classico "toc" emesso dal buzzer. Nel ciclo infinito del programma c'è un'istruzione condizionale che valuta la variabile MINUTI: se questa variabile è uguale a 60, essa viene azzerata e contemporaneamente si incrementa la variabile ORE. Anche per le ore avviene la stessa cosa ma con una sostanziale differenza: se è stata impostata la modalità 12-H, la variabile ORE può assumere solo valori da 1 a 12 mentre nel caso sia stata impostata la modalità 24-H i valori che può assumere la variabile ORE vanno da 0 a 23. Il ciclo infinito, oltre che valutare le variabili MINUTI / ORE e aggiornare in continuazione il DISPLAY, controlla anche la pressione dei pulsanti (polling). Per ogni pulsante è prevista una rutine dedicata eseguita la quale, si riparte nuovamente con il ciclo infinito. A grandi linee, dunque, questo è il principio di funzionamento dell'orologio digitale. Naturalmente DISPLAY e PULSANTI si potrebbero gestire anche in diversi altri modi, il tutto dipende dalle capacità (e se volete, dalla fantasia) del programmatore. IL CIRCUITO DI COMANDO (Main section) [ TORNA ALL'INDICE ] Nel disegno successivo è visibile lo schema elettrico relativo alla sezione di Comando (MAIN) dove sono presenti il microcontrollore, il generatore di clock, i pulsanti per i comandi e l'alimentazione. I Display sono multiplexati dalla Porta RB (da RB1 a RB4, vedi M2) mentre la gestione dei sette "segmenti" è affidata interamente alla Porta RC (vedi M1). La base dei tempi da 1 Hz è stata ottenuta con un quarzo da 32,768 kHz (32768 Hz, molto comune) e da due circuiti integrati C/MOS, il divisore/contatore CD4060 e il doppio flip-flop D siglato CD4013. Usando una base dei tempi autonoma, oltre che risparmiare una porta I/O, si ha la possibilità di programmare il microcontrollore più facilmente, senza ricorrere ai laboriosi calcoli per il Prescaler e i cicli macchina. Inoltre è stato possibile ottenere il lampeggio dei LED separatori automaticamente, senza gestirlo via software, cosa che mi ha consentito di creare un firmware abbastanza leggero e molto affidabile. Il trimmer capacitivo C1 consente di "correggere" la tolleranza del quarzo facendo in modo che quest'ultimo oscilli alla frequenza esatta di 32768 Hz (verificabile inserendo il puntale di un preciso frequenzimetro sul piedino 9 dell'integrato U2). Il rapporto di divisione al piedino 3 di U2 è di 16384 volte per cui dal piedino stesso si preleva un segnale con frequenza pari a 2 Hz: un ulteriore divisore (vedi U3A, CD4013) divide questo segnale per 2 e quindi al piedino RB0/INT del microcontrollore giunge un segnale pari ad 1 Hz, segnale che, attraverso il connettore M2, arriva anche alla scheda DISPLAY e che serve per far lampeggiare i LED separatori. Il diodo D4 (collegato sulla porta B6) disabilita il lampeggio dei punti lampeggianti sia durante il TEST sia durante la visualizzazione delle stringhe di programmazione. Il connettore M5 (ICSP) è utile solo per la programmazione On-Board del microcontrollore per cui se non avete questa esigenza, può essere tralasciato. Di seguito, l'elenco componenti della scheda di comando (MAIN section).
Ricapitolando, l'uscita da 1 Hz prelevata dal piedino 1 di U3A si applica al piedino 21 (RB0/INT) del microcontrollore: in questo modo il microcontrollore genera un segnale di INTERRUPT esattamente ogni secondo. IL DISPLAY A LED (Display section) [ TORNA ALL'INDICE ] Nel seguente disegno è visualizzato lo schema elettrico della sezione DISPLAY. Per "creare" i 4 display giganti (56 x 39 mm) ho utilizzato ben 112 LED rossi (più altri quattro per i punti separatori lampeggianti). Il microcontrollore gestisce questi display "giganti" (formati ognuno da 28 LED) nello stesso modo in cui gestisce i classici display a 7 segmenti. Nel mio prototipo ho usato dei LED ad alta efficienza ed alta luminosità (circa 900-1000 MCD): esternamente sono trasparenti e la lente al loro interno ne aumenta la luminosità. Questa è una soluzione ottimale se si installa l'orologio ad almeno 4-5 metri di distanza: per distanze minori consiglio di utilizzare i classici LED rossi MA SENZA LENTE. Inoltre, per aumentare il contrasto e ottenere una buona lettura, è sempre consigliabile utilizzare un pannellino in plexiglass dello stesso colore usato per i LED. Al connettore M1 giungono i segnali per l'accensione dei sette segmenti mentre il connettore M2 riceve i segnali per il multiplexer delle 4 cifre. I transistor da Q1 a Q7 accendono sempre e solo 4 LED alla volta (equivalenti ad un segmento). La corrente che scorre sul collettore di questi transistor si aggira intorno ai 20 mA (con le resistenze da 180 ohm). La resistenza dei punti lampeggianti è più alta rispetto a quella sugli altri LED: questo perché i punti lampeggianti non sono multiplexati e quindi, a parità di resistenza, risulterebbero molto più luminosi rispetto agli altri. Per diminuire ulteriormente la luminosità dei LED separatori, aumentare la R19 (attualmente da 470 ohm) fino a quando la luminosità dei punti separatori risulta inferiore o uguale a quella di tutti gli altri LED. Di seguito, l'elenco componenti della scheda DISPLAY.
La Porta RC del microcontrollore è interamente dedicata alla gestione dei segmenti del display: la figura successiva ne illustra la logica. REALIZZAZIONE PRATICA [ TORNA ALL'INDICE ] Nelle figure successive, il disegno dei PCB Layout (Disposizione dei componenti, con i ponticelli in rosso da inserire all'inizio), e dei MASTER (per scaricare le immagini, cliccate su quella desiderata e, una volta ingrandita, con il tasto destro del mouse scegliere 'Salva immagine con nome...'). Sezione COMANDI (Main section) Sezione DISPLAY (Display section) Per quanto riguarda la scheda MAIN, consiglio vivamente di utilizzare gli zoccoli per i 3 circuiti integrati. Inoltre ricordo ancora una volta che nel caso si utilizzi una normale pila alcalina da 9 V non ricaricabile, è NECESSARIO eliminare la resistenza R13 da 3300 ohm. Nella foto seguente è visibile la scheda MAIN da me realizzata.
Nella scheda DISPLAY devono essere inseriti prima di tutto i ponticelli (sono disegnati in rosso): ce ne sono molti ed è il solito "prezzo da pagare" quando si vuole evitare di creare schede a doppia faccia, sempre molto difficili da realizzare a livello hobbistico. Per i LED, come accennato in precedenza, consiglio di utilizzare quelli normali rossi, quindi NON quelli trasparenti con LENTE interna utilizzati nel mio prototipo (ne avevo molti in laboratorio). I LED con lente, infatti, non offrono una lettura ben contrastata se visti da vicino, quindi meglio optare per i classici LED rossi. Per il montaggio dei LED è possibile utilizzare dei distanziatori (LED spacer) oppure saldarli a battuta come ho fatto io: tutto dipende dal contenitore che ospiterà la scheda. La foto seguente visualizza il primo prototipo della scheda DISPLAY.
Come sempre, ho realizzato i circuiti stampati con il mio Bromografo & Timer. La stampa su lucido (quello opaco per geometri) è stata fatta con una stampante laser e l'esposizione ai raggi U-VA è durata circa 3'50''. Come si vede dalle foto successive, il risultato è stato perfetto (le piste nel particolare dell'ultima foto sono da 0,25 mm e sono state incise perfettamente). (NB - I circuiti stampati visibili nelle foto sono quelli relativi al primo prototipo. I Master pubblicati su questa pagina, invece, fanno riferimento a quelli della seconda e definitiva versione dell'orologio). Per alimentare l'orologio è sufficiente un alimentatore stabilizzato da 12 Vcc (in grado di erogare almeno 400-500 mA affinché non scaldi troppo) da collegare al connettore M3. Per controllare l'esatto funzionamento dell'orologio, può essere utile fare riferimento a uno dei seguenti siti: IL BUZZER [ TORNA ALL'INDICE ] Il Buzzer BZ (in questo prototipo è stato utilizzato il tipo non-autooscillante) è stato inserito principalmente per generare un breve segnale acustico al raggiungimento della nuova ora così come avviene, ad esempio, su alcuni orologi digitali (per abilitare questa opzione, vedere il paragrafo COMANDI). Il buzzer segnala anche la pressione di un pulsantino e, se programmato, emette un brevissimo beep ogni secondo (per simulare una sorta di "orologio meccanico"). I COLLEGAMENTI [ TORNA ALL'INDICE ] Nella figura successiva sono riportati i collegamenti dell'orologio digitale a LED. L'assorbimento del circuito, in condizioni normali, è inferiore ai 100 mA (il minimo assorbimento di corrente si ha quando l'orologio visualizza l'orario "1:11" mentre il massimo consumo si ha con l'orario "08:08"). La corrente assorbita dal circuito, in mancanza di rete, è molto bassa (inferiore ai 10 mA) perché durante un black out TUTTI i LED rimangono spenti: in questo modo si evita che la batteria in tampone si scarichi velocemente (durante un black out, anche il buzzer è inattivo). LA BATTERIA IN TAMPONE DA 9V [ TORNA ALL'INDICE ] L'orologio è predisposto per il collegamento di una batteria da 9V (alcalina oppure ricaricabile Ni-Cd o Ni-MH): la resistenza R13 da 3300 ohm assicura una piccola e lenta ricarica. Considerando che i black out nelle nostre case sono abbastanza rari, la batteria sarà sempre carica e pronta per entrare in funzione quando manca la rete elettrica. La batteria in tampone, dunque, entra in funzione solo durante un eventuale black out: al contrario, durante il funzionamento normale dell'orologio, la batteria si ricarica (o mantiene la sua carica). Durante un black out, il display si spegne ed il buzzer non emette alcun suono: in questo modo si "allunga" l'autonomia della batteria (che ha il solo compito di continuare a far "lavorare" il microcontrollore senza perdere l'orario quando manca la corrente elettrica). La corrente di carica in questo circuito è molto ridotta (per salvaguardare l'integrità della batteria stessa) per cui una volta scarica, potrebbero essere necessari anche alcuni giorni affinché la batteria si ricarichi completamente. Anziché una ricaricabile, come accennato, è possibile (e lo consiglio vivamente) utilizzarne una normale alcalina da 9V, non ricaricabile: questo tipo di batteria è molto più potente rispetto ad una ricaricabile ed offre una maggiore autonomia. Ma ricordo che usando batterie alcaline (non ricaricabili) è necessario rimuovere tassativamente la resistenza R13 in quanto le batterie alcaline NON POSSONO e NON DEVONO essere ricaricate. I COMANDI [ TORNA ALL'INDICE ] All'accensione dell'orologio, il display indica l'orario di default 12:30.
NB - Durante la pressione di uno qualsiasi dei pulsanti, il conteggio dell'orologio non si ferma, ma continua anche se le cifre non vengono visualizzate. I secondi sono sempre azzerati ad ogni pressione dei pulsanti +MIN e -MIN. La tabella seguente illustra i messaggi del Display e le relative descrizioni.
Nel manuale PDF (che potete scaricare cliccando sul link nella tabella successiva) troverete i disegni dei master, quelli degli schemi elettrici, le foto, i collegamenti, l'elenco componenti, ecc.
|