favor de ayudita.
necesito controlar el PWM, que ahora llaman "Output compare".
no encuentro manera, ni cambiando los relojes de referencia, ni cambiando el OCxR por el OCxRS, ni na,
in en hard ni en simulaciones, ni mueve puerto ni salta interrupcion.
--------------------
#include "p30f4011.h"
_FWDT(WDT_OFF); /* Turn off the Watch-Dog Timer. */
void __attribute__((__interrupt__,auto_psv)) _ISR _T3Interrupt(void);
void __attribute__((__interrupt__,auto_psv)) _ISR _OC3Interrupt(void);
void __attribute__((__interrupt__,auto_psv)) _ISR _OC4Interrupt(void);
void cebapuertos(void);
int kk;
int main(void){
cebapuertos();
while(1){
if(kk!=PORTD){
kk=PORTD; //trampa para el break poin
}
}
}
void cebapuertos(void){
//pwm3
TRISDbits.TRISD2=0; //pin out
TRISD=0x0000; //pin out, todos out por si meto pata
OC3CONbits.OCSIDL=0;
OC3CONbits.OCTSEL=1; //t3 selec
OC3CONbits.OCM=0b101; //pulsos continuos
OC3R= 0x0040; //arranque
OC3RS=0x0080; //parada
IFS1bits.OC3IF=0;
IEC1bits.OC3IE=1; //interrupcion del oc
//pwm4
OC4CONbits.OCSIDL=0;
OC4CONbits.OCTSEL=0; //t3 selec
OC4CONbits.OCM=0b101; //pulsos continuos
OC4R= 0x0040; //arranque
OC4RS=0x0080; //parada
IFS1bits.OC4IF=0;
IEC1bits.OC4IE=1; //interrupcion del oc
//clock es t3
PR3=0x0100;
TMR3=0x0000;
T3CON=0;
T3CONbits.TON=1;
IFS0bits.T3IF=0;
IPC1bits.T3IP=4;
IEC0bits.T3IE=1; //T3,interrupcion de 100us, prioridad 4
//tambien clock 2, pero sin interrupcion
PR2=0x0100;
TMR2=0x0000;
T2CON=0;
T2CONbits.TON=1;
IFS0bits.T2IF=0;
IEC0bits.T2IE=0; //T3,interrupcion de 100us, prioridad 4
}
void __attribute__((__interrupt__)) _T3Interrupt( void ){
//por aqui pasa cada 100Us, = 10Khz, prioridad 4
IFS0bits.T3IF=0;
}
void __attribute__((__interrupt__,auto_psv)) _ISR _OC3Interrupt(void){
IFS1bits.OC3IF=0;
}
void __attribute__((__interrupt__,auto_psv)) _ISR _OC4Interrupt(void){
IFS1bits.OC4IF=0;
}