mikrocontroller.net

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


Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Winfried (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal hier auf Seite 2
http://www.atmel.com/dyn/resources/prod_documents/...

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

Gruß hagen

Autor: anfänger (Gast)
Datum:
Angehängte Dateien:
  • preview image for sr.JPG
    sr.JPG
    7,67 KB, 243 Downloads

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

siehe anhang.

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen (Gast)
Datum:

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

Gruß hagen

Autor: Thomas O. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas O. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

mist Zeichnung vergessen.

Autor: anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.