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