Forum: Mikrocontroller und Digitale Elektronik Timer Problem bei Wechsel von mega8 zu mega168


von Stephan K. (dustpuppy)


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?

von Thomas E. (thomase)


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.

von Turbo T. (turbotoni)


Lesenswert?

Ist den auch die header-Datei für den Mega168 mit eingebunden?
die Register liegen bei den beiden µC an unterschiedlichen Adressen.

von spess53 (Gast)


Lesenswert?

Hi

>TIMSK1 |=  _BV(TOIE2) | _BV(TOIE1);

Beim ATMega168 hat jeder Timer ein eigenes TIMSK-Register. Also:

TIMSK1 |=  (1 << TOIE1);
TIMSK2 |=  (1 << TOIE2);

MfG Spess

von Stephan K. (dustpuppy)


Lesenswert?

Hi,
nu laeuft's :-)

Merci, fuer die Hilfe.

Gruesse

Dusty

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.