TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Diego E. 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
#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);
}
-
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.
-
¿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
-
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.
-
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.