www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik timer1 beim ATMEGA32, Register laden


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahoi,

kleine Frage, große Verzweiflung. Ich möchte beim ATMEGA32 den Timer1 
nutzen als 1ms Zeitquelle. Konfiguration wie folgt:

TCCR1A   = 0x00;
TCCR1B   = (1<<WGM12)|(1<<CS10);
OCR1AH   = 0x39;
OCR1AL   = 0x99;
TIMSK   |= (1<<OCIE1A);

bei 14,745610 Mhz funktioniert das.

Sobald ich aber OCR1A nicht direkt beschreibe, sondern einen 
errechnetrten Werte nehme, z.B

unit32_t mainclk = 14745610;

ocra_value = mainclk/1000
OCR1AH = ocra_value<<8;
OCR1AL = ocra_value;

dann ist die Timerfrequenz viel höcher. Kann mir das mal einer kurz 
erklären. Ich weiß gerade nicht weiter?

Eine Frage noch: Wenn ich schreibe #define MAINCLK 14745610, was ist 
dann MAINCLK für ein Datentyp, wenn ich MAINCLK beispielsweise irgendwo 
zum Rechneen verwende?

Danke, Alex

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex wrote:
> ocra_value = mainclk/1000
> OCR1AH = ocra_value<<8;
                     ^^
> OCR1AL = ocra_value;

OCR1AH = ocra_value>>8;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alex wrote:

> ocra_value = mainclk/1000
> OCR1AH = ocra_value<<8;

andere Richtung schieben

  OCR1AH = ocra_value >> 8;

du willst ja an das High Byte ran

> OCR1AL = ocra_value;


Eigentlich müsste auch

  OCR1A = ocra_value;

funktionieren. Dann kümmert sich der Compiler um die
richtige Verteilung von High und Low Byte.

> Eine Frage noch: Wenn ich schreibe #define MAINCLK 14745610, was ist
> dann MAINCLK für ein Datentyp

gar keiner.
MAINCLK ist einfach nur ein Makro. Dort wo MAINCLK im Quelltext
vorkommt, wird es durch den Ersatztext 14745610 ersetzt.

> wenn ich MAINCLK beispielsweise irgendwo
> zum Rechneen verwende?

MAINCLK wird durch 14745610 ersetzt. In einer Berechnung hat diese
Konstante den Datentyp long, da sie für einen int zu groß ist
(auf dem AVR-gcc)

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie peinlich ;-)

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.