Forum: Mikrocontroller und Digitale Elektronik Timer ohne Funktion Atmega 644


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von HansWerner (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Danke für die Hilfe !!

von Rainer B. (katastrophenheinz)


Bewertung
0 lesenswert
nicht lesenswert
Funktioniert's denn jetzt?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.