Hola a todos, estoy tratando de hacer funcionar un PWM mediante ADC y desplegar el valor en un LCD. Pero la señal es inestable. Haber si me pueden decir porque.
Adjunto una simulacion en proteus.
Gracias.
#include <16f877a.h>
#device adc=10 /// libreria para el manejo del pic16f877a
#use delay(clock=4000000) /// declara la frecuencia del cristal
#fuses XT,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c>
void main(void)
{
float ct ,bits;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
bits=read_adc();
set_adc_channel(0);
set_tris_c(0);
setup_timer_2(T2_DIV_BY_16,207,1);// El periodo de la señal PWM de 3.3 ms.
setup_ccp1(CCP_PWM); // Configura CCP1 en modo PWM
lcd_init();
lcd_gotoxy(6,1);
lcd_putc("PWM");
delay_ms(1000);
lcd_putc("\f");
while(true)
{
set_adc_channel(0);
delay_us(10);
bits=read_adc();
delay_us(10);
set_pwm1_duty(bits);// La anchura del pulso
ct=(bits*100)/1023;
lcd_gotoxy(1,1);
lcd_putc("FREC=300 HZ");
lcd_gotoxy(1,5);
printf(LCD_PUTC,"CICLO T=%4.2f",ct);
}}
Adjunto una simulacion en proteus.
Gracias.
#include <16f877a.h>
#device adc=10 /// libreria para el manejo del pic16f877a
#use delay(clock=4000000) /// declara la frecuencia del cristal
#fuses XT,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT
#include <lcd.c>
void main(void)
{
float ct ,bits;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
bits=read_adc();
set_adc_channel(0);
set_tris_c(0);
setup_timer_2(T2_DIV_BY_16,207,1);// El periodo de la señal PWM de 3.3 ms.
setup_ccp1(CCP_PWM); // Configura CCP1 en modo PWM
lcd_init();
lcd_gotoxy(6,1);
lcd_putc("PWM");
delay_ms(1000);
lcd_putc("\f");
while(true)
{
set_adc_channel(0);
delay_us(10);
bits=read_adc();
delay_us(10);
set_pwm1_duty(bits);// La anchura del pulso
ct=(bits*100)/1023;
lcd_gotoxy(1,1);
lcd_putc("FREC=300 HZ");
lcd_gotoxy(1,5);
printf(LCD_PUTC,"CICLO T=%4.2f",ct);
}}