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


von Alex (Gast)


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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Alex wrote:
> ocra_value = mainclk/1000
> OCR1AH = ocra_value<<8;
                     ^^
> OCR1AL = ocra_value;

OCR1AH = ocra_value>>8;

von Karl H. (kbuchegg)


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)

von Alex (Gast)


Lesenswert?

wie peinlich ;-)

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.