Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/02/2013 #1


el CCS divide la lectura analogica en 4
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í.
09/02/2013 #2

Avatar de chclau

cual es el valor de la tension de referencia del conversor y que tension le estas poniendo a la entrada?
09/02/2013 #3
Moderador

Avatar de D@rkbytes

german orlando niño uribe dijo: Ver Mensaje
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.
11/02/2013 #4


gracias por el dato. es que no estoy acostumbrado a programar en C, prefiero el asembler.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.