Hola!Pues el tema es que estoy intentado hacer un programa de prueba, que lea el valor en un potenciometro y lo muestre por un LCD, pero no consigo hacerlo funcionar bien.Este es el codigo:
#include <18F2550.h>
#device ADC=8
#fuses XT,NOWDT,NOPROTECT,NOLVP,NODEBUG,NOUSBDIV,VREGEN
#use delay(clock=4000000)
//Para poder acceder al registro
#byte ADCON2=0xFC0
//Pines para lcd_flex
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_C0
#define LCD_RW PIN_C1
#define LCD_E PIN_C2
#include "flex_lcd.c"
int valor;
void main()
{
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Establecer a como entrada
set_tris_a(0x01); //Entrada an0
//Se configura el ADC
//Reloj para el conversor
setup_adc(ADC_CLOCK_DIV_2);//De 2 a 64
/*
Se debe configurar el tiempo de adquisicion, para ello se accede al registro
ADCON2,Pag 257 datasheet, para un valor de 20Tadq se debe cargar el valor 111
en los bits 5-3 del registro, para ello aplicaremos una mascara OR 00111000
*/
ADCON2= ADCON2 | 0b00111000;
//Se define entradas analogicas y valores referencia
setup_adc_ports (AN0); //Elige terminales análogicas
//Se selecciona el canal
set_adc_channel(AN0);
lcd_init(); //inicializa lcd
lcd_putc('\f'); //borra lcd
lcd_gotoxy(1,1);
disable_interrupts(global);
while(1)
{
//Se selecciona el canal
set_adc_channel(AN0);//Si no va volver a poner
delay_ms(1);
valor=read_adc();//Inicia conversion y lee, hara espera automatica
delay_ms(1);
lcd_putc('\f'); //borra lcd
lcd_gotoxy(1,1);
printf(lcd_putc
,"Adc es : %u",valor
);//muestra dato delay_ms(250);
}
}
Buscando por el foro he encontrado un post propio de otra vez que tuve este problema y lo solucione determinando el tiempo de adquisicion del ADC, pero en este caso no funciona ni haciendo eso:
Serie18F configurando TadqHe probado con dos pics distintos, revisado el circuito, cambiando el potenciometro...Y siempre falla. Lo curioso es que la primera lectura que hace si es correcta, pero despues sin tocar el potenciometro el dato va variando : 255,12x,6x,3x, y se queda oscuilado entre 15-18; otra cosa curiosa es que una vez ha bajado a esos niveles, usando el potenciometro siolo varia de 5-6 hasta 28-29.
No se a que se puede deber, pero por mas vuelta que le doy no lo veo. A ver si a alguien se le ocurre algo, muchas gracias