mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lernhilfe Simulation Zähler mit AVRStudio


Autor: Kurt Flury (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Als Anfänger in der Programmierung von Mikrocontrollern habe ich
versucht im AVR-Studio Version 4.11 einen interrupt gesteuerten
Timer/Zähler zu simulieren. Okay, vielleicht mit einem für Beginner
nicht gerade idealen device (Atmega48). Trotzdem folgende Frage:

Damit der Overflow Interrupt für Timer0 ausgelöst wird muss ich unter
anderem das im TIMSK0 Register existierende Timer Interrupt Overflow
Flag (TOIE0) setzen.

Dies erfolgt bei mir mit den folgenden Anweisungen:

 ldi r16, 0b00000001  ;
 out TIMSK0 ,r16      ; Timer Interrupt Maske setzen

Beim Comilieren gibt mir aber das AVR-Studio folgende Meldung aus:

error: Operand 1 out of range: 0x6e

wobei 0x6e die Adresse des TIMSK0 Registers ist.

Ich verstehe aber nicht wieso? Kann mir jemand einen Tipp geben? Was
mache ich falsch?

Autor: Christof Rieger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auszug aus der Include Datai:
; ***** I/O REGISTER DEFINITIONS
*****************************************
; NOTE:
; Definitions marked "MEMORY MAPPED"are extended I/O ports
; and cannot be used with IN/OUT instructions

TIMSK0 beinhaltet die Speicherposition und nicht die I/O-Port Adresse
Schau einfach im Datenblatt nach was die I/0-Port Adresse ist und
verwende diese, oder rechne den Versatz aus, und ziehe den Wert von
TIMSK0 ab.

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal im Datenblatt unter Register Summary nach, welche I/O-Register
im normalen I/O-Bereich liegen und welche im extendet-I/O-Bereich.
Die Register im extendet-I/O-Bereich lassen sich nur wie SRAM
ansprechen.

Der Mega48 ist in dieser Beziehung besonders unvorteilhaft konstruiert.
Sein Konstrukteur war dabei wohl besoffen...

...

Autor: Kurt Flury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christof

Danke für Deinen Beitrag, aber sei mir nicht böse ich verstehe nur
Bahnhof. Kannst Du mir das genauer erklären?

Danke für Dein Verständnis.

Autor: Kurt Flury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hannes

Nun glaube ich zu verstehen was Christof gemeint hat.

Merci. Werde mich mal schlau machen und das Datenblatt genauer lesen.

Danke

Autor: M. M. (miszou)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

auch ganz brauchbar ist das AVR Instruction Set, da sieht man ganz gut
welchen Befehl man in welchem Adressbereich anwenden kann.

Gruß MISZOU

Autor: Kurt Flury (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Waren gute Tipps, danke allen. Gruss

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kleine Hilfe in Form eines Denkanstoßes:
http://www.mikrocontroller.net/forum/read-1-254635...

Bit- & Bytebruch...
...HanneS...

Autor: Christof Rieger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hannes,
war mir noch gar nicht aufgefallen, der TIMSK0 ist tatsächlich über
IN/OUT nicht mehr erreichbar.

The ATmega48/88/168 is a complex microcontroller with more peripheral
units than can be supported within the 64 locations reserved in the
Opcode for the IN and OUT instructions. For the Extended I/O space from
0x60 - 0xFF in SRAM, only the ST/STS/STD and LD/LDS/LDD instructions can
be used.

Unser TIMSK0 liegt auf 0x6e und kann somit nur über die Befehle
ST/STS/STD und LD/LDS/LDD erreicht werden.

Autor: Harrtmut Grölger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wenn man die Macros aus der Appnote 001 benutzt ,kann man die ganzen
Probleme mit der Adressierung umgegen.

MfG HG

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aber nur scheinbar... (man schaut halt weg und bemerkt es nicht mehr)

Denn die Zugriffe auf extendet-I/O kosten mehr Flash und mehr
Rechenzeit. Das mag jetzt haarspalterisch erscheinen, kann sich aber
bemerkbar machen. Das Unsinnige daran ist aber die Tatsache, dass im
normalen I/O-Bereich jede Menge Adressen unbenutzt sind, die mit IN/OUT
oder sogar mit CBI/SBI erreichbar sind.

Ich sehe das daher als eine Einschränkung, die bei vernünftigem Design
nicht nötig wäre. Es macht die Programme unnötig groß und langsam.

...

Autor: pebisoft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn man zeitkritische routinen braucht, die hier beim avr das genannte
nicht erreichen sollte man einen anderen chipsatz nehmen um das ziel zu
erreichen.
ich glaube kaum das atmel hier bei diesen die herstellungsverfahren
ändert.

mfg pebisoft

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.