Hallo Leute!
Ich habe jetzt wieder mal ein bischen herumexperimentiert, aber ich komme zu keinem Interrupt. Mitlwerweile verwende ich nicht mehr Phase Correct PWM, sondern CTC.
Ist CTC überhaupt noch PWM?, dabei wird doch die Frequenz verändert oder?
Mit diesem Programmcode wird zwar ein Interrupt ausgelöst, aber das Programm springt nicht in die Interruptvektortabelle, sondern einfach nur 3 zeilen weiter rauf. Das Hilft mir sogut wie garnicht.
Code:
.include "m16def.inc"
.def temp = r16
.org 0x000 ; kommt ganz an den Anfang des Speichers
rjmp main ; Interruptvektoren überspringen
; und zum Hauptprogramm
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
reti ;TIM2_COMP
reti ;TIM2_OVF
reti ;TIM1_CAPT ; Timer1 Capture Handler
reti ;TIM1_COMPA ; Timer1 CompareA Handler
reti ;TIM1_COMPB ; Timer1 CompareB Handler
reti ;TIM1_OVF ; Timer1 Overflow Handler
reti ;TIM0_OVF ; Timer0 Overflow Handler
reti ;SPI_STC ; SPI Transfer Complete Handler
reti ;USART_RXC ; USART RX Complete Handler
reti ;USART_DRE ; UDR Empty Handler
reti ;USART_TXC ; USART TX Complete Handler
reti ;ADC ; ADC Conversion Complete Interrupt Handler
reti ;EE_RDY ; EEPROM Ready Handler
reti ;ANA_COMP ; Analog Comparator Handler
reti ;TWSI ; Two-wire Serial Interface Handler
reti ;SPM_RDY ; Store Program Memory Ready Handler
main:
;Stackpointer
ldi temp, LOW(RAMEND)
out SPL, temp
ldi temp, HIGH(RAMEND)
out SPH, temp
;Aus/Eingänge
ldi temp, 0x00
out DDRD, temp ;Eingang
ldi temp, 0xFF
out DDRB, temp ;Ausgang
;Interrupteingänge
ldi temp, 0b00001001 ;INT0 und INT1 konfigurieren
out MCUCR, temp
ldi temp, 0b11000000 ;INT0 und INT1 aktivieren
out GIMSK, temp
;PWM
ldi temp, 0b00001001 ;Einstellungen siehe Seite 81-83
out TCCR0, temp
ldi temp, 0b00111111
out OCR0, temp ;Stellt die Einschaltzeit ein (Alles gesetzte --> immer ein, alles aus --> immer aus)
ldi temp, (1<<OCIE0)
out TIMSK, temp
ldi temp, (1<<OCF0)
out TIFR, temp
;Interrupts freigeben
sei ;Interrupts allgemein aktivieren
Ende:
jmp ende
EXT_INT0:
sbi PortB, 0
reti
EXT_INT1:
cbi PortB, 0
reti
Im Register TIMSK habe ich nun OCIE0 aktiviert, mit TOIE0 passiert garnichts 
Im Register TIFR habe ich OCF0 aktiviert. Brauche ich das TIFR Register überhaupt für einen Interrupt?
Ich merke allerdings je mehr ich herumprobiere, desto mehr weiche ich von einer richtigen PWM ab. Es muss doch möglich sein, das man einfach mit einer Phase Correct PWM einen Interrupt bei jeder Änderung aufruft oder?
mfg Gerko
Lesezeichen