- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 6 von 6

Thema: Problem aus Powerdown mit int0 bei mega8 ...

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56

    Problem aus Powerdown mit int0 bei mega8 ...

    Anzeige

    Praxistest und DIY Projekte
    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?

    Code:
    #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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    40
    Beiträge
    165
    versuch statt Falling Edge mal einen LowLevel Interrupt

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    29.11.2006
    Ort
    Geislingen a. d. Steige
    Alter
    33
    Beiträge
    344
    hi,
    du musst vor dem sleep befehl die globalen interrupts mit sei aktivieren.

    MfG Martin

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Hallo!

    Es funktioniert! \/

    @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...

    Vielen Dank an euch!

    Grüße
    Charly

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.12.2004
    Alter
    40
    Beiträge
    165
    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.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    13.04.2005
    Beiträge
    56
    Hallo!

    Du hast recht. Habs gerade nachgeschlagen.
    Vielen Dank!

    Grüße
    Charly

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen