V několika svých aplikacích používám vnitřní EEPROM pro zápis a čtení hodnot který občas za provozu změním a pří dalším zapnutí samozřejmě chci abych načetl tu poslední změněnou hodnotu, z cca 95% to tak je, ale někdy se stane, že se z EEPROM načte nesmysl. Program píšu v CodeVisionAVR v.2.03.4 a zápis i čtení dělám podle nápovědy.
Př.:
eeprom unsigned int promenna;
bit znema;
.
.
.
.
void ZapisEEPROM(void)
{
promenna=x;
}
if (zmena==1) //zapis se provadi jen nekdy
ZapisEEPROM();
.
.
.
.
}
}
Podle mě dochází k přepsání EEPROM při zapnutí nebo vypnutí.
Jestli někdo používá EEPROM k podobným účelům a funguje to spolehlivě,uvítal bych radu nebo kousek zdrojáku.
P.S.: Stává se mi to i u jedný aplikace na ATtiny2313.
administrator: přejmenováno z "ATmega8-zápis a čtení interní EEPROM"
Tu poznamku v dadtasite ohladom nizkeho napatia mas precitanu a osetrenu… ako mas osetrene vypnutie ? je zaisteen ze sa dokonci zapis pred vypnutim zariadenia ?
Poznamku ohledne nizkeho napajeni prectenou nemam(podivam se),ale v mem pripade to asi neni problem,protoze napajeni mam vzdy 5V
(stabilizator 7805).Vypnuti osetreny nemam.Zapis je provaden tlacitkem po zmene promenne a to ne pri kazdem zapnuti(provoze),da se rict jen vyjimecne.Ale nacteni nesmyslu se vyskytuje nahodne,ikdyz zapis nebyl proveden.
Atmel doporučuje nepoužívat v Eeprom adresu 0, která je nejvíc ohrožená přepsáním.
Také se doporučuje mít ve fuses zapnutý BOD, který při klesání napětí např po vypnutí, zablokuje procesor dřív než napětí klesne na hodnotu při které by se mohl chovat divně.
Narazil jsem nyní na podobný problém s přepisem EEPROM. Moje aplikace je s ATMEGOU 16.
Občas se mi také přepíše EEPROM a nevím co s tím. Určitě to ale není při zapnutí nebo vypnutí napájení, a poklesem nebo špatnou filtrací napájení to taky nebude (7805, elektrolyt a 100n-několik, 10n a 1n na napájení). Netušíte v čem je problém ?