Autor Tema: Inestabilidad en el conversor A/D 18F4553  (Leído 2936 veces)

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

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Inestabilidad en el conversor A/D 18F4553
« en: 25 de Abril de 2011, 18:24:13 »
Hola amigos, estoy realizando una aplicación con el PIC 18F4553 donde necesito el conversor AD a 12 bits, sólo he realizado un programa de prueba para verificar el conversor, me sorprende la inestabilidad de los datos, en 300mV presenta un error aproximado de 4 LSB y en 4.6V el error llega a ser hasta de 28 LSB.

En este mismo montaje he probado un 16F877 y el error máximo llega a ser de 1 LSB, he probado con filtros en retardos y no mejora.

Alguien ha tenido alguna experiencia similar con este PIC.

Muchas gracias.

Código de prueba

Código: [Seleccionar]
#include <18f4553.h>
#device adc=12
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_C6,rcv=pin_C7,timeout=4)

#fuses xt,cpudiv1,nomclr,nowdt,noprotect

#define salida portb,0
#define ad_ini adcon0,2

long valor_ad;
char cadena[5];

void conversion_ad();

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
#zero_ram //Borrado de la memoria ram

void main() //Rutina principal
{

setup_adc(adc_clock_div_16);
setup_adc_ports(an0);


while(true) //Rutina general
   {
   delay_ms(250);
   conversion_ad();
   }
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
void conversion_ad()
{
set_adc_channel(0);
delay_us(20);
valor_ad = read_adc();

sprintf(cadena, "%04lu", valor_ad);

puts(cadena);
}

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Inestabilidad en el conversor A/D 18F4553
« Respuesta #1 en: 25 de Abril de 2011, 18:43:29 »
  Fijate que en éste pic, como en otros de la serie 18, también hay que configurar el AdquisitionTime. Eso se hace modificando el registro ADCON2, que es en el mismo que se configura el clock del módulo AD. Habría que ver en la ayuda de CCS si no dice nada al respecto. También podés probar poniendo un clock para el conversor de "adc_clock_div_4", ya que según el datasheet usando esa configuración la frecuencia máxima de clock para que trabaje bien el AD es de 5MHz y como vos estás trabajando a 4MHz debería funcionar.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado hector.ar

  • PIC10
  • *
  • Mensajes: 22
Re: Inestabilidad en el conversor A/D 18F4553
« Respuesta #2 en: 25 de Abril de 2011, 21:10:24 »
¿No será que estas usando cristal de 4MHz, pero que el PLL lo lleva a 48MHz, para que funcione el puerto USB?
(me resultaría extraño que uses ese micro sin usar el puerto USB, pues sino usaria un PIC18F4523)
Si es así debes configurar muy bien lo que dice AngelGris, y revisar muy bien todos los bits de configuracion del ADC.
Saludos!
Héctor

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Inestabilidad en el conversor A/D 18F4553
« Respuesta #3 en: 25 de Abril de 2011, 22:12:02 »
Amigos gracias por responderme, ya he probado con diferentes divisores de frecuencia "adc_clock_div_4" y no mejora, la verdad utilicé este PIC porque requiero los 12 bit del ADC y fue el que conseguí más a la mano.

Saludos.
« Última modificación: 25 de Abril de 2011, 22:14:06 por Diego E. »

Desconectado NoSepComo

  • PIC18
  • ****
  • Mensajes: 305
Re: Inestabilidad en el conversor A/D 18F4553
« Respuesta #4 en: 26 de Abril de 2011, 04:08:52 »
Hola, pues si el error no está en el código, ya sabes, algo de la etapa de adquisición de datos puede estar mal conectado o calculado. El error lo obtienes simulando o en el montaje físico?, yo he tenido problemas usando el ADC de los PIC en una protoboard por las capacidades parásitas, etc, sobre todo si está un poco vieja.
Un saludo.