Hallo, wegen neuer Hardware (kein LPT-Port mehr) bin ich von meinem alten Parallelprogger auf den USB Prog umgestiegen und dadurch in der komfortablen Lage, dass ich nicht mehr mit PonyProg programmieren muss, sondern direkt aus dem AVRStudio (Version 4.18) proggen kann. Jetzt bastle ich mir gerade eine Uhr mit einem ATmega 8 und frage mich, warum sie zu langsam läuft. Ich verwende einen 4.194304 MHz Quarz, das ist auch in meinem Programm so definiert: #define F_CPU 4194304 mein Timer-Prescaler ist folgendermaßen gesetzt: TCCR2 = 0x04; TIMSK |= (1<<TOIE2); Laut Datenblatt komme ich also auf eine Interruptfrequenz von 4194304/64 = 65536 Hz Ich habe das getestet, indem ich in der Interruptroutine ein Portpin toggle: ISR(TIMER2_OVF_vect) {PORTD ^= 0x02;} Ich würde also 32768Hz erwarten, messe mit dem Oszi aber eine Frequenz von 128Hz --> um den Faktor 8 zu langsam! Jetzt habe ich natürlich als erstes die CLCKDIV-Fuse im Verdacht, aber ich finde sie nicht im Dialog des AVR-Studio (Vgl. Abbildung). Noch was: unter Project -> Configuration Options -> general ist keine Taktfrequenz eingetragen ... ändert aber auch nix, wenn ich es tue. ... irgendwie stehe ich auf dem Schlauch ... kann mir da jemand helfen?
Der Mega8 hat keine CLKDIV-Fuse, er hat 4 interne Oszillatoren für 1, 2, 4 und 8Mhz. Es muß also irgendwas in Deiner Timerroutine nicht passen. Oder aber Du hast nicht auf den externen Quarz gefused. Dann dürfte Dein Controller aber lediglich gut 4x zu langsam sein.
Travel Rec. schrieb: > Der Mega8 hat keine CLKDIV-Fuse Danke, Travel Rec. Das erklärt schon mal, warum ich im Datenblatt nichts darüber finde ... > Oder aber Du hast nicht auf den externen Quarz gefused. Ich dachte, das hätte ich mit obiger Einstellung der SUT_CLKSEL - Fuse eben schon getan?
Ja, okay - das mit dem Quarz paßt. Aber wie kommst Du auf den mysteriösen Teiler von 64? Der Timer2 ist 256 Counts breit (8 Bit), mit Vorteiler 4 macht das 1024. Dies als Teiler der CPU-Frequenz ergibt 4096 Hz. Hmm... Haste noch mehr Code?
Lochrasterfan schrieb: > Ich würde also 32768Hz erwarten, messe mit dem Oszi aber eine Frequenz > von 128Hz --> um den Faktor 8 zu langsam! Bei einem Prescaler von 64 Zaehlt der Timer alle 64 Zyklen um 1 weiter. Der Interrupt kommt aber erst bei Ueberlauf, also bei 8-bit nach 256 Inkrementen! Volker
Dann macht auch seine (falsche) Rechnung Sinn: Takt = 4194304 Hz Prescaler = 64 = Inkrementieren mit 65536 Hz Timer = 8-Bit = Ueberlauf mit 256 Hz Bei jedem Ueberlauf togglen. = Periode von 128 Hz Volker
... das kann ich Nachvollziehen. Super !! Ich brauche also nicht den Überlauf-Interrupt, sondern einen Vergleich ... Danke euch beiden!
Es gibt auch noch den CTC-Modus, damit kann man, in Verbindung mit der Output-Compare-Schaltung und dem OCRx-Register, sehr fein auflösen, wann der Interrupt kommen soll.
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.