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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.