TODOPIC
Microcontroladores PIC => dsPIC => Mensaje iniciado por: Simon21 en 10 de Noviembre de 2010, 16:20:08
-
Hola a todos, les comento que estoy intentando hacer una lectura de una tension continua
en una de las entradas del dsp pero tengo el grave problema que el micro se cuelga cuando
entra a un while en el cual espera que el adc le devuelva el valor = 1 para indicarle que la conversion
ha finalizado. Quizas estoy cometiendo algun error en la configuracion, pero seguramente debe ser
una pavada por la cual me esta rompiendo la cabeza hace varios dias, les dejo la parte del codigo en la cual
configuro el adc y tomo el valor de la conversion. El while en el cual el codigo se queda trabado, esta indicado
en otro color.
Saludos y gracias de antemano...
//SETUP ADC
/*
Registro ADCON1
El resultado de la conversion lo voy a leer en formato Unsigned Integer
Configuro que al setear el bit SAMP a 0 termina el muestreo y empieza la conv
*/
ADCON1bits.FORM = 0; // Formato
ADCON1bits.SSRC = 0; // Select Source
/*
Registro ADCHS
Configuro el AD para entrar con el AN0 por el muxA
Conecta RB0/AN0 al canal CH0 de entrada
*/
ADCHS = 0x0000;
/*
Registro ADCSSL
Deshabilito el escaneo de los canales para conversion
*/
ADCSSL = 0x0000; // Scan Select Register
/*
Registro ADCON2
*/
ADCON2 = 0;
/*
Registro ADCON3
*/
ADCON3 = 0x0002;
/*
Registro ADPCFG
Configuro solo como canal analogico el AN0 y AN1 el resto queda digital
*/
ADPCFG = 0xFFFC; //Configura todo el puerto B como digital.
// Limpio la bandera de interrupcion antes de habilitarla
IFS0bits.ADIF = 0;
// Disparo la conversion
ADCON1bits.ADON = 1;
setup_adc(ADC_CLOCK_DIV_8);
// main
ADCHS = 0x0000; // Canal AN0
ADCON1bits.SAMP = 1; // Disparo la conversion
DelayUs (50); // Tiempo de Adquisición
DelayMs (1000);
while (!ADCON1bits.DONE); // Espero que termine la conversion
ADCON1bits.DONE = 0;
DelayMs (1000);
CapturaAN0=ADCBUF0; // Obtengo un unsigned int
ADCHS = 0x0001; // Cambio a canal AN1
ADCON1bits.SAMP = 1; // Disparo la conversion
DelayUs(50); // Tiempo de Adquisición.
while (!ADCON1bits.DONE); // Espero que termine la conversion
ADCON1bits.DONE = 0;
CapturaAN1=ADCBUF0; // Obtengo un unsigned int
-
Solucionado, me estaba olvidando de la configuracion manual del conversor ad, especificamente, faltaba la siguiente linea
ADCON1bits.ASAM = 0;
Ojala le sirva a alguno para no perder tiempo
saludos