ich habe versucht eine Verzögerungsfunktion mithilfe von TIMER0 zu schreiben: void delay_8ms(uint8_t m8s) //@m8s max 256, @m8s=#8ms-Schritte // TIMER0 verwendet { TCCR0B=0x00; //timer angehalten TCCR0A=0x00; //Ports normal, operation mode normal TIMSK&=~0x18; //f overflow interrupt aktiviert TIMSK|=0x02; TCNT0=0xff-m8s; //timer auf ausgangsposition gesetzt bf0.timer0=true; // bool um aus der schleife zu springen (global definiert) TCCR0B=0x05; // 1024 prescaler => 8ms pro Zählschritt (bei 128kHz) // timer gestartet while(bf0.timer0) // Warteschleife { } TIMSK&=~0x02; // Zurücksetzen der overflow-interrupt einstellung } und ISR(TIM0_OVF_vect) { bf0.timer0=false; } wobei das Programm immer an der Stelle der Verzögerung hängenbleibt, woraus ich schliesse, dass die Interruptfunktion nie aufgerufen wird, was ich mir nicht erklären kann. (Watchdog hab ich ausgeschaltet) Auch eine zweite Funktion, die Timer1 braucht funktioniert nicht. Deshalb denke ich, dass ich irgendwas mit dem Timer-starten falsch mache. Aber was?
Formatier Deinen Code vernünftig! Das kann kein Mensch lesen. Außerdem gibst Du nirgends die Interrupt-Bearbeitung frei. Dann kann kein Interrupt auftreten!
Glasskugel: bf0.timer0 ist falsch deklariert (muss volatile sein).
vielen Dank! ich glaub es lag tatsächlich am volatile, abe kannst du mir auch erklären was volatile genau bedeutet, respektive wann ich was volatile deklarieren muss?
Johann wrote: > abe kannst du mir auch erklären was volatile genau bedeutet, respektive > wann ich was volatile deklarieren muss? Schau in das Tutorial, oder in die AVR-Libc-FAQ, oder frag Google. Dazu gibt es nun wirklich mehr als genug leicht zugängliche Informationen.
Johann wrote: > vielen Dank! > ich glaub es lag tatsächlich am volatile, > abe kannst du mir auch erklären was volatile genau bedeutet, respektive > wann ich was volatile deklarieren muss? http://www.lmgtfy.com/?q=volatile
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.