PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bei Spannungsverlust in Eeprom speichern möglich?



Accenter
07.06.2013, 17:26
Habe derzeit ein Projekt mit einem Mega128, bei dem ich es gerne schaffen würde, dass einige Variablen bei einem Spannungsausfall automatisch gespeichert werden.

Brauche ich da externe Hardware an einem Interrupt Eingang am Atmel oder gibts da eine schon vorhandene Lösung, die ich im Programm auslösen kann bei einem Spannungseinbruch? Ich programmiere in Bascom falls das etwas zur Sache tut :-)

PICture
07.06.2013, 17:40
Hallo!

Speicherung in EEPROM eines Microcontrollers (µC) ist nur bei vorhandener Versorgungsspannung (VCC) des µC's möglich. Deshalb in der Praxis wird der µC einen Puffer haben (meistens Kondensator, z.B. GoldCap mit von übriger Hardware trennender Diode), der ausreichend für Speicherung im EEPROM ist. Die zugeführte VCC muss selbstverständlig ständig überwacht werden um rechtzeitig die Speicherung zu starten. ;)

seite5
07.06.2013, 18:46
Hi,
Nehme an, dass in Deiner Schaltung einige C's VCC blocken, also bricht die Spannung nicht von "jetzt auf sofort" zusammen. Wenn die Zahl der Variablen
nicht riesig ist, sollte das auf jeden Fall gehen.
Einfacher ist natürlich, die Variablen gleich bei ihrer Änderung auch im EEPROM abzulegen, oder wenn diese nicht allzuoft verändert werden, gleich als
EEPROM-Variable zu verwalten.
Das Brown-Out-Flag des Mega128 kann man hier glaub ich nicht verwenden, das kann mann wohl erst nach Neustart auswerten.
Evtl. gehts mit dem Analog-Komperator-Interrupt, an den AC-Eingang einen Spannungsteiler, Teilerspannung auf etwas unter die 5V (probieren) und
in der ISR die Variablen sichern.
mfg
Achim

Thalhammer
07.06.2013, 19:21
Selbst wenn er ein paar 100n um den UC verteilt hat werden die nicht reichen. Goldcap oder großer Elko sind hier der richtige Weg ( wie Picture richtig geschrieben hat.)

White_Fox
07.06.2013, 20:43
Genau...definitiv ein Goldcap mit Diode, dazu ein Ladewiderstand bekommt den restlichen Bauteilen gut.

Und dann eben per ADC die Spannung am Kondensator überwachen...

oberallgeier
07.06.2013, 22:48
... dass einige Variablen bei einem Spannungsausfall automatisch gespeichert werden ...Es folgt eine Meinung, kein Erfahrungsbericht.

Versuch doch mal BOD zu nutzen. Ich würde dabei das BOD-Flag so hoch setzen dass es a) nicht zu früh anspricht, und b) noch so ein Fitzelchen Spannung da ist, um die Daten zu sichern. Suche im Datenblatt nach den entsprechenden Stellen und z.B. nach "BODLEVEL Fuse Coding". Dann gäbs noch ein "Preventing EEPROM Corruption" usf.

Vorgehen: beim Ansprechen des BOD nachsehen, ob der Reset vom Spannungseinbruch kommt - wenn ja, dann Daten ins EEPROM sichern und den controller auf Sleep legen. Natürlich ist damit keine hundertprozentige Sicherheit gegeben, ein bisschen Risiko bleibt bestehen, weil ja nicht voraussehbar ist, wie schnell der Saft wegbricht. Aber die paar Mikrosekunden zum erkennen ob ein BOD-Fall vorliegt, Daten wegschreiben und ein Flag setzten, dass die Daten weggeschrieben wurden, sollten eigentlich in fast allen Fällen noch bleiben.

MagicWSmoke
08.06.2013, 06:34
Vorgehen: beim Ansprechen des BOD nachsehen, ob der Reset vom Spannungseinbruch kommt - ..., sollten eigentlich in fast allen Fällen noch bleiben.
Hast Du da nicht etwas übersehen? Im Gegensatz zu einem kurzzeitigen Spannungseinbruch, welcher durchaus über's BORF festgestellt werden kann, findet im hier beschriebenen Fall ein kontinuierliches Absinken der Betriebsspannung statt. Sobald der BOD einmal ausgelöst hat, kommt der uC nicht mehr aus dem BO-Reset raus, was ja auch sinnvoll ist, um unkontrolliertes Verhalten zu vermeiden. D.h. Du hast in diesem Fall keine Möglichkeit per Code irgendwas zu sichern, da kein Code mehr ausgeführt werden kann.

seite5
08.06.2013, 07:34
Hi,
Zitat: Selbst wenn er ein paar 100n um den UC verteilt hat werden die nicht reichen. Goldcap oder großer Elko sind hier der richtige Weg
... ist in der Praxis mehrfach widerlegt. Es sind nicht nur die paar 100n C's um den µC, da sind noch Elkos im Netzteil, usw, das Abklingen der
Spannung bis auf Werte bei denen man definitiv nicht mehr den EEPROM handeln sollte, kann mehrere 10ms dauern, und das reicht
alllemal aus, um ein paar Variablen abzulegen.
BOD nutzen hatte ich auch erwogen (s.o.) scheidet aber wie gesagt beim MEGA128 aus (Es gibt Controller bei den man BOD auf einen INT
umleiten kann, da ginge es evtl.)
mfg
Achim

MagicWSmoke
08.06.2013, 07:49
Es sind nicht nur die paar 100n C's um den µC, da sind noch Elkos im Netzteil, usw, das Abklingen der
Spannung bis auf Werte bei denen man definitiv nicht mehr den EEPROM handeln sollte, kann mehrere 10ms dauern, und das reicht
alllemal aus, um ein paar Variablen abzulegen.
Es kommt darauf an, welche Verbraucher die noch vorhandene Energie in den Kondensatoren leer saugen. Wenn nur der µC angeschlossen ist und sonst nichts, mag's ausreichen sich auf die Restenergie in den vorhandenen Kondensatoren zu verlassen. Sollten hingegen zusätzliche Verbraucher dranhängen, so ist das Energie-mäßige Entkoppeln des µC über einen eigenen Versorgungskondensator und möglichst Schottky-Diode der richtige Weg. Da gibt's auch nicht viel zu diskutieren drüber, besonders da der Aufwand geringfügig ist.