TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: proycto(A) en 09 de Mayo de 2007, 21:25:04
-
hola a todos, estoy en mi proyecto de tesis y resulta que estoy programando el PIC16F877A para que actue como conversor analogico digital. Poseo un entrenador que es capaz de enviar los datos al pc a traves del RS232 y estos son recibidos por el programa hyperterminal.
El problema es que el rango de valores arrojados por el conversor es de solo 5 valores. los cuales son: 00;80;81;82;83;84;85.
No se como hacer para poder ampliar el rango de valores arrojados, para mi proyecto necesito minimo 100 valores.
bueno les adjunto el codigo para ver si me pueden ayudar, de antemano gracias.
#include "C:\Documents and Settings\Familia\Escritorio\PROGRAMA PULENTO\hhhh.h"
void main()
{
float value;
setup_adc_ports(RA0_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_counters(RTCC_INTERNAL,RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
SET_TRIS_A(0xff ); // habilitar puertos I/O
SET_TRIS_B(0x00 );
While (true) {
delay_us(10);
value=Read_adc();
OUTPUT_B(value);
printf("%2x\n\r",value);
}
}
Para quienes puedan ayudarme tambien me pueden escribir al mail mauricio.vivanco.s@gmail.com
-
primero, no se decirte si con esas instrucciones de setup_adc realmente enciendes el módulo. ¿puedes mostrar el valor de ADCON0 y ADCON1 ?
Otra cosa, veo muy poco usar 10useg de tiempo de demora para la captura. Aumentalo.
Por último, que voltaje de referencia tienes?
-
las instrucciones si encienden el modulo, y hay conversion. son instrucciones que el compilador (PIC C COMPILER) tiene para habilitar el puerto analogico y el reloj interno del pic.
el tiempo lo aumente, pero es lo mismo, con ese tiempo de muestreo no hay problemas.
el voltaje es de 5 volts, pero es una referencia interna la que se habilita, el pic de la serie 16F877A tiene esa posibilidad de habilitar una referencia interna con el propio voltaje de alimentacion del pic.
gracias por interesarte en el tema maunix.
-
hola proycto(A)
una pregunta: ¿que es lo que estas sensando?
¿los valores concuerdan con el montaje a la entrada?
recuerda que debe haber una r máxima a la entrada del canal para una adecuada conversión.
sería bueno que miraras si efectivamente se estan activando los bit´s de habilitación del CAD mediante un simulador, ya me he llevado mas de una sorpresita con esas funciones cerradas del ccs
-
Yo utilizo otro complilador de C, por lo que no puedo asegurarte, si la configuración del puertoA para que trabaje en Analógico es la correcta.
El fallo puede estar en que la función Read_adc() devuelve un entero de 10 bits y tu tratas de guardarla en una variable de tipo float. Debería de ser entero de 16 bits.
float value; --> int16 value;
Por otra parte cuando formateas en el printf %2x significa que muestre ese número en hexadecimal con dos cifras. Necesitarías 3 cifras para mostrar 10 bits
printf("%2x\n\r",value); --> printf("%3x\n\r",value);
Con 10 bits tienes 1024 posibles valores.
Por otra parte creo que 10 micro segundos para la conversion es muy poco tiempo.
Espero que te sirva de ayuda.