Forum: Mikrocontroller und Digitale Elektronik Variablen beim Ausschalten im EEPROM sichern


von anfänger (Gast)


Lesenswert?

Hallo!

Also folgende Situation. Ich hab eine kleine Microcontrollerschaltung
mit nem Mega16 und halt ganz normal mit Spannungsregler drauf und so.
Ein bißchen Peripherie (MAX232), etc.

Wenn die Schaltung ausgeschaltet wird, sollen ein paar bestimmte
Variablen im EEPROM des Controllers gespeichert werden, damit diese
Werte beim Einschalten wieder zur Verfügung stehen. Gibt es da
irgendwie ne bestimmte Vorgehensweise, wie man das Problem löst? Also
ich will nichts mit Powerdown oder so machen, die Schaltung soll nach
dem Ausschalten wirklich kein bißchen Strom mehr ziehen.

Über ne Antwort würd ich mich sehr freuen. anfänger.

von anfänger (Gast)


Lesenswert?

achja, falls es von bedeutung ist:

ich progge in bascom und die stromversorgung ist ein 7,2-Akkupack.

wie man variablen im eeprom speichert weiß ich. der controller muss das
ja nur irgendwie vor dem ausschalten mitgeteilt kriegen. und die
funktion darf nicht umgehbar sein (ausser vielleicht durch abtrennen
des akkupacks).

von Hagen (Gast)


Lesenswert?

Dann wäre es am besten wenn der AVR sich selber ausschalten kann. Über
einen Taster wird dem AVR mitgeteilt das er sich ausschalten soll. Der
AVR sichert seine Variablen im EEPROM und über einen speziellen Portpin
deaktiviert er seine eigene Spannungsversorgung.

Gruß Hagen

von Peter D. (peda)


Lesenswert?

Wenn Du einen Spannungsregler hast, einfach mit der Spannung vor dem
Regler über einen Spannungsteiler auf den Komparator gehen und mit der
Band-Gap vergleichen.

Dann im Komparatorinterrupt die Daten sichern.

Der Kondensator hinter dem Regler muß groß genug sein, um noch für die
Sicherungszeit genügend Versorgungsspannung zu haben.


Ändern sich die Daten nur selten, z.B. nur bei Nutzereingabe, kann man
auch alle 10s testen, ob sich was geändert hat und dann die Daten
vorsorglich im EEPROM sichern.


Peter

von Hagen (Gast)


Lesenswert?

Hi Peter,

deine Methode hört sich gut an, nur frage ich mich ob dies nicht
"gefährlich" sein könnte. Immerhin, ins EEPROM zu schreiben ist keine
schnelle Operation der AVRs und zudem sollte die Spannungsversorgung
während des Schreibens stabil sein. Auch das gepollte zeitversetze
Schreiben hat so seine Schwachstellen. Erstens wird der EEPROM doch
ziemlich belastet wenn man sehr oftein/ausschaltet, und zweitens könnte
es ja vokommen das just in dem Moment ausgeschaltet wird wenn man ins
EEPROM schreibt bzw. geänderte Daten vorliegen aber eben nmoch nicht
gespeicherte Daten. Somit würde man mit großer Wahrscheinlichkeit eben
nicht immer die Einstellungen speichern.

Gruß Hagen

von Peter D. (peda)


Lesenswert?

@Hagen,

das Schreiben erfolgt doch nur, wenn sich was geändert hat, deshalb ja
"erst vergleichen und dann schreiben". Lesen kannst Du den EEPROM
unbegrenzt.


Peter

von Peter D. (peda)


Lesenswert?

Die 10s-Sperre soll nur verhindern, wärend man z.B. an einem Drehgeber
dreht oder den Wert mit Tasten hochzählt, daß bei jedem Ändern 100
Schreibzyklen verbraucht werden.


Peter

von Hagen (Gast)


Lesenswert?

Hi Peter,

also ich habe es mal so gemacht. Ein Regler mit Shutdown bzw. Enable
Input. Dieser ist Zb. beim LP3985 zb. L Aktiv, heist bei L schaltet der
Regler ab. Über einen PullDown wird dieser Eingang auf GND gezogen. Dann
ein Taster an V+ ebenfalls zum Eingang. Wird der Taster gedrückt
schaltet also der Regler sich ein. Am AVR benötig man eine Pin der als
Eingang im aktiviertem PullUp konfiguriert wird. Dieser Pin wird
ebenfalls mit dem Enable Eingang des Reglers verbunden. Wird also der
Taster gedrückt schaltet der Regler ein, versorgt den AVR mit Strom und
dieser zieht über seinen Pin der mit internem Pullup konfiguriert wurde
ebenfalls den Enable Eingang auf High. Somit kann der Taster
losgelassen werden und denoch bleibt der Regler eingeschaltet. Der
Input-Pin des AVR's wird natürlich durch den Pulldown am Enable
Eingang auf L stehen. Wird nun wiederum der Taster gedrückt so ändert
sich also dieser Input auf H Pegel und der AVR erkennt das man
abschalten will. Daraufhin wird der AVR seinen PIN so konfigurieren das
der interne PullUp deaktiviert wird und nach loslassen des Tasters liegt
am Enable Eingang des Reglers diesmal L Pegel an = ergo er schaltet ab.
Somit funktioniert der Taster wie ein Wechselschalter, einmal gedrückt
aktiviert er den Regler und der AVR über nimmt beim Loslassen die
weitere Aktivierung des Reglers. Ein zweitesmalgedrückt, der AVR
reagiert darauf und unterbricht seine Aktivierung des Reglers und nach
loslassen des Taster schaltet der Regler ab.

Gruß hagen

von Hagen (Gast)


Lesenswert?

Hi Peter,

das ist mir alles schon klar und deswegen wies ich ja auch darauf hin.
Die 10 Sekunden sollen verhindern das der EEPROM sofort aktualisiert
wird. Nur was passiert wenn man innerhalb dieser 10 Sekunden die
Spannungsversorgung abschaltet ? Dann werden die aktuellen
Einstellungen nicht mehr gespeichert und gehen verloren.

Das der EEPROM nur aktualisiert weren soll wenn sich was geändert hat
ist wohl selbstverständlich. Aber auch das hat seine Probleme. Bei sich
sehr oft ändernden Konfigurationen aber nur sehr wenigen Ein/Asuschalten
wird der EEPROM denoch stark belastet. Denn nun wird ja jede Änderung
auch im EEPROM vermerkt. Speichert man aber definiert die aktuelle
Konfiguration nur beim Abschalten so wird der EEPROM nur soviel
belastet wie man die Schaltung Ein/Ausschaltet, und nicht wie oft man
die Konfiguration verändert.

Ich hatte dieses Problem mit einem Kalender. Dieser sollte sich sehr
wohl die Einstellungen merken die sich im laufenden Betrieb häufiger
änderten als die Häufigkeit des Ein/Ausschaltens.

Aber im Grunde wollte ich von dir nur bestätigt wissen das deine
automatische methode mit dem AIN auch sicher funktioieren kann. Ich
hatte das nämlich auch probiert und musste feststellen das dies nur mit
Bufferung durch Goldcaps so einigermaßen funktionierte. (lag aber wohl
mehr an meiner Unfähigkeit ;)

Gruß Hagen

von anfänger (Gast)


Lesenswert?

wow. viele antworten.

hagen, deine lösung mit dem speziellen spannungsregler ist ganz genau
das, was ich suche! vielen, vielen dank. du hast mir sehr
weitergeholfen!

von anfänger (Gast)


Lesenswert?

hm...ich seh nur grad, dass der LP3985 nur 150mA abkann. kennt jemand so
einen ähnlichen spannungsregler, der mindestens 1A liefern kann?

mfg, anfänger

von Peter D. (peda)


Lesenswert?

Ich habe solche Sachen bisher nur mit dem AT89C2051 gemacht und da der
keinen EEPROM intern hat, habe ich einen 24C64 rangeschaltet.

Und die haben den Vorteil, daß man gleich 64 Byte in einem Rutsch
(10ms) sichern kann und bis runter zu 2,7V funktionieren.

Da hat also ein 220µF/6,3V voll gereicht, die Datensicherung zu
garantieren.
Der AT89C2051 hat die Daten per I2C an den 24C64 geschickt und ist dann
selbst in Power-Down gegangen wärend der 24C64 in aller Ruhe seinen
Schreibzyklus beendet hat.

Warum die AVRs keinen EEPROM-Pagemodus erlauben, verstehe ich nicht, im
Flash geht es ja.


Peter

von anfänger (Gast)


Lesenswert?

nochma @hagen:

was meinst du mit V+ ? meinst du damit die ungeregelte Spannung, die am
eingang des spannungsreglers anliegt? denn am ausgang des
spannungsregler hat man ja keine spannung zur verfügung wenn der regler
disabled ist, oder?

von Hagen (Gast)


Lesenswert?

Korrekt, lade dir doch mal das Datenblatt.
Ansonsten suchste dir einen regler mit Shutdown oder Enable Eingang.
der Unterschied besteht im Grunde nur in der Logik ob man mit L oder
eben H Pegel den Regler ausschaltet. Desweiteren musste eben nur noch
daauf aufpassen das der Enable/ShutDown Eingang die entsprechenden
Spannungen verträgt. Beim LP3985 ist dies auch der Fall.
Im WEB sollte man aber auch Schaltungen finden die durch externe
Transistoren/MOSFETs jeden beliebigen Regler ein/ausschalten können.

Gruß Hagen

von anfänger (Gast)


Lesenswert?

ok, ich glaub ich hab da jetzt was passendes gefunden. und zwar den
hier: http://www.micrel.com/_PDF/mic29310.pdf der hat auch einen
enable-eingang, kann aber bis zu 3A ab. ausserdem verbraucht er
ausgeschaltet so gut wie garnix (is mir sehr wichtig).

nur eins versteh ich noch nicht. wenn man den taster drückt, dann
kriegt der microcontroller doch am eingangspin die volle ungeregelte
spannung ab, oder? würde der da nicht bei kaputt gehen? vielleicht
könntest du das mal kurz skizzieren? das wär echt super nett.

mfg, anfänger.

von Winfried (Gast)


Lesenswert?

Was gut gehen sollte: Vor dem Regler einen Elko, davor in Reihe eine
Diode. Wenn die Spannung abgeschaltet wird, geht die Spannung vor der
Diode sofort auf 0V, insofern man da noch einen Widerstand gegen Masse
drin hat (Pull-Down). Jetzt hast du solange Zeit, bis der Elko vor dem
Regler soweit abfällt, dass der Regler nicht mehr ausregeln kann. Und
selbst dann geht es noch einige Zeit weiter, weil ja ein AVR auch noch
bei unterhalb von 5 V schreiben kann, insofern du 5 V benutzt.

Mit tau = R*C kann man das schnell überschläggig berechnen. Da siehst
du dann, dass du bei 100mA Ausgangsstrom und 1000uF Kondensator in
Bereiche von 10-100ms überbrücken kannst.

von Hagen (Gast)


Lesenswert?

Schau mal hier auf Seite 2
http://www.atmel.com/dyn/resources/prod_documents/doc2508.pdf

was dort steht wie die Inputs des AVRs abgesichert sind. Du musst also
nur den Vorwiderstand ordentlich dimensionieren.

Gruß hagen

von anfänger (Gast)


Angehängte Dateien:

Lesenswert?

ok, also dann müsste die sache so stimmen, oder? also, kondensatoren und
so hab ich jetzt natürlich weggelassen...

siehe anhang.

von Hagen (Gast)


Lesenswert?

Für den 10K Pulldown hatte ich einen 100k und für den 1M nur 500k. Der
interne Pullup des AVRs liegt wenn ich mich nicht täusche bei 180-200k.
Aber, das hängt natürlich von der Spannung ab. Ich hatte damals 5V
geregelt, mit ca. 8-12V Inputspannung.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Du könntest aber auch eine Schutzdiode vor den PIN setzen, allerdings
habe ich das nicht praktisch getestet.

Gruß hagen

von Thomas O. (Gast)


Lesenswert?

Hallo,

mir fällt auch noch ne einfache Möglichkeit ein (die ich gerade
interessehalber getestet habe).

Zusätzlich zur Standartbeschaltung(R1=10kOhm und C1=22pF) am Resetpin
einen Elko und einen Entladewiederstand(C2=1000µF und R2=22kOhm)
verwenden um eine gewisse Nachlaufzeit zu haben.

Wenn man jetzt den Doppelschalter umstellt wird der Resetpin weiter
über den Elko gespeist und zusätlich über R2 entladen dadruch geht der
AVR nach ca. 11 Sek aus (Habe ich gerad mit ATtiny26 probiert) Durch
die Überwachung der Spannung am Schalter über einen normalen Pin kann
man dann den AVR mitteilen er soll jetzt langsam die Daten ins EEPROM
speichern, da sich der AVR demnächst auschalten wird.

Vorteil ist hier das man sich nicht um den Verbrauch kümmern muss bei
mir leuchten z.b. gerade einige LEDs weil ein Drucksensor dranhängt.
Wenn man z.b. einen Elko zw. VCC und Masse hat muss dieser sehr groß
sein und außerdem sehr wenig Verbraucher am AVR hängen, gerade wenn man
wie ich lieber sourcst statt sinkt. Hier langt ein 1000µF Elko
vollkommen aus. Man könnte halt hier noch etwas varieren z.b. kleinerer
Elko und dafür ein Poti mit höherem Wiederstand, dann kann man es schön
einstellen wie lange er anbleiben soll.

von Thomas O. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

mist Zeichnung vergessen.

von anfänger (Gast)


Lesenswert?

ok, hagen. so werd ichs machen. danke nochmal!

auch danke an die anderen, für die vielen konstruktiven beiträge :)

schön sonntag noch, anfänger.

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.