
Contatore tempo arduino
libreria del tempo di arduino
Arduino ha due tipi di interruzioni. Le interruzioni hardware che abbiamo già visto nell’episodio precedente con le interruzioni per il cambio di pin e poi abbiamo le interruzioni a timer ed è di questo che parleremo oggi. Questo post riguarda i timer di Arduino, quanti ne abbiamo, come potremmo usarli e come definire un’interruzione basata su questi timer in modalità comparativa. Lavorare direttamente con i timer e i registri, renderà il vostro codice molto più veloce e fluido e potrete creare le vostre interruzioni senza usare le funzioni pre-fatte di Arduino come delay, analogWrite, millis e così via. Quindi cominciamo.
Come programmatore Arduino, sicuramente avrete usato timer e interruzioni senza nemmeno saperlo. Questo perché tutta la roba hardware di basso livello è nascosta dalle funzioni Arduino che sono già premesse. Molte funzioni di Arduino usano i timer, per esempio le funzioni di tempo: delay, millis, micros e delayMicroseconds. Tutte usano i timer di Arduino in background. Anche altre funzioni come PWM analogWrite usano i timer. Lo stesso vale per le funzioni tone e noTone e anche per la libreria Servo. Quindi, cos’è questo timer?
arduino timer interrupt
Un modo abbastanza accurato è usare la funzione millis(). Restituirà il valore in millisecondi dall’avvio di Arduino. Se avviate Arduino ad un’ora specifica, sarete in grado di calcolare la data e l’ora esatta.
Non è possibile. Arduino Uno non ha un orologio in tempo reale. Un orologio in tempo reale costa solo qualcosa come 1 dollaro da eBay. Per esempio il DS1307 o il DS3231. Ho trovato 5 schede preassemblate con il chip dell’orologio, compreso il portabatterie, il cristallo, il chip e il circuito stampato per 4,20 dollari su eBay. Batterie non fornite.
Se volete solo fare qualcosa ogni 24 ore (non necessariamente alle 9:36 del mattino) allora potete semplicemente usare millis per trovare quando è trascorso il numero appropriato di millisecondi. Il risultato di millis andrà a capo ogni 49 giorni circa, ma non dovete preoccuparvi di questo.
timer arduino
Ho preso la libreria DateTime, ho caricato l’esempio di orologio con cui viene fornita. L’esempio era fatto per essere visto su un display seriale. Non so come farlo, ma comunque non è quello di cui ho bisogno. Ho provato a modificarlo, per renderlo capace di stampare sul display LCD.
Non ci sono float utilizzati nella libreria DateTime. Il tempo è mantenuto come un conteggio in secondi da un particolare punto nel tempo. Il tipo usato per tenere il conteggio è definito come time_t ed è un valore unsigned long.
Invece, supponete che potreste non vedere ogni singolo valore di millis… potrebbe fare due tick prima che voi riusciate a guardarlo. Se millis in qualche modo arrivasse a 1001, non incrementereste mai più i secondi (finché millis non si sia avvolto tutto intorno, e anche allora forse no).
Andando ancora oltre, se il vostro millis è stato urtato in una routine di interrupt, e avete avuto qualche altro codice che ha fatto dei ritardi significativi, potrebbe essere fuori più di un tick. Se millis in qualche modo è arrivato al valore di 2005, allora questo incremento dei secondi sarebbe fuori di oltre un secondo intero.
arduino conta i secondi
Spesso, avete bisogno di misurare il tempo che il vostro microcontrollore impiega per eseguire un particolare compito. Puoi usare la funzione millis() di Arduino per misurare il tempo. Questa funzione restituisce il numero di millisecondi trascorsi da quando la vostra scheda ha iniziato a eseguire il programma corrente. Quindi, per calcolare il tempo impiegato da un’operazione, potete chiamare millis() prima e dopo la vostra operazione, e prendere la differenza dei due valori.Un esempio di implementazione è dato qui sotto -Examplevoid setup() {
Come potete vedere, questo darà il tempo di esecuzione del compito in millisecondi. Ma cosa succede se volete che il tempo di esecuzione sia in microsecondi? Avete indovinato! Potete usare micros() invece di millis().