Forum: Mikrocontroller und Digitale Elektronik EEPROM fail safe


von arser (Gast)


Lesenswert?

Hallo,

mit dieser Schaltung probiere ich schon seit einer Woche Daten ins 
EEPROM zu schreiben:
http://www.mikrocontroller.net/articles/Speicher#EEPROM

An N_POWER_FAIL ist Int.Pin des Atmega8.
Den Kondensator habe ich schon an 5 Volt und an 12V vor dem LM7805 
gehabt.
Der Atmega Betreibt 3 7-Segment Anzeigen, 2 LEDs und 3 Transistoren.
Mit Werten von 100µF bis 3300µF habe ich es schon probiert.
Sogar ein Goldcap mit 47000µF.

Geht der INT0-Pin auf LOW, werden in der ISR Daten ins EEPROM 
geschrieben, danach folgt while(1).
Die Schaltung funktioniert bei mir sporadisch, meistens aber nicht. 
Falls ich den N_POWER_FAIL abziehe, natürlich immer.

Mit dem 47000µF Kondensator geht die Spannung am Atmega schlagartig auf 
ca. 2.5V, wonach sie sich dann sehr langsam abbaut.

Nache ich etwas falsch?
Sollte ich besser den Atmega8L verwenden?

Vielen Dank
Artur

von Wusel D. (stefanfrings_de)


Lesenswert?

> Mit dem 47000µF Kondensator geht die Spannung am Atmega
> schlagartig auf ca. 2.5V.

Dann hat der Kondensator entweder einen zu hohen Innenwiderstand oder zu 
wenig Kapzität. Bei Gold-Caps ist der Innenwiderstand sehr hoch.

> Die Schaltung funktioniert bei mir sporadisch, meistens aber nicht.

Was genau funktioniert nicht?

> Der Atmega Betreibt 3 7-Segment Anzeigen, 2 LEDs

Also reichlich Stromaufnahme. Du könntest die Leuchten über einen 
separaten Spannungsregler vorsorgen, damit der Hilfs-Kondensator für die 
verlängerte Versorgung des ATmega länger genug Spannung liefert.

Schaltest Du die Leuchten wenigstens sofort aus, wenn der Interrupt 
kommt? Das wäre angemessen, wobei das auch schon zu spät sein könnte - 
je nach Stromaufnahme und Kapazität.

von arser (Gast)


Lesenswert?

Nicht funktionieren heisst der Interrupt wird nicht ausgelöst, Werte 
werden nicht geshcrieben.
Ich teste das in dem ich sie nach dem Hochlauf auf die Anzeige bringe.

Zum Test habe ich vor der Spannungsabschaltung die Anzeigen und die LEDs 
abgeklemmt. Vor dem einschalten wieder drauf. Stromaufnahme sollte also 
minimal sein

von Purzel H. (hacky)


Lesenswert?

Der Kondensator muss natuerlich auf der hoechsten Spannung sein. Den 
powerfail zapft man vorher ab, zb bevor man mit ueber eine Diode auf den 
Kondensator geht, sodass man sofort mitkriegt, wenn der Saft weg ist. 
Dann muss man natuerlich sofort das Geleuchte abschalten. Und hat man 
beliebig Zeit. Wieviele Bytes sollten dann noch geschrieben werden ?

von arser (Gast)


Lesenswert?

Die Funktion leuchtet mir denke ich ein. Ist auch so wie in der oben 
genannten Schaltung, also Signal vor der Diode abgegriffen.

Ich schreibe 7 Byte.

von arser (Gast)


Lesenswert?

Schalte ich den internen PullUp nicht ein, scheint es bis jetzt zu 
funktionieren.

von Falk B. (falk)


Lesenswert?

@ arser (Gast)

>Schalte ich den internen PullUp nicht ein, scheint es bis jetzt zu
>funktionieren.

Ja logisch! Der interne Pull-Up macht einen Spannungsteiler. Wenn VIN = 
0 und VCC = 5V, was kommt dann am Pin an?

Trotz der while(1) Schleife nach dem Speichern der Daten sollte man den 
Brown Out Detector im Prozessor per Fuses aktivieren, denn sonst kann es 
passieren, dass die CPU bei  knapper Unterspannung Unsinn macht und ggf. 
Schreibzugriffe auf das EEPROM ausführt.

von Wusel D. (stefanfrings_de)


Lesenswert?

Sogar Lesezugriffe bei ungeeigneter Spannungsversorgung können zu 
Datenverlust im EEPROM führen. Ich musste mich damit mal rumschlagen, 
leider bei einer Schaltung, die keinen Brown-Out Detektor hatte.

von Charly B. (charly)


Lesenswert?

Stefan Frings schrieb:
> Sogar Lesezugriffe bei ungeeigneter Spannungsversorgung können zu
> Datenverlust im EEPROM führen.

QUATSCH !!! entferne deine 'schreibroutine' aus dem Programm und
es wird nichts mehr schieflaufen, lesezugriffe aenden NIE den
Inhalt einer EEpromzelle, dein Problem haegt daran das bei
deaktiviertem BrownOut er manchmal auch in dem Teil des Programms
landet wo ins EEprom geschrieben wird

vlG
Charly

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.