MicroCode Studio y PBP: Uso del ADC con PIC16F877 – Display de 7 segmentos

Siguiendo con las prácticas en Pic Basic Pro y utilizando el MicroCode Studio para nuestros Microcontroladores PIC, en esta ocasión utilizaremos el ADC del PIC16F887 para encender un display de 7 segmentos.

Se tiene un display de7 segmentos de cátodo común conectado al puerto B del microcontrolador (RB0-RB6), un potenciómetro conectado al canal analógico (RA0), además una resistencia conectado al Master Clear (MCLR) para que funcione el PIC, se utiliza el oscilador interno del PIC a 4 MHz. Recordar que los pines de alimentación del PIC son: 5 para GND y 14 para Vcc=5 Volts, el circuito utilizado se muestra a continuación:
Ahora se debe de configurar ciertos registros para poder utilizar el ADC para ser exactos necesitamos configurar:
  • ADCON0: Controla la operación del modulo A/D
  • ADCON1: Configuración de las funciones de los pines de los puertos del A/D (analógicos o digitales, uso o no de voltaje de referencia externo)
Para saber exactamente como configurar el PIC utilizado necesitamos el Datasheet en este caso es el del PIC16F877A y par esto tenemos lo siguiente:

Explicaremos la configuración del ADCON0=%11000001.
  • Bit 7-6: El clock del ADC es RC derivado del oscilador interno.
  • Bit 5-3: Solo utilizaremos el canal analógico 0 (AN0).
  • Bit 2: Bit de estado de conversión cero significa que la conversión no está en progreso.
  • Bit 1: No se utiliza.
  • Bit 0: Habilita el ADC, 1 significa inicio de operación del módulo.
Explicaremos la configuración del ADCON1=%10001110.
  • Bit 7: 1 es justificación a la derecha.
  • Bit 6: El clock del ADC es RC derivado del oscilador interno.
  • Bit 5-4: No se usan.
  • Bit 3-0: V de referencia – es VSS, V de referencia + es VDD y RA0 como analógico.
Antes de usar esta función, es necesario asignar como entrada analógica el pin correspondiente con la función TRIS.

          TRISA.0=1;

Ahora bien como lo que queremos es ver en el display los números del 0 al 9 cuando se varié la posición de un potenciómetro tenemos la siguiente tabla que nos mostrara la forma de activar los pies de salida para ver los números adecuados. También se muestra los números en decimal, hexadecimal y binario esto nos será útil al momento de realizar la programación, que son las tres formas de mandar datos al puerto B de nuestro PIC.
Prosigamos realizando el código para ello varios DEFINEs pueden también ser utilizados, si se desea saber más de ellos puedes hacerlo en la barra de herramientas Help>>Help Topics>>PICBASIC PRO Basics>>Define. Los valores utilizados se muestran a continuación:

          DEFINE ADC_BITS 10; Uso del ADC de 10 bits.
          DEFINE ADC_CLOCK 3; Uso del clock RC=3.
          DEFINE ADC_SAMPLEUS 50; Fija el tiempo de muestreo en microsegundos.

La función del compilador que lee el dato del pin de ADC es ADCIN y su sintaxis es:

ADCIN canal, variable donde se guarda el dato. Para nuestro ejemplo tenemos ADCIN 0, RES; Donde RES es una variable tipo Word donde se almacena el valor leído por el ADC.

Ahora tenemos la instrucción VAL=RES/113; Con esto sabemos cada cuando se mostrara un numero en el display y el número 113 se obtiene de dividir 1023 entre 9 ya que son 9 números los que se desean mostrar.

A continuación el código completo:
Se tiene el SELECT CASE VAL; lo que se hace con esto es introducir la variable VAL a casos que en este ejemplo son 10 ya que el caso cero se muestra en el display de 7 segmentos un cero, con forme va aumentado la variable van cambiando los números.

Material:
  • 1 PIC16F887
  • 1 Display de 7 segmentos cátodo común
  • 7 Resistores de 330Ω
  • 1 Resistor de 1KΩ
  • 1 Potenciómetro de10KΩ
Dejo el vídeo (En el vídeo solo cuenta hasta 5, solo le agregue los otros cuatro números para ver mejor el ejemplo) :
Aquí el enlace para DESCARGAR los archivos disponibles desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare lo mas pronto posible responderlas...

No hay comentarios:

Publicar un comentario