Mám dojem, že limit 100 000 zápisů má každý bajt samostatně, pokud je samostatně přepsatelný. Pokud by se zapisovalo třeba 20 B a EEPROM měla 2 KB, trvanlivost vzroste 100x při postupném využívání celé kapacity. Jenom by v rámci těch 20 B muselo být počítadlo zápisů (snad do 65535) a pro celou EEPROM by někde musel být ukazovatel na aktuální banku.
a pro celou EEPROM by někde musel být ukazovatel na aktuální banku.
Uložený v nějaké EEPROM, která by měla ukazatel uložený v nějaké EEPROM...
Lepší je nějaký chytřejší algoritmus nepotřebující zvláštní ukazatel. Například jeden byte v bloku říká, jestli je obsazený. Před zápisem bloku se následující blok nastaví jako prázdný. Po zapnutí se najde první prázdný blok, blok před ním je poslední zapsaný a pokračuje se dál. V případě, že paměť umožňuje oddělené mazání a zápis, tak se životnost zvětší počet_bloků-krát, pokud je zápis kombinovaný s mazáním, tak je to zvětšení poloviční.
Zápis aktivovaný výpadkem napájení musí být spouštěný poklesem napětí před stabilizátorem. Spouštět zápis když už klesá napětí samotnému procesoru je přijít s křížkem po funuse. Procesor (AVR) by měl mít zapnutý BOD, pokud používá vnitřní EEPROM. A samozřejmě by se ten zápis měl spustit vnějším přerušením s největší prioritou.
pokud je pristroj napajen ze site, sleduj sitove napeti.
pokud neprijde pulvlna, vygeneruj preruseni a zapis.
pouzivam tenhle system leta a pracuje spolehlive.
Zaslal: po červenec 05 2010, 10:20 Předmět: Re: Atmel, uložení do eeprom při vypnutí
cely problem se resi drive nez dojde k nahodnemu vypnuti.....ukladam hned po namereni do EERAM ..EXTERNI napriklad 64kb hodnot dokola ve smycce ....po vypadku tam vzdy zustanou posledni data do poctu 64kb .....bude ti to stacit jarda
Zaslal: st červenec 07 2010, 14:32 Předmět: A co takto???
Do obvodu pridat superkapacitor alebo malu Li-on bateriu. po pandutí napájania ( treba merat este pred vyhladzovacim kondenzatorom ) bezi CPU na bateriu. Ulozia sa data do EEPROM, CPU sa prevedie do SLEEPU. CPU aj EEPROM ostane stale pod napatim. takze po obnoveni napajania program moze pokracovat tam kde skoncil a pokial tych dat nieje vela ani netreba pouzivat EEPROM. Zaspaty procesir pri dobre navrhnutom zapojeni zere len jednotky uA co superkapacitor alebo Lion clanok utiahne hoooodne dlho... _________________ <div>Bezpečnost pri práci je dúležitejší než práca samotná</div><br />
To ukládání jsem zkoušel udělat ve smyčce vždy na jinou adresu (při každém spuštění inkrementace adresy a pak už ukládání vždy na tuto adresu každých 10s) ale nefunguje to spolehlivě, někdy dojde ke ztrátě dat. Je možné že se procesor vypne například zrovna v průběhu ukládání dat (teoreticky)??
Nejlepší by tam bylo dát asi malou baterku která by se po uložení odpojila třeba tranzistorem. Jenže ať přemýšlím jak chci nenapadá mě jak zkombinovat 5V ze stabilizátoru a 3,3V z baterie Oddělovat to diodou je blbost... nenapadá někoho jak jinak vyřešit přepnutí na baterii? Přerušovací vstup už žádný není volný
zalohovani je jedna moznost ale dobijeci obvod je nutny ....dle meho nazoru je vhodne vsechny operace vcetne zalohovani resit tedy i ukladat do EEpromky ta po odpojeni napajeni vse uchovava a po zapnuti pri vhodnem programu vse pokracuje dal.....plus pridat vetsi kapacitor umoznujici dobehnuti operaci po vypadku napajeni by bylo vyhodou ....volny vstup potom snima prave onen okamzity vypadek napajeni
myslím to takto... procesor měří napětí napájení, při výpadku se uloží hodnoty do eeprom a procesor se vypne (třeba přes tranzistor odpojí zálohovací baterku), přičemž běh od výpadku napětí do vypnutí zajišťuje tak baterka... otázka je když dám například 80mAh NiMH baterku jestli je nutné řešit její dobíjení. Z baterie by běžel jen procesor po čas uložení všech hodnot. Takže za normálních okolností by ta baterka byla nesmrtelná, ale za jak dlouho se vybije sama od sebe? Nebo jakou asi mají ty baterie životnost?
Je blbost, dávat tam dobíjecí baterku a nedobíjet ji, to je pak lepší tam dát primární článek, ten vydrží klidně 10 let, NiMH se za rok vybije samovybíjením. Druhá věc je, když bude mít zálohovací baterka třeba 3,6V, aby byl procesor schopný na takové napětí běžet a bezpečně zapisovat do EEPROM.
Ale mělo by to jít i bez zálohování. Pokud při cyklickém záznamu každých 10s má každý zapsaný blok dat svůj příznak platnosti, tak za předpokladu, že se tento příznak nastaví (zapíše) až jako poslední, nemůže dojít k poškození záznamu. Buď se příznak stihne nastavit a pak jsou i data zapsaná správně, nebo se nestihne nastavit a pak se tento blok ignoruje a vezme se jako poslední platný předchozí blok, zapsaný před 10s. V nejhorším se tedy ztratí data z posledních 10s, což zase nemusí být tak tragické.
Staci dat dostatocne velky kondenzator oddeleny diodou od vetvy pred stabilizator (LDO)+ nejaky supervizor ,co generuje power fail + reset.Power fail dat na IRQ a mas vystarane.Treba zratat cas ,kolko bude trvat zapis do eeprom ,alebo zmerat cas od odpojenia napatia powerfail <->reset. _________________ Už druhý krát strihám a furt je to krátke
Naposledy upravil Burajko dne út červenec 20 2010, 17:48, celkově upraveno 1 krát.
andreo používám standardní knihovny eeprom.h myslíš že je to v nich vyřešeno? já se v nich moc nevyznám...
nevím proč se mi nedařilo udělat to s tou proměnnou adresou když by se při každém spuštění změnila adresa ukládání a perioda ukládání by byla těch 10s tak by to asi stačilo... životnost by byla dostatečná a baterie by nebyla třeba. Ale tak na 50% se mi stávalo, že po spuštění se mi načetly z paměti samé nulové hodnoty nebo maximální... kdyby to bylo pokaždé tak asi mám zmatek v adresách pro uložení, ale někdy to načetlo správně a jindy ne
napsáno jsem to měl takto:
kód:
int main()
{
if (eeprom_read_byte((uint8_t*)E2END)!='A')
{
for(int i=0;i<=1023;i++)
{
eeprom_write_byte((uint8_t*)i,0);
}
eeprom_write_word((uint16_t*)12,611); // konstanta pro výpočty
eeprom_write_byte((uint8_t*)E2END,'A'); // kontrolní byte na poslední místě v paměti
}
adresa_ulozeni=eeprom_read_word((uint16_t*)10);
prutok=eeprom_read_word((uint16_t*)12);
stometru = eeprom_read_word((uint16_t*)(adresa_ulozeni+14));
eeprom_write_word((uint16_t*)(adresa_ulozeni+14),0); // vynulování použité buňky
Časy uváděny v GMT + 1 hodina Jdi na stránku Předchozí1, 2
Strana 2 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímájí záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žáden zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva, kontaktujte administrátora a on sjedná nápravu.