Forum: Mikrocontroller und Digitale Elektronik Atmega32 + Batterie als Puffer


von Sergej M. (Gast)


Lesenswert?

Hallo,
ich habe eine alte Atmega32 Schaltung vor Jahren mal gebaut. Nun möchte 
ich, dass der Mikrocontroller seinen jetzigen Betriebszustand beibehält, 
wenn ich ihn von der Versorgungsspannung trenne.

Also gespeißt wird der Atmega32 mit 5V. Wenn die Versorgungsspannung weg 
ist, soll eine 3V-Batterie über Schotky-Dioden einspringen.

Im Datenblatt finde ich aber leider keine Angaben darüber, was der AT32 
macht, wenn eine zu niedrige Versorgungsspannung anliegt.
Am liebsten hätte ich, dass er in einen Energiesparmodus springt, wo nur 
der RAM erhalten bleibt. Macht er das denn auch?
Im Datenblatt steht nur, wie ich ihn absichtlich bei anliegender 
Versorgungsspannung in einen Sparmodus schicken kann. (siehe: Power 
Management and Sleep Modes)

Muss ich nun bestimmte Register setzen, damit er automatisch bei 
plötzlichen Absinken der Versorgungsspannung in einen Energiesparmodus 
springt?

Wichtig für mich auch der zugehörige Stromverbrauch dabei.

Danke Schön!

von Cyblord -. (cyblord)


Lesenswert?

Sergej M. schrieb:
> Im Datenblatt finde ich aber leider keine Angaben darüber, was der AT32
> macht, wenn eine zu niedrige Versorgungsspannung anliegt.
> Am liebsten hätte ich, dass er in einen Energiesparmodus springt, wo nur
> der RAM erhalten bleibt. Macht er das denn auch?

Ja klar, denn der Atmega ist sowas wie "wünsch dir was". Wenn du dem 
eine zu niedrige Spannung anlegst dann kocht er auch Kaffee und geht für 
dich Arbeiten.... Manno mann. Denkst du ein solches Verhalten wäre im 
Datenblatt nicht beschrieben?

Die Reaktion ist undefiniert. Es kann sein es passiert gar nix, oder er 
verliert unkontrolliert irgendwelche Daten im Ram. Oder er bleibt 
stehen.
Grundsätzlich hängt die Mindestspannung auch vom Takt ab. Takte so 
niedrig wie möglich, dann ist die Chance höher dass er bei niedriger 
Spannung noch geht. Garantieren kann dir das niemand und es ist pfusch. 
Es gibt genug neue AVRs die bis 2,7 oder sogar 1,8 Volt noch 
funktionieren. Nimm sowas dann hast du keine Probleme. Auch den Mega32 
gibts in der L-Variante dann geht er bis 2,7 Volt. Also kauf doch 
einfach so einen und übertrage das Programm. Ist die einfachste Lösung.

> Muss ich nun bestimmte Register setzen, damit er automatisch bei
> plötzlichen Absinken der Versorgungsspannung in einen Energiesparmodus
> springt?
Nein das geht nicht. Energiesparmodus heißt dass der Stromverbrauch 
reduziert wird, nicht dass du die Spannung absenken kannst.


> Wichtig für mich auch der zugehörige Stromverbrauch dabei.
Der Stromverbrauch in den verschiedenen Sleep-Modes steht im Datenblatt.

gruß cyblord

von Piefke (Gast)


Angehängte Dateien:

Lesenswert?

Sergej M. schrieb:
> Muss ich nun bestimmte Register setzen, damit er automatisch bei
> plötzlichen Absinken der Versorgungsspannung in einen Energiesparmodus
> springt?

Der ATmega32 hat einen analogen Komperator, den Du wie folgt beschalten 
kannst, dass bei Unterschreiten einer bestimmten Betriebsspannung ein 
Interrupt ausgelöst wird:
AIN1 beschaltest Du mit einer Zener Diode von 3,3V nach Vcc und einem 
Pulldown-Widerstand von c.a. 100K nach GND, so dass an diesem Vcc-3,3V 
bzw. 0V bei Vcc<3,3 anliegt. Also 2,7V bei 5V Vcc und 0V bei 3V Vcc.
So fließen bei 5 V 27µA und bei 3V theoretisch kein Strom, so dass Deine 
Batterie nicht zusätzlich belastet wird.
AIN0 versorgst Du mit der internen Spannungsreferenz, die laut Handbuch 
beim Mega32 1,15 - 1,35V hat. Die interne Spannungsreferenz verbraucht 
laut Handbuch 10µA.

Die entsprechenden Register findest Du im Kapitel "Analog Comperator" 
des Handbuchs.

Es stellt sich natürlich die Frage, ob Deine Schaltung noch genügend 
Platz hat, nachträglich eine Zener Diode und einen Widerstand 
unterzubringen.

Zeig' doch mal ein Foto.

Wie Dein ATmega32 regiert, wenn man im Betrieb die Versorgungsspannung 
wechselt, weiß ich nicht. Da solltest Du ein paar Tests machen, in denen 
Du auch ermittelst, mit wie wenig Spannung er bei gegebenem Takt 
überhaupt auskommt. Zumindest die ATmega8, die ich schon zwischen den 
Fingern hatte reagieren da meiner Erfahrung nach eher gutmütig:
Umschalten von 5V nach 3V und zurück: Keine Probleme bisher.
Betreiben eines ATmega8 (ohne L) mit unter 4,5V: Ebenso.
16MHz bei 3,3V (mit und ohne L): Ging bisher immer.
Man kann natürlich nicht ausschließen, dass einer der zig Tausend 
Transistoren irgendwo auf dem µC das nicht mehr mit macht, aber dafür 
sollst Du ja auch ausprobieren, mit wie wenig Spannung Deine 
Schaltung noch funktioniert. Wenn die Deutlich unter Deinen 3V liegt, 
müsste es gehen.

Sergej M. schrieb:
> soll eine 3V-Batterie über Schotky-Dioden einspringen.
Das könnte knapp werden. Such' Dir eine mit möglichst geringer 
Durchlassspannung aus. (Siehe Anhang)

von Sergej M. (Gast)


Lesenswert?

Hallo cyblord
cyblord ---- schrieb:
> Ja klar, denn der Atmega ist sowas wie "wünsch dir was". Wenn du dem
> eine zu niedrige Spannung anlegst dann kocht er auch Kaffee und geht für
> dich Arbeiten.... Manno mann. Denkst du ein solches Verhalten wäre im
> Datenblatt nicht beschrieben?

Anstatt mir so patzig zu antworten, wäre eine Hilfe oder Referenz 
schöner gewesen. Ich habe nicht behauptet, dass irgendwas irgendwo nicht 
steht, sondern dass ich nichts davon gefunden habe.

cyblord ---- schrieb:
> Die Reaktion ist undefiniert. Es kann sein es passiert gar nix, oder er
> verliert unkontrolliert irgendwelche Daten im Ram. Oder er bleibt
> stehen

Kannst Du dafür eine Referenz geben?

cyblord ---- schrieb:
> Grundsätzlich hängt die Mindestspannung auch vom Takt ab. Takte so
> niedrig wie möglich, dann ist die Chance höher dass er bei niedriger
> Spannung noch geht.

Du hast meine Frage nicht ganz verstanden.
Ich möchte mit der Batterie den RAM erhalten und nicht den ganzen 
Controller mit all seinen Funktionen am Laufen halten. Auch den Quarz 
brauche ich nicht im Batteriebetrieb.
Das möchte ich:
Ich schalte die Versorgungsspannung ab und stelle die Schaltung für 
einen Monat in den Schrank. Nach dem Monat schalte ich ihn ein und er 
ist wieder an der gleichen Stelle da, weil die Batterie seinen 
Betriebszustand erhalten hat. In dem einen Monat im Schrank muss er 
nichts rechnen, der Quartz muss auch nicht schwingen u.s.w.

Ich möchte auch nichts kaufen, sondern nur eine Information einholen 
über das was ich bereits habe.

Folgendes suche ich im Datenblatt:
1: Ab welcher Spannung hört der externe Quarz auf zu schwingen.
2: Ab welcher Spannung verliert er seinen RAM.
3: Wie viel Strom verbraucht er in dem Zustand, wo der Quarz nicht mehr 
schwingt, der RAM aber erhalten bleibt.

Danke schön!

von Sergej M. (Gast)


Lesenswert?

Hallo Piefke,
Dein Vorschlag mit dem Comparator klingt sehr gut. Leider sind bei mir 
AIN0 & AIN1 bereits besetzt. Fast alle PINS sind bei mir belegt.
Ich habe mir die entsprechende Seite im Datenblatt markiert ... 
vielleicht kann ich die PIN ja frei machen.

Platz auf der Platine habe ich sonst genug, daran soll es nicht mangeln.

Ich sehe, so einfach ist es also bei dem alten Controller nicht mit der 
Versorgungsspannung.
Ich hatte mal mit einem anderen Kontroller gearbeitet, dieser hatte 
einen eigenen PIN für Batterieversorgung und er konnte eben automatisch 
in einen SLEEP-Modus schpringen, wenn man ihm die Spannung abdrehte. Er 
wechselte automatisch auf die Batterieversorgung und schaltete den 
Oszillator ab... natürlich mussten dafür Register gesetzt werden, damit 
er das automatisch macht.
Ich habe gehofft, dass der AT32 das auch kan ... naja


Dabke!

von BrownOut (Gast)


Lesenswert?

Alles machbar. Steht doch im Datenblatt.

von Piefke (Gast)


Lesenswert?

BODEN zieht aber eine Menge Strom.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Um die Betriebsspannung zu messen, braucht man nichtmal eine externe 
Beschaltung: Der ADC des ATMega32 kann nämlich seine interne 
Spannungsreferenz messen (ADC-Eingang 14). Als Referenzspannung nimmt 
man dabei die Versorgungsspannung. Dann erhält man einen Wert, der 
umgekehrt proportional zur Betriebsspannung ist.

Wenn die Spannung zu niedrig wird, deaktiviert man einfach alle 
Peripherie des µCs und schickt ihn in den Power-Down-Modus. Dann sollten 
die Registerinhalte, RAM-Inhalte usw. auch noch unter 2,7V 
(wahrscheinlich sogar noch bei 1,5V) erhalten bleiben. Wenn man den µC 
wieder aufwecken will, betätigt man einfach einen der externen 
Interrupts wie INT0...2 und aktiviert die Peripherie danach wieder. Der 
µC macht dann sofort an der Stelle weiter, an der er "ausgeschaltet" 
wurde.


Gruß
Jonathan

von eee (Gast)


Lesenswert?

Hast Du schon daran gedacht, wichtige Variable vor dem Ausschalten im 
EEPROM zu speichern, und beim nächsten einschalten wieder zu laden? Das 
funktioniert auch ohne zusätzliche Batterie.

Falls das interne EEPROM des Mega32 nicht ausreicht, kannst Du einen 
externen im DPI 8 ergänzen (weil Platz auf Platine noch vorhanden).

Was spricht dagegen?

von Cyblord -. (cyblord)


Lesenswert?

Sergej M. schrieb:
> Anstatt mir so patzig zu antworten, wäre eine Hilfe oder Referenz
> schöner gewesen. Ich habe nicht behauptet, dass irgendwas irgendwo nicht
> steht, sondern dass ich nichts davon gefunden habe.
Wenn du nichts gefunden hast, dann tut er eben dies auch nicht. So 
einfach ist das.
>
> cyblord ---- schrieb:
>> Die Reaktion ist undefiniert. Es kann sein es passiert gar nix, oder er
>> verliert unkontrolliert irgendwelche Daten im Ram. Oder er bleibt
>> stehen
>
> Kannst Du dafür eine Referenz geben?

Nein, aber was soll sonst passieren? Der RAM benötigt eine bestimmte 
Spannung um die Daten zu halten. Wieviel GENAU hängt vom Einzelexemplar 
ab. Im Datenblatt stehen die Spannungen bei denen garantiert wird, dass 
die Daten erhalten bleiben. Alles andere musst du ausprobieren und ist 
Glücksache und vom einzelnen Baustein abhängig.

>
> cyblord ---- schrieb:
>> Grundsätzlich hängt die Mindestspannung auch vom Takt ab. Takte so
>> niedrig wie möglich, dann ist die Chance höher dass er bei niedriger
>> Spannung noch geht.
>
> Du hast meine Frage nicht ganz verstanden.
> Ich möchte mit der Batterie den RAM erhalten und nicht den ganzen
> Controller mit all seinen Funktionen am Laufen halten. Auch den Quarz
> brauche ich nicht im Batteriebetrieb.

Ich habs verstanden, aber das geht halt nicht. Du kommst nunmal nicht 
von außen an den RAM ran und kannst da ne Extrawurst für braten. Du 
kannst nunmal nur an die Versorgungsspannung für den ganzen Baustein ran 
und deren Grenzen stehen im Datenblatt.
Auch wenn du in einem Sleep-Modus bist, darfst du eigentlich die 
Spannung nicht weiter absenken als im normalen Modus. Jedenfalls steht 
sowas nicht im Datenblatt.

Was gefällt dir denn nun an der Atmega32L Variante nicht?

> Folgendes suche ich im Datenblatt:
> 1: Ab welcher Spannung hört der externe Quarz auf zu schwingen.
Steht nicht drin, hängt vom Einzelexemplar ab. Ab 4,5 Volt gehts aber 
sicher


> 2:Ab welcher Spannung verliert er seinen RAM.
siehe 1
> 3: Wie viel Strom verbraucht er in dem Zustand, wo der Quarz nicht mehr
> schwingt, der RAM aber erhalten bleibt.
Siehe Datenblatt unter Sleep-Modes.
Dort wirst du den Stromverbrauch finden, aber keine Mindestspannung. Es 
gilt also weiterhin 4,5 Volt.


gruß cyblord

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.