ATtiny25 - Aufwachen aus PowerDown nur über INT0??

#1110354
Lesenswert?

Hallo.
Ich bin gerade dabei den ATtiny25 für den PowerDown Mode zu 
programmieren. Allerdings benötige ich zwei Pins die ihn wieder 
aufwecken. Im Datenblatt steht:
1
Only an External Reset, a Watchdog Reset, a Brown-out Reset, 
2
USI start condition interupt, an external level interrupt on INT0 
3
or a pin change interrupt can wake up the MCU.
Bezieht sich das "or a pin change interrupt" auf einen beliebigen Pin 
(PCINT0-5), oder nur auf INT0?
#1110421
Lesenswert?

Mmh, irgendwie finde ist das im Datenblatt komisch. Dort steht:
1
Bit 5 – PCIE: Pin Change Interrupt Enable
2
When the PCIE bit is set (one) and the I-bit in the Status Register (SREG)
3
is set (one), pin change interrupt is enabled. Any change on any enabled
4
PCINT5:0 pin will cause an interrupt. The corresponding interrupt of Pin
5
Change Interrupt Request is executed from the PCI Interrupt
6
Vector. PCINT5:0 pins are enabled individually by the PCMSK0 Register.
Den PCI Interrupt finde ich aber nicht in den Vektoren, dort ist nur
1
3 0x0002 PCINT0 Pin Change Interrupt Request 0
Der also eigentlich nur von PCINT0 ausgelöst wird. Oder ist das der 
allgemeine PCI?
#1110460
Lesenswert?

Gast wrote:
>>Der also eigentlich nur von PCINT0 ausgelöst wird. Oder ist das der
>>allgemeine PCI?
>
> Ja. "Welcher Pin es war" musst Du anschließend anhand des Registers
> PCINT checken.
Nicht wirklich. In den Mask-Registern stellt man vorher ein, welche 
Pins den Interrupt auslösen können sollen. Wenn mehr als einer 
ausgewählt wurde, muss man das PIN-Register des betreffenden Ports 
abfragen, um rauszufinden, wer es war.
#1110535
Lesenswert?

>Ja. "Welcher Pin es war" musst Du anschließend anhand des Registers
>PCINT checken.
Ah gut zu wissen, bloß warum wird das nicht auch so geschrieben? 
Ziemlich verwirrend wie ich finde.

>Nicht wirklich. In den Mask-Registern stellt man vorher ein, welche
>Pins den Interrupt auslösen können sollen. Wenn mehr als einer
>ausgewählt wurde, muss man das PIN-Register des betreffenden Ports
>abfragen, um rauszufinden, wer es war.
So hab ich mir das schon gedach.

Vielen Dank euch beiden.
Gast #1110644
Lesenswert?

>Ich bin gerade dabei den ATtiny25 für den PowerDown Mode zu
>programmieren. Allerdings benötige ich zwei Pins die ihn wieder aufwecken.

Man muss dazu übrigens nicht unbedingt auf den Pin Change Interrupt 
zurückgreifen; das Bild zeigt, wie es auch ohne geht: Beide Taster 
lösen beim Gedrücktwerden einen gewöhnlichen externen Interrupt aus 
(Int0 beim ATtiny25). Welcher es war, kann man durch unmittelbar 
darauffolgendes Einlesen des Zustands der Pins PB2 und PB1 über das 
PIN-Register feststellen:

PB2  PB1    Taster A    Taster B
--------------------------------
 0    0        ?          down
 0    1       down         up
(1)  (0)
 1    1        up          up

Das "?" bedeutet, dass man den Zustand von Taster A nicht herausbekommen 
kann, d. h. bei dieser Schaltungsvariante ist "A und B down" von "A up 
und B down" ununterscheidbar. "Beide Taster gedrückt" ist also nicht 
detektierbar.

Die eingeklammerte Kombination PB2=1 und PB1=0 tritt niemals auf.

Die Pullups an beiden Pins müssen enabled sein, und statt PB1 kann man 
natürlich auch einen anderen Pin nehmen.
Angehängte Dateien:

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