Autor Tema: f4011, PWM problema.  (Leído 2991 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado leotardo

  • PIC10
  • *
  • Mensajes: 6
f4011, PWM problema.
« en: 18 de Mayo de 2007, 11:39:09 »
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;
   }



Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: f4011, PWM problema.
« Respuesta #1 en: 18 de Mayo de 2007, 12:59:53 »
Si quieres echa un vistazo a mi proyecto de Motores musicales, donde controlo la melodía utilizando el PWM de un 30F4011.

Desconectado leotardo

  • PIC10
  • *
  • Mensajes: 6
Re: f4011, PWM problema.
« Respuesta #2 en: 18 de Mayo de 2007, 17:38:14 »
Si, la cosa promete, pero hace referencia a un include: "pwm.h",   sospecho que alli esta la clave del asunto.

¿podrias ponerlo por aqui. ?

Desconectado leotardo

  • PIC10
  • *
  • Mensajes: 6
//LA SIMULACION EN EL MPLAB IDE v7.01 ¡¡¡¡¡ F A L L A
« Respuesta #3 en: 18 de Mayo de 2007, 20:26:03 »
ya esta.
la simulacion falla, pero el osciloscopio dice que funciona.

aqui os dejo un ejemplo.

-------------------------------------

//ejemplo de PWM en el dsPIC30F4011 ds PIC30F4011
//LA SIMULACION EN EL MPLAB IDE v7.01               ¡¡¡¡¡ F A L L A
   #include "p30f4011.h"
_FOSC(CSW_FSCM_OFF & ECIO);  //sin cuentos de seguridad, clock externo x 4 pll
_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);
int   kk;

int    main(void){
         //puertos
   TRISDbits.TRISD2=0;   //pin out
   TRISF=0x0000;      //pin out, usados por interrupcion para ver como va la cosa
         //pwm3   
   OC3CONbits.OCSIDL=0;
   OC3CONbits.OCTSEL=1;   //t3 selec
   OC3CONbits.OCM=0b101;   //pulsos continuos
   OC3R= 0x0200;      //arranque
   OC3RS=0x0400;      //parada
   IFS1bits.OC3IF=0;            
   IEC1bits.OC3IE=1;    //interrupcion del oc3
         //clock es t3
   PR3=0x0800;      //ciclo del reloj
   TMR3=0x0000;
   T3CON=0;      //todo a 0, (preescaler y demas,,,
   T3CONbits.TON=1;   //encendido
   IFS0bits.T3IF=0;   
   IPC1bits.T3IP=4;   //prioridad 4
   IEC0bits.T3IE=1;   //T3,interrupcion,

   while(1){
      PORTFbits.RF0=0;
      PORTFbits.RF1=0;
      if(kk!=PORTD){
         kk=PORTD;   //esto para poner un break point
         }
      }
   }   

void    __attribute__((__interrupt__)) _T3Interrupt( void ){
   PORTFbits.RF0=1;   //chivato de paso por aqui
   IFS0bits.T3IF=0;   //a 0 en main, para darle mas tiempo al osciloscopio
   }
void   __attribute__((__interrupt__,auto_psv)) _ISR _OC3Interrupt(void){
   PORTFbits.RF1=1;   //chivato de paso por aqui
   IFS1bits.OC3IF=0;   //a 0 en main, para darle mas tiempo al osciloscopio
   }



Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: f4011, PWM problema.
« Respuesta #4 en: 19 de Mayo de 2007, 01:22:15 »
No hay que fiarse de los simuladores; el mundo real siempre es diferente y, en tu caso, mejor. Me alegro.