Hallo! Kann mir jemand helfen? Ich bekomme einfach keinen ungefähren Sekundentakt hin! Meine Ansatz: Takt 4Mhz Prescaler auf 1024 Zählregister TCNT0 zählt bis 256 Also wird der Timer0 Overflow-Interrupt 4000000Hz/1024= 3906,25Hz (1/(3906,25Hz))*256 entspricht etwa (1024/15625) ist etwa (ganz grob) 1/15s Also müsste ich doch den Timer-Interrupt auf einen Zähler führen der bis 15 zählt. Dann hätte ich doch in etwa einen Sekundentakt, oder? Habe aber einen Takt von etwa 2-3 Hz!
Hallo, das Thema wurde schon x-mal behandelt, also bemühe bitte die Forensuche bzw. wirf einen Blick in die Codesammlung. Peter Dannegger hat dort ein Beispiel veröffentlicht. Gruss, Alex
"Ich bekomme einfach keinen ungefähren Sekundentakt hin!" Echt nicht? Man kann mit 4MHz (=250ns Periodendauer) sogar einen sehr genauen Takt hinbekommen: Dazu braucht man allerdings den 16Bit Timer...dann setzt man das Compareregister auf 62500 und sagt, dass bei jedem CompareMatch der Zähler gelöscht werden soll (und von neuem startet). Dann hast Du einen Interrupt, der jede Sekunde einmal auslöst. Auf die Zahlen kommt man, indem man einfach mal eine Formel aufstellt: ZählRegister = (Zeit[s] * f[1/s]) / Prescaler; wobei der Prescaler 64 ist. Dann entspricht 1 Sekunde einem Registerinhalt von genau 62500. MfG Hannes
Du kannst auch einen 32,768kHz Uhrenquarz an TOSC anhängen, dann gehts einfacher: /* setup 8bit counter2, clock from 32768Hz quartz*/ TIMSK = 0; sbi (ASSR, AS2); /* auf 1/128 sek. */ TCCR2 = _BV (CS22) | _BV (CS21) | _BV (WGM21); OCR2 = 0; TIMSK = _BV (OCIE2); OCR2 auf 127 für 1 Sekunde setzen.
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.