Sleep mit int0 aufwecken

Gast #4610314
Lesenswert?
• ▲
▼
Matthias S. schrieb:
> Nö, geht nicht. Aber der Pinchange Interrupt am gleichen Pin läuft
> flankengetriggert auch in Sleepmodes - nimm den.
> Im Datenblatt ist das ein wenig merkwürdig ausgedrückt: Im Powerdown
> Mode gehen INT0 und INT1 nur bei Level- und nicht bei Flanken
> Interrupts.

Also kann ich bei steigender Flanke den Atmega 88 aufwecken?
Danke Lg
#4610344
Lesenswert?
• ▲
▼
When the SM2..0 bits are written to 010, the SLEEP instruct
ion makes the MCU enter power-down mode. In this mode, the external 
oscillator is stopped, while the external interrupts, the 2-
wire serial Interface address watch, and the Watchdog continue operating 
(if enabled). Only an external reset, a watchdog system reset, a 
watchdog
interrupt, a brown-out reset, a 2-wire serial interface address match, 
an external level interrupt on INT0 or INT1, or a pin change interrupt 
can wake up the MCU.

Das ist doch eigentlich recht verständlich.
#4610394
Lesenswert?
• ▲
▼
pi_user schrieb:
> H.Joachim S. schrieb:
>> Das ist doch eigentlich recht verständlich.
>
>
> Für mich leider nicht! Aber wenn ihr mir bestätigt das eine
> Flankenerkennung geht dann bin ich Zufrieden!
>
> Lg

Der altbekannte INT0 kann ohne Takt, z.b. PowerDown, keine Flanke 
erkennen. Wenn der aber auf High-Level reagiert und vorher hatte man 
Löw-Level, dann hast du fast den gewünschten Effekt. Fast bedeutet, die 
ISR wird gerufen, bis der INT0 disabled wird, oder er nicht mehr auf 
"Trigger On High-Level" steht.

PinChange-Int braucht für Flanken-Erkennung keine Takt. Vermutlich wird 
einfach das Signal per Buffer-Gate-Laufzeit verzögert mit dem Original 
XORed. Und als Nachteil hat man Trigger auf beiden Flanken.
#4610398
Lesenswert?
• ▲
▼
Es geht nicht über INT0, aber über PCINT18, liegen auf dem gleichen Pin.
Also:
-zusätzlich eine ISR für PC_INT2 (Interruptvektor u.a.für PCINT18), dort 
dann den Pinchange-Int komplett wieder ausschalten.

Vor power-down den PCINT18 aktivieren:
PCICR=(1<<PCIE2) | (0<<PCIE1) | (0<<PCIE0);
PCMSK2=(0<<PCINT23) | (0<<PCINT22) | (0<<PCINT21) | (0<<PCINT20) | 
(0<<PCINT19) | (1<<PCINT18) | (0<<PCINT17) | (0<<PCINT16);

Oder so ähnlich :-)

Direkt mit dem INT0 oder 1 geht es jedenfalls nicht, wenn der 
flankengesteuert arbeitet.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren