Guten Tag allerseits, vorerst einaml herzlichen Dank an die Autoren des AVR-Tutorials, dieses umfangreiche Werk erleichert einem Neuling wie mir so manches! Ich hätte jetzt eine Frage, bei der ich nicht weiterkomme. Ich habe die Schaltungen soweit alle nachgebaut und alles klappt wie erwartet, nur beim multiplexen der vier 7-Segment-Anzeigen hab ich ein Problem, und zwar deswegen, weil ich statt eines ATmega8 einen ATmega48 benutze. Im Beispiellisting am Ende der Seite http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige werden auf Zeilen 168 und 171 die Konstanten TCCR0 und TIMSK verwendet; für den ATmega48 sind die aber nicht definiert. Gemäss m48def.inc gibt es aber ein TCCR0A, welches ich wohl verwenden kann anstelle TCCR0. Assemblieren tut's das im AVR Studio zumindest. Nur bei TIMSK weiss ich nicht weiter. TIMSK0 kann ich wohl nicht ohne weiteres verwenden, wohl weil's Memory Mapped ist. Meine Frage ist nun: Wie übersetze ich das folgende für einen Mega48? ldi temp, ( 1 << CS01 ) | ( 1 << CS00 ) out TCCR0A, temp ldi temp, 1 << TOIE0 out TIMSK, temp Besten Dank für eine Antwort! Grüsse vom Donar
Das TCCR0-Register des ATmega8 entspricht ungefähr dem TCCR0B des ATmega48, das TIMSK dem TIMSK0. Da die beim ATmega48 neu hinzugekommenen Features nicht genutzt werden, sollten die entprechenden Steuerbits in diesen Registern bei ihren Defaultwerten belassen werden. Da diese alle 0 sind, brauchen im Programm also nur die Registernamen geändert zu werden:
1 | ldi temp, ( 1 << CS01 ) | ( 1 << CS00 ) |
2 | out TCCR0B, temp |
3 | |
4 | ldi temp, 1 << TOIE0 |
5 | out TIMSK0, temp |
Möglicherweise gibt es noch weitere Inkompatibilitäten zwischen dem ATmega8 und dem ATmega48, die du aber am besten dadruch herausfindest, dass du das Programm mit den obigen Änderungen einfach mal ausprobierst :) Generell empfiehlt es sich bei der Portierung auf einen anderen AVR, nicht nach ähnlichen Registernamen, sondern nach gleichen oder ähnlichen Bitnamen zu suchen. Die Bits gibt es bei neueren Versionen einer Serie meist ebenfalls, sind aber möglicherweise anders auf die einzelnen Register verteilt.
Hi Vielleicht hilft hier auch mal der Vergleich der Datanblätter vom Atmega8 und Atmega48 Gruß oldmax
Hi >Meine Frage ist nun: Wie übersetze ich das folgende für einen Mega48? >ldi temp, ( 1 << CS01 ) | ( 1 << CS00 ) >out TCCR0A, temp >ldi temp, 1 << TOIE0 >out TIMSK, temp >Besten Dank für eine Antwort! Einfach out TIMSK, temp durch sts TIMSK, temp ersetzen. MfG Spess
Hi Korrektur: sts TIMSK, temp -> sts TIMSK0, temp MfG Spess
Besten Dank, hat wunderbar geklappt. Mittlerweile hab ich allerdings auf 7 Schieberegister umgestellt für die 7 x 7-Segment-Anzeigen :) Herzlichen Dank nochmals!
Donar schrieb: > Mittlerweile hab ich allerdings auf 7 Schieberegister umgestellt für die > 7 x 7-Segment-Anzeigen :) Und was machst du bei einem 8x8x8 LED Würfel?
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.