RISING und FALLING bei SLEEPING

OP #6323941
Lesenswert?

Hier schreibt der Fachmann:
1
attachInterrupt(digitalPinToInterrupt(wakePin), sleepISR, RISING);
https://github.com/RalphBacon/PIR-ATMega328P-Deep-Sleep/blob/master/Benny_Cupboard_Alarm.ino

Das Datenblatt von ATmega328P (s.62) sagt aber, dass diese Feinheiten im 
ungetakteten Zustand nicht zur Verfügung stehen: entweder Low Level 
Interrupt oder Pin Change Interrupt.

Wie ist das zu verstehen? Kann Arduino mehr aus dem ATmega328P machen?
Gast #6323993
Lesenswert?

Georg M. schrieb:

> Das Datenblatt von ATmega328P (s.62) sagt aber, dass diese Feinheiten im
> ungetakteten Zustand nicht zur Verfügung stehen: entweder Low Level
> Interrupt oder Pin Change Interrupt.
>
> Wie ist das zu verstehen?

Dass wohl der Pinchange-Interrupt verwendet wird...

Die anderen (INTx)-Interrupts stehen sowieso nur an sehr wenigen Pins 
zur Verfügung, beim Mega328P an nur zwei Pins.
Gast #6323998
Lesenswert?

c-hater schrieb:
> Dass wohl der Pinchange-Interrupt verwendet wird...
Nicht an der Stelle.
Das muss man dann schon selber einleiten.
attachInterrupt() behandelt nur die beiden Hardware Interrupts

Georg M. schrieb:
> Das Datenblatt von ATmega328P (s.62) sagt aber, dass diese Feinheiten im
> ungetakteten Zustand nicht zur Verfügung stehen: entweder Low Level
> Interrupt oder Pin Change Interrupt.
Das ist Wahr!

Georg M. schrieb:
> Kann Arduino mehr aus dem ATmega328P machen?
Nein!
Wie sollte es.
Arduino mag toll sein.
Aber Gott ähnlich ist es dann doch nicht wirklich.

Die Hardware Interrupts, können nur Level Interrupts im Sleep.
Wer im Sleep Flanken will, muss die PCINT verwenden.
OP #6324066
Lesenswert?

c-hater schrieb:
> Die anderen (INTx)-Interrupts stehen sowieso nur an sehr wenigen Pins
> zur Verfügung, beim Mega328P an nur zwei Pins.


Arduino Fanboy D. schrieb:
> attachInterrupt() behandelt nur die beiden Hardware Interrupts
>
> Die Hardware Interrupts, können nur Level Interrupts im Sleep.
> Wer im Sleep Flanken will, muss die PCINT verwenden.


Ja, es geht um diese zwei Interrupt-Pins: INT0 und INT1.
Er schreibt:
1
#define wakePin 3   // when rising, makes 328P wake up, must be an interrupt pin (2 or 3 on ATMEGA328P)
Vermutlich meint er Pin 2 oder 3 von Arduino.

Und PCINT unterscheidet nicht zwischen RISING und FALLING.

Irgendwie blicke ich immer noch nicht durch.
Gast #6324083
Lesenswert?

Nur im Idle Sleep Mode kann es Flanken auf int 0 und 1


Georg M. schrieb:
> Irgendwie blicke ich immer noch nicht durch.
Das Datenblatt sagt die Wahrheit.

Wiederhole:
Das Datenblatt sagt die Wahrheit. Glaube dem Datenblatt.
Das Datenblatt sagt die Wahrheit. Glaube dem Datenblatt.
Das Datenblatt sagt die Wahrheit. Glaube dem Datenblatt.

Wenn dann noch Zweifel bleiben:
Lese das Datenblatt nochmal und akzeptiere das dort geschriebene.
#6324102
Lesenswert?

Georg M. schrieb:
> Ja, es geht um diese zwei Interrupt-Pins: INT0 und INT1.
> Er schreibt:#define wakePin 3   // when rising, makes 328P wake up, must
> be an interrupt pin (2 or 3 on ATMEGA328P)
> Vermutlich meint er Pin 2 oder 3 von Arduino.

Ja.

> Und PCINT unterscheidet nicht zwischen RISING und FALLING.

Ja. Diese Unterscheidung muss man dann in der ISR per Software machen, 
indem man den aktuellen Pinzustand ausliest und auswertet.
Beitrag #6324169 wurde von einem Moderator gelöscht.
#6324184
Lesenswert?

Georg M. schrieb:
> a, es geht um diese zwei Interrupt-Pins: INT0 und INT1.
> ...
> Und PCINT unterscheidet nicht zwischen RISING und FALLING.

Die uralten Ursprungs-AVRs hatten nur ein paar wenige externe 
Interrupt-Pins (INTn). Die etwas neueren haben dazu ein zweites externes 
Interruptsystem mit mehr Eingängen, genannt PCINT. Die INT-Interrupts 
funktionieren anders als die PCINT-Interrupts. Wie, steht im Datenblatt. 
Klingt komisch, ist aber so.

Oliver

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