Orologio con LCD e PIC 16F877

ATTENZIONE: Chi ha realizzato questo o altri progetti presenti in questo sito, per favore pu˛ inviarmi sulla mia email delle foto delle sue realizzazioni? Vorrei metterle qui on-line in modo che siano visibili e possano servire da spunto per nuove idee, realizzazioni diverse o modifiche , seguendo in questo modo lo spirito di questo sito che Ŕ a favore della divulgazione e conoscenza gratuita dell'elettronica.
Inoltre se voi, mentre inviate le foto dei vostri prototipi, mi autorizzate a mettere on-line insieme alle foto almeno il vostro nome e la vostra email, potrete essere contattati o potrete contattare un altro utente che ha realizzato lo stesso progetto in modo da poter fare insieme dei confronti costruttivi.
Vi ringrazio anticipatamente, Tony


Introduzione:

Visto l’ottimo risultato ottenuto con il progetto del precedente orologio con LCD pilotato da ST6, ho pensato di progettarne un altro, questa volta con un microcontroller PIC ed un po’ pi¨ sofisticato.


Caratteristiche tecniche e di funzionamento:

Display LCD bianco su sfondo blu con 4 righe e 20 caratteri sul quale vengono visualizzati i seguenti dati. (Pu˛ essere usato qualsiasi display compatibile).
Riga 1: giorno, mese, e anno
Riga 2: giorno della settimana (es: Lun. per Lunedý), ore, minuti e secondi
Riga 3: eventuale festa o compleanno e nel men¨ di impostazione, vengono visualizzate come descrizione le varie modalitÓ di sveglia.
Riga 4: le tre sveglie con relativa modalitÓ di impostazione oppure la scritta Snooze con la visualizzazione del tempo residuo.

Pulsanti:
PL1 = Ingresso Men¨ impostazione orologio e sveglie, uscita dal men¨ e spegnimento della sveglia attiva.
PL2 = Passa al campo successivo nella modalitÓ impostazione orologio
PL3 = Incrementa in campo corrente nella modalitÓ impostazione orologio
PL4 = Decrementa in campo corrente nella modalitÓ impostazione orologio
PL5 = Se la sveglia sta suonando, spegne la sveglia attivando la modalitÓ Snooze, altrimenti aumenta o diminuisce la luminositÓ del display LCD.

Accendendo l’orologio, viene visualizzato il copyright per 5 secondi, poi viene visualizzato l’orologio/calendario come descritto sopra.

Premendo il pulsante PL1 si entra nella modalitÓ impostazione orologio, la visualizzazione viene bloccata ma il conteggio del tempo da parte dell’orologio prosegue, infatti se si esce dal men¨ impostazione senza salvare le impostazioni relative all’orologio, quest’ultimo riprende il suo normale funzionamento.

Appena entrati nella modalitÓ di impostazione orologio, il cursore lampeggia sul giorno. Le possibilitÓ sono: Premere PL3 per incrementare il giorno, Premere PL4 per decrementare il giorno, Premere PL2 per passare al campo successivo (in questo caso il mese) o Premere PL1 per visualizzare il men¨ di uscita. Muovendosi in questo modo Ŕ possibile impostare tutte le funzioni dell’orologio tenendo presente che, il men¨ di uscita, consente di aggiornare separatamente l’orologio dalle sveglie, infatti occorre impostare prima l’orologio e poi le sveglie.

Con il pulsante PL2 si passa al campo successivo, con PL3 si incrementa e con PL4 si decrementa; quando si arriva all’ultimo campo, premendo nuovamente il pulsante PL2, il ciclo ricomincia posizionando il cursore nuovamente sul giorno e cosý si pu˛ andare avanti all’infinito. In qualsiasi momento, premendo il pulsante PL1 si accede al men¨ di uscita.

Il men¨ di uscita consente le seguenti scelte: Premendo il pulsante PL1 si esce senza salvare nulla, premendo il pulsante PL2 si salvano le impostazioni delle sveglie e premendo il pulsante PL3 si salvano le impostazioni dell’orologio/calendario.

A riga 4, viene visualizzata l’ora pronta per l’eventuale impostazione con il fine di sincronizzarsi con un altro orologio. Per la sincronizzazione occorre premere il pulsante PL3 circa un secondo prima dell’ora esatta ad esempio se l’ora impostata Ŕ 14:00:00 occorre premere il pulsante PL1 quando l’orologio campione segna le ore 13:59:59.

Mentre l’orologio Ŕ in funzione, premendo il pulsante PL5 Ŕ possibile commutare la luminositÓ della retroilluminazione del display LCD da bassa a alta e viceversa.

Impostazione delle sveglie:

L’orologio dispone di tre sveglie uguali ed indipendenti. Durante la fase di impostazione Ŕ possibile regolare l’ora ed i minuti della sveglia, la sveglia suonerÓ sempre quando i secondi sono 00. Dopo avere impostato l’ora ed i minuti occorre impostare la modalitÓ di funzionamento della sveglia.

Le modalitÓ sono:

Disattivata = La sveglia resta impostata come orario ma non suonerÓ (nessun simbolo)
Tutti i giorni = La sveglia suonerÓ tutti i giorni senza bisogno di attivarla (ad esempio tutte le sere) (simbolo: un quadretto pieno).
Una volta sola = La sveglia Ŕ stata impostata per suonare ad un certo orario, dopo la suonata la sveglia viene automaticamente disattivata e non suonerÓ pi¨ (simbolo: asterisco).
Da LUN a VEN = La sveglia suonerÓ all’ora impostata tutti i giorni dal lunedý al venerdý escluso il sabato e la domenica. (simbolo: w di week-end).
Da LUN a SAB = La sveglia suonerÓ all’ora impostata tutti i giorni dal lunedý al sabato esclusa la domenica. (simbolo: d di esclusione domenica).

Quando una sveglia Ŕ disattivata, nella modalitÓ di funzionamento normale dell’orologio, viene visualizzata cosý --:-- ad indicare che Ŕ disattivata al fine di non creare confusione, visualizzando solo l’ora delle sveglie attive. In modalitÓ impostazione invece, vengono visualizzate tutte le sveglie.

Quando una sveglia suona Ŕ possibile premere il pulsante PL1 per spegnerla oppure premere il pulsante PL5 per attivare la modalitÓ Snooze.

Quando si attiva la modalitÓ Snooze (pisolino…) la sveglia viene disattivata temporaneamente e risuonerÓ dopo 10 minuti, questo ciclo pu˛ andare avanti all’infinito di 10 minuti in 10 minuti. Serve per svegliarsi con calma… o per approfittare ancora di qualche minuto di riposo. Quando la sveglia suona dalla modalitÓ snooze, per rimetterla in modalitÓ snooze, ripremere il pulsante PL5 invece del pulsante PL1 che la spegne definitivamente.  Con lo snooze attivo Ŕ possibile premere il pulsante PL5 per scegliere di spegnere definitivamente la sveglia mentre Ŕ attiva questa modalitÓ senza attendere che la sveglia suoni nuovamente per disattivarla.

In ogni caso, quando una sveglia suona Ŕ impostato un tempo di timeout che dura 2 minuti (120 secondi) trascorso questo tempo la sveglia smette di suonare allo stesso modo della pressione del pulsante PL1. Serve per non fare suonare la sveglia all’infinito quando nessuno Ŕ presente per spegnerla.

NOTA: A parte la sveglia che suona una volta sola, in tutte le altre modalitÓ premendo il pulsante PL1 la sveglia smette di suonare ma resta giÓ impostata per il giorno successivo.


Trasmissione via seriale RS232:

Questo orologio ha un modulo opzionale con il driver MAX232 tramite il quale Ŕ possibile trasmettere via seriale RS232 e pertanto ricevere in un qualsiasi computer il datario completo. Il segnale Ŕ composto da un asterisco iniziale quale marker di sincronismo seguito da un tab, poi giorno, mese, anno, giorno della settimana, ore, minuti e secondi. Il protocollo di comunicazione Ŕ impostato a 9600 baud, 1 start, 1 stop, no paritÓ.

Se il modulo Ŕ installato, il programma entra nella routine di trasmissione via seriale altrimenti, no.


Uno sguardo all’elettrico:

Il nucleo principale dell’orologio Ŕ costituito dal microcontroller Microchip PIC 16F877A, un micro abbastanza complesso e ricco di periferiche con ben 8k di memoria flash.

L’orologio/calendario Ŕ costituito dal chip Dallas/Maxim DS1306 collegato al micro via SPI (interfaccia seriale sincrona) il quale fornisce le informazioni orologio/calendario e la memoria ram in backup con batteria al litio. Non vengono utilizzati i due allarmi presenti sul chip.

La precisione dell’orologio Ŕ data dall’oscillatore compensato in temperatura DS32KHz sempre di Dallas/Maxim che fornisce la frequenza base di 32,768KHz.

La batteria al litio da 3V fornisce la tensione di backup per il DS1306 e per l’oscillatore DS32KHz. Questa batteria fa sý che l’oscillatore sia sempre alimentato anche in assenza di tensione esterna e fornisca la frequenza base al DS1306. Il DS1306 contiene al suo interno 96 bytes ram sempre in backup con la batteria al litio, dove sono memorizzate le sveglie (orari e tipo di sveglia).

La memoria EEPROM da 64Kbits di Microchip 25LC640 con pagina da 32 bytes, contiene le informazioni sulle feste ed i compleanni. Questa memoria trasferisce i dati sempre via interfaccia SPI.

La frequenza base per il microcontroller Ŕ di 10 MHz e viene generata da un oscillatore compensato in temperatura. Questa frequenza di clock fa sý che il micro elabori una singola istruzione in 400nS (nanosecondi) cioŔ circa 2.500.000 di istruzioni al secondo.

L’LCD scelto per il prototipo di questo progetto Ŕ di Crystalfontz 4 righe per 20 caratteri ed Ŕ il modello CFAH2004A. Questo LCD presenta caratteri bianchi su sfondo blu. La configurazione usata in questo progetto Ŕ a 4 bits.
NOTA: Ŕ possibile usare qualsiasi altro display 4 righe per 20 caratteri compatibile.

Il transistor PNP BC327 serve come bypass sulla seconda resistenza (200 Ohm) per aumentare o diminuire la luminositÓ della retroilluminazione del display LCD. E’ comodo abbassare la luminositÓ al buio per non essere abbagliati durante la notte.

Il buzzer usato per le sveglie Ŕ il KPE 204 (con oscillatore incorporato) della ditta Kingstate, questo buzzer pu˛ essere alimentato da 3V a 20V con un assorbimento di circa 9 mA. Pressione sonora circa 93bD. Frequenza acustica 3,4 KHz.

Altro buzzer provato Ŕ il modello SMA24 della ditta Sonitron. Comunque di fatto va bene qualsiasi buzzer alimentabile a 5V e con un consumo che non superi i 20mA.


Principio di funzionamento:

All’accensione il micro imposta le porte I/O, inizializza l’interfaccia SPI per il dialogo con l’orologio/calendario e configura i suoi registri. Viene visualizzato sull’LCD il copyright per circa 5 secondi e poi viene visualizzato l’orologio/calendario.

Il ciclo principale del programma consiste nel testare il fronte del segnale ad 1 Hz proveniente dal DS1306 e quando lo stato da zero passa a uno, vuol dire che il tempo all’interno del DS1306 Ŕ variato pertanto il micro richiede al DS1306 i nuovi dati di ora e calendario e, se il giorno non Ŕ cambiato, aggiorna l’ora, se invece anche il giorno Ŕ cambiato, aggiorna anche il calendario.

Durante il ciclo sul fronte del segnale ad 1Hz, vengono testati i pulsanti PL1 per l’attivazione delle funzioni di impostazione orologio ed il pulsante PL5 per la luminositÓ della retroilluminazione LCD. Insieme ai pulsanti, viene verificato se i secondi sono 00, se sý, vengono testate le sveglie per verificare se una delle sveglie deve suonare, inoltre viene gestito lo snooze sia come tempo che come riattivazione della sveglia.


Schema elettrico - Electric diagram




Prototipo, alimentatore - Prototype, power supply




Prototipo, interfaccia seriale - Prototype, serial interface




Prototipo, vista generale - Prototype, seen general




Prototipo, particolari - Prototype, details




LCD, versione inglese - LCD, English version




LCD, impostazione orologio e sveglie - LCD, setup clock and time to get up




Sveglia, suona tutti i giorni - Alarm, plays all of the days




Sveglia, suona una volta sola - Alarm, an alone time




Sveglia, suona dal lunedý al venerdý - Alarm, from the monday to the friday




Sveglia, suona dal lunedý al venerdý - Alarm, from the monday to the saturday




Sveglia, disabilitata - Alarm, disabled




Men¨ di uscita - Menu of exit




Versione italiana - Italian version




Visualizzazione festa... - Display party...




Visualizzazione festa... - Display party...




Visualizza etÓ del festeggiato... - It visualizes age of the guest of honor...




Visualizza nome del festeggiato... - It visualizes name of the guest of honor...




Men¨ di uscita - Menu of exit




Modulo seriale - Serial module




Modulo seriale - Serial module




Modulo seriale - Serial module




Modulo seriale - Serial module




Data sheet DS1306 DS1306.PDF (287k)
Data sheet DS32Khz DS32Khz.PDF (453k)
Data sheet 25LC640 25LC640.pdf (357k)
Utilizzo della EEPROM 25LC640 Utilizzo_EEPROM.pdf (23k)

File .HEX italiano per PIC 16F877A ClockITA.zip (8k)
File .HEX inglese per PIC 16F877A ClockENG.zip (8k)



Componenti Elettronici



I files .HEX nonchŔ il contenuto di queste pagine Ŕ stato rilasciato per applicazioni didattiche SENZA fine di lucro. Per qualsiasi altro tipo di applicazione potete contattarmi via email.

The files. HEX and the content of these pages was released for teaching applications WITHOUT end of I make money from. For any other type of application it be able to contact me via email.

ę Copyright tony@microt.it