numero limitato di cicli di scrittura ???

Buongiorno! googlando ho letto qualcosa sul numero limitato di cicli di scrittura che e' possibile effettuare con la memoria di arduino, a cosa si riferisce esattamente?

numero di caricamenti del programma?

bitread? bitwrite?

un programma "semplice" con ingressi uscite timer contatori va a incrementare queste scritture durante l'esecuzione?

ho visto che qualcuno "trasferisce" queste operazioni di scrittura su una memoria esterna...? sd ...

grazie

Probabilmente il riferimento era al numero massimo di cicli di scrittura della EEPROM, avvicinandosi al quale si possono verificare problemi di integrità dei dati scritti a causa del deterioramento delle celle di memoria.

ok, la eprom viene scritta solo quando si carica il programma?

Ciao,

allora Atmel garantisce una durata media della memoria Flash (quella per intenderci dove viene scritta l’applicazione) di 10 000 cicli di cancellazione/scrittura e di 100 000 per ogni bit della EEPROM.

Pertanto se carichi sull Arduino 20 volte al giorno uno sketch, dopo 500 giorni potresti cominciare ad avere dei problemi.

Se scrivi ad esempio 1 dato ogni minuto su un determinato byte della EEPROM, dopo circa 70 giorni potresti non riuscire piu’ a scriverlo; se lo scrivi ogni secondo dopo circa 28 ore potresti cominciare ad avere problemi.

Per allungare la vita alla EEPROM, questo riguarda ciascun byte, per cui se devi immaganizzare poche informazioni, si puo’ cambiare la posizione di registrazione delle informazioni per allungare la vita operativa della EEPROM.

Se devi utilizzare delle EEPROM e scrivere dati con un’alta frequenza alloe e’ meglio usare una EEPROM esterna, oppure delle memorie FRAM se devi scrivere dati con altissima frequenza.

Ciao,
Marco.

ops mi sono addormentato.. effetto turno notturno.. che coma! Grazie mille Marco per le esaudienti risposte!, premetto che e' da una settimana che ho "scoperto" arduino e il "c", un paio di giorni e metto in funzione l'antifurto casereccio che ho costruito utilizzando una tastiera a matrice telefonica "sip",una videocamera digitale a basso costo e un vecchio nokia che mi chiama quando il magnetico sulla porta d'ingresso rileva un'intrusione ; e se lo chiamo io mi apre il cancello. detto questo io uso come "combinazione" per disattivare l'antifurto 5 bit (da 0 a 4 ), 5 tasti.. (non ho multiplexato, lo faro' piu' avanti) quando porto a uno i suddetti bit con la tastiera (nella corretta sequenza e avvalendomi anche di un contatore) mi setta il bit n°6, che l'ho usato come reset del bit numero 7, bit 7 true antifurto in allarme , bit 7 false antifurto dissattivato . per gestire questi bit ho fatto così (qui ho copiato pezzetti a cazz solo per farvi capire)

byte Data = 0;

if ((bitRead (Data,0) == true) && (bitRead (Data,1) == true) && (bitRead (Data,2) == true) && (bitRead (Data,3) == true) && (bitRead (Data,4) == true) && (bitRead (Data,5) == false) ) bitSet(Data, 6);

if ((bitRead (Data,6) == false) && (Stato7 == HIGH)) //antifurto acceso e porta aperta = allarme

bitSet(Data, 7); //set allarme if (bitRead (Data,6) == true) //disinserisco antifurto bitClear (Data,7); //reset allarme

da quello che ho capito io andrei a scrivere sempre gli stessi bit sulla stessa area di memoria, come posso fare per esempio a una nuova immissione di codice a shiftare su un'altra area? e qual'e' la matrice dei 8 bit che ho usato finora? ... sinceramente non l'ho capito...! ho solo fatto un po' di prove e "funziona"...

io per lavoro conosco la struttura della memoria di un plc, dove alla M10 (merker 10) e' "associata" una sub radice di 8 bit, qui deve essere lo stesso ma in effetti mi accorgo di non aver specificato su quale "merker" di arduino vado a scrivere e prelevare i bit che ho usato..!

oppure l'ho specificato qui ??? byte Data = 0;

e se shifto su byte Data = 1; ? scrivo su altri 8 bit ?

PRATICAMENTE FUNZIONA MA NON HO CAPITO IL PERCHE'!!!!!!! :fearful:

grazie ancora... di solito invece di fare tutte ste domande leggo manuali e studio ma lo faro' piu' avanti, devo mettere in funzione (al volo) l'antifurto...

lupastro81: da quello che ho capito io andrei a scrivere sempre gli stessi bit sulla stessa area di memoria, come posso fare per esempio a una nuova immissione di codice a shiftare su un'altra area?

Aspetta. Stai parlando di memoria SRAM. L'Atmega328 ha un'architettura di tipo Harward per cui la memoria che contiene il codice è separata dalla memoria dove vengono create le variabili necessarie al programma. Come è stato detto, la prima è la FLASH ed ha un numero di scritture garantite di 10.000. La SRAM non ha virtualmente limiti. Quando tu crei e manipoli una variabile il microcontrollore esegue queste operazioni nella SRAM, non in FLASH. Esiste poi una terza memoria, la EEPROM interna, che ha un ciclo di scritture di 100.000. Essa è usabile per memorizzare particolari dati che devono rimanere anche in caso di distacco dell'alimentazione.

lupastro81: io per lavoro conosco la struttura della memoria di un plc, dove alla M10 (merker 10) e' "associata" una sub radice di 8 bit, qui deve essere lo stesso ma in effetti mi accorgo di non aver specificato su quale "merker" di arduino vado a scrivere e prelevare i bit che ho usato..!

oppure l'ho specificato qui ??? byte Data = 0;

e se shifto su byte Data = 1; ? scrivo su altri 8 bit ?

PRATICAMENTE FUNZIONA MA NON HO CAPITO IL PERCHE'!!!!!!! :fearful:

grazie ancora... di solito invece di fare tutte ste domande leggo manuali e studio ma lo faro' piu' avanti, devo mettere in funzione (al volo) l'antifurto...

Qui usiamo gli Atmega, devi dimenticarti cosa fai con l'Angela Merkel e pensare "atmel" :P La memoria viene allocata in SRAM, come ti ho specificato, quindi a te di dove materialmente sia la variabile non te ne deve importare, a quello ci pensa il C a "tradurre" il nome della stessa in un indirizzo fisico usabile per salvare/leggere i dati.

ok grazie Leo72 per le esaudienti risposte, ho finito il mio antifurtogsm\apricancello ed e' un gioiellino non mi rimane che ottimizare il software, il codice che attualmente gira pesa 5.6 kb!! l'ho scritto "alla stupida"..! sono sicuro che un abile programmatore l'avrebbe fatto con un decimo di utilizzo di risorse...!

G R A N D E A R D U I N O !!! tanto di cappello agli "INGI" eporediesi!!!!!

prossimo progetto centralina per stufa a pellet.. hi hi