Autor Tema: vamos a generar una señal analogica triangular con el modulo PWM del PIC16F877A  (Leído 2437 veces)

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

Desconectado tartourusparda

  • PIC10
  • *
  • Mensajes: 3
que onda miren el problema es este se trata de utilizar el modulo pwm del pic 16F877A para generar una señal triangular analogica con un  filtro pasabajas a una frecuencia de corte Fc=15KHz. El modulo PWM sera programado a una frecuencia de 19.2Khz la salida sera a través del filtro diseñado hacia el amplificador no inversor, la salida tendra una señal triangular con F=(0.5)Fpwm.

Yo soy principiante en el compilador PCW de CCS y no  puedo lograr la generacion de la onda, pero el programa ya lo hice en el programa PICC de HI-TECH.

Les mando el programa en PICC de HI-TECH y mi  circuito empleado y si alguna alma caritativa puede darme una nocion de como realizar el programa en PCW CCS pues seria de mucha ayuda.

#include <pic.h>
//#define PERIOD 10000
//#define XTAL 4000000
//#define ICLK (XTAL/4)
//#define SCALE 16
//#define PRELOAD PERIOD*ICLK/SCALE/1000000
unsigned long TOPE;
/*void interrupt CONTROL(void)
{
if(T0IF)
{
T0IF=0;
if(TOPE==0)
{
if(CCP1X == 0)
{
CCP1X = 1;
}
else if(CCP1X == 1)
{
CCP1X = 0;
CCPR1L++;
}
}
if(TOPE==1)
{
if(CCP1X == 1)
{
CCP1X = 0;
}
else if(CCP1X == 0)
{
CCP1X = 1;
CCPR1L--;
}
}
if((TOPE==0)&&(CCPR1L == 52)) TOPE=1;
if((TOPE==1)&&(CCPR1L == 0)) TOPE=0;
TMR0 = -PRELOAD;
}
}
*/
main()
{
//configuracion del TMR0
// PS0 = 1;
// PS1 = 1;
// PS2 = 0;
// T0CS = 0;
// T0SE = 1;
// PSA = 0;
//habilitacion de la interrupcion del TMR0
// GIE = 1;
// T0IE =1;
// Fpwm = 19.2 KHz
// Tpwm = 52.08 microseg
// Preescala TMR2 = 1
PR2=0x33;
// Ctpwm = 25%
// CCPR1L:CCP1CON<5:4> = 00011001:00 = 100
CCPR1L=0X00;
CCP1X=1; //CCP1CON<5>
CCP1Y=0; //CCP1CON<4>
//SE CONFIGURA RC2/CCP1 COMO SALIDA EN TRISC<2>=0
TRISC2=0;
// SE ESTABLECE EL VALOR DEL PRESCALER DE TMR2, SE HABILITA TMR2
TOUTPS3=0;//POST-ESCALA=1
TOUTPS2=0;
TOUTPS1=0;
TOUTPS0=0;
T2CKPS1=0;//PRE-ESCALA=1
T2CKPS0=0;
TMR2ON=1;//HABILITACION DE TMR2
//SE CONFIGURA CCP1 EN MODO PWM, EN CCP1CON
CCP1M3=1;
CCP1M2=1;
CCP1M1=0;
CCP1M0=0;
TOPE = 0;
// TMR0 = -PRELOAD;
for(;Giño
{
if(TOPE==0)
{
if(CCP1X == 0)
{
CCP1X = 1;
}
else if(CCP1X == 1)
{
CCP1X = 0;
CCPR1L++;
}
}
if(TOPE==1)
{
if(CCP1X == 1)
{
CCP1X = 0;
}
else if(CCP1X == 0)
{
CCP1X = 1;
CCPR1L--;
}
}
if((TOPE==0)&&(CCPR1L == 52)) TOPE=1;
if((TOPE==1)&&(CCPR1L == 0)) TOPE=0;
}
}


Ahora les pongo el circuito adjunto.

Pues sale es todo por el momento si tienen tiempo pues espero una pequeña ayuda sale me despido y de antemano gracias.


 

anything