Gilbert Sparios Postat Februarie 11, 2020 Partajează Postat Februarie 11, 2020 Vorbind despre un Atmega328 capsulă smd.. as vrea sa fac o aplicație care sa îmi scrie la aproximativ 5 ore o pozitie in EEPROM. Evident, cu verificare in prealabil. Ma gândesc mai mult din punct de vedere al fiabilității. Cat va rezista..? In DS se vorbește de aproximativ 100.000 cicluri de scriere. la 5 ore.. ar insemna vreo 57 de ani daca am calculat bine. ceea ce zic ca e suficient. dar as vrea sa stiu daca ati întâmpinat situații in care uC a crăpat mult mai repede, sau dimpotrivă. oricum, din câte am citit, subiectul este controversat. unii spun ca au depasit 1.500.000. Practic niciodată nu am indraznit sa scriu des in eeprom, dar aplicația asta.. nu am unde sa scriu ultima poziție si e pentru prevenire cand se ia curentul electric. era bun un circuit de backup pe baterie, sau o memorie i2c dar sa rămânem la varianta cu eeprom-ul... Link spre comentariu
Mircea Postat Februarie 11, 2020 Partajează Postat Februarie 11, 2020 Eu as face prin rotatie. Incrementezi adresa la fiecare scriere. Doar un link, sunt multe altele. https://hackaday.com/2011/05/16/destroying-an-arduinos-eeprom/ Link spre comentariu
Gilbert Sparios Postat Februarie 11, 2020 Autor Partajează Postat Februarie 11, 2020 m-am gândit si eu sa folosesc o adresa ca sa indic adresa actuala. dar din cate am inteles.. daca folosesc biblioteca ce vine cu arduino, se re-scrie fiecare adresa chiar daca specific o anume adresa. poate am înțeles eu greșit.. Link spre comentariu
Mircea Postat Februarie 12, 2020 Partajează Postat Februarie 12, 2020 Sugestia mea era o metoda de a verifica cat poti sa rescrii o memorie. Un destroyer. Dar as lua de buna acea informatie cu 100k rescrieri, desigur e o medie verificata de producator. Daca-ti e suficient la rata ta de scriere, da-i inainte cu proiectul. Link spre comentariu
franzm Postat Februarie 12, 2020 Partajează Postat Februarie 12, 2020 Am la lucru aparatura a caror memorii a fost specificata la 100k cicluri de scriere si am depasit milionul pâna la primul defect. În timp de ca 10 ani. Daca mai am circuitul defect, îi fac o poza. Link spre comentariu
Gilbert Sparios Postat Februarie 12, 2020 Autor Partajează Postat Februarie 12, 2020 Acum 4 ore, franzm a spus: Am la lucru aparatura a caror memorii a fost specificata la 100k cicluri de scriere si am depasit milionul pâna la primul defect. În timp de ca 10 ani. Daca mai am circuitul defect, îi fac o poza. nu vreau poza. m-ar ajuta sa stiu in ce consta defectul. nu mai poti scrie nimic in eeprom sau doat la X locație. daca se poate, bineînțeles. Link spre comentariu
Bandi Szasz Postat Februarie 12, 2020 Partajează Postat Februarie 12, 2020 La EEPROM se duce locatia X din moment ce se sterge si rescrie o singura pozitie, la FLASH unde trebuie sters toata pagina de 256 locatii pentru a rescrie o singura pozitie se duce pagina respectiva. Insa inainte sa ai coruptie totala (sa iti citeasca inapoi ca si gol 0xFF) o sa inceapa intai sa iti dea inapoi valori aiurea, tu scrii in EEPROM 0x10 si te trezesti ca o sa citesti inapoi 0xA0. Daca vrei sa fi sigur va trebuii sa stochezi si un CRC si sa validezi valoarea la citire. Poti pune un EEPROM i2c extern care costa 3lei si iti garanteaza 1.000.000 de scrieri. Link spre comentariu
nico_2010 Postat Februarie 12, 2020 Partajează Postat Februarie 12, 2020 Sau si mai simplu: foloseste EEPROMUpdate. https://www.arduino.cc/en/Reference/EEPROMUpdate Valoarea va fi inscrisa la adresa X din EEPROM numai daca a suferit modificari, altfel nu. Link spre comentariu
Gilbert Sparios Postat Februarie 12, 2020 Autor Partajează Postat Februarie 12, 2020 nu știu dacă ar face vreo diferența cu eeprom.update() cât timp eu citesc tot timpul inainte sa scriu. extern nu mai pot. e terminat deja pcb, iar ideea cu eeprom a aparut de-abia recent, din păcate. in fine, pentru proiectul in discutie, imi e suficient si 50.000 de cicluri. care ar insemna 28 ani si 6 luni... pentru alte proiecte cu siguranță nu ma voi avanta in eeprom, mult mai bine un i2c eeprom sau poate un sd card. ori vreo soluție de circuit de backup pe baterie/super capacitor, cu intrare uC in sleep pana revine tensiunea.. care totusi, nu ar acoperi un crash-reset din WD.. Link spre comentariu
franzm Postat Februarie 13, 2020 Partajează Postat Februarie 13, 2020 Acum 21 ore, Gilbert Sparios a spus: ... m-ar ajuta sa stiu in ce consta defectul. nu mai poti scrie nimic in eeprom sau doat la X locație. Nu s-a mai putut scrie în locatie. La început sporadic (adica se putea repeta cu succes scrierea) si apoi permanent, când repetarea scrierii nu avea succes. Link spre comentariu
XAN77 Postat Februarie 13, 2020 Partajează Postat Februarie 13, 2020 O sugestie, poate nu aplicabilă proiectului actual, dar care pe mine ma ajutat. Pentru că am avut probleme cu eeprom-ul intern din atmega, dar și la pic, ce constau în coruperea foarte rară dar reală a datelor din eeprom, am folosit într-o aplicație ce conținea și un RTC de tip DS1307, cele 56 de byte de tip RAM, 1307 având atașată baterie de backup. După ce am salvat datele în 1307 nu am mai avut probleme câți ani am mai folosit aplicația respectivă. Poate că coruperea eepromului mi se datora prin erori în program, deși am încercat tot ce am putut ca să evit acest comportament, cert e că cu 1307 am scăpat de ele. Link spre comentariu
informer Postat Februarie 13, 2020 Partajează Postat Februarie 13, 2020 @x_dadu, nu vreau sa generalizez insa pot sa-ti spun ca am in functionare multe zeci de device-uri ce stocheaza date in EEPROM, atat ATMega cat si PIC, unele care merg la temperatura d-afara de multa vreme. Daca un singur bit din ce-i stocat acolo ar lua-o razna, scula in cauza foarte probabil n-ar mai merge si as afla... intr-un mod mai placut sau mai putin placut... . Totusi in cativa ani buni n-am avut nici macar un singur caz. I-adevara ca n-am facut scrieri pt. testarea andurantei dar, de la caz la caz, am avut zeci spre suta de scrieri pe zi. Link spre comentariu
XAN77 Postat Februarie 14, 2020 Partajează Postat Februarie 14, 2020 Poți generaliza nu-i problemă. Eu însă am avut mereu probleme. Inclusiv cu un ceas cu matrici de leduri făcut de un coleg de aici de pe forum, ceas care a ajuns la mine. La un moment dat a trebuit resoftat Atmega-ul pentru că resetul nu mai remedia problema, afișa bălării. Foarte ciudată era problema care o aveam cu un IR control, attiny2313 alimentat cu transformator-punte-7805, pentru controlul luminii din unele camere din casă, control făcut cu telecomanda televizorului aflat în camera respectivă. După 1-2 luni, uneori mai des alteori mai rar, nu era un tipar, o lua razna în sensul că lumina era comandată chiar dacă erau apăsate alte taste decât cele care trebuiau. De exemplu la cele de volum+/- care sunt și foarte folosite. O resetare ce o făceam oprind pentru scurt timp siguranța de pe lumini din casă, rezolva problema. Aveam implementat și watchdog dar degeaba. Apoi, pentru că butoanele telecomenzii erau stabilite și nu vroiam să le schimb, am programat attiny cu codul tastelor direct în flash, fără a mai folosi eeprom-ul, deci fără a mai avea în soft funcție de împerecheat întrerupătorul de pe perete cu un buton de telecomandă ir. Problemele se manifestau mai rar, dar tot se manifestau. Cum ziceam ,probabil erori de cod, deși să le ia naiba că nu văd care ar fi fost alea, sau carcalaci pe alimentare. Deci cumva tot la carcalaci ajung, pe creier sau în priză :D Link spre comentariu
Gilbert Sparios Postat Februarie 14, 2020 Autor Partajează Postat Februarie 14, 2020 (editat) Evident, producatorul s-a "spalat pe maini" cu cele 100.000 cicluri, posibil sa mearga mai mult. Din cate am inteles, mai conteaza si vechimea de functionare a microcontrolerului...in sensul ca se degradeaza fizic materialul ce alcatuie EEPROM-ul. La proiectul curent, am folosit adresa10 pentru a scrie locatia viitoare curenta. Practic citesc locatia, incrementez (11..256) apoi scriu valoarea ca index_eeprom, apoi o folosesc in cod. La fiecare resetare a uC, deci se schimba locatia. Iar eu sper ca se lungeste viata.. Nu i-am mai facut un CRC.. Editat Februarie 14, 2020 de Gilbert Sparios Link spre comentariu
Kreator Postat Februarie 14, 2020 Partajează Postat Februarie 14, 2020 (editat) Imi dau si eu cu parerea cum as face... La initializare citesc intreaga memorie pana cand gasesc valoare <> 0 si-i memorez adresa. Cand e nevoie sa scriu, sterg locatia memorata, generez o noua locatie cu functia RANDOM, o memorez, si scriu noua valoare iin locatia memorata. Editat Februarie 14, 2020 de Kreator Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum