PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega2560



Gucky
13.06.2020, 15:31
Hallo,
seit längerem programmiere ich den ATMEGA8 in Assembler mit dem Atmel Studio 6.2 ohne Probleme.

Nach einem Rechnerwechsel habe ich das Atmel-Studio neu aufgespielt.
Das ATMEGA8-Programm bekomme ich auch mit dem neuen Rechner lauffähig bearbeitet

Jetzt habe ich mit einem ATMEGA 2560 ein ähnliches Programm geschrieben und bekomme
immer viele Fehlermeldungen, z.B.:

Operrand 1 out of range 0xbc.
bezogen auf die Zeile
out twcr, r16
:(

ich benutze die entsprechende include-Anweisung .include m2560def.inc


Dann hatte ich früher nach dem Assemblieren in den Output-Files eine LST-Datei, jetzt nicht mehr angezeigt wird.
Ich hab bisher noch nicht gefunden, wo man das einstellen kann.


Kann mir hier jemand zu diesen 2 Problemen weiterhelfen?

Vielen Dank schon mal für eure Hilfe.

Gruß Gucky.

Searcher
13.06.2020, 19:48
Operrand 1 out of range 0xbc.
bezogen auf die Zeile
out twcr, r16

OUT läßt nur Adressen bis 63 (0x3F) zu. TWCR Register sitzt im ATmega2560 aber auf Adresse 188 (0xBC). Da muß man dann STS benutzen. Also sts TWCR,r16. Ich werkele immer noch mit BASCOM rum. Der Assembler dort ersetzt das OUT bei zu hohen Adressen automatisch durch STS.

Wie und wo man im Studio 6 die LST Datei bekommt weiß ich leider nicht:-( Ich benutze den externen Disassembler/Reassembler ReAVR und öffne damit die .hex Datei.

Gruß
Searcher

Gucky
14.06.2020, 14:19
Hallo Searcher,
erstmal recht herzlichen Dank für deine Info.
Mit der STS bzw. LDS - Anweisung bekomme ich jetzt keine Fehlermeldung mehr,
muß mich aber noch etwas mit dem Programm selber befassen, weil der 2560 doch noch einige Ports u.s.w. mehr hat
und man die Programme nicht 1:1 übernehmen kann.

Ein Problem habe ich noch mit dem Port K.
Hier bekomme ich bei den Anweisungen "out portk, R16" und "sts portk, r16" die Fehlermeldung "Invalid register"
ich habe an meiner Anwendung an diesem Port LED's dran und das ganze über die Arduino-Softwar programmieren können.
Es muss also irgendwie gehen. Optional könnte ich das ganze auch umlöten, möchte ich aber nur ungerne.
Irgendwie stehe ich im Moment auf dem Schlauch. :-(

Wenn mir da jemand helfen kann, würde ich mich sehr freuen.

Gruß Gucky

Searcher
14.06.2020, 14:50
Ein Problem habe ich noch mit dem Port K.
Hier bekomme ich bei den Anweisungen "out portk, R16" und "sts portk, r16" die Fehlermeldung "Invalid register"

Hallo,

für "Invalid register" gibt es eigentlich keinen Grund. Immer noch die m2560def.inc in Verwendung?
Groß Kleinschreibung sensitiv irgendwo eingestellt?
Versuchsweise statt PORTK die Adresse des Registers angeben: 0x108 bzw. dezimal 264

Ansonsten mal das komplette Programm posten.

Gruß
Searcher

Klebwax
14.06.2020, 15:58
Immer noch die m2560def.inc in Verwendung?

Mal in den File reinschauen, was da zu Port K so steht.

MfG Klebwax

Gucky
14.06.2020, 16:00
ich glaube, der Lösung auf der Spur zu sein, kann ich jetzt aber auf die schnelle nicht beschreiben.
Werde wohl erst Ende der Woche wieder dran kommen und poste dann hier das Ergebnis.

Gruß
Gucky

Klebwax
14.06.2020, 17:39
ich glaube, der Lösung auf der Spur zu sein, kann ich jetzt aber auf die schnelle nicht beschreiben.
Damits nicht so lange dauert, hier ein Auszug aus der Include-Datei. Hab ich mit Googles Hilfe gefunden, da ich keine AVRs benutze:


.equ TCCR5C = 0x122 ; MEMORY MAPPED
.equ TCCR5B = 0x121 ; MEMORY MAPPED
.equ TCCR5A = 0x120 ; MEMORY MAPPED
.equ PORTL = 0x10b ; MEMORY MAPPED
.equ DDRL = 0x10a ; MEMORY MAPPED
.equ PINL = 0x109 ; MEMORY MAPPED
.equ PORTK = 0x108 ; MEMORY MAPPED
.equ DDRK = 0x107 ; MEMORY MAPPED
.equ PINK = 0x106 ; MEMORY MAPPED
.equ PORTJ = 0x105 ; MEMORY MAPPED

und


; ***** PORTK ************************
; PORTK - PORT K Data Register
.equ PORTK0 = 0 ; PORT K Data Register bit 0
.equ PK0 = 0 ; For compatibility
.equ PORTK1 = 1 ; PORT K Data Register bit 1
.equ PK1 = 1 ; For compatibility
.equ PORTK2 = 2 ; PORT K Data Register bit 2
.equ PK2 = 2 ; For compatibility
.equ PORTK3 = 3 ; PORT K Data Register bit 3
.equ PK3 = 3 ; For compatibility
.equ PORTK4 = 4 ; PORT K Data Register bit 4
.equ PK4 = 4 ; For compatibility
.equ PORTK5 = 5 ; PORT K Data Register bit 5
.equ PK5 = 5 ; For compatibility
.equ PORTK6 = 6 ; PORT K Data Register bit 6
.equ PK6 = 6 ; For compatibility
.equ PORTK7 = 7 ; PORT K Data Register bit 7
.equ PK7 = 7 ; For compatibility

MfG Klebwax

Searcher
15.06.2020, 07:31
.equ PORTK = 0x108 ; MEMORY MAPPED

Stimmt. Oben (https://www.roboternetz.de/community/threads/74983-Atmega2560?p=660395&viewfull=1#post660395) hatte ich fälschlich die Adresse vom PINJ Register angegeben. Ist jetzt berichtigt.

Gruß
Searcher

Gucky
15.06.2020, 17:44
Danke für eure Bemühungen. Ich habe die Lösung für den Assembler gefunden.
Alles, was über die Adresse 3f adressiert wird, geht nur über eine indirekte Adressierung z.B. über das Register Z.

Beispiel:

;Datenrichtungsregister definieren
ldi r16, 0x01 ;r16 mit 01 laden
ldi zh, high(ddrk) ;High-Adresse von ddrk nach zh
ldi zl, low(ddrk) ;Low-Adresse von ddrk nach zl
st z, r16 ;Das Datenrichtungsregister k (ddrk) Bit 0 wird aus Ausgang, Bit 1...7 auf Eingang gesetzt

;Ausgang einschalten

ldi r16, 0x01 ;r16 mit 01 laden
ldi zh, high(portk) ;High-Adresse von portk nach zh
ldi zl, low(ddrk) ;Low-Adresse von portk nach zl
st z, r16 ;Das Port k Bit 0 wird eingeschaltet

Gruß Gucky

Searcher
16.06.2020, 05:02
Alles, was über die Adresse 3f adressiert wird, geht nur über eine indirekte Adressierung z.B. über das Register Z.

Hallo Gucky,
das bezweifle ich. Mit AVR Studio 4.19 geht es auch mit STS über Adresse 3f.

Wie kommst Du darauf, daß es nur über indirekte Adressierug läuft?


List File erzeugen kann man beim Studio 4.19 über Menü "Projekt" -> "Assembler Options" einstellen.
In Studio 6 scheint es anders zu sein. Vielleicht hilft Dir das weiter:
https://www.avrfreaks.net/forum/how-enable-studio-6-generating-list-file

Gruß
Searcher

Siro
16.06.2020, 07:09
Es gibt/gab beim AVC wohl verschiedene Kerne,
Beim AVRrc (reduced Core) gibt es tatsächlich Einschränkungen.

Aus dem Instruction Manual:

35077
35078 35079

Das spräche dafur, dass eventuell ein falscher Controller/Kern ausgewählt ist, wenn er Dich anmeckert.


Siro

Gucky
05.07.2020, 18:12
Hallo @Searcher,

Sorry für meine Falschaussage und das ich mich jetzt erst melde.

Mit dem STS-Befehl funktioniert das, hatte leider an einem falschen Pin gemessen.

Jetzt habe ich aber noch ein viel größeres Problem:
Nach einen der letzten Windows-Updates bekomme ich den Debugger und mein AVRISP MKII nicht mehr ans laufen.
Im Tool wird nur noch ein Simulator angezeigt.
Im Netz habe ich nach Windows-Updates nur etwas über die nicht funktionierenden Drucker gefunden.
Ich habe die letzten Windows-Updates deinstalliert und das Atmel-Studio neu installiert.
Zumindest läuft mein Drucker wieder.

Ich krieg eine mittelschwere Kriese.

Gruß Gucky

Searcher
06.07.2020, 06:56
Jetzt habe ich aber noch ein viel größeres Problem:
Nach einen der letzten Windows-Updates bekomme ich den Debugger und mein AVRISP MKII nicht mehr ans laufen.

Hallo,
da weiß ich leider auch nicht weiter. Ich nutze immer noch einen selbstgebastelten Programmer am Parallelport mit nicht mehr unterstütztem Betriebssystem.

Das wäre wahrscheinlich ein eigener thread mit möglichst vielen Angaben über die nicht mehr laufende HW und Versionsangaben des alten BSs und neuem upgegradeten BS auf dem PC wert.

Gruß
Searcher

avr_racer
05.10.2020, 18:30
https://www.giga.de/downloads/windows-10/tipps/windows-10-treibersignatur-dauerhaft-deaktivieren/

ist deine Lösung erst eaktivieren dann nur den MKII anstecken treiber drüber bügeln neu starten läuft.

Zur 3F Sache alle AVRs die mehr als 3F verwalten müssen, müssen mit LDS/STS angesprochen werden sthet auch in den jewiligen Datenblättern drine. Nennt sich Memery Mapping und unter Memery zu finden.