Hallo ich habe folgendes Problem. Das Overflow Falg TOV0 ist immer eins wenn ich es in flag schreibe. Das verstehe ich nicht es müsste doch erstmal Null sein und wenn der Timer einmal bis 255 durchgelaufen ist dürfte es doch erst gesetzt sein. Und wenn es gestzt ist kann ich es doch mit schreiben einer 1 wieder zurücksetzen. #include <avr/io.h> //#include <stdlib.h> //#include <stdio.h> //#include <stdint.h> //Start des Programms int main (void) { TCCR0B = 0x02; //Timer aktivieren DDRB = 0x08; //Setzt PB3 als Ausgang int timer; int flag; for(;;) { timer = TCNT0; flag = TOV0; PORTB ^= 0x08; //Toggle PB3 high if(flag == 1) { TIFR0 = 0x02; } } //Ende des Programms for(;;) { } }
>flag = TOV0;
Das liest NCIHT das Flag aus, sondern nur die Konstante (Bitnummer) aus
der Definition (die wohl zufällig eins ist)
Der Dude wrote:
> TIFR0 = 0x01;
Du weißt doch gar nicht, um welchen Controller es konkret geht.
Und wenn TOV0 wirklich 1 ist, dann ist "TIFR0 = 0x02;" richtig.
Allerdings schreibt man besser "TIFR0 = 1<<TOV0;".
Ja, kommt auf den uC an. Beim Mega8 ist TOV0 aber Bit0, also 1. Ausserdem heisst das entsprechende Register TIFR, nicht TIFR0.
Erstmal Danke für die Antworten, aber wie lese ich denn jetzt das Bit (TOV0) aus?? Ich will ja dann etwas mit dem wechsel des Overflow-Flag anstellen. Mit TIFR0 = 1<<TOV0; setzte ich das Bit ja nur wieder zurück das weiss ich und das funktioniert auch. Es handelt sich übrigens um einen ATtiny13
Der Dude wrote: > Ja, kommt auf den uC an. Beim Mega8 ist TOV0 aber Bit0, also 1. > > Ausserdem heisst das entsprechende Register TIFR, nicht TIFR0. Eben, deswegen kann es schon mal kein Mega8 sein.
Matthias Lobitz wrote: > Erstmal Danke für die Antworten, aber wie lese ich denn jetzt das Bit > (TOV0) aus?? Ich will ja dann etwas mit dem wechsel des Overflow-Flag > anstellen. flag = TIFR0 & (1<<TOV0); "if(flag == 1)" funktioniert dann aber nicht. Du musst auf >0 testen, also einfach "if (flag)".
Jo super jetzt klappt es. Vielen Dank echt super Forum hier. Ach kann mir vielleicht einer noch sagen wie ich die genaue CPU -Frequenz auslesen kann? Im Datenblatt steht nur 0-10Mhz. Sorry aber ich bin echt neu auf dem Gebiet
>ch kann mir vielleicht einer noch sagen wie ich die genaue CPU >-Frequenz auslesen kann? Im Datenblatt steht nur 0-10Mhz. Garnicht. Die legst du selbst fest. Entweder mit externem Quartz oder mit internem RC-Oszillator
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.