PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem aus Powerdown mit int0 bei mega8 ...



Charly_cs
07.07.2007, 16:56
Hallo!

Sitz hier schon eine gute Weile und komme einfach nicht weiter. Folgendes Problem: Ich möchte den Mega8 in den Powerdown modus schicken. Das funktioniert wunderbar. Nach einem Tastendruck, soll er wieder in den Activemode gehen und nach 5 Sekunden wieder in den Powerdown Mode.
Ich schaffs nur lieder nicht ihn wieder in den Activemode zu bekommen.
Zwischen PORTD2(int0) und Masse hängt ein Taster.
Könnt ihr euch bitte meinen Code anschauen, ob da etwas falsch ist?


#define F_CPU 16000000

#include <stdlib.h>
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>


int main(void)
{
int i;
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
DDRD &= ~(1<<PD2);
PORTD |= (1<<PD2);

//INT0 aktivieren, auf fallende Flanke reagieren
GIMSK |= (1 << INT0);
MCUCR |= (1 << ISC01);
MCUCR &= ~(1<<ISC00);

for(;;)
{
cli();
for(i=0;i<500; i++)
{
_delay_ms(10);
}
sei();

sleep_mode();

}

return 0;
}


ISR(INT0_vect)
{

}

Gruß
Charly

fluchtpunkt
07.07.2007, 18:50
versuch statt Falling Edge mal einen LowLevel Interrupt

MartinFunk
07.07.2007, 19:13
hi,
du musst vor dem sleep befehl die globalen interrupts mit sei aktivieren.

MfG Martin

Charly_cs
08.07.2007, 12:15
Hallo!

Es funktioniert! \:D/

@MartinFunk: die globalen interrupts waren in der Zeile über "sleep_mode()" aktiviert.

@fluchtpunkt: Habs so gemacht und es funktioniert.

Frag mich nur warum er nicht auf die fallende Flanke reagiert hat...:-k

Vielen Dank an euch!

Grüße
Charly

fluchtpunkt
08.07.2007, 12:22
haettest du das Datenblatt richtig gelesen wuesstest du es :)
Da im PowerDown mode kein Takt an der IO Pin Verarbeitung liegt kann der AVR keine Flanken detektieren.

Charly_cs
08.07.2007, 12:43
Hallo!

Du hast recht. Habs gerade nachgeschlagen. ](*,)
Vielen Dank!

Grüße
Charly