Der Interrupt muß auch zugelassen sein (SEI) und aus dem Power down Mode sollte nur der Level interrupt gehen, keiner auf Flanken. Aus dem Idle Mode sollte eigentlich jeder Interrupt reichen.
Hallo,
ich habe ein kleines Problem: Ich habe hier einen AtMega32, den ich wenn mein Programm gerade nichts macht in einen sleep-mode (ich habe Power-down und Idle probiert) versetzen möchte. Das klappt auch, nur leider erwacht er weder bei einem externen Interrupt an INT0 noch bei einem an INT1. Ich betreibe ihn mit dem internen Oszillator und benutze die Funktionen aus avr/sleep.h (programmiere in C).
Ich hoffe ihr könnt mir helfen,
mfg _R2D2
Der Interrupt muß auch zugelassen sein (SEI) und aus dem Power down Mode sollte nur der Level interrupt gehen, keiner auf Flanken. Aus dem Idle Mode sollte eigentlich jeder Interrupt reichen.
sei(); ist klar, aber was soll ein Level-Interrupt sein?Der Interrupt muß auch zugelassen sein (SEI) und aus dem Power down Mode sollte nur der Level interrupt gehen, keiner auf Flanken. Aus dem Idle Mode sollte eigentlich jeder Interrupt reichen.
Bei den externen Interrupts kann man im Register MCUCR einstellen wann der Interrupt ausgelöst werden soll. Da kann man wählen zwischen: low level, jede Veränderung, steigende oder fallende Flanke. Nur der erste Fall reicht aus um aus dem Power down mde aufzuwachen. Im Datenbaltt des M32 ab Seite 66.
Ich betreibe den µC mit 3 AA Batterien und möchte, dass er nicht alzu viel Strom verbraucht, damit die Batterien einige Zeit halten. Spart man denn mit Idle schon viel Strom? Bei dieser Betriebsart sind doch noch die meisten internen Clocks aktiv.
Welcher Mode würde sich denn am besten eignen, wenn ich möglichst viel Strom sparen möchte und den µC durch eine Zustandsänderung an INT1 oder durch eine fallende Flanke an INT0 oder INT2 aufwecken will?
Wenn man auf die fallende Flanke (Int0 oder Int1) reagieren will geht das mit dem Power down modus. Es ist dann zwar nicht die Flanke selber, sonder der low Zustand danach, aber das sollte einem Egal sein. Man wird nur dann den Interrupt erst einmal wieder deaktivieren müssen bis man wieder in den power down modus wechslen will. Sonst kreigt man wohl dauernd eine Interrupt nach dem anderen, solange der Pin auf low ist.
Es hängt vom Takt ab, aber Idle braucht schon etwas mehr Strom. Wenn man nur 32 kHz Takt nimmt, würde aber auch der Idle Mode noch ganz gut gehen. Der Mega32L würde wohl auch mit nur 2 Battereien (3 V) klarkommen.
Lohnt es sich denn überhaupt den µC in Idle zu versetzen oder verändert sich dadurch der Stromverbrauch nur gering? Ich brauche 4,5V, da ich mit den Batterien auch noch ein LCD-Display betreibe, das ich aber während der µC im Idle-Modus ist ausschalten würde. Der Takt beträgt momentan 1MHz (interner Oszillator), aber später baue ich noch einen Quarz mit 3,6864MHz ein.
Lesezeichen