Go Down

Topic: RTC o timer con solo arduino? (Read 7082 times) previous topic - next topic

reizel

aspetta non mi e' chiaro

se lascio un programma con un loop lungo 24h questo s'impallera' a 49,7giorni?

a questo punto faccio un programma che a 24h mi da un reset e riparte per altre 24h e cosi' via, questo funziona, giusto?

leo72

Arduino, o per meglio dire l'Atmega, non ha un orologio in tempo reale interno (un RTC per capirsi) ma usa un contatore a 32 bit aggiornato ogni millesimo di secondo da un timer del micro.
Questo contatore è usato per le funzioni temporali dell'Atmega, quali delay() e millis(). Millis() conta appunto quanti millisecondi sono trascorsi dall'avvio dello sketch, ossia dal momento in cui hai dato tensione al micro è questo si è "svegliato".

Generalmente per compiti da eseguire ogni tot si usa o un delay(xxx) oppure un confronto con millis() tipo if (millis()+intervallo > qualcosa) ecc...
Su brevi intervalli temporali la cosa non crea problemi, ma se hai un Arduino o un Atmega che sta acceso SEMPRE e basa alcune operazioni sullo scorrere del tempo, se usi le funzioni interne (delay e millis) puoi andare incontro a problemi dopo 49,7 gg (ossia 2^32 ms). Nel senso che se ad esempio hai un controllo con millis e sfortunatamente leggi millis poco prima che il contatore si azzeri, il tuo programma uscirà dal loop fra circa 50 gg, ossia quando il valore tornerà prossimo a quello letto poco prima dell'azzeramento.

Go Up