Forum: Mikrocontroller und Digitale Elektronik ATMega 128


von Barni (Gast)


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...

von Ronny (Gast)


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

von Jens D. (jens) Benutzerseite


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

von Philipp (Gast)


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

von Philipp (Gast)


Lesenswert?

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

von Jens D. (jens) Benutzerseite


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

von Rolf Magnus (Gast)


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.

von Jens D. (jens) Benutzerseite


Lesenswert?

nachtrag,

das gilt auch fuer einige Register

von Thomas P. (pototschnig)


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.

von Rolf Magnus (Gast)


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.

von Ronny (Gast)


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.

von Jens D. (jens) Benutzerseite


Lesenswert?

Rolf Magnus

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

von Jens D. (jens) Benutzerseite


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..

von Rolf Magnus (Gast)


Lesenswert?

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

Ja, und?

von johnny.m (Gast)


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).

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
Noch kein Account? Hier anmelden.