Código CCS
#include <18F4550.h>
#device ADC=16
#use delay(internal=4000000)
#include <lcd.c>
void main()
{
int32 valordigital = 0, ciclodetrabajo;
float valoranalogico = 0;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM|CCP_SHUTDOWN_AC_L|CCP_SHUTDOWN_BD_L);
set_pwm1_duty(ciclodetrabajo);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Ciclo de trabajo " );
while(TRUE)
{
valordigital = read_adc();
valoranalogico = 5.00 * valordigital /65536.0;
ciclodetrabajo = (valoranalogico * 1020) / 5;
set_pwm1_duty(ciclodetrabajo);
lcd_gotoxy(1,2);
printf(lcd_putc,"%f porciento ",(valoranalogico * 100.00)/5.00);
}
}
Diagrama electrónico
#include <18F4550.h>
#device ADC=16
#use delay(internal=4000000)
#include <lcd.c>
void main()
{
int32 valordigital = 0, ciclodetrabajo;
float valoranalogico = 0;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL|ADC_TAD_MUL_0);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM|CCP_SHUTDOWN_AC_L|CCP_SHUTDOWN_BD_L);
set_pwm1_duty(ciclodetrabajo);
lcd_init();
lcd_gotoxy(1,1);
printf(lcd_putc,"Ciclo de trabajo " );
while(TRUE)
{
valordigital = read_adc();
valoranalogico = 5.00 * valordigital /65536.0;
ciclodetrabajo = (valoranalogico * 1020) / 5;
set_pwm1_duty(ciclodetrabajo);
lcd_gotoxy(1,2);
printf(lcd_putc,"%f porciento ",(valoranalogico * 100.00)/5.00);
}
}
Diagrama electrónico