Interrupción ADC PIC


Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

Interrupción ADC PIC, es necesario comprender la utilización del módulo convertidor analógico digital del microcontroladore PIC, esa información se puede encontrar aquí, en este apartado se comenta como utilizar la interrupción ADC PIC que se produce cuando se termina la conversión de una entrada analógica a digital.

🙂 Descargate el PDF de este contenido desde aquí

Los pasos a seguir para este caso son los siguientes:

  1. Configurar las interrupciones poniendo los bits 7 (GIE) y 6 (PEIE) del registro INTCON y el bit 6 (ADIE) del registro PIE1 a 1 y el bit 6 (ADIF) del registro PIR1 a 0;
  2. Configurar que pines serán utilizados como entradas analógicas, si se quiere una tensión de referencia diferente a la tensión de trabajo del PIC, lo cual como se ha comentado lineas arriba se hace con los bits 3, 2, 1 y 0 del registro ADCON1.
  3. Elegir cual será el reloj a utilizar para obtener el tiempo de conversión adecuado, que tendrá que ser mayor a 1,6us, lo cual se hace mediante los bits 7 y 6 del registro ADCON0 junto con el bit 6 del registro ADCON1.
  4. Seleccionar cual será la entrada analógica a leerse, lo cual se hace mediante los bits 5, 4 y 3 del registro ADCON0.
  5. Activar el conversor analógico digital PIC poniendo a 1 el bit 0 del registro ADCON0.
  6. Esperar el tiempo de adquisición necesario para que el condensador del módulo conversor analógico digital PIC se cargue en forma adecuada.
  7. Poner a 1 el bit 2 del registro ADCON0 para que comience la conversión de la tensión almacenada en el condensador del conversor analógico digital PIC y se guarde este valor en forma binaria en los registros ADRESH y ADRESL.
  8. Esperar a que se produzca la interrupción.
  9. Leer los registros ADRESH y ADRESL que es donde se ha guardado el número binario que representa el valor de la señal analógica y poner a 0 el bit 6 (ADIF) del registro PIR1.

Interrupción ADC PIC en el XC8

Para habilitar la interrupción ADC PIC los bits 7 y 6 del registro INTCON se pondrán a 1 en el XC8 esto se hace así:

INTCON=0b11000000;//Se habilitan el uso de las interrupciones

Para habilitar la interrupción ADC PIC por la finalización de una conversión analógica digital con el modulo ADC, del registro PIE1 se pone a 1 su bit 6, lo que en el XC8 se hace así

PIE1bits.ADIE=1;//El bit 6 del registro PIE1 a 1 para habilitar la interrupción ADC PIC.

El bit 6 del registro PIR1 se pondrá a 0 para detectar que se ha producido una interrupción ADC PIC, si  este bit está a 1 no se detectará la interrupción ADC PIC en el XC8  se hará así.

PIR1bits.ADIF=0;//El bit 6 del registro PIR1 a 0 para que ocurran las interrupciones.

Para el uso del módulo ADC en el XC8, se han definido los nombres de los registros a utilizar para el control del convertidor analógico digital como ADCON0 y ADCON1, los cuales se pueden configurar en forma binaria, decimal o hexadecimal.

En el caso de usar un cristal de 4Mhz, para obtener un tiempo de conversión mayor a 1,6us se utilizará un reloj que sea Fosc/2 con lo cual se logra que el tiempo de conversión sea de 2us, para lograr esto se ponen los bits 7 y 6 del registro ADCON0 a 0 y el bit 6 del registro ADCON1 también a 0.

Si se quiere elegir por ejemplo el canal 3 o la entrada analógica 3 AN3, el el registro ADCON0 se tendrá que poner su bit 5 a 0 y sus bits 4 y 3 a 1.

Para iniciar la conversión de pone el bit 2 del registro ADCON0 a 1, el cual luego de la conversión se pondrá automáticamente a 0 provocando una interrupción.

El bit 1 del registro ADCON0 no se usa por lo que se pone a 0.

Para activa el módulo conversor analógico digital pic el bit 0 del registro ADCON0 se pondrá a 1.

Para la justificación a la derecha del número binario de 10 bits que representa el valor analógico, el bit 7 del registro ADCON1 se pone a 1.

El bit 6 del registro ADCON1 trabaja junto con los bits 7 y 6 del registro ADCON0 para obtener el tiempo de conversión, que para este ejemplo será de 2 us.

Los bits 5 y 4 del registro ADCON1 no se usan por lo que se ponen a 0.

Con los bits 3, 2, 1 y 0 del  registro ADCON1 de acuerdo a la tabla vista líneas arriba, se elige alguna de las combinaciones que incluyan el uso de la entrada analógica 3 AN3 por ejemplo 0100, con lo cual también se indica que se usarán las entradas AN1 y AN0, en este caso no hay una opción para utilizar solo la entrada AN3, cosa que en otros microcontroladores PIC si es posible.

Luego se tendrá:

ADCON0=0b00011101;   //fosc/2 AN3 conversión iniciada ADC activado.

ADCON1=0b10000100;   //justificación derecha fosc/2 AN3

Si se necesita manipular solo uno de los bits de estos registros, por ejemplo para activar el ADC será así:

ADCON0bits.ADON=1;   //ADC activado

y para desactivarlo sería algo así:

ADCON0bits.ADON=0;   //ADC desactivado

Para iniciar la conversión sería algo así:

ADCON0bits.GO=1;   //Iniciar la conversión, este bit se pone automáticamente a 0 cuando la conversión termina, a la vez que se producirá una interrupción.

Y así se pueden manipular en forma independiente cada uno de los bits de estos registros, ademas el MPLABX tiene una ayuda que hace aparecer estos manipuladores y poder seleccionar el que se desee utilizar.

Para guardar el número de 10 bits que representará el valor analógico, los nombres de los registros que almacenan este valor en el XC8 se han definido como ADRESH y ADRESL de 8 bits cada uno, dependiendo si la justificación se ha elegido a la derecha o a la izquierda el número se guardará de diferente manera, por ejemplo si la justificación es a la derecha, eso indica que los 2 bit mas significativos del número estarán en los bits 1 y 0 del registro ADRESH, mientras que los 8 bits menos significativos del número estarán en el registro ADRESL, luego para la lectura de este número se procede como se indica a continuación.

Se crea una variable entera que en el XC8 estas variable son de 16 bits y se le asigna el valor del registro ADRESH

int numero_adc=ADRESH;// en la variable entera numero_adc se guardan los 2 bits mas significativos del número que representa el valor analógico, estos se ubicarán en los bits 1 y 0 de la variable numero_adc, luego hay que hacer un corrimiento de 8 bits hacia la izquierda en la variable numero_adc para que estos bits se ubiquen en los bits 10 y 9 de la variable numero_adc, sería algo así

numero_cad=numero_adc<<8; //Ahora los 2 bits mas significativos del número binario que representa el valor analógico están ubicados en los bits 10 y 9 de la variable numero_adc.

Ahora a la variable numero_adc se le sumaran los 8 bits menos significativos del numero binario que representa el valor analógico y que está almacenado en el registro ADRESL como se indica

numero_cad=numero_adc+ADRESL; //de esta manera el número binario de 10 bits que representa el valor analógico queda almacenado o guardado dentro de la variable numero_adc la cual puede utilizarse al gusto según las necesidades que se tenga de este número.

Ejemplo interrupción ADC PIC 

En el siguiente ejemplo, mediante una resistencia variable, a la entrada analógica AN3 del PIC16F877A se le hará llegar una señal analógica que va desde 0V a 5V, esa señal será convertida a digital cuyos valores en binario serán 0000000000 para 0V y 1111111111 para 5V los cuales serán visibles por medio de unos leds conectados a los puertos B  y D, cada vez que se produzca una interrupción ADC PIC, tras la conversión en la rutina de interrupción ADC PIC los 8 bits menos significativos serán visibles en el puerto B y los 2 bits mas significativos serán visibles en el puerto D, cuando todos los leds estén apagados esto es 0 se estará midiendo 0V y cuando todos los leds estén encendidos esto es 1023 se estará midiendo 5V, los valores binarios variarán de 0 a 1023 lo cual será visible por medio de los leds cada vez que se gire la resistencia variable para los diferentes valores de la señal analógica. En este caso se utilizará la interrupcion ADC PIC por finalización de conversión del modulo ADC.

El circuito utilizado es el siguiente:

interrupción adc pic

El código en el XC8 es el siguiente:

Una imagen del circuito realizado para el uso de la interrupción ADC PIC.

interrupción ADC PIC imagen

Si he logrado ayudarte en el uso de módulo convertidor analógico digital PIC, con la interrupción ADC PIC comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias.

Atte: MrElberni.

Compartir: Share on Facebook0Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0