Orologio a puntino, XP


Orologio a puntino

Descrizione

Come da una discussione di Oriolo20, membro del forum, ho sviluppato questo progetto, se vogliamo chiamarlo così. Infatti non è proprio un progetto completo ma solo la prova di un esperimento che vuole dimostrare un programma scritto.
Lo chiamato XP che sta a dire eXperimental Project…. Infatti si nota che non è un montaggio definitivo, ma solo per comprovare il funzionamento di tutti i programmi e gli altri materiali impiegati. In particolare ho potuto notare la frequenza ottimale per tenere i LED bianchi accesi senza notare sfarfallamenti.

Lo sviluppo si basa su uno sketch che deve gestire una matrice di elementi. Nel mio caso ho preferito montare dei semplici LED bianchi. Comunque lo sketch è orientato a gestire senza variazioni anche i tubi nixie con le eventuali differenze.

Un po per una svista e un po perché ho trovato più economico, ho montato un decoder 1-su-10 come il CD4028. Infatti la mia svista ho montato i catodi comuni, anziché gli anodi che sono per pilotare i nixie.

Devo dire che lo sketch non è portabile su altri modelli di Arduino che non montano l’ATmega328p. Infatti questo sketch indirizza direttamente i registri del micro-controllore.

L’assemblato può lavorare se alimentato dal collegamento USB che mostra il monitor seriale, ma esclude altre connessioni su piedini D0 e D1, oppure con un distributore di alimentazione che ho montato.
C’è stata una particolare attenzione che le linee di alimentazione fossero ben sicure e anche multiple, visto che i fili jumper non sono molto capaci e anche il contatti dei connettori possono creare resistenze o falsi contatti.
Una nota all’affrontare il problema di connessioni che sparivano. Ho constatato che quei “jumper” non sono molto affidabili e il conduttore di rame stagnato. facilmente si interrompe.

 

Schema

Faccio notare i due connettori che prevedono l’ampliamento di comunicazione verso le fonti di informazione necessaria a mantenere l’orario puntuale. Ho pensato di poter montare dei jumper per il momento che si vuole programmare o modificare lo sketch di Arduino.

Un altro sviluppo  l’ho fatto anche per il programma su un modulo ESP-01 che comunica tramite il bus I2C e invia l’orario prelevato da un modulo DS3231 e sincronizzato tramite WiFi ad un server NTP.
Non sono riuscito a fare la comunicazione tramite UART, ma ritengo sia meglio in I2C.

Come si può notare è previsto la connessione anche alla seriale di Arduino. In modo che si può inviare ulteriori fonti di orario tramite quella sorgente. Nel pacchetto che ho preparato si include un esempio di sketch che si aspetta dei dati dalla seriale nel formato prestabilito. Per poter prendere le informazioni da un GPS o altro si dovrebbe ampliare tale allegato per convertire i dati ricevuti nel formato che vi spiego di seguito.

Il formato deve essere composto da 6 byte, ma il buffer ne prevede 8. Questi sei byte descrivono l’orario e la data

HH:MM:SS per l’ora e GG:MS:AA per la data. Gli altri 2 byte possono essere utilizzati per sviluppi futuri che possono contenere i millisecondi di differenza che il dato viaggia. Comunque questo non è attualmente incluso.

Programma

Il programma e commentato in inglese. Per quelli che non sono avvezzi, potrei farne una copia tradotta, mentre la mia ambizione sarebbe di poterlo divulgare anche per coloro che non conoscono l’Italiano anche perché è razionale che sia scritto in modo internazionale.

Nella prima parte, come mia consuetudine sono raccolti diverse definizioni (define) che determinano come si può compilare lo sketch a secondo delle necessità.

  • Alla riga 32, si definisce l’indirizzo di Arduino sul bus I2C come slave, che in caso potrebbe essere modificato.
  • Alla riga 33, c’è il periodo di aggiornamento della matrice in millisecondi. Penso che non sia possibile aumentare oltre, salvo cambiare il parametro di prescaler del timer 1. Oppure passare all’uso della libreria TimerOne.
  • Alla riga 38, si può scegliere alcuni livelli di debug, che vanno da 0 a 4. In questo metodo si potrà utilizzare le informazioni sulla seriale e un display a cristalli liquidi. Il dispositivo a cristalli liquidi ha una interfaccia seriale parallela con integrato 74HC595. Per questo di seguito si potrà scegliere se utilizzare il metodo SPI di Arduino oppure il metodo ShiftOut.
    Devo dire che non ho avuto tanto tempo per verificare appieno questa fase. Io ho modificato le librerie per il modello d’interfaccia che ho usato, come si vede nello schema. Per questo le ho unificate per usare lo stesso tipo di adattatore seriale.
  • Alla riga 39, si prevede se le informazioni sulla seriale sono indirizzate ad un terminale che accetta i caratteri escape ANSI o se invece è una semplice interfaccia seriale.
  • Alla riga 41, c’è il valore di sicurezza che l’orario che si vuole cambiare non sia indietro nel tempo.

Per quanto riguarda la scelta dei collegamenti del display a cristalli liquidi, implica anche una variazione a dove si vuole collegare il decoder 1-su-10. Ovvio che se si vuole un LCD sulle uscite D8~D11 (usando SPI), non sarà possibile collegare il decoder da quella porta, quindi nel programma si sceglie le uscite A0~A3.

Viceversa se si vuole il decoder sulle uscite D8~D11, allora il display sarà collegato alle uscite A0~A2, ma con la possibilità di poter scegliere anche altre uscite libere.

Il programma è abbastanza snello e si prevede che si possa aggiungerci anche la gestione di altre sorgenti dove prendere l’orario alla precisione di un secondo senza rischiare di perdere secondi.

Parti di supporto

Il resto del progetto prevede di fornire le fonti dell’orario preciso. Per questo ho implementato una gestione tramite micropython (MP, qui di seguito) installato su ESP-01.

Spiego che la scelta di usare MP è stato dal fatto che il firmware che è fornito all’acquisto non si è dimostrato abbastanza stabile.

Forse anche dovuto al fatto di aver montato il modulo in maniera precaria su una breadboard. Invece si deve aver cura che i contatti siano ben sicuri e che permettano i picchi di corrente che ESP richiede durante la fase di collegamento al router. Per questo ho montato su una schedina millefori con i dovuti accessori per poter riprogrammare il modulo.

Ho assemblato anche un adattatore di livelli per il bus I2C. Forse non era strettamente necessario, ma tra le tante prove, non riuscivo a capire per quale causa Arduino non recepiva i segnali inviatigli.

Ma tale circuito è di una semplicità allarmante e ho fatto in pochi minuti. Tenuto conto che dal lato 5 volt non ho messo le resistenze di pull-up perché già presenti sul modulo RTC.

altre prove che ho messo in atto è stato di collegare il mio SBC (Tinker Board) per inviare i dati dell’orario. Il tutto funziona molto elegantemente. Se interessa potrete trovare lo script in python da caricare per eseguire. Io ho provato con una installazione Armbian, perché il tentativo con la Archlinuxarm non riesce a trovare il bus correttamente.
A riguardo di questi SBC, non è difficile provare il collegamento ed inviare i dati. Nel pacchetto si trova anche uno script di python che si può usare con un Raspberry o computer che si può interfacciare al bus I2C.
Il comando bisogna inviarlo coi privilegi di amministratore, dato che deve accedere all’hardware del bus I2C, questo sarà un comando del tipo:

sudo ./sendtime02.py 60 europe.pool.ntp.org

Si può escludere i due parametri dopo il nome, quindi verrà usato i valori prestabiliti. Questi due parametri definiscono la pausa tra una interrogazione e l’altra al server NTP. Mentre il secondo parametro definisce quale server collegarsi.

Il pacchetto è disponibile sul mio drive.
Se ci sono altre informazioni che vi servono o note, sarò lieto di poter dare una opinione

Se interessa ho fatto anche un piccolo video dimostrativo.

 

VOTO
0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento