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)
Manfred W. schrieb:
> Nur welche sind die richtigen?
Das verraten dir die Datenblätter. Lesen bildet. ;)
> Nur welche sind die richtigen?
Das verraten dir die Datenblätter. Lesen bildet. ;)
Ausserdem gibt's bei Atmel dafür eine "Migration Note".
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
> 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?
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 ;-)
> Du musst nur bereit sein, die genannten > Dokumente auch zu lesen ;-) > Das Problem liegt eher beim "verstehen"
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.
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.
> 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.
Yalu X. schrieb: > Der Compiler wird die geänderte Adresse automatisch einsetzen, wenn du > > beim Kompilieren den ATmega88 als Controllertyp angibst. Ja, das ist gleich die nächste Sache. Im AVRStudio kann ich für den Compiler zwar den ATMEGA88 auswählen aber nicht im programmiertool? Kann ich da den ATMEGA8 nehmen?
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?
Hi
>Liegts an der Software oder an den FUSES?
CKDIV8-Fuse?
MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.