DIY Digital Clock with LEDs and Microcontroller

www.narcisivalter.it
Progetti Elettronici


OROLOGIO DIGITALE A LED con PIC16F886

(LED-Digital Clock based on Microchip PIC16F886 Microcontroller)


LED Digital Clock - Orologio Digitale a LED

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:

  • Dimensione di una singola cifra: 56 x 39 mm.
  • Orario visualizzato con formato HH:MM (con punti di separazione lampeggianti secondo standard ISO 8601)
  • Programmazione della modalità 12H oppure 24H (standard ISO 8601)
  • Programmazione della scansione audio dei secondi (simulazione orologio meccanico)
  • Programmazione della scansione audio delle ore
  • Test dei LED
  • Memorizzazione delle programmazioni 12/24H e Scansione audio su Eeprom.
  • Possibilità di collegare una batteria in tampone da 8.4 o 9V per "tenere" l'orario in caso di black out
  • Prima cifra a sinistra (ore decimali) automaticamente spenta se uguale a zero

L'orologio digitale a LED costruito dall'autore

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.

Schematic diagram of LED Watch

PRINCIPIO DI FUNZIONAMENTO FIRMWARE    [ TORNA ALL'INDICE ]

Il principio di funzionamento di questo orologio a LED è abbastanza semplice.
Le variabili per il tempo sono 3, tutte di tipo  byte  o  unsigned char :

  • ORE 
  • MINUTI 
  • SECONDI 

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:
 BSF INTCON, INTE  in linguaggio C oppure  INTCON.INTE = 1  in linguaggio Basic.

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.

Schematic diagram of LED-Clock (MAIN Section)

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).
Tuttavia consiglio di montare inizialmente un condensatore fisso da 22pF e solo nel caso in cui l'orologio non fosse preciso (e lo potete verificare già dopo alcune ore di funzionamento), esso può essere sostituito con il trimmer capacitivo (come da schema elettrico).

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).

Elenco componenti - Component List

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.

Schematic diagram of LED-Clock with PicMicro - 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.

Elenco componenti - Component List

La Porta RC del microcontrollore è interamente dedicata alla gestione dei segmenti del display: la figura successiva ne illustra la logica.

Port-RC for management LED Display

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)

Master (Copper Side) of MAIN Section   MAIN PCB   Dimensions of PCB MAIN

Sezione DISPLAY (Display section)

Master (Copper Side) of DISPLAY Section   DISPLAY PCB   Dimensions of PCB DISPLAY


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.

Primo prototipo della scheda sezione Comandi (MAIN)

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.

Primo prototipo della scheda sezione 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).

MAIN section PCB   Master della sezione DISPLAY   Particolare incisione piste

(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.

Wiring

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.

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.

I COMANDI    [ TORNA ALL'INDICE ]

All'accensione dell'orologio, il display indica l'orario di default 12:30.
Ho inserito nel circuito ben 8 pulsanti dedicati ciascuno ad un solo comando, per cui l'uso di questo orologio risulta estremamente semplice e immediato.

  •  +ORE / -ORE  - Ad ogni pressione di questi pulsanti, le cifre delle ORE si incrementano (+ORE) o decrementano (-ORE) di una unità. Se è stata programmata la modalità 24H (Sistema Orario ISO 8601), arrivati alla cifra"23", la successiva pressione del pulsante +ORE visualizza "0" (mezzanotte). Se, al contrario, è stata programmata la modalità 12H, arrivati alla cifra"12", la successiva pressione del pulsante +ORE visualizza "1". La prima cifra a sinistra (decine di ORE), se uguale a zero, è automaticamente spenta.
  •  +MIN / -MIN  - Ad ogni pressione di questi pulsanti, le cifre dei MINUTI si incrementano (+MIN) o decrementano (-MIN) di una unità. Quando si arriva al valore "59", la successiva pressione del pulsante +MIN visualizza "00". Ad ogni pressione di questi due pulsanti, i secondi sono sempre azzerati.
  •  12/24  - La pressione di questo pulsante cambia la modalità di visualizzazione da 12 a 24 ore e viceversa. Quando si passa dalla visualizzazione "24H" a quella "12H" l'orario è aggiornato automaticamente: ad esempio, se l'orologio visualizza le 20:30, passando alla visualizzazione 12H, il nuovo valore che il display visualizza è 8:30. L'impostazione del sistema orario è memorizzata sulla Eeprom del PICmicro e quindi rimane in memoria anche quando viene tolta l'alimentazione. Dopo la pressione di questo pulsante, sul display appare per un attimo la scritta “12-H” oppure “24-H”: la scritta indica la modalità di visualizzazione scelta. Il Sistema Orario a 24 Ore è la notazione Standard Internazionale ISO 8601 (spesso definito anche "Militay Time").
  •  Scan H  - Con questo pulsante è possibile impostare la scansione audio delle ore: in pratica l'orologio emette un breve segnale sonoro allo scoccare della nuova ora. Per disabilitare la scansione audio delle ore, premere nuovamente il pulsante. Ad ogni pressione del pulsante, sul display appare la scritta “H on” (scansione ore ABILITATA) oppure “HoFF” (scansione ore DISABILITATA).
  •  Scan S  - Con questo pulsante è possibile impostare la scansione audio dei secondi: in pratica l'orologio emette un breve segnale sonoro ogni secondo (simulazione dell'orologio meccanico). Per disabilitare la scansione audio dei secondi, premere nuovamente il pulsante. Ad ogni pressione del pulsante, sul display appare la scritta “S on” (scansione secondi abilitata) oppure “SoFF” (scansione secondi disabilitata).
  •  Test  - Con la pressione di questo pulsante si effettua il TEST dei display: tutte le 4 cifre sono accese in sequenza così da verificare la completa integrità di tutti i LED.

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.

Display Messages

DOWNLOAD    [ TORNA ALL'INDICE ]

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.
Per tutte le altre richieste (firmware HEX, domande, suggerimenti, ecc.) utilizzare SEMPRE la sezione COMMENTI.

Download

Scarica il manuale tecnico e le istruzioni dell'Orologio (2 MB)

Scarica il Datasheet del Microcontrollore PIC16F886 (4.3 MB)

COMMENTI    [ TORNA ALL'INDICE ]

[ Torna all'inizio della pagina ]

DISCLAIMER (Dichiarazione di esclusione di responsabilità) - Tutti i progetti elettronici presentati e descritti nel sito internet https://www.narcisivalter.it possono essere utilizzati solo ed esclusivamente ad uso privato e senza scopo di lucro, pertanto non commercializzati. Le documentazioni dei progetti (schemi elettrici, disegni, foto, video, firmware, ecc.) non sono di dominio pubblico per cui i diritti d'autore rimangono dell'ideatore. Per utilizzare a fini commerciali i progetti (o parte di essi) presenti in questo sito web, si dovrà contattare l'Autore per concordare un'eventuale autorizzazione scritta.
- All the projects in this webpage is provided with no explicit or implicit warranties of operation. I do not assume any responsibility for any problems or damage to persons. The project is released "as is" and no support of any kind is provided. If you build the project, you implicitly accept my terms of not taking responsibility. If you do not agree, please, do not build this project and do not download any informations from this website!
- Tutti i progetti elettronici presenti nel sito internet www.narcisivalter.it sono stati realizzati e sperimentati personalmente dall'Autore, tuttavia l'Autore stesso non garantisce, a chi li realizzerà, un sicuro e perfetto funzionamento. Tutti i progetti elettronici presentati sul sito www.narcisivalter.it sono pensati e realizzati per un'utenza addetta ai lavori, specializzata nel settore elettrico ed elettronico e quindi in grado di valutare la correttezza e la funzionalità dei progetti stessi. Pertanto l'utente accetta espressamente di utilizzare i contenuti del sito sotto la propria responsabilità. I PROGETTI ELETTRONICI PRESENTATI SU QUESTO SITO SONO STATI RILASCIATI A PURO TITOLO HOBBISTICO E/O DI STUDIO E L'AUTORE NON GARANTISCE LA MATEMATICA CERTEZZA CIRCA IL LORO FUNZIONAMENTO E NON SI ASSUME ALTRESI' NESSUNA RESPONSABILITÀ, ESPLICITA O IMPLICITA, RIGUARDANTE INCIDENTI O CONSEGUENTI POSSIBILI DANNI A PERSONE E/O COSE DERIVANTI DALL'USO DEI PROGETTI STESSI. CHI REALIZZA E UTILIZZA I PROGETTI ELETTRONICI DESCRITTI IN QUESTE PAGINE, LO FA COME SUA LIBERA SCELTA ASSUMENDOSI TUTTE LE RESPONSABILITÀ CHE, EVENTUALMENTE, NE POTREBBERO DERIVARE.
AVVERTENZE IMPORTANTI - Molti circuiti descritti nelle pagine di questo sito sono sottoposti a tensione di rete 110-240 Vac e pertanto potenzialmente pericolosi; si può rimanere folgorati se non realizzati ed utilizzati secondo le norme di sicurezza vigenti. Pertanto l'utente e' tenuto a verificare se quanto realizza e' conforme alla normativa ed alla legislazione vigente. Per i non "addetti ai lavori" (improvvisati auto-costruttori) va ricordato che in particolari situazioni (diminuzione resistenza del corpo) già una tensione di 25V alternata potrebbe essere pericolosa. L'elettronica e l'elettricita' in genere affascina molte persone ma va ricordato che non basta uno schema scaricato da Internet per poter arrivare a un prodotto funzionante e sicuro: infatti ci vogliono un minimo di conoscienze delle fondamentali leggi della fisica, dell'elettricita' e dell'elettronica oltre all'esperienza pratica nell'uso di attrezzi e strumenti indispensabili, come saldatore, tester, oscilloscopio, ecc...

Privacy Policy - Cookie Policy - Condizioni d'Uso