avanzado > Microcontroladores > Conversión AD

Conversión AD

introducción

Hasta ahora hemos trabajado con el PIC y con sus funciones básicas en las que utilizamos datos digitales; sin embargo, si observamos el mundo real, no hay muchas fuentes de señales digitales, al contrario, la mayoría de señales con las que trabajaremos son señales analógicas, las cuáles pueden ser leídas por los transductores.

Los valores que nos entregan los traductores o mal llamados “sensores” son señales analógicas, que varían en un rango determinado. Para poder usar estas señales con nuestro PIC 16F877A, debemos de realizar un proceso denominado Conversión Análogo Digital o ADC en inglés. Este proceso utiliza un rango de voltaje determinado y convierte lo analógico en señales digitales o binarias de un determinado número de bits. En este caso, el PIC posee un ADC de hasta 10 bits.

En este laboratorio aprenderemos a configurar el ADC que nos ofrece el PIC; configuraremos el canal leído y la cantidad de bits usados, también los mostraremos en los puertos de salida que posee.

Marco teorico

El módulo convertidor Análogo Digital (A/D) del PIC 16F877 tiene 8 canales de entrada. La conversión de la señal analógica aplicada (a uno de los canales) se plasma en número binario de 10 dígitos. El módulo A/D posee voltajes de referencia que pueden ser seleccionados para emplear las tensiones VDD, VSS del microcontrolador o puede emplear tensiones aplicadas a los pines RA2 o RA3 (incluso es posible establecer combinaciones de los anteriores valores).

Para operar el módulo ADC contamos con 4 registros:

  • Registro de resultado de byte alto de la conversión A/D (ADRESH). Banco 0, 0x1E
  • Registro de resultado de byte bajo de la conversión A/D (ADRESL). Banco 1, 0x9E
  • Registro 0 de control del módulo A/D (ADCON0). Banco 0, 0x1F
  • Registro 1 de control del módulo A/D (ADCON1). Banco 1, 0x9F

El detalle del registro ADCON0 se muestra a continuación:



Y el detalle del registro ADCON1 se muestra a continuación:



El registro ADCON1 configura las funciones de los pines de entrada al módulo. Como se aprecia se puede configurar los pines del puerto A como entradas analógicas inclusive la línea RA3 puede funcionar como el voltaje de referencia.

Los registros ADRESH:ADRESL contienen el resultado de la conversión (10 bits). Cuando se ha completado una conversión el resultado es almacenado en ADRESH:ADRESL y además el bit GO/-DONE (registro ADCON bit 2) se pone a 0-lógico y el bit ADIF (registro PIR1 bit 7) se pone como 1-lógico. El registro PIR1 ocupa la posición 0x0C del banco 0.

Desarrollo

Parte I

  1. Creamos un nuevo proyecto, y luego copiamos el siguiente programa.

  2. Compilamos el código y creamos el circuito en Proteus

  3. Iniciamos la simulación y observamos lo siguiente

    Moviendo el potenciómetro:


  4. El valor analógico del potenciómetro leído en el pin AN0 es mostrado luego de ser convertido a binario en el puerto B.
  5. Código comentado.

  6. Preguntas:
    1. ¿Qué sucede en el ADC?
      Se configura para leer el valor analógico del pin AN0 y tendrá una resolución de 8 bits.
    2. ¿En qué consiste el primer programa?
      Leemos el valor analógico del pin AN0 y lo mostraremos convertido en digital en los leds del PORTB
    3. ¿Cuál es la fórmula que nos indica la resolución del adc de 8 bits?
      La resolución es : (Vmax - Vmin) / ( 2n(bits) - 1) = 0,0196
    4. ¿Para un voltaje 2,8 V, de cuánto es la conversión binaria?
      El valor binario se calcula: Vin / Resolución = 142,8 == 143 = 10001111 (2)
    5. ¿Por qué utilizamos el puerto B?
      Para mostrar el valor de la conversión, debemos utilizar 8 bits, por lo que podemos utilizar el puerto B, C o D.
    6. Explicar brevemente la función de la librería adc.asm
      Contiene tres rutinas para controlar el conversor ADC. La primera es para configurar desde qué canal leerá el valor analógico. La segunda y tercera es para escoger la cantidad de bits en los que será convertida la señal analógica.
    7. ¿En qué canal del PIC está ingresado el voltaje?
      En el canal 0.

    Parte II

  7. Creamos un nuevo archivo y cpiamos el siguiente programa
  8. Compilamos el código y creamos el circuito en Proteus
  9. Iniciamos la simulación y observamos lo que sucede.

    Variamos el potenciómetro

  10. El valor analógico leído en el pin AN5 es mostrado en 10 bits, 8 del puerto B y 2 del puerto C.
    Con 10 bits tenemos una mayor cantidad de números disponibles para digitalizar.
  11. Código comentado.
  12. Preguntas
    1. ¿En qué consiste el segundo programa?
      Este programa lee el valor analógico del pin AN5 y lo muestra digitalizado por el puerto B( 8 bits menos significativos) y C (otros 2 bits).
    2. ¿Hasta cuánto puede ser el valor cargado de W antes de llamar a Inicio ADC?
      El PIC16F877A pone a nuestra disposición 8 pines para lecturas analógicas (AN0-AN7), y a W debemos cargar desde .0 hasta .7.
    3. ¿Por qué se usan dos puertos de salida para este programa?
      Porque cada puerto de salida es para 8 bits, y el conversor nos entrega 10 bits.
    4. ¿Cuál es la ecuación para la resolución en el segundo programa?
      La resolución es : ( Vmáx - Vmín)/(2n(bits)-1)=0.0048875
    5. ¿En qué canal del PIC se están ingresando las variaciones de coltaje dc?
      Canal 5

Archivos: programas, simulaciones, etc

Linksappsclose