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
> 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.
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
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 ?
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.
Schalte ich den internen PullUp nicht ein, scheint es bis jetzt zu funktionieren.
@ 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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.