Hallo! Ich nutze die Timer 0 und 1 bereits und möchte Timer 2 gerne benutzen um Zeit zu messen. Um sicher zu gehen, dass bereits eine bestimmte Zeit (0.5 sekunden) verstrichen ist, habe ich eine Schleife eingefügt. Irgendwie funktioniert das nicht so wies soll. Systemtakt ist 4Mhz. Ich starte den Timer also mit dem höchsten Prescaler (1024) und erhalte 4khz. Außerdem möchte ich einen Interrupt auslösen, sobald der Timer überläuft. TCCR2 |= (1<< CS22) | (0<<CS21) | (1 << CS20); TIMSK |= (1<<TOIE2); Dies sollte 16 mal in der Sekunde geschehen. Den Interrupt fange ich wie folgt ab: ISR(TIMER2_OVF_vect) { systemtime++; } Systemtime ist halt ein Int. Ich starte also den Timer, tue irgendwas, dann setze ich einen zweiten Integer starttimer=systemtime und messe. Ich will sichergehen, dass mindestens eine halbe Sekunde vergangen ist und tue dies hier: while((systemtime-starttime)<8) { tuwas } Leider wartet der Mega keine halb Sekunde. Ich würde fast behaupten, er wartet gar nicht. Wird mir da etwas wegoptimiert oder habe ich mit Timer/Interrupt etwas falsch gemacht? Ich würde mich freuen, wenn ihr mir (mal wieder) helfen könntet.
So, ich lasse mir Systemtime gerade über ein Display ausgeben. Die Variable erhöht sich jede Sekunde um etwa 256 und nicht um 16. Ich will meinen, ich habe den Timer falsch initialisiert? Grüße!
Hi, > Ich starte den Timer also mit dem höchsten Prescaler (1024) > und erhalte 4khz. Außerdem möchte ich einen Interrupt auslösen, > sobald der Timer überläuft. > TCCR2 |= (1<< CS22) | (0<<CS21) | (1 << CS20); 1. Dein Code widerspricht Deinem Text: "(1<< CS22) | (1 << CS20)" entspricht einem Vorteiler von 128. Teiler von 1024: TCCR2 |= (1<< CS22) | (1<<CS21) | (1 << CS20); 2. Bei dem von Dir laut Beschreibung angestrebten Teiler von 1024 dauert ein TimerCounter-Takt 0.256 ms, also f ~ 3,9 kHz. Gruß risu
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.