Forum: Mikrocontroller und Digitale Elektronik Kein WakeUp nach PowerDown beim atmega88 (INT0)


von Marco (Gast)


Lesenswert?

Hallo,

mein uController lässt sich nicht mehr aufwecken. Eigentlich sollt er 
bei einem Level-Change am INT0 aufwachen, tut er bei mir jedoch nicht.

Hat jemand eine Idee wo das Problem liegen könnte? In der Simulation 
klappt alles wie es soll.



IDE: AVRStudio 5
Clock: internal 8Mhz
Vdd: 3V


Gruß Marco

1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/sleep.h>
4
5
6
ISR(INT0_vect)
7
{
8
  LED_BLUE_TOGGLE
9
}
10
11
12
int main (void)
13
{
14
  sei();  
15
16
  EICRA |= 0x01;    // Interrupt at LevelChange
17
  EIMSK |= 0x01;    // Enable INT0
18
19
  LED_YELLOW_OFF
20
21
  while(1)
22
  {
23
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
24
    sleep_mode();
25
    
26
    LED_YELLOW_ON
27
  }
28
29
   return 0;
30
}

von bitte löschen (Gast)


Lesenswert?

Das hängt davon ab, in welchen Sleep-Mode die Funktion sleep_mode() 
geht.
Der einzige Sleep-Mode, der jede Flanke am INT<x>-Eingang (ISCX1=0, 
ISCX0=1) erkennt, ist Idle. Alle anderen (ADC Noise Reduction, Power 
Down, Power Save und Standby) können nur Interrupts bei Low-Level 
(ISCX1=0, ISCX0=0)
Im Handbuch (Version 07/2010) findet sich auf Seite 38 eine Tabelle mit 
den Eigenschaften der Sleep-Modes. Siehe dort dazu Anmerkung 3.

von Falk B. (falk)


Lesenswert?

@Marco (Gast)

>mein uController lässt sich nicht mehr aufwecken. Eigentlich sollt er
>bei einem Level-Change am INT0 aufwachen,

geht nicht, nur LOW LEVEL! Siehe Sleep Mode.

Bein 88er geht aber ein PCINT, der steckt aber in einem anderen 
Register.

MFG
Falk

von Marco (Gast)


Lesenswert?

Danke Philipp, danke Falk

im IDLE-Modus wacht der uC bei einem LevelChange auf,
im PowerDown-Modus nur bei einem Low-Level.

Im Datenblatt steht als Anmerkung "For INT1 and INT0, only level 
interrupt."
War aus meiner Sicht nicht unbedingt eindeutig.

Vergleichbare Microchip-Controller machen das besser, hier funktioniert 
meiner Meinung nach ein Level-Change Interrupt im tiefsten Schlaf.

von Marco (Gast)


Lesenswert?

@Falk, danke mit dem Hinweis des PCINT, damit funktioniert es.

Wundert mich jetzt stark, quasi ist ja jeder Pin als PCINT nutzbar und 
ist in der Hinsicht leistungsfähiger als ein INT0/INT1 Pin.

Egal, mein Problem ist gelöst und ich bin Happy :)

Gruß Marco

von bitte löschen (Gast)


Lesenswert?

Marco schrieb:
> Wundert mich jetzt stark, quasi ist ja jeder Pin als PCINT nutzbar und
> ist in der Hinsicht leistungsfähiger als ein INT0/INT1 Pin.

Ich denke mal, dabei geht es um die Abwärtskompatibilität zum ATmega8.

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.