Frage zum AVR-Tutorial bzgl. 7-Segment-Anzeige

Gast #2705039
Lesenswert?

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
Moderator #2705084
Lesenswert?

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.
Gast #2705307
Lesenswert?

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

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