Forum: Mikrocontroller und Digitale Elektronik Sleep Mode disable Externer Interrupt


von Rico H. (Firma: FHNW) (2she)


Lesenswert?

Guten Abend allerseits!

Ich verzweifle beim Versuch meinen ATMega2561 per externem Interrupt aus 
dem Power Down Mode aufzuwecken! Und zwar hab ich das Problem nur mit 
dem INT7?!

Da meine Folientastatur an 4 Interruptleitungen hängt mache ich im 
Program also viermal dasselbe, mit INT4,INT5,INT6 und INT7.

Hier ein kleiner Ausschnitt aus dem Code
1
// Init Interrupt Ports input
2
DDRE = ( (0<<DDE7) | (0<<DDE6) | (0<<DDE5) | (0<<DDE4));
3
/* Ports output */
4
DDRD = ( (1<<DDD7) | (1<<DDD4) );
5
DDRG = ( (1<<DDG3) | (1<<DDG0) );
6
/* Pullup resistance Interrupt Ports active */
7
PORTE = ( (1<<PE7) | (1<<PE6) | (1<<PE5) | (1<<PE4));
8
/* Pullup resistance output Ports inactive */
9
PORTD = ( (0<<PD7) | (0<<PD4) );
10
PORTG = ( (0<<PG3) | (0<<PG0) );
11
12
EIMSK |= _BV(INT5);  //Enable INT5
13
EIMSK |= _BV(INT4);  //Enable INT4
14
EIMSK |= _BV(INT6);  //Enable INT6
15
EIMSK |= _BV(INT7);  //Enable INT7
16
EICRB |= _BV(ISC71); //Raising Edge Interrupt
17
EICRB |= _BV(ISC70); //
18
19
while (1)
20
  {
21
  ...
22
    
23
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
24
  sleep_enable();
25
  sei();
26
  sleep_mode();
27
  ...
28
  }
29
30
ISR(INT5_vect)
31
{
32
 }
33
ISR(INT4_vect)
34
{
35
 }
36
ISR(INT6_vect)
37
{
38
 }
39
ISR(INT7_vect)
40
{
41
 }

an was kann es also liegen, dass der Controller bei Tasten reagiert, 
welche an INT4:6 hangen aber nicht auf diese an INT7???Ist für mich 
unbegreifbar^^

von g457 (Gast)


Lesenswert?

> EICRB |= _BV(ISC71); //Raising Edge Interrupt
> EICRB |= _BV(ISC70); //

Mit INT7:4 kommt man nur via Level-Interrupt [0] aus dem Power-Down.

[0] Anmerkung 3 zur Tabelle 11-1 "Active Clock Domains and Wake-up 
Sources in Different Sleep Modes" im Datenplatt [1]
[1] http://www.atmel.com/Images/doc2549.pdf

von Rico H. (Firma: FHNW) (2she)


Lesenswert?

g457 schrieb:

> Mit INT7:4 kommt man nur via Level-Interrupt [0] aus dem Power-Down.
>
> [0] Anmerkung 3 zur Tabelle 11-1 "Active Clock Domains and Wake-up
> Sources in Different Sleep Modes" im Datenplatt [1]
> [1] http://www.atmel.com/Images/doc2549.pdf

Ok. Das heisst soviel, dass ich den Low Level Interrupt einstellen 
muss?!

Was aber dann noch weniger Sinn macht, ist INT4:6 "funktionieren"?!

von g457 (Gast)


Lesenswert?

> Ok. Das heisst soviel, dass ich den Low Level Interrupt einstellen
> muss?!

Ja.

> Was aber dann noch weniger Sinn macht, ist INT4:6 "funktionieren"?!

Die Hast Du ja auch nicht auf R∗i∗sing Edge gesetzt.

von Rico H. (Firma: FHNW) (2she)


Lesenswert?

g457 schrieb:
> Die Hast Du ja auch nicht auf R∗i∗sing Edge gesetzt.

aaaaahhh, ich vollpfosten xD...Besten Dank!! manchmal sollte man einfach 
ein Tag pausieren, um genau solche Fehler wieder sehen zu können :D

von Rico H. (Firma: FHNW) (2she)


Lesenswert?

g457 schrieb:
> Die Hast Du ja auch nicht auf R∗i∗sing Edge gesetzt.

Wie sieht es aus wenn ich nur durch INT7 aus dem power down kommen 
möchte, obwohl INT4:6 auch level interrupts gesetzt haben? muss ich dass 
vor

sleep_cpu();

noch ändern?

von g457 (Gast)


Lesenswert?

> muss ich dass vor
>
> sleep_cpu();
>
> noch ändern?

Ja. Und danach zweckmäßig wieder zurückstellen :-)

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.