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