Veamos, en mi imparable caída libre hacía el inframundo de los PIC he llegado a construir un sencillo programa en CCS para comprobar mis conocimientos sobre estos agradables cacharritos. Os lo presento:
#include <16F876.h>
#fuses XT, NOWDT, NOPROTECT, PUT
#USE DELAY(clock = 4000000)
main()
{
unsigned int16 DCf, DCg;
float vf, vg;
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_timer_2(T2_DIV_BY_1, 0x3F, 1);
vf = 3.5;
vg = 4.0;
DCf = ((unsigned int16)((1023/5.0)*vf + 0.5))&0x03FF;
DCg = ((unsigned int16)((1023/5.0)*vg + 0.5))&0x03FF;
set_pwm1_duty(DCf);
set_pwm2_duty(DCg);
while(1);
}Aquí el Señor programa, aquí los Señores Programadores.
Compilo. Bien. Genero el .HEX. Bien.
Me voy al MPLAB, selecciono dispositivo (16F876), configuro los configuration bits, selecciono Picstar Plus como programador, lo activo, abro mi .HEX haciendo un import y programo.
Lo pruebo (alimentaciones a +5v y masa, oscilador de 4Mhz y condensadores de 12pF): miro las salidas del PWM mediante osciloscopio. Nada. Muerto. Nien. Cero. Coloco un filtro de Butterworth en dichas salidas y miro (por mirar que no quede) si el valor de DC es, respectivamente, 3.5v y 4v (el que yo he puesto por programa). Imaginaos el resultado.
Y la pregunta es: ¿por qué demonios esto no funciona? ¿Qué es lo que hago mal de todo ese proceso?
Se agradecerá cualquier resquicio de luz en este enigma de la electrónica.

Salu2