Timer Problem bei Wechsel von mega8 zu mega168

#2254413
Lesenswert?

Hi,
ich versuche verzweifelt die Servo Lib von Julian von Mendel ( 
http://derjulian.net/mikrocontroller ) auf einem Atmega168 ans laufen zu 
bekommen.
Folgender Code steht orginal drin und funktioniert mit einem Atmega8 mit 
internem 8Mhz Takt:
1
TCNT1  = 0 - 16000;
2
TCCR1A = 0;
3
TCCR1B = 0x01;
4
TIMSK |=  _BV(TOIE2) | _BV(TOIE1);
Die ISR sicht so aus:
1
ISR(SIG_OVERFLOW1)
Nun habe ich, weil der Atmega168 den TIMSK nicht kennt. die beiden 
Datenblaetter verglichen und meiner Meinung nach muss nur
1
TIMSK |=  _BV(TOIE2) | _BV(TOIE1);
mit
1
TIMSK1 |=  _BV(TOIE2) | _BV(TOIE1);
getauscht werden.
Der Takt vom Atmega168 ist auf intern 8Mhz eingestellt. Clock/8 (CKDIV8) 
habe ich auch aus, damit er mit 8Mhz laeuft.
Es tut sich nix. Absolut garnix.

Was ist falsch?
#2254548
Lesenswert?

Stephan Kempa schrieb:
> Was ist falsch?

>ISR(SIG_OVERFLOW1)

ISR(TIMER1_OVF_vect)
{
}

Die ISR funktioniert mit "SIG..." nicht mehr bei den neuen Controllern.
Der Compiler meckert das auch an.


Die ganze Art der Initialisierung ist etwas veraltet.

TCNT1  = 0 - 16000;
TCCR1A = 0;
TCCR1B = 0x01;
Das ist OK. Sollte man aber der Übersichtlichkeit halber auch so 
schreiben

TCCR1B = (1 << CS10); Das sieht man gleich, was Sache ist.


Das hast du auch (fast) richtig erkannt
TIMSK |=  _BV(TOIE2) | _BV(TOIE1);

Aus TIMSK wird TIMSK1:

TIMSK1 |= (1 << TOIE1);

TOIE1 ist definert als "0", ebenso TOIE2, gilt aber für Timer2.
Schadet an dieser Stelle aber auch nicht.


mfg.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren