el CCS divide la lectura analogica en 4

#1
Hola

De antemano gracias a quienes me puedan colaborar con este problema. estoy haciendo un programa de prueba con el conversor análogo digital del pic16f877A, el programa debe leer la entrada análoga y si el valor es mayor a una contante (en este caso 128) encender un led en rb0, a parte lo puse a mostrar el valor binario de la entrada en el puerto D. el código es el siguiente:
Código:
#INCLUDE <16f877a.H>
#USE DELAY (CLOCK=4000000)
int16 entrada=0;
VOID MAIN (VOID)
{
setup_adc (adc_clock_internal);
setup_adc_ports (an0);
while(true)
{
set_adc_channel (0); 
entrada=read_adc(); 
output_d(entrada); 
if (entrada>128) 
{
output_high (pin_b0);
}
else
{
output_low (pin_b0);
}
}
}
La simulación la realice en pic simulator que me permite ver el valor de la entrada analógica.

Como el conversor adc del pic es de 10 bit su valor máximo es de 1023, lo que sucede es que el CCS esta dividiendo en 4 la el valor de la variable entrada que es a la que cargo el valor de la conversión del adc.
lo se por que el puerto D incrementa en 1 cada 4 cifras de la entrada análoga y a demas que la activación del rbo se hace con el valor 516 (4 veces 129).
¿por que esta haciendo eso?

yo en ningún lado realice esta operación de modo que el en algún lugar esta realizando esta división, me imagino que para igualar la conversión a 8 bit. ¿hay alguna forma de deshabilitar esto? tal vez en alguna librería o algo así.
 
Última edición por un moderador:
#2
cual es el valor de la tension de referencia del conversor y que tension le estas poniendo a la entrada?
 
#3
Como el conversor adc del pic es de 10 bit su valor máximo es de 1023, lo que sucede es que el CCS esta dividiendo en 4 la el valor de la variable entrada que es a la que cargo el valor de la conversión del adc.
Si no estableces que el ADC va a trabajar a 10 Bits, por default quedará en 8 Bits.
Y en tu código no lo estás estableciendo.
Debes hacer por ejemplo...
#Include <16F877A.H>
#Device ADC = 10

Como tienes declarada la variable (entrada) como int16, por eso no te funciona.
Cámbiala a Int8, o establece que el ADC trabajará a 10 Bits como te mencione.

Saludos.
 

Temas similares

Arriba