Saludos a todos en el foro:
Pues veran estoy realizando un identificador de colores, ya tengo mi acondicionador de señal que me da de 0-5V dependieendo del color, pero..
...tengo un problema con el ADC del Pic, despliego en el LCD el valor que lee el ADC y cuando no conecto nada a la entrada tengo un (ff) y cuando la entrada la pongo a tierra obtengo un (00). por un momento pense que esto era bueno, pero cuando conecto una señal de entrada de .5 -4.5V sigo obteniendo un (FF) como si no contara la señal de entrada. entonces revise con un multimetro el puerto RA0 con el Voltimetro y encontre una señal de 4.9V no importando el valor de la entrada excepto cuando la conecto a tierra. Aclaro que utilizo la misma fuente y probe una externa uniendo las tierras pero tampoco.
Pienso que es problema en mi codigo. por favor solicito su experiencia
para solucionar esto
claro que tambien se aceptan consejos y opiniones acerca de este.
#include <16F874A.H>
#device *=16 ADC=8
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use rs232(baud=9600)
#include <LCDC2.C>
#include <stdlib.h>
void main()
{
int value;
LCD_Init();
LCD_PutCmd ( CLEAR_DISP );
LCD_SetPosition ( LINE_1 + 0 );
printf ( LCD_PutChar, "Identificador de " );
LCD_SetPosition ( LINE_2 + 5 );
printf ( LCD_PutChar, "Colores" );
delay_ms(255);
delay_ms(255);
delay_ms(255);
delay_ms(255);
do { //ciclo (do )para refrescar lectura
setup_port_a( ALL_ANALOG ); //configuracion del ADC
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel( 0 ); //RA0 como entrada
value = Read_ADC(); //leyendo el ADC
if (value>0xfc & value<=0xff) //rango para el color Blanco
{
LCD_PutCmd ( CLEAR_DISP );
LCD_SetPosition ( LINE_1 + 1 );
printf(LCD_PutChar,"A/D = %2x" , value);
LCD_SetPosition ( LINE_2 + 5 );
printf(LCD_PutChar,"Blanco"

;
delay_ms(255); //evitar parpadeo de la lectura
delay_ms(255);
delay_ms(255);
delay_ms(255);
}
if (value>=0x00 & value<0x05) //rango para el color negro
{
LCD_PutCmd ( CLEAR_DISP );
LCD_SetPosition ( LINE_1 + 1 );
printf(LCD_PutChar,"A/D = %2x" , value);
LCD_SetPosition ( LINE_2 + 5 );
printf(LCD_PutChar,"Negro"

;
delay_ms(255);
delay_ms(255);
delay_ms(255);
delay_ms(255);
}
if (value>=0x14 & value<0x32) // rango para el color azul
{
LCD_PutCmd ( CLEAR_DISP );
LCD_SetPosition ( LINE_1 + 1 );
printf(LCD_PutChar,"A/D = %2x" , value);
LCD_SetPosition ( LINE_2 + 5 );
printf(LCD_PutChar,"azul"

;
delay_ms(255);
delay_ms(255);
delay_ms(255);
delay_ms(255);
}
if (value>=0x40 & value<0x70) //rango para el color cafe
{
LCD_PutCmd ( CLEAR_DISP );
LCD_SetPosition ( LINE_1 + 1 );
printf(LCD_PutChar,"A/D = %2x" , value);
LCD_SetPosition ( LINE_2 + 5 );
printf(LCD_PutChar,"Cafe"

;
delay_ms(255);
delay_ms(255);
delay_ms(255);
delay_ms(255);
}
}
while (TRUE) ;
}