Zálohování stavu proměnné do E2PROM

Zdravím.
Mám tu takový poněkud problém, který nevím, jak vyřešit. Mám proměnou, jenž obsahuje ujetou vzdálenost vozidla. A jde mi o to, že když odpojím napájení, měla by se tato hodnota zachovat, a při příštím zapnutí zařízení opět vyvolat, a pokračovat v inkrementaci.

Jedno z řešení mě napadlo, a to po každé inkrementaci o jeden krok hodnotu prostě uložit hned do E2PROM. Paměť si myslím by ale dostalo poněkud hodně na prdel, a zanedlouho by odešla, jelikož by jí to přepisovalo i mnohokrát za vteřinu.

Další řešení, které se nabízelo, je ukládat hodnotu vždy za určitou časovou jednotku, přičemž by se prostě o určité kusy přišlo tím, že by se nestihly uložit. To by ušetřilo trochu tu e2prom, ale nepřipadá mi to jako čisté řešení.

Jak by se tento úkol měl vyřešit asi nejlépe?
Díky moc,
Honza

pouzit pcf8583 ta sa da zopojit ako zalohovana eeprom… res bude to ram s pomocnym kondenzatorom ktora uchova informaciu caa 24h alebo dat bateriu…

Další technicky “čisté” řešení(pokud nemůže být mcu napájen trvale a při vypnutém stroji spát) by mohlo být detekce zastavení motoru a zpožděné odpojení napájení mcu po zápisu do eeprom (pokud bys nespoléhal pouze na detekci a velký filtrační kondik). Bude to asi i levnější (tranzistor, dioda a pár odporů + přívod stáleho napětí od baterie).

Dobře, tak upřesním, když to nebylo tak zřejmé. Zajímá mě softwarové řešení. Do hardwaru se zasahovat nebude. Zálohovanou SRAM si umím vymyslet taky.
Nějaké nápady, jak na to využít vnitřní integrovanou E2PROM?

V tom případě bych asi zapisoval vždy, když klesne rychlost na nulu, nebo pod určitou mez a pak častěji (když má program k dispozici kilometry, asi je schopen rychlost detekovat). Snad nebude nikdo vypínat klíček za jízdy (aby si vyřadil posilovače).
Aby vydržela eeprom co nejdéle, mohl by ses v ní s hodnotou posouvat. Např. provést 255 zápisů u jedné adresy, pak poposkočit a tak dále. Se zapisovanými daty by sis musel uložit i počet jejich přepsání. Začátek dat bys pak našel jako první byte, který nemá hodnotu např. 0xFF.
Taky bych vynechal adresu 0. Ta je ohrožena při startu mcu náhodným zápisem.

Napajaj mcu cez diodu a s dobrym kondikom tak aby dokazal napajat mcu aspon cca 50-100ms. Pri dobrom navrhu bude stacit 10-100uF.
Detekuj pokles napatia (napr. cez interny komparator) pred diodou a v tom pripade zapis udaj do EEPROM. 50-100ms je viac ako dost i pri detekcii v hlavnej slucke. Piityyho navrh je tiez dobry.

piityy: Taky bych vynechal adresu 0. Ta je ohrožena při startu mcu náhodným zápisem.
Proč? Nultou pozici teď normálně používám, a zatím jsme problém nevysledoval.

martin: To už mě napadlo taky, mám to tak už naprogramované, a chodí to bezvadně. Shodou okolností mohu měřit napájecí napětí před stabilizátorem na 5V, takže mi to dává dokonce asi sekundu času na uložení hodnoty. Takže to už chodí.

Bylo to v nějaký poznámce od atmelu. Šlo o to, že během resetu se může stát ledasco a vzhledem k tomu, že reset nastavuje adresu 0, tak má tato nejvyšší pravděpodobnost výskytu náhodného přístupu.

Nepsal jsi, že se nesmí modifikovat HW? (detekce napájení) Nebo to bylo součástí původního návrhu? :slight_smile:

Ano, měření napětí zdroje je v původním návrhu.
Součástí původního návrhu je spousta věcí, ovšem některé ne úplně domáknuté. Jedná se o tohle, už jsem to tu myslim ukazoval: jan16.czela.net/qmobil/vke7/IMG_7550s.jpg

V úterý je soutěž, má to být hotové, a teprve před chvílí, jsem snad už definitivně rozběhal SW emulovanou SPI na úctyhodných 220bps.

:arrow_right: administrator: přiloženy externí soubory