Hola!
Programé un PWM para el 877A que corre a una frecuencia de 120kHz y con un duty time al 50% de 4.16us.
Mis cálculos con un xtal de 20MHz son los adjuntos al programa siguiente.
El problema está en que la salida RC2 (CCP1) siempre está encendida, no hay salida de frecuencia.
Mi PIC ya está programado para correr a high speed HS con el xtal de 20MHz.
La resolución de mi PWM es de 7 bits, suficiente para el duty time.
Ya corre bien en Proteus y sale el PWM, pero el circuito físico no. Estoy optoacoplando la salida RC2 para hacer medición con el osciloscopio. En otros circuitos (detector de cruce por cero 60Hz) sí me ha funcionado el optoacoplador, pero aquí parece que desde RC2 ya anda fallando.
No quiero medir con el osciloscopio la salida de RC2 ya que la fuente que estoy usando es la capacitiva sin transformador.
Por favor avísenme si me equivoqué en algo. Gracias
//Este programa sacará un PWM de 120kHz (8.333us)
//con un duty time al 50% de 4.1666us
//Simula la salida de 120kHz del X-10
//f=120kHz
//Tpwm=8.333us
//duty time= 4.166us
//Tpwm=(PR2+1)4 Tosc PRtm2
//Tpwm=(41+1)(4)(1/20MHz)(1)=8.4us
//fpwm=1/8.4us=119.047kHz=120KHz
//duty time=CCP Tosc PRtm2
//duty time=83(1/20MHz)(1)=4.15us=4.166us
//Res=[log(20MHz/120KHz)/log 2]=7.39=7bit
//83d=0x53=1010011b O.K.
#include "16f877a.h"
#use delay(clock=20000000) //20MHz
#fuses hs, nowdt,noput,nobrownout,nolvp,noprotect
#use fast_io (b)
#use fast_io (c)
int16 duty_time;
void main(void)
{
duty_time=0x0053; //esto nunca cambia (4.15us)
set_tris_c(0x00); //todo salida
set_tris_b(0xff); //todo entrada
setup_timer_2(T2_DIV_BY_1,41,1);
//PR2=41
set_pwm1_duty(duty_time);
//4.15us
setup_ccp1(CCP_PWM); //activa PWM
while(1)
{
//nada
}
}