Salve a tutti, sto avendo qualche problema con la gestione della eeprom del chip attiny85, ogni volta che scrivo una/delle variabili sulla memoria eeprom a volte mi ritrovo un dato corrotto o diverso da quello scritto inizialmete , considerate che utilizzo il 95% della memoria flash per i programmi e il 30% della memoria di lavoro, teoricamente non dovrei avere problemi del genere , paradossalmente mi viene da pensare che non sto utilizzando la libbreria corretta o per via della memoria flash utilizzata posso avere problemi di instabilità con le variabili di sistema o quantaltro, consigli in merito?
Meglio che metti il codice che stai usando (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) così magari gli si può dare un'occhiata :
il codice è molto lungo e articolato, sono mesi che lo sto studiando , è un' applicazione speciale , ho usato solo le due istruzioni per la gestione della eeprom
EEPROM.write
EEPROM.read
il tutto sembra funzionare ma dopo 3 ore di lavoro incominciano i casini, considera che ho messo un contatore di cicli che dopo 4 ripetizioni aggiorna la variabile di contatore nella eeprom, ho paura che devo mettere un controllo sulla scrittura temporale per permettere che l'info venga scritta correttamente , stesso fenomeno lo riscontro quando effettuo l'aggiornamento delle variabili inserite nella eeprom , inizialmente avevo distanziato la loro allocazione , non ho usato allocazioni di memoria consecutivi, però rilevo sempre la problematica in modo random , sto pensando a utilizzare le istruzioni native del processore per capire di risolvere la problematica
in basso un piccolo pezzo del programma
forse ho trovato il problema , mediamente scrivo la eeprom ed effettuo una pausa con un delay per xx secondi , ho notato che qualora viene disalimentato il chip durante il delay il sistema impazzisce e non riesce a scrivere correttamente il dato provocando il problema pecedentemente evidenziato, il delay blocca il chip e non fà effettuare la scrittura della eeprom?
è possibile un fenomeno del genere?
in basso un pezzo del programma dove rilevo il problema , il delay temporale è settato da questa istruzione
delay (t_ciclo_completato);
if (conta == cicli) { // verifica se il ciclo complessivo è ultimato
// Riporta la variabile a 0
digitalWrite (segn, LOW);
digitalWrite (rele, HIGH);
digitalWrite (led, HIGH);
if (contatore_par - contatore >= 10) { // se il contatore è incrementato di 10 valori aggiorna la memoria e allinea i contatori
uno = contatore_par >> 0 & 0xFF;
due = contatore_par >> 8 & 0xFF ;
tre = contatore >> 16 & 0xFF;
EEPROM.write (7, tre);
EEPROM.write (8, due);
EEPROM.write (9, uno);
contatore = contatore_par;
}
delay (t_ciclo_completato);
digitalWrite (rele, LOW);
digitalWrite (led, LOW);
conta = 0;
start = 0;
}
ho visto che in alcune soluzioni viene inserita una pausa di 5mS ogni istruzione di scrittura, perchè mediamente il chip impiega cirva 2 mS per effettuare la scrittura, provo ad inserirla e vediamo che succede
pinoros64:
ho notato che qualora viene disalimentato il chip durante il delay il sistema impazzisce ...
Perché la EEPROM ha dei tempi ben precisi e ... NON puoi disalimentare il chip durante il tempo di scrittura interna, pena, appunto, la perdita di dati !!!
infatti, ho trovato quale era il problema , ho messo il dispositivo alimentato a batteria, dopo circa 2 ore di lavoro al suono del buzzer, ho notato che l'alimentatore 78L05 si sedeva e non mi garantiva l'alimentazione abbassandola , in questo caso la memorizzazione del nuovo valore andava in errore provocando i dati corrotti riscontrati , adesso sto utilizzando un modulo dc-dc bypassando l'integrato on board, vediamo cosa succede.