Hallo, ich benutze einen ATmega1284P und lasse den Counter3 mit CPU-Takt/8 im CTC Mode laufen, der mir dann bei erreichen von OCR3A einen Interrupt auslöst. Ich benutze einen externen 20MHz-Quartz und möchte den Interrupt im 1kHz-Betrieb laufen lassen. Meine Frage: Muss ich jetzt OCR3A auf 2499 oder auf 2500 stellen? Im Datenblatt steht, dass der Counter bei Erreichen von OCR3A auf 0 gesetzt wird. Ich habe das jetzt so verstanden, dass ich OCR3A auf 2500 stelle, damit der counter von 0 bis 2499 zählt und dann wieder bei 0 beginnt, und ich somit einen Teiler von 8 * 2500 = 20000 erhalte, richtig? Gruß
Gast
#2179566
Hi Warum benutzt du nicht einfach die Formel aus dem Datenblatt? MfG Spess
> Im Datenblatt steht, dass der Counter bei Erreichen von OCR3A > auf 0 gesetzt wird. Ja, aber das ist ein eigenr Timerzyklus. Du willst dass dein Timer für einmal rundherum zählen 2500 Timerzyklen braucht. Also musst du ihn von 0 bis 2499 zählen lassen. An kleineren Zahlen wirds deutlicher. Du willst den Timer 4 mal 'erhöhen' lassen, bis er einmal rum sein soll. Bei welchem Vergleichswert muss er dann auf 0 zurückgesetzt werden? Bei 3, denn dann zählt der Timer 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 das macht 4 Erhöhungen, bis man einmal von 2 ausgehend wieder bei 2 landet. 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3 | | ---- 1 | | ---- 2 | | ---- 3 | | ---- 4 d.h. den Wert, den du als Vergleichswert vorgibst, den erreicht der Timer auch tatsächlich und erst im nächsten Zählzyklus wird der Timer dann auf 0 gesetzt. Die Prüfung auf Compare Match findet also vor dem Erhöhen statt. Dein Vergleichsert muss 2499 sein.
ooops, danke!
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.