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.
Im Register TIMSK habe ich nun OCIE0 aktiviert, mit TOIE0 passiert garnichtsCode:.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 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







Zitieren

Lesezeichen