Forum: Mikrocontroller und Digitale Elektronik ATMEGA16 wacht nicht aus dem Sleepmode auf


von Kim-Yannick J. (kim_yannick)


Angehängte Dateien:

Lesenswert?

Hallo. Ich habe eine simple Schaltung mit einem Button und einer LED 
gebaut. Verkabelt ist alles richtig. Der Controller soll so lange 
schlafen, bis sich der Zustand des Knopfes von LOW auf HIGH ändert und 
dann die LED einmal blinken lassen. Das Problem: Der Interrupt wird 
nicht ausgelöst und somit wacht der Controller nicht auf. Wenn ich MCUCR 
auf 0 setze, wacht er auf. Allerdings möchte ich ja auf eine Änderung 
von LOW auf HIGH warten und nicht auf einen LOW-State. Weiß jemand, 
woran das liegt?

von MWS (Gast)


Lesenswert?

Daran, dass aus dem Power Down der Int0 nur auf Level aufweckt.

von Falk B. (falk)


Lesenswert?

@Kim-Yannick Jürs (kim_yannick)

>auf 0 setze, wacht er auf. Allerdings möchte ich ja auf eine Änderung
>von LOW auf HIGH warten

Pin Change Interrupt, das kann der "alte" ATmega16 nicht.

> und nicht auf einen LOW-State.

Das kann er.

> Weiß jemand, woran das liegt?

Alter Controller. Neuere Typen ala ATmega 88/328 etc. können das.

von Kim-Yannick J. (kim_yannick)


Lesenswert?

Besitzt der neuere Atmega16A dieses Feature? Wenn nicht, gibt es eine 
"Neuauflage" des Atmega16, sprich mit derselben Anzahl IO-Pins, 
Schnittstellen etc.?

von Falk B. (falk)


Lesenswert?

@ Kim-Yannick Jürs (kim_yannick)

>Besitzt der neuere Atmega16A dieses Feature?

Nein. Der ist logisch identisch, hat nur einen kleineren Chip.

> Wenn nicht, gibt es eine
>"Neuauflage" des Atmega16, sprich mit derselben Anzahl IO-Pins,
>Schnittstellen etc.?

Viele. Such dir einen der neueren Typen in DIL40. ATmega164/324/644 & 
Co.

: Bearbeitet durch User
von MWS (Gast)


Lesenswert?

Setz 'nen Pullup, leg' den Taster auf GND, stell' den Int0 auf Level, 
disable ihn in der ISR und enable ihn vor dem Sleep. Das ergibt ein 
ähnliches wie das gewünschte Verhalten.

von Kim-Yannick J. (kim_yannick)


Lesenswert?

MWS schrieb:
> Setz 'nen Pullup, leg' den Taster auf GND, stell' den Int0 auf
> Level, disable ihn in der ISR und enable ihn vor dem Sleep. Das ergibt
> ein ähnliches wie das gewünschte Verhalten.

Das Problem ist, dass ich dann an meiner "richtigen" Schaltung eine 
Menge ändern müsste. Das war nur ein kleines Beispiel.

Wenn es mit dem Atmega644 funktioniert, würde ich ihn nehmen. Ist 
allerdings ziemlich teuer. Für den Preis bekommt man schon einige andere 
Sachen...

von Falk B. (falk)


Lesenswert?

@ Kim-Yannick Jürs (kim_yannick)

>Wenn es mit dem Atmega644 funktioniert, würde ich ihn nehmen. Ist
>allerdings ziemlich teuer. Für den Preis bekommt man schon einige andere
>Sachen...

Dann nimm den kleinen ATmega164, der ist identisch, nur wie weniger 
Flash/RAM und damit billiger.

von Kim-Yannick J. (kim_yannick)


Lesenswert?

Weiß jemand, an welcher Stelle im Datenblatt definiert wird, ob der Pin 
Change Interrupt zum Aufwecken aus dem Power Down funktioniert oder 
nicht funktioniert? Ich finde einfach nichts.

: Bearbeitet durch User
von Bernd K. (prof7bit)


Lesenswert?

Kim-Yannick J. schrieb:
> Weiß jemand, an welcher Stelle im Datenblatt definiert wird, ob der Pin
> Change Interrupt zum Aufwecken aus dem Power Down funktioniert? Ich
> finde einfach nichts.

Such nochmal. Da ist eine Tabelle mit allen Sleepmodi und den jeweils 
möglichen Aufwachquellen.

von Peter D. (peda)


Lesenswert?

Kim-Yannick J. schrieb:
> Weiß jemand, an welcher Stelle im Datenblatt definiert wird

Table 14. Active Clock Domains and Wake Up Sources in the Different 
Sleep Modes

Notes:
3. Only INT2 or level interrupt INT1 and INT0.

von Kim-Yannick J. (kim_yannick)


Lesenswert?

Das heißt, mit INT2 würde es funktionieren? Dann brauche ich ja doch 
keinen neuen Controller.

von S. Landolt (Gast)


Lesenswert?

Falk B. schrieb:
> Pin Change Interrupt, das kann der "alte" ATmega16 nicht.

Kim-Yannick J. schrieb:
> Weiß jemand, an welcher Stelle im Datenblatt definiert wird, ob...

Datenblatt unter 'External Interrupts' (bei mir S. 67,68):
MCUCSR.ISC2
GICR.INT2
GIFR.INTF2

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.