Hallo, ich folgenden Code programmiert, dieser funzt leider nicht. Wenn ich das ganze in AVR Studio simuliere bleibt der im ADC Interrupt hängen. Warum??? Warum geht er nicht ins Hauptprogramm zurück? Vielen Dank für eure Hilfe #include <avr/io.h> #include <avr/iom8.h> #include <avr/interrupt.h> volatile unsigned char tick,adcwert; void init_timer0 (void) { TCCR0 = 0x03; // Prescaler OSC/Takt /64 = 57600 Hz TIMSK = 0x01; // Setzt Interrupt für Timer0 1 TCNT0 = adcwert; // Startwert setzen } void ADC_init (void) { ADMUX = 0x00; // Channel 0 ADCSRA = 0xDD; // Prescaler /32 Int Enable; Single Shot Betrieb } ISR(TIMER0_OVF_vect) { TCNT0 = adcwert; // Startwert von AD Wandler übernehmen PORTB=!0x01; // Summer ein/ausschalten, wenn er aus/an ist } ISR(ADC_vect) { adcwert = ADCL; // ADC Wert der Variable adcwert zuweisen ADMUX = 0x00; // Channel 0 auswählen ADCSRA = 0xDD; // AD Wandler neu starten } void main (void) { SREG=0x80; // alle Interrupts neu einschalten DDRB=0x07; // PortB Pin 0,1,2 als Ausgang schalten ADC_init(); // ADC Initialisieren while(1) { if (ADIF==1) init_timer0(); } }
HI, ich bin jetzt nicht soooo der fachmann, dennoch fallen mir ein paar sachen auf die ich nicht verstehe-->ergo es daran leigen könnte. wieso stellst du die interrupts VOR die main loop, macht man die aufrufe der isr nicht normalerweise DAHINTER. In assembler ist das ja durch Sprungmarken etc. klar definiert, aber was macht C daraus? 2. Wieso ist dein 1024 bit ADC Wert als Charvariable deklariert? 3. Wieso liest du nur die 8 untreren Bit deiner ADC Wandlung aus,,,,die 8 oberen könnte ich ja vielleicht noch verstehen aber das macht keinen sinn. und als letztes. dein ADIF wird erst DANN zurückgesetzt wenn du high UND low ausgelesen hast. Hoffe in einem der Punkte liegt der Fehler...schönen Abend noch
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.