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.
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).
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
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
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
@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
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
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
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
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!
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
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
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?
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
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.
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.
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
ok, also dann müsste die sache so stimmen, oder? also, kondensatoren und so hab ich jetzt natürlich weggelassen... siehe anhang.
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
Du könntest aber auch eine Schutzdiode vor den PIN setzen, allerdings habe ich das nicht praktisch getestet. Gruß hagen
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.