Autor Tema: Conversor AD - 30Fxxxx  (Leído 2973 veces)

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

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Conversor AD - 30Fxxxx
« 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
« Última modificación: 10 de Noviembre de 2010, 16:23:04 por Simon21 »
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: Conversor AD - 30Fxxxx
« Respuesta #1 en: 11 de Noviembre de 2010, 15:36:43 »
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
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL


 

anything