Hola,
Tras varias pruebas y lecturas, he decidido ir por pasos.
Primero voy a inentar que me funcione la parte A/D y despues me meto con el codigo PWM.
Tengo este codigo que segun la entrada analogica, enciende 3 Leds (menos 33% enciende Led1, entre 33 y 66% Led2 y mas de 66% Led3)
Pero no me funciona, algun consejo??
#include <16f88.h>
#device adc=10
#use delay(clock=8000000)
#fuses HS, NOWDT, NOLVP, NOMCLR
#define motor PIN_B2
#define on PIN_B0
#define puff PIN_B1
int duty;
void main(void){
//CONFIGURACIÓN CONVERSOR AD
SETUP_ADC(ADC_CLOCK_INTERNAL); //TIEMPO DE CONVERSION Fosc/8
SETUP_ADC_PORTS(sAN0); // CONFIGURACION DE AN0 COMO CANAL ANALÓGICO
SET_ADC_CHANNEL(0); //SELECCIONAMOS EL CANAL 0 PARA LA CONVERSION
//CONFIGURACION MÓDULO CCP
//setup_timer_2(T2_DIV_BY_16,124,1); //configuramos el timer 2 para una frecuencia de 1000hz
//SETUP_CCP1(CCP_PWM); //CONFIGURAMOS MODULO CCP PARA PWM
//SET_PWM1_DUTY(50); //DAMOS UN CICLO DE TRABAJO INICIAL DE 50%
while(1){
duty=read_adc(); //leemos canal analogico que nos devuelve un numero entre 0 y 1024
if(duty>=800) { //si el numero es mayor que 100 le asiugnamos el valor 100
output_high(puff); // Encender LED
output_low(motor);
output_low(on); }
if(duty>400 && duty<800) { //si el numero es mayor que 100 le asiugnamos el valor 100
output_high(on); // Encender LED
output_low(puff);
output_low(motor); }
if(duty<400) { //si el numero es mayor que 100 le asiugnamos el valor 100
output_high(motor); // Encender LED
output_low(on);
output_low(puff); }
//SET_PWM1_DUTY(duty); //establecemos el nuevo ciclo d etrabajo
}
}
PD: Adjunto codigo en C, hex y simulacion en proteus.