www.narcisivalter.it
| ||||||||
Translate Page
|
OROLOGIO DIGITALE 12/24 ORE con 16F628A(Digital 12 or 24 Hour Clock with PIC microcontroller)Indice:
INTRODUZIONE [ TORNA ALL'INDICE ] In questa pagina descrivo come realizzare un preciso orologio digitale a display (formato HH:MM:SS) utilizzando un microcontrollore della Microchip, il PIC16F628A. Di seguito, le caratteristiche principali di questo Orologio Digitale:
Nell'immagine seguente è riportato lo schema elettrico dell'Orologio Digitale. L'orologio è uno strumento che per sua natura deve funzionare 24 ore al giorno, 365 giorni l'anno: per questo i componenti dovrebbero essere dimensionati di conseguenza, senza preoccuparsi di risparmiare sul costo o sulla qualità degli stessi. Per questo ho inserito anche l'integrato ULN2004 il quale consente al chip CD4543 di lavorare in condizioni ottimali. Il motivo per cui ho utilizzato il CD4543 e non il più comune e facilmente reperibile CD4511 sta semplicemente nel fatto che il primo visualizza le cifre 9 e 6 in maniera corretta, come visibile nelle figure qui a destra. Un attento utente mi ha chiesto perché ho utilizzato il chip CD4543: la risposta sta nel numero di porte a disposizione. Infatti, per pilotare direttamente i 7 segmenti del display, occorrono 7 porte I/O ma avendone a disposizione solo 4 (da RA0 a RA3), si è resa necessaria l'adozione di una decodifica BCD to 7 segment. Per i Display consiglio di utilizzare il modello Vishay TDSR5150 (Red) oppure TDSO5150 (Orange-Red) sostituibile con i modelli TDSO5150-LM e TDSO5150-M (questi ultimi con una maggiore luminosità): questi display sono in grado di sopportare fino a 25 mA di corrente per segmento e visto che vengono pilotati da multiplexer rimanendo accesi solo per pochi millisecondi, è garantita loro una lunga vita. I display possono essere sostituiti anche con gli LTS546 della Liteon, HDN1133 della Siemens e SA56-11 della Kingbright ma naturalmente ce ne sono anche molti altri. Il connettore siglato ICSP è indispensabile solo per la programmazione on-board del microcontroller quindi se non si ha questa esigenza, può essere omesso. PRINCIPIO DI FUNZIONAMENTO [ TORNA ALL'INDICE ] Il principio di funzionamento di questo orologio è 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 ORE, MINUTI e SECONDI 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, 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 SECONDs (che può assumere valori da 0 a 59) e l'altra che azzera la variabile stessa nel caso in cui abbia raggiunto il valore 60: in quest'ultimo caso, si incrementa la variabile MINUTEs. 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 A7 che si traduce nel classico "toc" emesso dal buzzer. Nel ciclo infinito del programma c'è un'istruzione condizionale che valuta la variabile MINUTEs: se questa variabile è uguale a 60, essa viene azzerata e contemporaneamente si incrementa la variabile HOURs. Anche per le ORE avviene la stessa cosa ma con una piccola differenza: se è stata impostata la modalità 12-H, la variabile HOURs può assumere valori da 1 a 12 mentre nel caso sia stata impostata la modalità 24-H i valori che può assumere la variabile HOURs vanno da 0 a 23. Il ciclo infinito, oltre che valutare le variabili MINUTEs / HOURs 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. Naturalmente DISPLAY e PULSANTI si possono gestire anche in diversi altri modi, il tutto dipende dalla capacità (e se volete, dalla fantasia) del programmatore. LA BASE DEI TEMPI [ TORNA ALL'INDICE ] La base dei tempi da 1 Hz è stata ottenuta con un quarzo ITT da 4.194304 MHz (4194304 Hz) e da due chip C/MOS, i divisori/contatori CD4060 e CD4020 (quest'ultimo sostituibile, ma solo in questo progetto, con il modello CD4040).
Nella seguente tabella sono riportati tutti i fattori di divisione ottenibili collegando un CD4060 con un CD4040 oppure con un CD4020 (in grigio i valori ininfluenti perché ottenibili anche solo con il CD4060). ATTENZIONE - Il CD4060 in questo progetto lavora "al limite" della frequenza sopportabile per cui è consigliabile utilizzare il modello C/MOS High Speed siglato M74HC4060B1 oppure CD74HC4060. La base dei tempi così ottenuta "pilota" direttamente la rutine di interrupt (ISR): così facendo non ho dovuto preoccuparmi minimamente di effettuare laboriosi e noiosi calcoli tra preload, prescaler e timer, né tantomeno utilizzare un secondo quarzo per la gestione del tempo, riuscendo ad ottenere un firmware abbastanza corto e semplice (oltretutto risparmiando una porta I/O e gestendo il lampeggio dei LED in maniera autonoma senza ricorrere al firmware). La precisione dell'orologio dipende soprattutto dalla buona qualità del quarzo e dai due condensatori C5 e C6 (quest'ultimo, ceramico, meglio se di tipo NPO). Il compensatore C5 è utile per "correggere" eventuali piccole tolleranze del quarzo: per la taratura, collegare il puntale di un frequenzimetro sul pin 9 di U5 (M74HC4060B1) e regolare il compensatore fino a leggere una frequenza esatta di 4194304 Hz. Tra l'altro, nel mio prototipo, ho anche provato a mettere solo due condensatori fissi da 20pF riuscendo ad avere comunque una grandissima precisione per cui consiglio inizialmente di montare anche per C5 un condensatore fisso da 20pF e sostituirlo con il trimmer nel caso in cui, dopo alcune ore di funzionamento, l'orologio non fosse abbastanza preciso. L'uscita da 1 Hz prelevata dal piedino 13 del CD4020 si applica al piedino 6 (RB0/INT) del microcontrollore (nel firmware, il piedino RB0/INT è stato programmato per ricevere gli impulsi da 1 Hz e generarne il corrispondente INTERRUPT: questo significa che ad ogni INTERRUPT, cioè ogni secondo, l'orario sarà aggiornato in modo preciso ed indipendente dal resto del codice). Lo stesso impulso che esce dal piedino 13 del CD4020 pilota anche, tramite il transistor Q9, le due coppie di LED separatori che, ovviamente, lampeggeranno alla frequenza di 1 Hz. IL CIRCUITO STAMPATO [ TORNA ALL'INDICE ] Nelle figure successive, il disegni per la realizzazione del PCB, con i ponticelli in rosso da inserire all'inizio (per scaricare le immagini, cliccare su quella desiderata e, una volta ingrandita, con il tasto destro del mouse scegliere 'Salva con nome'). In poco spazio sono stati inseriti 6 display, 5 circuiti integrati e altri componenti per cui i ponti da inserire sono 50 (quelli segnati in rosso), molti dei quali sono "nascosti" sotto i sei display: è il prezzo che si paga quando non si vuole utilizzare il circuito stampato a doppia faccia, sempre molto difficile da realizzare a livello hobbistico. A proposito dei 4 LED lampeggianti, il PCB prevede l'utilizzo del tipo rettangolare (per ridurre al minimo lo spazio tra i display): poi, volendo, è possibile coprirne una parte con del nastro nero per ridurre la "grandezza del segmento" e farlo diventare una sorta di piccolo punto quadrato. IL BUZZER [ TORNA ALL'INDICE ] Il Buzzer BUZ1 (del tipo autoscillante) è stato inserito principalmente per l'emissione di un breve beep al raggiungimento della nuova ora (beep orario) così come avviene, ad esempio, su alcuni orologi digitali (per abilitare questa opzione, vedere il paragrafo LA SCANSIONE AUDIO DELLE ORE). Se è stata programmata la scansione audio dei secondi, il buzzer emette anche un brevissimo suono ad ogni secondo (simulazione di un orologio meccanico). 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 R11 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 da 9V, 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). I quattro puntini luminosi continueranno a svolgere il loro lavoro indicando che l'orologio è comunque in funzione (e, soprattutto, indicando che la batteria è ancora carica). Anziché una ricaricabile, come accennato, è possibile (e consigliabile) utilizzare una normale pila alcalina da 9V, non ricaricabile, ma in questo caso è necessario tassativamente rimuovere la resistenza R11 in quanto le batterie alcaline NON POSSONO e NON DEVONO essere ricaricate. Per inserire una batteria potrebbe essere utilie utilizzare un battery holder per pile da 9V e installarlo sul retro dell'orologio: in questo modo è possibile sostituire la batteria senza aprire il contenitore, come visibile nelle foto seguenti: In ogni caso, per quanto riguarda le batterie ricaricabili (che notoriamente sono da 8.4V e non da 9V), va detto che queste necessitano di una corrente di carica ben precisa per evitare di danneggiarle per cui se proprio si vuole usare questo tipo di batteria, consiglio di inserirla nel circuito solo dopo averla ricaricata con il suo apposito caricatore: la piccola corrente che scorrea attraverso la resistenza R13 dovrebbe essere in grado di mantenerne la carica per cui la batteria sarà sempre pronta per entrare in azione in mancanza di altre fonti di alimentazione. N.B. - Il beep sulla scansione audio delle ore oppure dei secondi (se sono state abilitate) funzionano anche durante un black out. I COMANDI [ TORNA ALL'INDICE ] All'accensione dell'orologio il display indica l'orario di default 12:30:00.
Di seguito, il video realizzato dopo la stesura del secondo firmware.
MODALITA' DI VISUALIZZAZIONE 12/24H [ TORNA ALL'INDICE ] Il sistema orario delle 12 ore presuppone sia riportata la stringa AM o PM (non gestita in questo progetto): al contrario, nel sistema delle 24 ore (notazione Standard Internazionale ISO-8601) non sono necessarie altre informazioni perché il sistema stesso "copre" l'intero orario della giornata. Il sistema 12H è utilizzato principalmente negli Stati Uniti, in Canada ed in Australia. In Italia, come in molti altri Stati, si utilizzano entrambi i sistemi ma si preferisce sempre di più quello delle 24H (soprattutto in campo medico), il quale non dà origine a letture ambigue.
Il valore programmato si alterna ogni volta che si avvia la procedura. Quando si passa dalla visualizzazione "24H" a quella "12H", l'orario è aggiornato automaticamente: ad esempio, se l'orologio visualizza le 19:30:00, passando alla visualizzazione 12H, il nuovo valore sul display sarà 7:30:00. L'impostazione del sistema orario è memorizzata sulla Eeprom del PICmicro e quindi rimane in memoria anche quando viene tolta l'alimentazione (Durante la programmazione, il conteggio dell'orologio non si ferma, ma continua anche se le cifre non vengono visualizzate). LA SCANSIONE AUDIO DEI SECONDI [ TORNA ALL'INDICE ] E' possibile in qualsiasi momento impostare la scansione audio dei secondi, cioè l'emissione di un breve segnale acustico ad ogni secondo. Per la programmazione, premere e mantenere premuto il pulsante delle ORE (HOURS) per 2 secondi o comunque fino a quando sul display a destra non appare la cifra "0" (scansione audio dei secondi DISABILITATA) oppure la cifra "1" (scansione audio dei secondi ABILITATA), quindi rilasciare il pulsante.
Il valore programmato si alterna ogni volta che si avvia la procedura. Questa impostazione è memorizzata sulla Eeprom del PICmicro e rimane in memoria anche quando viene tolta l'alimentazione (Durante la programmazione, il conteggio dell'orologio non si ferma, ma continua anche se le cifre non vengono visualizzate). LA SCANSIONE AUDIO DELLE ORE [ TORNA ALL'INDICE ] Anche per le ORE è possibile impostare la scansione audio ovvero l'emissione di un breve segnale acustico al passaggio della nuova ora. Per la programmazione, premere e mantenere premuto il pulsante SHIFT per almeno 3 secondi o comunque fino a quando sul display di sinistra non appare la cifra "0" (scansione audio delle ore DISABILITATA) oppure la cifra "1" (scansione audio delle ore ABILITATA), quindi rilasciare il pulsante.
Il valore programmato si alterna ogni volta che si avvia la procedura. TEST DISPLAY [ TORNA ALL'INDICE ] All'accensione, l'orologio avvia automaticamente il TEST dei display (i sei display sono accesi uno alla volta in modo sequenziale per verificare il perfetto funzionamento di tutti i segmenti). Tuttavia, il progetto ha subito una sola modifica hardware: l'aggiunta di un piccolo pulsante di TEST tra il piedino 4 del PICmicro e la massa, premendo il quale si avvia manualmente la procedura di TEST. Una volta terminato il TEST, l'orologio ritorna al suo normale funzionamento. Durante il TEST, il conteggio dell'orologio non si ferma, ma continua anche se le cifre non sono visualizzate. I dettagli della modifica sono visibili nelle immagini successive (nel mio prototipo ho inserito un piccolo microswitch tra il microcontrollore e il connettore ICSP come visibile in foto).
LA SERIGRAFIA [ TORNA ALL'INDICE ] Nell'immagine qui a sinistra è visibile un esempio di serigrafia (per scaricare l'immagini, cliccarci sopra e una volta ingrandita, con il tasto destro del mouse scegliere 'Salva con nome'). NOTE CONCLUSIVE [ TORNA ALL'INDICE ] Nelle immagini successive: il programmatore PicKit2 in azione durante la stesura del firmware, il primo prototipo costruito dall'autore (notare l'assenza del pulsante di TEST) e la scheda 3D realizzata con il software Protel99SE. L'orologio funziona ormai da molti mesi ed è ancora assolutamente preciso. Per controllare la precisione, è possibile collegarsi a uno dei seguenti siti: L'assorbimento dell'intero circuito è di poco superiore ai 100 mA (ovviamente l'assorbimento dipende anche dalla cifra visualizzata sul display giacché l'orario 1:11:11 assorbe meno corrente rispetto all'orario 22:28:28). L'OROLOGIO DIGITALE (Foto) [ TORNA ALL'INDICE ] Di seguito una serie di foto dell'Orologio Digitale realizzato dal sottoscritto (clicca sulle foto per ingrandirle): la scheda è stata installata su un contenitore plastico della ditta TEKO dove ho fissato anche un piccolo alimentatore switching da 1A e la batteria da 9V. Come al solito, ho fissato la scheda in modo tale da avere i pulsanti a filo con il coperchio: una volta attaccata la serigrafia ed il retino trasparente da geometri, i pulsanti stessi risultano completamente nascosti. Nel manuale tecnico in PDF (che potete scaricare cliccando sui link riportati nella successiva tabella), oltre allo schema elettrico, al disegno del master, al PCB Layout, ecc. contiene anche la lista dei componenti utilizzati nel progetto.
|