Ich bin von einen ATMEGA 32 auf einen ATMEGA 644PA Bin leider nicht sicher ob die Initialisierung des Timer in Ordnung ist. Ist leider momentan ohne Funktion. void timer_init() // Diese Funktion ist für die Initialisierung des Timers zuständig { /*Timer 0 konfigurieren*/ TCCR0A = 0x05; TIMSK0 |= (1<<TOIE0); sei(); }
Hallo, Riskier mal einen Blick ins Datenblatt. Dort siehst du, dass die Steuerung des Timer/Counter sich über zwei Register erstreckt. Einfaches Copy/Paste vom Mega32 geht in die Hose, weil die Bits im mega644 anders als im mega32 verteilt sind. TCCR0A und TCCR0B sind deine Freunde.
Ja ich hab schon im Datenblatt nachgeschaut. Bin aber leider kein Profi in dieser Sache. Habe folgendes im Datenblatt gefunden. Ich hoffe Ihr könnt mir weiterhelfen.
Das Migrieren von Registersettings von einem AVR-Controllertypen auf einen anderen erfordert keine höheren Weihen, sondern das sind elementare Grundlagen. Als erstes guckst im mega32 Datenblatt, was die originale Anweisung
1 | TCCR0 = 0x05; |
macht: Es werden die Bits 0 und 2 gesetzt. Gemäß Datenblatt ist diese Anweisung also identisch zu
1 | TCCR0 = (1<<CS2) | (1<<CS0); |
Letztere hat den Vorteil, dass sie besser lesbar und verständlicher [und leichter portierbar] ist, die obere Schreibweise ist pfui, weil unverständlich/unportierbar. Jetzt musst du nur noch gucken, in welchem Register die entsprechenden Bits im mega644 liegen und ob sich ggf die Bitbezeichnungen geändert haben. Wie gesagt, das Datenblatt ist an dieser Stelle dein unerlässlicher Helfer. Und es gibt beim mega644 nicht nur ein, sondern zwei Kontrollregister für die Timer, neben TCCR0A auch TCCR0B
Der Vollständigkeit halber sei noch erwähnt, dass mit der Anweisung
1 | TCCR0 = (1<<CS2) | (1<<CS0); |
im mega32 implizit auch WGM0=0 und COM0=0 gesetzt wird, also NormalMode und Normal Port Operation. Auch das müsste für den mega644 portiert werden, ist aber hier unerheblich, weil das auch im mega644 nach dem Reset die voreingestellten Modes sind. Dh funktioniert nach dem Reset wie gewünscht. Wenn du's jedoch sauber programmieren willst, dann solltest du auch beim mega644 WGM0=0 und COM0A=0 und COM0B=0 explizit initialisieren.
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.