Also deinen Code habe ich fast zur gänze verstanden, ich weiß nur nicht wofür ich solche Sachen wie JTAG oder .CSEG brauche. Ich habe meinen Code jetzt so verändert das man mithilfe zweier Taster die LED heller oder dünkler machen kann, zumindest mit dem Simmulator funktionierts schon mal. Das STK 500 bekomm ich hald erst in ein paar tagen.
Hier mal mein Code, wenn der funktioniert, dann is das ein richtig einfach verständlicher Code zum erlernen von PWM ^^
Ich habe jetzt noch vor den Ausgangsport auch per Taster verändern zu können, das Problem ist nur, jetzt habe ich nur noch einen EXT_int.Code:.include "m16def.inc" .def temp = r16 .def PWMstatus = r17 .def Helligkeit = r18 .org 0x000 jmp main ; Reset Interupt Handler jmp EXT_INT0 ; INT 0 Interupt Handler jmp EXT_INT1 ; INT 1 Interupt Handler jmp Kein_Interrupt ;TIM2_COMP ; Timer 2 Compare Interupt Handler jmp Kein_Interrupt ;TIM2_OVF ; Timer 2 Overflow Interupt Handler jmp Kein_Interrupt ;TIM1_CAPT ; Timer 1 Capture Interupt Handler jmp Kein_Interrupt ;TIM1_COMPA ; Timer 1 Compare A Interupt Handler jmp Kein_Interrupt ;TIM1_COMPB ; Timer 1 Compare B Interupt Handler jmp Kein_Interrupt ;TIM1_OVF ; Timer 1 Overflow Interupt Handler jmp Kein_Interrupt ;TIM0_OVF ; Timer 0 Overflow Interupt Handler jmp Kein_Interrupt ;SPI_STC ; SPI Transfer Complete Interupt Handler jmp Kein_Interrupt ;USART_RXC ; USART RX Complete Interupt Handler jmp Kein_Interrupt ;USART_DRE ; USART UDR empty Interupt Handler jmp Kein_Interrupt ;USART_TXC ; USART TX Complete Interupt Handler jmp Kein_Interrupt ;ADC ; ADC Conversion Complete Interupt Handler jmp Kein_Interrupt ;EE_RDY ; EEPROM Ready Interupt Handler jmp Kein_Interrupt ;ANA_COMP ; Analog Comperator Interupt Handler jmp Kein_Interrupt ;TWSI ; TWI Interupt Handler jmp Kein_Interrupt ;EXT_INT2 ; INT 2 Interupt Handler jmp TIM0_COMP ; Timer 0 Compare Interupt Handler jmp Kein_Interrupt ;SPM_RDY ; Store Program Memory Ready Interupt Handler main: ;Stackpointer ldi temp, LOW(RAMEND) out SPL, temp ldi temp, HIGH(RAMEND) out SPH, temp ;Aus/Eingänge ldi temp, 0xFF out DDRB, temp ; Ausgang ;PWM ldi temp, (1<<WGM00) | (1<<CS00) ; Einstellungen siehe Seite 81-83 out TCCR0, temp ldi Helligkeit, 0b00000000 out OCR0, Helligkeit ; Stellt die Einschaltzeit ein (Alles gesetzte --> immer ein, alles aus --> immer aus) ldi temp, (1<<OCIE0) out TIMSK, temp ;External Interrupt ldi temp, 0b00001111 out MCUCR, temp ; Steigende Flanke löst Ext. Int. 0 und 1 aus ldi temp, 0b11000000 out GICR, temp ; Ext. Int 0 und 1 aktivieren ;Interrupts freigeben sei ; Interrupts allgemein aktivieren Ende: jmp ende Kein_Interrupt: reti TIM0_COMP: inc PWMstatus ldi temp, 0b00000001 andi PWMstatus, 0b00000001 cp PWMstatus, temp breq PC+3 cbi PortB, 0 reti sbi PortB, 0 reti EXT_INT0: ldi temp, 0b11111111 cp Helligkeit, temp breq PC+4 ldi temp, 0b00001111 add Helligkeit, temp out OCR0, Helligkeit reti EXT_INT1: ldi temp, 0b00000000 cp Helligkeit, temp breq PC+4 ldi temp, 0b00001111 sub Helligkeit, temp out OCR0, Helligkeit reti
Sehr hilfreich war der Hinweis das meine Interruptvektortabelle nicht korrekt ist, die hab ich einfach aus dem tuturial von mikrocontroller.net abgeschrieben ^^, wusste nicht das das beim mega16 anders ist.
Für Verbesserungsvorschläge bin ich natürlich immer offen.
Grüße,
Gerko







Zitieren
Lesezeichen