Forum: Mikrocontroller und Digitale Elektronik ATtiny25 - Aufwachen aus PowerDown nur über INT0??


von Timmo H. (masterfx)


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?

von Johannes M. (johnny-m)


Lesenswert?

Timmo H. wrote:
> Bezieht sich das "or a pin change interrupt" auf einen beliebigen Pin,
> oder nur auf INT0?
INT0 ist kein Pin Change Interrupt, sondern ein externer Interrupt! 
Die Pin Change Interrupts heißen PCINTx

von Timmo H. (masterfx)


Lesenswert?

g
Ja habs auch gerade selber gemerkt. Danke

von Johannes M. (johnny-m)


Lesenswert?

BTW:
level interrupt und pin change interrupt widersprechen sich schon 
per se...

von Timmo H. (masterfx)


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?

von Gast (Gast)


Lesenswert?

>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.

von Johannes M. (johnny-m)


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.

von Timmo H. (masterfx)


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.

von Gast (Gast)


Lesenswert?

>Wenn mehr als einer ausgewählt wurde, muss man das PIN-Register des
>betreffenden Ports abfragen,

Ah, OK. Dann hab ich oben was falsches erzählt. Sorry, war keine 
Absicht.

von Gast (Gast)


Angehängte Dateien:

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.

von Timmo H. (masterfx)


Lesenswert?

Das ist auch ne gute Idee. Welche besser ist sei mal dahingestellt. Ich 
werde mich wegen der geringeren Anzahl von Bauteilen jedoch für die PCI 
Version entscheiden. Ist auch schon fertig gelötet.

von Gast (Gast)


Lesenswert?

Klar. Was dem einen sein Pintschäintsch ist dem annern sein Diode. Oder 
so... :-)

Viel Spaß noch.

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.