Autor Tema: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados).  (Leído 3137 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado proycto(A)

  • PIC10
  • *
  • Mensajes: 6
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

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados)
« Respuesta #1 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?
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado proycto(A)

  • PIC10
  • *
  • Mensajes: 6
Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados).
« Respuesta #2 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.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados).
« Respuesta #3 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


La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado kankoo

  • PIC10
  • *
  • Mensajes: 1
Re: Problema con el conversor A/D del pic 16F877A (escaces de valores arrojados)
« Respuesta #4 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.