ATtiny25 - Aufwachen aus PowerDown nur über INT0??

OP #1110354
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?
OP #1110421
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?
Gast #1110442
>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.
#1110460
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.
OP #1110535
>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 #1110606
>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.
Gast #1110644
>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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.