Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

17
voti

LO HAI MAI REALIZZATO CON UN PIC - PIC Watch un semplice OROLOGIO SVEGLIA

Indice

Abstract

Sono innumerevoli i prgetti di orologi digitali realizzati mediante dispositivi elettronici tradizionali o programmabili; il progetto di marco438, Uno "strano" OROLOGIO DIGITALE, è la dimostrazione di come con pochi componenti, tanta pazienza e buone basi di elettronica, si può arrivare ad ottenere un ottimo risultato. Quello che voglio proporre io è, per così dire, l'alter ego di quel progetto, visto in chiave PICMicro. Obiettivo di questo progetto è dimostrare come, con altrettanto pochi componenti, sia possibile creare un'applicazione divertente ed anche utile. Infatti, oltre a segnare l'ora, l'obiettivo è quello di realizzare una sveglia.

Le specifiche

Si vuole realizzare un orologio digitale con queste caratteristiche:

  • alimentazione a batteria;
  • funzionamento a basso consumo;
  • controllo livello tensione di batteria;
  • dotato di dispositivo acustico per sveglia;
  • dotato di un sistema RTCC per il mantenimento dell'ora;
  • possibilità di regolare l'orario e l'ora della sveglia;
  • estrema facilità di utilizzo;
  • visualizzazione su display a 7 segmenti;
  • possibilità di impostare un orario di sveglia;
  • segnalazione acustica allo scadere dell'orario di sveglia;
  • aspetto estetico "accattivante".

Alcuni aspetti di questo progetto sono stati trattati in altri articoli, pertanto per gli approfondimenti rimando alla lettura dei testi indicati in bibliografia.

Schema elettrico

In figura è proposto lo schema elettrico dell'orologio; il circuito si basa su di un PIC18F4520 alimentato a batteria (pacco batteria da 4 stilo). Il dispositivo DS1302 è deputato a "tenere l'ora", scaricando il PIC dall'incombenza di dover svolgere questa funzione. La visualizzazione avviene mediante dei display a catodo comune, pilotati in multiplexing.


I quattro display segnalano decine e unità delle ore seguiti da decine e unità dei minuti. Al display delle unità delle ore è collegato anche il punto decimale, utilizzato anche per segnalare i secondi che trascorrono. Il segnale di allarme della sveglia viene emesso da un buzzer piezo, dotato di oscillatore integrato. Il controllo della tensione di batteria è affidato alla coppia D1-R2, come già indicato in un precedente articolo. Un pulsante, un LED ed un encoder rotativo (dotato di pulsante assiale), completano la scheda.

Pulsanti ed encoder

Per le impostazioni dell'ora e di quella della sveglia, ho pensato di utilizzare un encoder rotativo con pulsante, come quello di figura.

Encoder

Encoder

La rotazione dell'albero dell'encoder genera due onde quadre sfasate di 90° elettrici.


La gestione dell'encoder è affidata a una routine di interrupt che rileva la transizione di un canale e acquisisce lo stato dell'altro canale. Ne consegue che se i due canali hanno lo stesso valore logico alto, il senso di rotazione è ad esempio orario; qualora i due segnali abbiano valori logici discordanti, il senso di rotazione è l'opposto, cioè antiorario.

Il prototipo in allestimento r

A little bit of firmware

Il codice è scritto in C, con C18 di Microchip. Si compone di diversi file, tra cui un driver per la gestione del display a sette segmenti. Il driver è in grado di scrivere anche alcuni caratteri sul display, permettendo brevi messaggi di saluto (come quelli che si vedono, nel filmato, all'avvio dell'orologio). Sulla scheda trova posto un DS1302, pertanto ho provveduto a inserire del codice per la lettura e la scrittura dei dati per quel chip. Con un paio di macchine a stati, si riesce a implementare la gestione dell'ora e della sveglia, comprese le operazioni per impostare i valori


    ClrWdt();
    rtc_get_time();
    rtc_get_date();
// Clock state machine cycle        
        switch (ClockState)
        {
            case IDLE:
                StateIdle ();
            break;

            case SETUPCLOCK:
                SetupClock ();
            break;

            case SETUPCLOCKHOURS:
                SetupClockHours ();
            break;
            
            case SETUPCLOCKMINUTES:
                SetupClockMinutes ();
            break;

            case SETUPALARM:
                SetupAlarm ();
            break;        

            case SETUPALARMHOURS:
                SetupAlarmHours ();
            break;
            
            case SETUPALARMMINUTES:
                SetupAlarmMinutes ();
            break;

            case SHOWDATE:
                ShowDate();
            break;
        }

        ClrWdt();

// Alarm state machine cycle
        switch (AlarmState)
        {
            case ALARM_IDLE:
                AlarmIdle();
            break;

            case ALARM_ON:
                AlarmOn();
            break;

        }

    }

Uno degli esemplari al banco

Uno degli esemplari al banco

Go To Sleep and Watch Dog Timer

Al fine di mantenere i consumi al valore più basso possibile, si è reso necessario l'utilizzo di qualche stratagemma. In particolare, l'adozione della funzione "sleep" e l'uso del Watch Dog Timer (WDT). Con la funzionalità di sleep, il microcontrollore entra in uno stato di "sonno"; così come accade per l'Uomo e gli animali, durante il sonno il battito cardiaco rallenta, le funzioni locomotorie sono inibite ma i sensori restano attivi. Ciò significa che, quando dormiamo, se qualcuno parla a voce alta, il senso dell'udito percepisce il suono e lo trasmette al cervello, il quale ci fa destare dal sonno (a volte in modo indesiderato). Analogamente, il PIC deve essere svegliato periodicamente, per poter svolgere alcune funzionalità altrimenti impossibili da svolgere dormendo. Ad esempio, ruotando il pomelllo dell'encoder, il PIC si sveglia e compie queste azioni:

  • legge l'ora dal modulo DS1302;
  • misura lo stato di tensione della batteria;
  • mostra l'ora sul display alternata alla scritta "bAtt";
  • aspetta 3 secondi;
  • spegne tutto e torna di nuovo in sleep.
Segnalazione batteria scarica

Segnalazione batteria scarica

Per poter risvegliare il PIC è necessaria una sollecitazione esterna, come la rotazione dell'albero di encoder, gestita automaticamente dall'hardware del microcontrollore. Questo sarebbe sufficiente se ci si limitasse a mostrare l'ora. Dovendo anche far suonare la sveglia, all'orario prestabilito, è necessario che saltuariamente il PIC si svegli autonomamente, controlli l'ora e se questa coincide con quella della sveglia, attiva il buzzer (facendo suonare la sveglia), altrimenti torna in modalità sleep. Il Watch Dog Timer, o WDT, è un timer specifico che può essere programmato per risvegliare il PIC quando si trova in modalità di sleep. L'attivazione del WDT e la sua programmazione sono quindi parti fondamentali del firmware.

void GoToSleep (void)
{    PORTD = 0x00;
    T0CONbits.TMR0ON = 0;
    T1CONbits.TMR1ON = 0;
    T2CONbits.TMR2ON = 0;
    GoToSleepFlag = 1;
    Sleep();
    T0CONbits.TMR0ON = 1;
    T1CONbits.TMR1ON = 1;
    T2CONbits.TMR2ON = 1;
    ClrWdt();
}
Uno degli esemplari

Uno degli esemplari

Meccanicamente

L'aspetto estetico l'ho curato io. Può piacere o no, ma a me piace e sono contento di come è riuscito il tutto. Ho pensato ad una lamiera di 1 mm di spessore, tagliata e sagomata come si vede dalle fotografie. La scheda rimane sostenuta da quattro viti elettrosaldate (in gergo "prigionieri") ed è mantenuta distante dal piano frontale grazie a quattro tubetti in plastica, ottenuti da una cannuccia per bibite.

Vista frontale della lamiera piegata e forata

Vista frontale della lamiera piegata e forata

Lamiera piegata, forata con le viti elettrosaldate

Lamiera piegata, forata con le viti elettrosaldate

I display sono celati dietro ad una mascherina di plexiglass trasparente rossa, opportunamente sagomata. Con righello e computer ho poi realizzato e stampato su carta adesiva quanto sta sul piano anteriore. Il pulsante di arresto allarme è collocato in corrispondenza della scritta GO. Il risultato è quello che si vede qui di seguito:

I due esemplari completati

I due esemplari completati

Il pacco batterie viene mantenuto fermo in posizione grazie ad un po' di nastro bi-adesivo; il LED che indica se la sveglia è stata puntata trova spazio nella parte inferiore dell'orologio.

Come funziona

Come dettato dalle specifiche, ho voluto fortemente che l'utilizzo dell'orologio-sveglia fosse il più semplice possibile. Gli utenti di questo progetto sono infatti, in primis, miei bambini. Dato che l'orologio va in modalità sleep dopo pochi secondi, per poter vedere l'orario impostato è sufficiente ruotare l'encoder o premere uno dei due pulsanti.

Per impostare l'ora si opera come segue:

1. si preme e si mantiene premuto per almeno 3 secondi il pulsante dell'encoder;

2. quando su display compaiono le ore, mediante la rotazione dell'encoder si imposta l'ora;

3. una volta che l'ora è stata impostata, premendo il pulsante dell'encoder si passa all'impostazione dei minuti;

4. quando su display compaiono i minuti, mediante la rotazione dell'encoder se ne impostano i valori;

5. la pressione del pulsante dell'encoder termina la sessione.


Per impostare l'orario della sveglia, si opera come segue:

1. si preme e si mantiene premuto per almeno 3 secondi il pulsante dell'encoder unitamente al pulsante di reset allarme;

2. quando su display compaiono le ore, mediante la rotazione dell'encoder si imposta l'ora;

3. una volta che l'ora è stata impostata, premendo il pulsante dell'encoder si passa all'impostazione dei minuti;

4. quando su display compaiono i minuti, mediante la rotazione dell'encoder se ne impostano i valori;

5. la pressione del pulsante dell'encoder termina la sessione.

Dato che dopo pochi secondi il PIC si mette "a dormire" e spegne tute le periferiche, per vedere che ora è, si rende necessario "svegliare il PIC", ruotando o premendo il pomello dell'encoder. Se invece si vuole sapere a che ora è stata impostata l'ora della sveglia, basta premere il pulsante di reset sveglia; se contemporaneamente il LED si accende, vuol dire che la sveglia suonerà all'ora indicata.

Se la tensione di batteria scende sotto un valore prefissato, la segnalazione "bAtt" compare sui display, indicando appunto che le batterie si stanno pian piano esaurendo.

Questo video mostra l'utilizzo dell'orologio e come si punta la sveglia.

Nuove funzionalità

L'utilizzo di un Real Time Clock Calendar come DS1302 comporta diversi vantaggi, tra cui la possibilità di disporre anche della data nel formato giorno/mese/anno e giorno della settimana. Al momento della pubblicazione di questo articolo, le funzionalità del calendario non sono state ancora sviluppate ma conto di farlo non appena possibile.

Conclusioni

Oggettivamente pensavo che la realizzazione di un orologio fosse una cosa più semplice. A rendere le cose più complicate sono forse le specifiche che io stesso mi sono dato e che mi hanno imposto determinate scelte tanto a livello elettronico quanto a livello firmware. Non escludo che si sarebbero potute intraprendere altre strade progettuali, a partire dal non utilizzo di un modulo RTCC dedicato e via via altre considerazioni. Qualunque fossero state le scelte effettuate, fissate le specifiche l'importante era centrare gli obiettivi ed arrivare al termine del progetto.


Download or not download ?

Non è mia prassi, ma questa volta non ho intenzione di riportare i dati del firmware completo, fin tanto che non è stato ottimizzato. Sono infatti intenzionato a migliorarlo al fine di renderlo più performante. Quindi si tratta di attendere un po'...

Ringraziamenti

Per questo lavoro, soprattutto per gli aspetti meccanici, devo ringraziare alcuni amici che mi hanno aiutato nella realizzzione di talune parti:

  • Salvatore C., per il taglio della lamiera, le forature e la mascherina di plexiglass rossa;
  • Matteo C., per lo sviluppo del percorso CAM della mascherina di plexiglass rossa;
  • Pasquale R., per la piegatura della lamiera;
  • Sabata P., per l'applicazione delle viti elettrosaldate.

Un ringraziamento va inoltre al maestro, e mio caro amico, Ides il quale, presso i suoi studi "ZANIDES", mi ha permesso la registrazione audio della cover presente nel video.

Bibliografia

Pillole di Microcontrollori PIC

Pillole di Microcontrollori PIC

11

Commenti e note

Inserisci un commento

di ,

Grazie Carlo! Sei molto gentile.

Rispondi

di ,

Bravo Paolino! Ben fatto.

Rispondi

di ,

Grazie DSPfra e mir! Ho provato una nuova veste multimediale e sono contento, mir, che abbia riscontrato attezione :-)

Rispondi

di ,

Eccellente nei contenuti e nella nuova veste grafica e multimediale...Complimenti Paolino. in questi casi un voto è troppo poco.

Rispondi

di ,

Non c'è che dire, un bellissimo articolo :) Complimenti Paolino!

Rispondi

di ,

Grazie admin! Anche per me è un onore, quello di poter appartenere a ElectroYou! Poi sai: la passione per l'elettronica e i microcontrollori in particolare, fanno tutto il resto. Grazie per i complimenti che, quando arrivano da te, mi riempiono in modo particolare di orgoglio.

Rispondi

di ,

Bello Paolino! Mi piace anche quella che mi appare come una sfida con se stessi per rendere ogni articolo sempre più attraente. E' un vero piacere ed un onore ospitare in queste pagine tanto entusiasmo e tanta professionalità. I lettori non potranno che apprezzare, e gli appassionati dei microcontrollori essere invogliati a continuare un'avventura creativa sicuri di trovare qui una guida sapiente.

Rispondi

di ,

Complimenti! Per il lavoro e per come hai esposto l' articolo...

Rispondi

di ,

Grazie, gohan. Sono contento che ti sia piaciuto.

Rispondi

di ,

Che bello!!! Io ne ho una in sospeso perchè uso sempre il telefono per svegliarmi.. Bello anche l'aspetto estetico "accattivante" =) Complimenti Paolino!

Rispondi

Inserisci un commento

Per inserire commenti è necessario iscriversi ad ElectroYou. Se sei già iscritto, effettua il login.