Forum: Mikrocontroller und Digitale Elektronik Watchdog / Sleepmodus funktioniert nicht richtig


von Herbert K. (Gast)


Lesenswert?

Hallo Leute habe folgendes Problem habe mir einen ADC gebastelt dies 
Funktioniert auch wunderbar nur jetzt komme ich zum Problem mit dem 
Watchdog entweder mein Programm dreht sich komplett ab und ist nicht 
mehr weckbar oder es leuchtet permanent die grüne Led habe hier den 
Programmcode sowei vorbereitet nur wie setze ich jetzt am besten die 
SleepFunktionen und die Aufwachfunktion im besten fall sollte der µC 8 
Sekunden schlafen dann wieder messen usw.


#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/wdt.h> //vordefinerte Watchdogfunktionen
#include <avr/sleep.h>
#include <util/delay.h>
#include <avr/interrupt.h>


void GlobalSleepMode(void)
{
  cli();
  wdt_reset();
  WDTCR |= (1<<WDCE)|(1<<WDE);        //WD Interrupt Enable, WD Change 
Enable
  WDTCR = (1<<WDIE)|(1<<WDP3)|(1<<WDP0);    //1024k, ca. 8s
  sei();

  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
  sleep_mode();
}

void GlobalWakeUp(void)
{
  cli();
  WDTCR |= (1<<WDCE)|(1<<WDE);  //WD Change Enable
  WDTCR = 0x00;          //Turn WD off
  sei();
}


int main(void)
{
  char adc_wert;
    DDRB=DDRB&~(1<<PB3); // ADC3
  DDRB=DDRB|(1<<PB0)|(1<<PB1)|(1<<PB2); // Initialisierung der LED's

//ADC_Init();
  DIDR0 |= (1<<ADC3D);        //dig. INPUT disabled
  ADCSRA |= (1<<ADEN) |(1<<ADSC)| (1<<ADPS1) | (1<<ADPS2); 
//Initialiserung ADC, Frequenzteiler: 64
  ADMUX |= (1<<ADLAR)|(1<<MUX0)|(1<<MUX1);  //5V int. Ref., linkbündig, 
ADC3 single mode

  while( 1 )

  {

    while(ADCSRA & (1<<ADSC)); //warten auf Wandlungsende
    adc_wert = ADCH;

    if( adc_wert < 166 ) // LOW-Bereich   ca 6,5V
    {
      PORTB=PORTB|(1<<PB0); // LOW-LED ein
      PORTB=PORTB&~(1<<PB1); // MIDDLE-LED aus
      PORTB=PORTB&~(1<<PB2); // High-LED aus
    }

    else if( adc_wert > 220 ) // High-Bereich ca 9,5V
    {
      PORTB=PORTB&~(1<<PB0); // LOW-LED aus
      PORTB=PORTB&~(1<<PB1); // MIDDLE-LED aus
      PORTB=PORTB|(1<<PB2); // High-LED ein
    }

    else if( adc_wert < 185 ) // Middle-Bereich ca 7,5V
    {
      PORTB=PORTB&~(1<<PB0); // LOW-LED aus
      PORTB=PORTB|(1<<PB1); // MIDDLE-LED ein
      PORTB=PORTB&~(1<<PB2); // High-LED aus
    }
    ADCSRA = ADCSRA | (1<<ADSC); //Wandler neu starten
    }

}
ISR(WDT_vect)
{

}



Hoffe ihr könnt mir helfen

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.