Visti i problemi di millis() vorrei sapere come faccio a fare un reset automatico.
Esiste il comando apposito ?
Oppure collego D1 a RST e quando millis() supera un numero x, metto D1 in HIGH ?
Visti i problemi di millis() vorrei sapere come faccio a fare un reset automatico.
Esiste il comando apposito ?
Oppure collego D1 a RST e quando millis() supera un numero x, metto D1 in HIGH ?
acik:
Visti i problemi di millis() vorrei sapere come faccio a fare un reset automatico.
Non puoi resettare un AVR utilizzando direttamente un suo pin perché il tempo per cui è necessario tenere reset a 0 è maggiore del tempo dopo il quale le periferiche vengono disabilitate, pin che vanno in alta impedenza, dall''inizio delle operazioni di reset.
Eventualmente puoi resettare a comando utilizzando un monostabile che si occupa di mantenere il pin reset a 0 per tutto il tempo necessario indipendentemente dal fatto che il comando che l'ha avviato non è più disponibile.
Per quanto riguarda la millis è possibile resettarla a piacere quando ti pare, p.e. non appena raggiunge un certo conteggio, basta che metti nelle definizioni globali dello sketch la seguente riga :
extern unsigned long timer0_millis;
Dopo di che per resettare la millis :
timer0_millis = 0;
Descrivi per favore i problemi che hai con la funzione millis()
Ciao Uwe
uwefed:
Descrivi per favore i problemi che hai con la funzione millis()
Ciao Uwe
Non ho ancora avuto problemi, ma mi dicono che dopo 47 giorni si blocca.....
acik:
Non ho ancora avuto problemi, ma mi dicono che dopo 47 giorni si blocca.....
Il limite è 1193 ore (49.7 giorni) e non si blocca nulla, semplicemente il conteggio riparte da 0, i casi sono due o lo azzeri tu prima che raggiunge il limite oppure tieni conto dell'overflow nel computo del tempo.
L'overflow non é un problema. Se scrivi le condizioni dei IF in modo giusto funzionano anche se capita un overflow. La limitazione é che non puoi controllare tempi maggiori di 49 giorni. Ma per questo uso é comunque meglio usare un orologio RTC perché funziona a batteria e un spegnimento del Arduino non lo azzera.
Ciao Uwe
La mia swRTC non soffre del bug di millis perché il registro a 32 bit che uso per il conteggio dei secondi va in overflow dopo 136 anni
leo72:
bug di millis
Non si può parlare di bug, è semplicemente un limite operativo della funzione, non è un errore.
astrobeed:
leo72:
bug di millisNon si può parlare di bug, è semplicemente un limite operativo della funzione, non è un errore.
Corretto.
E' per abbreviare e non stare a descrivere per esteso che il bug riguarda gli sketch scritti senza tener conto dell'overflow.