Salve,
se volessi contare il numero dei loop che l'arduino esegue devo per forza inizializzare un contatore ed incrementarlo ad ogni loop o esiste un'altra possibilità che minimizzi l'allocazione di memoria?
Un contatore è la via più semplice. Il consumo di memoria è minimo: considera che un integer di tipo long occupa solo 4 byte (32 bit) e permette di contare 2^32 cicli (4.294.967.296)!
Ma hai poi bisogno di memorizzare tale valore affinché in caso di mancanza di alimentazione il valore non venga perso?
Se questo è il caso, puoi memorizzare il valore nella EEPROM interna al micro.
gli interi su Arduino sono a 16 bit
Ehm ehm.... ho scritto:
leo72:
considera che un integer di tipo long occupa solo 4 byte (32 bit) e permette di contare 2^32 cicli (4.294.967.296)!
Gli interi normali sì, sono a 2 byte, ma i long sono a 4.
ops! scusami ho letto troppo velocemente!!
Ciao Leo72,
sono un Megaprincipiante, ho intuito (vagamente), la possibilità di memorizzare dei dati all'interno dell'"EEPROM".
mi stai dicendo che è possibile memorizzare dati anche in assenza di alimentazione?
perchè se è così arduino mi darà moltissime soddisfazioni
@leo72
comunque c'é l' errore.
Se usi un long é col segno e non Ti conta fino a 4294967296 ma fino a 2147483648 e poi dventa un numero negativo.
Devi usare un unsigned long.
@Marbi
Per memorizzare o leggere dei Byte nella memoria EEPROM del Atmega puoi usare la libreria EEprom.h http://arduino.cc/en/Reference/EEPROM
Sappi peró che il produttore garantisce 10000 cicli di cancellazione/scrittura per la EEprom.
Ciao Uwe
uwefed:
Sappi peró che il produttore garantisce 10000 cicli di cancellazione/scrittura per la EEprom.
Ciao Uwe
No, il produttore garantisce 10.000 cicli per la Flash. Per la EEPROM ne sono garantiti 100.000
Vedi datasheet, pag. 1.
uups, beccato. La mia memoria mi ha tradito.
Grazie leo72 per la correzione
Comunque quello che volevo segnalare é che se cambi ogni ciclo il numero nella eeprom arrivi molto velocemente al numero di cancelazioni massimi della EEprom. Oltre questo un ciclo di scrittura dura qualche msecondo e ralenta notevolmente il ciclo loop().
Ciao Uwe
Sì, vero. Se il loop è semplice, si può arrivare anche a consumare i cicli totali in meno di 10 minuti...