TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: proycto(A) en 09 de Mayo de 2007, 21:25:04

Título: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados).
Publicado 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
Título: Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados)
Publicado por: maunix en 09 de Mayo de 2007, 23:03:39
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?
Título: Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados).
Publicado por: proycto(A) en 09 de Mayo de 2007, 23:28:12
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.
Título: Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados).
Publicado por: PalitroqueZ en 10 de Mayo de 2007, 12:13:17
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


Título: Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados)
Publicado por: kankoo en 10 de Mayo de 2007, 12:36:44
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.