Forum: Mikrocontroller und Digitale Elektronik 16Bit Timer - Will einfach nicht.


von newbie (Gast)


Lesenswert?

Hi,

ich bekomm den 16Bit Timer (Timer1) vom ATmega128 einfach nicht zum 
laufen.

Ziel ist eine Variable Timereinstellung über den OCR- Wert
im Bereich 9...1000
1
TCCR1B |= (1<<CS11) | (1<<WGM21);    
2
TIMSK      |=   (1<<OCIE1A);
3
4
if( setPeriod < 9)
5
    setPeriod = 9;
6
7
OCR1A  =   setPeriod; // OCR2 = T * (FCPU / prescaler)

Mit einem 8-Bitter tut es...
1
TCCR2 |=   (1<<CS11) | (1<<WGM21); //Prescale 8
2
TIMSK      |=   (1<<OCIE2);
3
4
if( setPeriod < 9)
5
    setPeriod = 9;
6
OCR2  =   setPeriod; // OCR2 = T * (FCPU / prescaler)

Fehler:
Wenn ich den 16Bit timer benutze, bleibt mein restliches System stehen.
Ich seh einfach nicht den Fehler?? Ist irgend etwas an den Einstellungen 
Falsch??

Gruß

von Matthias L. (Gast)


Lesenswert?

>TIMSK      |=   (1<<OCIE1A);

Wo ist der dazugehörige Interrupthandler??

Aber wenn du mit OCx den MAX nur begrenzen willst, brauchst du den nicht

von Johannes M. (johnny-m)


Lesenswert?

> TCCR1B |= (1<<CS11) | (1<<WGM21);
WGM21 gehört zu Timer 2. Bitte bring so was nicht durcheinander. Die 
WGM-Bits des 16-Bit-Timers stehen auf zwei Register verteilt! Es gibt 
auch noch TCCR1A... Blick ins Datenblatt sollte helfen. Was definitiv 
nicht hilft, ist einfaches kopieren von Code für einen 8-Bit-Timer.

von Michael U. (amiga)


Lesenswert?

Hallo,

TCCR1B |= (1<<CS11) | (1<<WGM21);    <--- sollte wohl eher WGM11 sein???

Gruß aus Berlin
Michael

von newbie (Gast)


Lesenswert?

THX,
jetzt tuts,...

Gruß

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.