PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Aufwecken eines atmega48 aus powerdown?



matze32
18.01.2007, 17:19
Hallo zusammen,

vielleicht kann mir hier jemand helfen.
Ich habe einen atmega48 über den int0 und dem Befehl powerdown schlafen gelegt. Nun möchte ich gerne über den zweiten freien externen Interruptpin (Int1) den Chip wieder aufwecken, aber ich bekomme dies irgendwie nicht hin. Ich habe den Int1 aktiviert und auf change gesetzt. Wenn ich nun den auf ground gelegten Int1 mit einer positiven Spannung (+5V) berühre passiert nichts, obwohl dann doch ein Wechsel stattfindet?

Für Hilfe wäre ich dankbar!

Gruß
Matthias

linux_80
20.01.2007, 15:18
Hallo,

wie weisst du, das nichts passiert ?

Im DB steht, das die Flanke, oder das Signal, solange anliegen muss, bis der Controller komplett aufgewacht ist, dann erst wird ein IRQ ausgelöst, wenn das Signal nicht mehr da ist, ist er zwar wach, aber es gibt keinen IRQ !
Wie lange er zum aufwachen braucht wird mit den Fusebits eingestellt.

matze32
22.01.2007, 13:37
Hallo,

vielen Dank für die Antwort! Das der Chip nicht reagiert kann man meiner Meinung nach am Stromverbrauch erkennen. Nach dem Powerdown-Befehl geht der Stromverbrauch unter 1 mAh. Wenn ich nun einen Interrupt zum Aufwecken auslöse bleibt der Stromverbrauch gleich und der Befehl für einen Reset, in Form des High-Low-Setzens des entsprechenden Ports, wird auch nicht ausgeführt?!

Gruß
Matthias

felack
27.01.2007, 13:16
Lies mal im Datenblatt nach!

Seite 39 - Table 8.1 - Notes 3 :

For INT1 und INT0 only level interrupt !!

Bei Change wird der ATmega48 nicht geweckt !!

felack

matze32
29.01.2007, 09:44
Hallo felack,

vielen Dank für die Antwort! Ich habe dies in der Zwischenzeit auch gelesen und entsprechend den Interrupt auf low level gesetzt. Doch dies war auch zunächst ohne Erfolg gekrönt.
Ich habe durch Versuch festgestellt, dass man anscheinend den powerdown-Befehl nicht in der Interruptroutine setzen darf, da er ansonsten nicht mehr zum aufwachen zu bewegen ist?! Warscheinlich springt er immer wieder in den Powerdown-Befehl, sobald man ihn versucht aufzuwecken?! ICh habe es nun anderes gelöst und lasse ihn nur noch über interrupt aufwachen.

Ansonsten habe ich noch eine interessante Entdeckung gemacht: wenn ich den interrupt auf low level setze brauche ich zusätzlich noch eine Pegeländerung damit es funktioniert. Ich dachte zunächst es wäre auch möglich den Chip zu starten mit schon auf Ground gezogenen Interrupt-Pin, was kein Auslösen ergibt.

Gruß
Matthias

SprinterSB
29.01.2007, 10:12
Ich habe durch Versuch festgestellt, dass man anscheinend den powerdown-Befehl nicht in der Interruptroutine setzen darf, da er ansonsten nicht mehr zum aufwachen zu bewegen ist?! Warscheinlich springt er immer wieder in den Powerdown-Befehl, sobald man ihn versucht aufzuwecken?!

Jein. Üblicherweise aktiviert man vor dem Schlafengehen eine INT-IRQ auf "level triggered". Beim Aufwachen wird denn die ISR ausgeführt, die auch leer sein darf, kann also aus lediglich einem RETI bestehen.
Wenn du in einer ISR schlafen gehst, dann sind dort wahrscheinlich die Interrupts deaktiviert, so daß der AVR nicht wach wird bzw er kann wie ISR nie ausführen (wo werden IQRs global erlaubt???).

Die IRQs in der ISR zu aktivieren ist auch keine gute Idee, weil es ein level triggered ist...