Arduino Mega 2560 R3 Grundlagen in Assembler Programmieren benötige Hilfe

Stony

User
Hallo zusammen ich drück grad die Schulbank und es geht um Microcontroller Programmierung. Leider habe ich davon nicht wirklich Ahnung und es gehört auch nicht zu meinen Lieblingsbeschäftigungen... aber was muss das muss halt. Um dafür wenigstens irgendeinen Anreiz zu haben will ich nun irgendwas für unser schönes Hobby basteln. Im ersten schritt habe ich mir ein Arduino 2560 Starterkit besorgt in dem wirklich alles zum Basteln drin is. Leider Programmiert nach meinem Gefühl die ganze Welt in C was mir noch weniger liegt und ich da auch schon hingeworfen habe:) Ich habe Atmel Studio 6.1 und es soll als Assembler geschrieben werden.
Ich wollte einfach nur ein Servo bewegen woran ich leider schon scheitere da ich den PWM Mode nicht gebacken bekommen. Kann mir hier irgendwer helfen? ich habe auch schon Probiert ein Schulprogramm so anzupassen das es auf dem 2560 läuft, jedoch ohne erfolg. Wenn ich so drüber nachdenke benötige ich Hilfe im verstehen von Datenblättern:) wollte mich jetzt nicht erst in einem Forum dafür anmelden um dann nach einem erfolgreichen Projekt nie wieder rein zu schauen. Das kann ich selber nicht leiden und hoffe einfach auf ein wenig Hilfe von euch:)
Anbei noch ein Link zum Datenblatt mit dem ich Arbeite.

Auf S. 124 unter 16.7.3

Mein Quellcode ist wie folgt, bitte bedenkt das ist ein Angepasstes Programm und ich bin nicht sicher wo ich bei gehen muss...


.include "m2560def.inc"

.DEF temp = r16

.CSEG

.ORG 0x0000 //Reset
rjmp INIT
.ORG 0x0002 //EXT_INT0
reti
.ORG 0x0004 //EXT_INT1
reti
.ORG 0x0006 //EXT_INT2
reti
.ORG 0x0008 //TC2_CTC
reti
.ORG 0x000A //TC2_Overflow
reti
.ORG 0x000C //TC1_Capture Event
reti
.ORG 0x000E //TC1_CTC_A
reti
.ORG 0x0010 //TC1_CTC_B
reti
.ORG 0x0012 //TC1_Overflow
reti
.ORG 0x0014 //TC0_CTC
reti
.ORG 0x0016 //TC0_Overflow
reti
.ORG 0x0018 //Serielle Übertragung fertig
reti
.ORG 0x001A //USART_Rx fertig
reti
.ORG 0x001C //USART_Datenregister leer
reti
.ORG 0x001E //USART_Tx fertig
reti
.ORG 0x0020 //ADC-Wandlung fertig
reti
.ORG 0x0022 //EPROM bereit
reti
.ORG 0x0024 //Analog Comparator
reti
.ORG 0x0026 //TWI
reti
.ORG 0x0028 //Programmspeicher voll
reti



INIT: ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,temp

sbi DDRB,4 //Ausgang für PWM = OC2/ bei Atmega8 = PB3/ Atmega 2560 PB4

ldi temp,0b01101100
//Bits 0 bis 2 = Taktteiler 256
//Bits 3 und 6 = Fast PWM
//Bits 4 und 5 = nichtinvertierend
out TCNT2,temp

loop: ldi temp,64
out OCR2A,temp //Vorwahl für 25% Pin PB3 auf High
rcall W1S
ldi temp,128
out OCR2A,temp
rcall W1S
ldi temp,192
out OCR2A,temp
rcall W1S
ldi temp,255
out OCR2A,temp
rcall W1S
ldi temp,0
out OCR2,temp
rcall W1S
rjmp loop

.include "LIB/Zeitasm.asm"

.EXIT
 

Stony

User
So ich hab noch ein wenig gebastelt... Jetzt kann ich wenigstens Debuggen aber ob es passt naja wir werden sehen. Mein Problem ist jetzt das ich es nicht aufspielen kann. Ich benutze das myAVR Prog Tool und bekomme folgenden Fehler beim lesen oder schreiben. (stk500_getsync()not sync resp=0x00). COM Port habe ich eingestellt. Wenn ich danach Google komm ich auch nicht weiter ein paar versuche habe ich schon gemacht aber so richtig schlau werd ich nicht.


/*
* PWM_Servo_Test.asm
*
* Created: 27.12.2017 16:29:13
* Author: P.Mueller
*/
.include "m2560def.inc"

.DEF temp = r16

.CSEG

.ORG 0x0000 //Reset
rjmp INIT
.ORG 0x0002 //EXT_INT0
reti
.ORG 0x0004 //EXT_INT1
reti
.ORG 0x0006 //EXT_INT2
reti
.ORG 0x0008 //TC2_CTC
reti
.ORG 0x000A //TC2_Overflow
reti
.ORG 0x000C //TC1_Capture Event
reti
.ORG 0x000E //TC1_CTC_A
reti
.ORG 0x0010 //TC1_CTC_B
reti
.ORG 0x0012 //TC1_Overflow
reti
.ORG 0x0014 //TC0_CTC
reti
.ORG 0x0016 //TC0_Overflow
reti
.ORG 0x0018 //Serielle Übertragung fertig
reti
.ORG 0x001A //USART_Rx fertig
reti
.ORG 0x001C //USART_Datenregister leer
reti
.ORG 0x001E //USART_Tx fertig
reti
.ORG 0x0020 //ADC-Wandlung fertig
reti
.ORG 0x0022 //EPROM bereit
reti
.ORG 0x0024 //Analog Comparator
reti
.ORG 0x0026 //TWI
reti
.ORG 0x0028 //Programmspeicher voll
reti



INIT: ldi temp,LOW(RAMEND)
out SPL,temp
ldi temp,HIGH(RAMEND)
out SPH,temp

sbi DDRB,4 //Ausgang für PWM = OC2/ bei Atmega8 = PB3/ Atmega 2560 PB4

ldi temp,0b00001100
//Bits 0 bis 2 = Taktteiler 256
//Bits 3 und 6 = Fast PWM
//Bits 4 und 5 = nichtinvertierend
out TCCR0B,temp

loop: ldi temp,64
out PB4,temp //Vorwahl für 25% Pin PB4 auf High
rcall W1S
ldi temp,128
out PB4,temp
rcall W1S
ldi temp,192
out PB4,temp
rcall W1S
ldi temp,255
out PB4,temp
rcall W1S
ldi temp,0
out PB4,temp
rcall W1S
rjmp loop

.include "LIB/Zeitasm.asm"

.EXIT
 

Bernd Langner

Moderator
Teammitglied
Hallo

My AVR Progtool benutze ich auch welche Hardware steuerst du an?
Den USB Stik oder hast du ein Smart USB Modul?
Im Reiter Brennen unter Controller den richtigen Baustein gewählt?

Ach vergessen wenn der USB Stik richtige Firmware geladen (Stk 500)

Gruß Bernd
 

Bernd Langner

Moderator
Teammitglied
Hallo

Man kann mit dem AVR Progtool verschiedene Hardware ansteuern
deshalb war die Frage was du betreibst.
Ich habe z.B den my smart USB Stik und kann dann die ISP Schnittstelle
des mega 2560 direkt benutzen.

Betreibe ich das my AVR Progtool direkt mit einem Arduino Board
geht es mit den UNO ohne Probleme mit dem Mega 2560 dieselbe Fehlermeldung wie
bei dir ich schätze da fehlt der richtige treiber im my avr progtool.

Gruß Bernd
 

Bernd Langner

Moderator
Teammitglied
Hi

Würde mal eine Anfrage bei MY Avr starten
auf der Homepage finde ich keien Hinweise über
neue Treiber.

Gruß Bernd
 

k_wimmer

User
Das könnte auch ein Problem werden.
Microchip hat vor über einem Jahr Atmel aufgekauft.
Das derzeitige Atmel Studio ist eingefroren und wird wohl nicht mehr weiterentwickelt.

Microchip arbeitet derzeit daran die Atmel Produkte in MPLABX zu integrieren.
Mit ICD4 ist schon der erste Debugger draussen der Hardwareseitig dafür vorbereitet ist.
An der Treiberstruktur wird derzeit gearbeitet.

Auch kommen in naher Zukunft weitere XMega Typen auf den Markt.
Es werden übrigens auch in Zukunft alle aktuellen Atmel Bausteine lieferbar sein, solange Nachfrage am Markt besteht.

Der 2560 ist ja nun auch schon etwas in die Jahre gekommen.

Auf die schnelle hilft evtl. dieses Tool:
https://www.microchipdirect.com/product/search/all/ATAVRDRAGON
 
AVR-Studio - Arduino

AVR-Studio - Arduino

Hi,

ich nutze selbst Atmelstudion für ASM und C. Man kann im 6.2 den Arduino nicht programmieren. Bindet man unter Tools einen avrdude ein sollte es gehen, aber nur wenn man die richtigen Parameter findet. Dazu musst Du die Board.txt aus ARDUINO durchsuchen. Arduino simuliert meisst einen STK500, aber mit verschiedenen Parametern. Ich denke, der sicherste Weg ist ein zu 6.2 passender Programmer wie USBISP und programmierung über die isp-Schnittstelle.

Das Myavrtool kann ich nicht laden. Ich denke auch hier ist das Problem der richtigen Schnittstellenparameter. Einen Mega hab ich hier, ich kanns aber nicht testen.

Gruß Sven
 

Bernd Langner

Moderator
Teammitglied
Hallo Stony

oder den von My Avr
ich nutze den auch und habe bis jetzt keine Probleme und ist auch etwas günstiger.

Damit progge ich auch meine Turngy TGY 9X

Gruß Bernd
 

Stony

User
Hab mir das teil nun mal bestellt. Dann sehen wir weiter ob das dann geht:) Hat mal jemand geschaut was ich da geschrieben habe?
 
6.2 + Arduino

6.2 + Arduino

Hi,

ich hab nochmal ein wenig getestet und jetzt klappt es. In dem Link ist eine neue Version von AVRdude und AVRconf verlinkt. Außerdem dieser Parameter:

Title: Arduino Mega
Command: C:\AVRdude\avrdude.exe
Arguments: -patmega2560 -cwiring -P\\.\COM7 -b115200 -D -Uflash:w:"$(ProjectDir)Debug\$(TargetName).hex":i

o.K com bzw Debug/Release musst Du noch anpassen. Es klappt super.

Gruß Sven
 

Anhänge

  • Unbenannt.png
    Unbenannt.png
    26,7 KB · Aufrufe: 221
Hi,

dein Programm geht nicht im Loop schreibst du die Werte auf PB4, das ist Murx.
richtig wäre :

sts OCR2A,temp ; out geht nicht für OCR2A

Gruß Sven
 

Stony

User
In welchem link? Kannst du das mal für dumme Kinder schreiben was du da gemacht hast? Oder was ich da machen soll? Ich versteh da grad nur Bahnhof:) Sorry is nicht meine Welt...
 
Hi,

Beitrag 14

offen in 6.2 den Reiter Tools/ExternalTools und trägst die Sachen von Beitrag 16 ein.
In dem Link findest Du Links zu einer avr-tool.zip. daraus entpackst Du avrdude.exe und averdude.conf nach C://avrdude.

das war es...
 
danach findest Du unter Tools/Arduino Mega

darauf klicken zum Programmieren. Vorher musst Du aber erfolgreich eine .hex in Debug erzeugt haben. Also unter configuration Debug wählen und dann build/build solution bzw F7 drücken. Ich muss los, morgen möchte ich von erfolgen lesen!

Gruß Sven
 
Ansicht hell / dunkel umschalten
Oben Unten