www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMega 128


Autor: Barni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuche momentan eine Testsoftware auf einem uC in Assembler zu
schreiben.
Mein Problem ist das ich die Ports F ung G ansprechen und verändern
will, und das aber nicht hinbekomme.
Kennt sich jemand mit den Ports gut aus??
Ich habs mit verschiedenen Befehlen versucht (sbi, sbr, ldi, lds sts,
andi, ori), aber ich bekomme immer entweder den Fehler "Error:Operand
out of range" oder "Error:Invalid Register)
Wär super wenn mir da jemand helfen könnte...

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal im Datenblatt die Verwendung der Ports an,lies (und
versteh!) das Tutorial hier auf der Seite.

IN und OUT sind die Befehle um auf die special-function register zu
zugreifen.Auf welche genau und wie... Tutorial
nachvollziehen,DATENBLATT angucken

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ldi r16, 0xff
sts ddrf, r16
das sollte klappen

problem ist, dass sbi / out nicht in den 16 bit adressen schreiben
kann, wo diese 2 ports liegen

gruss

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kenne den 128 zwar nicht, aber für gewöhnlich ist es out beim AVR. Deine
BEfehle funktionen nur auf Registern nicht auf Ports.

Gruß Philipp

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
verdammt seid Ihr schnell, als ich eben geschrieben hab, gab es noch
keine Antwort :)

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Philipp
nicht ganz!!
Du kannst einen Port auch über sts ansprechen!!

@Ronny
solche Posts kannst du dir spahren.
da ist es besser nichts zu sagen, und die klappe zu halten

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> IN und OUT sind die Befehle um auf die special-function register
> zu zugreifen.

Nur die unteren 64. Darüber muß man mit lds/sts arbeiten. Das gilt
unter anderem auch für PORTF und PORTG. Im Datenblatt steht aber auch
deren Adresse.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nachtrag,

das gilt auch fuer einige Register

Autor: Thomas Pototschnig (pototschnig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und pass auf, dass JTAG nicht per Fuse aktiviert ist! Da kriegst du dann
auf den Pins die für JTAG da sind nichts raus.

Außerdem muss AVCC angeschlossen sein, weil dann 2 Ports sonst nicht
mit Spannung versorgt sind.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du das Ansprechen per lds/sts meinst: Das geht für alle
Standardregister (r0 bis r31) und für sämtliche I/O-Register.

Autor: Ronny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Jens:

'Spahren' kann man es sich auch,alles mit probieren rausbekommen zu
wollen.Sich erstmal die Grundlagen anzuschauen bevor man wild drauflos
probiert hat noch keinem geschadet.

Gerade zu dem Thema gibt es eine Menge Threads hier,obwohl alles prima
im Tutorial erklärt wurde.Schade um die Zeit,wenn man immer wieder die
selben Sachen erklären muss.

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus

das passt doch bei allen registern, die der controller hat, bis auf die
schreibgeschuetzten..

Autor: Jens D. (jens) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Ronny

da stimm ich dir zu, nur bei solchen Kleinigkeiten lohnt es nicht gross
tips zu geben, da dauern die Diskusionen danach lännger, als die
Antwort..

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> das passt doch bei allen registern, die der controller hat, bis
> auf die schreibgeschuetzten..

Ja, und?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zur Erklärung:
Der Mega128 hat (wie die meisten der 'großen' Megas) einen Extended
I/O-Space. Der normale I/O-Space der AVRs endet bei der Adresse 0x5F
(I/O-Register-Adresse 0x3F). Die dicken Dinger haben aber so viele
Peripherie-Komponenten, dass dieser Adressbereich für die ganzen
I/O-Register nicht mehr ausreicht und so ein Teil des (sonst als
General Purpose SRAM verfügbaren) SRAM dazugenommen wird. Da die
Befehle in und out aber die I/O-Register mit ihrer Register-Adresse
(anstatt mit der absoluten Adresse) ansprechen und nur 6 Bit Platz für
die Adresse haben, ist halt bei 0x3F (also absolut: 0x5F) Schluss und
man muss die I/O-Register im Extended I/O-Space (ab absoluter Adresse
0x60) wie normale SRAM-Variablen mit sts und lds ansprechen. Deshalb
haben diese I/O-Register auch keine Register-Adresse mehr, sondern es
wird nur noch die absolute Adresse angegeben (siehe Register Summary im
Datenblatt).

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.