Go Down

Topic: Reset automatico (Read 648 times) previous topic - next topic

acik

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 ?


astrobeed


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 :
Code: [Select]

extern unsigned long timer0_millis;  

Dopo di che per resettare la millis :
Code: [Select]

timer0_millis = 0;

uwefed

Descrivi per favore i problemi che hai con la funzione millis()
Ciao Uwe

acik


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.....

astrobeed


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.

uwefed

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

leo72

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  :smiley-yell: :smiley-yell:

astrobeed


bug di millis


Non si può parlare di bug, è semplicemente un limite operativo della funzione, non è un errore.

leo72



bug di millis


Non 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.

Go Up