Hola buena tarde, espero me puedan ayudar con el siguiente problema, tengo un pic 18f4550, al cual le ingreso un voltaje de 3.5v en la patita AN0, esperando visualizar ese voltaje en un lcd16x2, sin embargo mis niveles (que van desde 0 a 1023, ya que uso el adc=10) cambian mucho y mi lcd me manda valores de 3.78, 3.72, 3.75, 3,80, y no se queda fijo
Ya me he roto la cabeza pero no puedo estabilizar la lectura de los niveles, cabe mencionar que el voltaje de entrada de 3.5 viene de una fuente de poder fija y estable que aparentemente no varia pues se mide a la par con el multimetro
Aqui mi codigo
#include <18f4550.h>
#device adc=10
#FUSES HSPLL,PLL2,USBDIV,CPUDIV1,NOWDT,NOPROTECT,NOLVP
#use delay(clock=48M)
#define LCD_RS_PIN PIN_B1 ////
#define LCD_RW_PIN PIN_B2 ////
#define LCD_ENABLE_PIN PIN_B3 ////
#define LCD_DATA4 PIN_B4 ////
#define LCD_DATA5 PIN_B5 ////
#define LCD_DATA6 PIN_B6 ////
#define LCD_DATA7 PIN_B7 ////
#include <lcd.c>
int16 nivel;
float voltaje;
void main()
{
lcd_init();
delay_ms(100);
setup_adc_ports(an0);
setup_adc(adc_clock_internal);
for(;
{
delay_ms(10);
set_adc_channel(0);
delay_us(20);
nivel=read_adc();
voltaje=(5.0*nivel)/1023.0;
delay_ms(1);
lcd_gotoxy(1,1);
printf(lcd_putc,"nivel=%lu",nivel);
delay_ms(1);
lcd_gotoxy(1,2);
printf(lcd_putc,"voltaje=%fv",voltaje);
delay_ms(1);
}
}