Problema eeprom Atmega328 standalone

Ciao ragazzi,mi sta capitando una cosa strana a cui non riesco a dare bene una spiegazione,se non che il micro sia difettoso....allora ho un ATMega328 in standalone con quarzo 16 Mhz...lo programmo con un ArduinoISP (NON Arduino as ISP)senza problemi come faccio con tutti miei micro...e fin qua tutto ok..
la cosa strana è che se ad esempio cancello tutta la EEPROM con lo sketch incluso nella libreria e poi faccio ripartire il micro per leggerne il contenuto mi ritrovo tutti i valori a 255...mah..allora i casi sono due:
-o la scrittura sull'eeprom non funziona
-o quando scrivo lo sketch per leggere i valori in qualche modo mi rosetta tutto a 255

Preciso che carico il bootloader della Uno e sempre con la stessa board selezionata vado poi a caricare lo sketch tramite la funzione Carica con un programmatore dell'ide 1.6.5.

Non è che mi serva in particolare la eeprom interna della mcu in questa applicazione,ma più che altro volevo capire il perché.

Saluti

Guarda che qualsiasi EEPROM da 8 bit, vergine o resettata, presenta come valore delle celle un hex FF ovvero 255 (8 bit tutti a 1). Non devi aspettarti degli ZERO se non li hai espressamente scritti tu.

se rileggi il mio post ho scritto che mi ritrovo tutto a 255 DOPO aver cancellato tutta la eeprom,ovvero dopo aver,in teoria,posto tutto a 0…è proprio da qua che nasce il problema

Ma allora sei niubbo! La cancellazione od il reset di una EEPROM corrisponde al riempirla di UNO, non di ZERI. Questo per un fatto tecnico di costruzione e di convenzione.

Se vuoi riempirla di ZERI, non devi eseguire una routine di reset, ma un ciclo for() in cui scrivi ZERO in ogni singola cella. Tante iterazioni tante quante sono le celle.

Inoltre la scrittura di una cella è un’operazione abbastanza lenta. Assicurati di inserire un qualche mS di respiro (leggi sul datasheet quanti) tra una scrittura e l’altra!

Se per "cancellare" intende usare lo sketch di esempio "clear", quello scrive tutti zeri in effetti...

Usando le funzioni di Arduino per scrivere comunque non serve nessun delay.

sarò anche dubbio,ma se uso lo sketch eeprom_clear degli esempi della libreria eeprom mi scrive 1 o 0 nelle celle?????....adesso,appurato che so come si scrive un valore su una eeprom,qualcuno ha un'idea realistica sul perché del mio problema???

...na forse mi rispondo da solo,anche se mi sembra strano...spulciando nel file boards dell'ide trovo che per la Uno l'high fuse è dettato a DE e in questo modo il bit EESAVE non è settato...questo influisce solo nella scrittura del bootloader o durante ogni caricamento di sketch??...non ho attualmente sotto mano un Arduino di test,ma mi pare strano un comportamento del genere....proverò a creare una nuova board settando questo bit nei fuse e riproverò...nel frattempo aspetto vostri commenti o delucidazioni al riguardo....

...per la cronaca avevo ragione...fuse sbagliato

…per la cronaca avevo ragione…fuse sbagliato

Io ero tentato di scrivere circa i fuse, ma dalla descrizione che ho letto ho invece capito che non poteva essere questo il problema, evidentemente mi sbagliavo. Tra l’altro ne abbiamo discusso in passato in molti vecchi post di cui ormai ne è rimasta traccia difficilmente fruibile. Infatti il problema mi se è presentato nel momento in cui avevo bisogno di scrivere una sola volta i dati in eeprom tramite avrdude e poi scrivere il firmware più volte sempre tramite avredude e appunto mi sono accorto che la eeprom viene resettata nella fase di scrittura del firmware, ma stiamo parlando di 3/4 anni fa.

Ciao.

MauroTec:
Io ero tentato di scrivere circa i fuse, ma dalla descrizione che ho letto ho invece capito che non poteva essere questo il problema, evidentemente mi sbagliavo. Tra l'altro ne abbiamo discusso in passato in molti vecchi post di cui ormai ne è rimasta traccia difficilmente fruibile. Infatti il problema mi se è presentato nel momento in cui avevo bisogno di scrivere una sola volta i dati in eeprom tramite avrdude e poi scrivere il firmware più volte sempre tramite avredude e appunto mi sono accorto che la eeprom viene resettata nella fase di scrittura del firmware, ma stiamo parlando di 3/4 anni fa.

Ciao.

pensavo che i fuse nelle Boards dell'ide fossero settati in modo da preservare l'eeprom alla scrittura del firmware in effetti

A me infatti risulta che non venga toccata la EEPROM dall'IDE.
A volte salvo una configurazione sulla EEPROM con un sketch e con un altro, quindi caricato successivamente, la leggo.
Non so come funziona invece in stand-alone senza bootloader.

PaoloP:
A me infatti risulta che non venga toccata la EEPROM dall'IDE.

Esatto, la EEPROM non viene toccata in nessun modo durante la programmazione da IDE.
La EEPROM, viene cancellata durante la programmazione con programmatore hardware, p.e. Arduino con sketch ISP, perché di default il fuse EESAVE non è settato e in questo caso quando si fa l'erase del chip anche la EEPROM viene azzerata (tutte le celle contengono 0xff), che è il caso in oggetto del topic.

...e non potevi dirmelo dopo il primo post??,,, >:( >:( >:( :slight_smile: :slight_smile: :slight_smile: :slight_smile: .....anche se mi sembra una gran cag*** che i fuse nel file boards siano settati senza EESAVE a 1...in questo modo cambia il comportamento se si programma il micro tramite bootloader o sketch ISP....e nel reference e vari wiki non è specificato da nessuna parte...io non sarò un drago ma nel mio piccolo ci sono arrivato a capirlo,ma dalle scarse risposte al topic mi sa che nessuno si fosse posto il problema

ibbba:
...e non potevi dirmelo dopo il primo post??,,, >:( >:( >:( :slight_smile: :slight_smile: :slight_smile: :slight_smile: .

Non è detto che leggo un topic subito, nella vita reale ho di meglio da fare che leggere il forum di Arduino :smiley:

astrobeed:
Non è detto che leggo un topic subito, nella vita reale ho di meglio da fare che leggere il forum di Arduino :smiley:

....ahhh!!!...pensavo percepiste salario da Arduino.**..... :smiley: :smiley: :smiley: :smiley: :smiley: ;D ;D :wink: ....comunque,scherzi a parte,non sarebbe meglio avere quel fuse settato per preservare la eeporm?...così i nibbi evitano una domanda in più,servono meno risposte e tutto fila più liscio...solo che non saprei a chi comunicarlo