E' un po di tempo che sto giocando con le nuove UNO R4 e, tra gli alcuni problemini che le affliggono, ce ne è uno piuttosto grosso ... la pessima precisione del RTC nativo del RA4M1.
Purtroppo, l'aver optato per NON avere un quarzo esterno per l'RTC ed essersi affidati al "Low-speed on-chip oscillator (LOCO)", provoca un errore che arriva anche ad alcuni secondi l'ora! La calibrazione di tale oscillatore non è affatto cosa semplice e, comunque, dalle prove che ho fatto, la frequenza è piuttosto variabile nel tempo (probabilmente anche in funzione della temperatura ambiente).
Per cercare di ovviare a questo problema, senza passare all'uso di un RTC esterno, magari basato su un DS3231 così da avere un'ottima precisione, ho provato a realizzare un software RTC utilizzando uno dei GPT timer di cui dispone il RA4M1.
Purtroppo, anche il clock principale di Arduino UNO R4 NON è quarzato, per cui, comunque, la precisione ottenibile NON è mai quella di un vero RTC esterno, in ogni caso, con un po' di prove e con la regolazione di un parametro (che ciascuno deve calibrare in funzione della propria scheda), sono riuscito ad arrivare ad una precisione del ± 1 secondo su 24 ore
Ripeto, causa mancanza di un qualsiasi quarzo, ma solo con lo sfruttamento di oscillatori lberi, più di tanto non è possibile fare, comunque pur essendo sicuramente meno precisio di un vero RTC esterno è sicuramente di gran lunga più preciso del RTC integrato utilizzante l'oscillatore "LOCO".
Per chi è in posseso di una UNO R4 e vuole divertirsi ... QUESTO è il link su Github della libreria (aspetto un po di verifiche e di commenti prima di renderla ufficiale nel 'Gestore di librerie' dell'IDE).
E' molto semplice da utilizzare e ho allegato due esempi d'uso, uno per la MINIMA ed uno per la WIFI (... quest'ultimo molto più semplice da utilizzare per la calibrazione del parametro CNT_FREQ che si trova in testa al programma).
Se qualche volenteroso si prende la briga di provarla e di farmi sapere problemi/suggerimenti/opinioni, lo ringrazio anticipatamente.
Guglielmo
P.S.: La libreria inclue automaticamente la <time.h> quindi, mentre la mia libreria si occupa solo di formati 'unixTime' e 'struct tm', nel .ino è possibile usare le funzioni della <time.h> per fare tutte le conversioni volute.