Forum: Mikrocontroller und Digitale Elektronik Timer ohne Funktion Atmega 644


von HansWerner (Gast)


Lesenswert?

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();

         }

von Rainer B. (katastrophenheinz)


Lesenswert?

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.

von HansWerner (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Rainer B. (katastrophenheinz)


Lesenswert?

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

von Rainer B. (katastrophenheinz)


Lesenswert?

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.

von HansWerner (Gast)


Lesenswert?

Danke für die Hilfe !!

von Rainer B. (katastrophenheinz)


Lesenswert?

Funktioniert's denn jetzt?

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
Noch kein Account? Hier anmelden.