Von ATMEGA8 auf ATMEGA88V umgestellt

OP #1639907
Lesenswert?

Ich habe mir anstelle vom ATMEGA8 nun den ATMEGA88V besorgt und wollte 
den Code 1:1 verwenden.

Nun habe ich festgestellt das die Interrupts beim ATMEGA88 anders 
angesprochen werden.
TCCR0 und TIMSK funktionieren hier nicht mehr.

Laut Datenblatt heißen die hier TCCR0A, TCCR0B, TCCR1A, TCCR1B und 
TIMSK0, TIMSK1, TIMSK2.

Nur welche sind die richtigen?
Ich blicke da nicht ganz durch.

hab schon ein wenig herumprobiert, komme aber leider zu keinem Ergebnis.

Ich verwende bei mir einen Timer-Interrupt für die Tastenabfrage (kurz, 
lang gedrückt)
Gast #1639920
Lesenswert?

Hi, Manfred,

Du: "Ich habe mir anstelle vom ATMEGA8 nun den ATMEGA88V besorgt und 
wollte
den Code 1:1 verwenden.
Nun habe ich festgestellt das die Interrupts beim ATMEGA88 anders
angesprochen werden."

Du findest sicher irgendwo auf der Atmel Homepage eine Dokument 
"migration from Atmega8 to Atmega88".

Ciao
Wolfgang Horn
OP #1639940
Lesenswert?

> Du findest sicher irgendwo auf der Atmel Homepage eine Dokument
> "migration from Atmega8 to Atmega88".
>
Der Tip war schonmal nicht schlecht, danke.
Die Tabelle habe ich hier gefunden: 
http://www.atmel.com/dyn/resources/prod_documents/doc2553.pdf

Jetzt lese ich allerdings das es für TIMSK 3 unterschiedliche I/O 
Regsiter Adressen am MEGA88 gibt. Was bedeutet das? In wiefern ist das 
wichtig für das programm? Und woher weiß ich welcher Register für mich 
Relevant ist?
Moderator #1639997
Lesenswert?

Manfred W. schrieb:
> Jetzt lese ich allerdings das es für TIMSK 3 unterschiedliche I/O
> Regsiter Adressen am MEGA88 gibt. Was bedeutet das?

Das bedeutet einfach, dass der ATmega88 mehr als 8 unterschiedliche
Timerinterruptquellen hat, so dass die Enableflags nicht mehr in einem
einzelnen Register Platz haben. Also hat man die Flags — geordnet nach
Timer — auf drei Register verteilt. Auf Seite 6 der Appnote kannst du
nachlesen, wohin die einzelnen Bits des TIMSK-Registers gewandert sind.
Eine genauere Beschreibung zu den einzelnen Bits findest du in den
Datenblättern.

Mehr als die Datenblätter und optional die Appnote brauchst du wirklich
nicht, um dein Problem zu lösen. Du musst nur bereit sein, die genannten
Dokumente auch zu lesen ;-)
Moderator #1640018
Lesenswert?

Manfred W. schrieb:
> Das Problem liegt eher beim "verstehen"

Ok, vielleicht hat dir mein letzter Beitrag beim Verständnis etwas
geholfen. Wenn nicht, musst du deine Frage anders formulieren, um nicht
in den Verdacht der Leseunwilligkeit zu geraten. Wenn du bspw.
schreibst, welche Passage du in welchem Dokument nicht verstanden hast,
wird jeder erkennen, dass du dich bereits informiert hast. Entsprechend
werden die Antworten anders ausfallen.
OP #1640060
Lesenswert?

Das mit den Bit, ok.

Also anstelle von:
1
TCCR0 = (1<<CS02)|(1<<CS00);
2
TIMSK = 1<<TOIE0;

müßte es heißen:
1
TCCR0B = (1<<CS02)|(1<<CS00);
2
TIMSK0 = 1<<TOIE0;

Und für den PWM?
1
void lcd_dimmer(uint8_t lcd)
2
{
3
  TCCR1A=0x81;
4
  TCCR1B=0x02;
5
  OCR1A=lcd;
6
}

Den OCR1A finde ich nicht in der Liste.
Moderator #1640087
Lesenswert?

> Den OCR1A finde ich nicht in der Liste.

OCR1A ist ein Doppelregister (mit 16 Bit breitem Inhalt), das sich aus
den 8-Bit-Registern OCR1AH und OCR1HL zusammensetzt. Beim ATmega88 haben
sich zwar die Adressen dieser Register geändert, die Namen sind aber
gleich geblieben. Deswegen musst du hier im Sourcecode nichts ändern.
Der Compiler wird die geänderte Adresse automatisch einsetzen, wenn du
beim Kompilieren den ATmega88 als Controllertyp angibst.
Gast #1640562
Lesenswert?

Die Interrupts dürften nun richtig gesetzt sein.

Allerdings habe ich jetzt noch folgendes Problem.
Die ganze Sache reagiert viel langsamer als beim ATMEGA8

Dieser war mit 4MHz getaktet.
Der ATMEGA88 kann per FUSE auf 8MHz oder 128kHz getaktet werden.
Ich hab mal standard 8MHz belassen.

Eigentlich müßte die Schaltung ja schneller reagieren.
Oder ist da irgendwo ein Teiler drinnen?

Liegts an der Software oder an den FUSES?

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