MicroCode Studio & PBP: Uso del ADC con PIC16F887 – Encender LEDs

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 8 LEDs dependiendo del voltaje en un potenciómetro.

Circuito:
Se tiene 8 LEDs con su debida resistencia conectados al puerto D del microcontrolador, un potenciómetro conectado al canal analógico 0 (RA0) y su cristal de cuarzo con sus capacitores conectado en sus respectivos pines, además se incluye un pulsador y una resistencia conectados al Master Clear (MCLR) para usarlo como Reset del circuito, aunque para nuestro ejemplo no es muy utilizado ya que solo necesitamos conocer el funcionamiento básico del ADC. El circuito utilizado se muestra a continuación:

Código:
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 PIC16F887 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-2: Solo utilizaremos el canal analógico 0 (AN0).
  • Bit 1: Bit de estado de conversión cero significa que la conversión no está en progreso.
  • Bit 0: Habilita el ADC, 1 significa inicio de operación del módulo.
Explicaremos la configuración del ADCON1=%10000000.
  • Bit 7: 1 es justificación a la derecha.
  • Bit 6: No se usan.
  • Bit 5: V de referencia – es VSS.
  • Bit 4: V de referencia + es VDD.
  • Bit 3-0: No se usan.

Antes de usar esta función, es necesario asignar como entrada analógica el pin correspondiente con la función TRIS.

          TRISA.0=1;

El código de nuestro ejemplo se muestra a continuación:
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/127; Con esto sabemos cada cuanto se encenderá un LEDs y el número 127 se obtiene de dividir 1023 entre 8 ya que son 8 LEDs conectados al PORTD.

Se tiene el SELECT CASE VAL; lo que se hace con esto es introducir la variable VAL a casos que en este ejemplo son 9 ya que el caso cero apaga todos los LEDs, con forme va aumentado la variable van encendiendo los LEDs.

Material:
  • 1 PIC16F887
  • 8 LEDs
  • 8 Resistores de 330Ω
  • 1 Resistor de 1KΩ
  • 1 Pulsador
  • 1 Cristal de cuarzo de 4MHz
  • 2 Capacitores cerámicos de 33pF
  • 1 Potenciómetro de10KΩ
Video:
Como no podía faltar dejo el vídeo del circuito en funcionamiento.

Descargas:
      Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información 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 de responder lo mas pronto posible.


      Donaciones:
      Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


      Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

      Publicar un comentario

      6 Comentarios

      1. Hola, como seria el codigo en mplab por favor

        ResponderEliminar
        Respuestas
        1. Disculpa no lo tengo hecho en MPLAB, solo esta esto y es en PIC Basic Pro

          Eliminar
      2. Hola,
        Muchas gracias por este courso , soy de Francia y disculpa me por la faltas.

        tengo preguntas: la primera es hecho el ejemplo y para que functiona correctamete tengo de divisar el RES por mas o menos 9000 le hecho con un PIC 18F4550 me puedes explicarlo por favor

        Mi segunda pregunta : tengo un problema para construir un programa con functiones diferentes exemplo si cojo el USBproject para connectar el PIC 18F4550 en USB como tengo que integrar el codigo de conversion Analogico para que mi usb init functiona y el programa de conversion tambien

        otro ejemplo que es hecho utilizando el USBproject y hacer une include de un programma de LED que se enciende y se apaga todo los segundo y el USB no functiona

        Muchas gracias y hasta pronto

        HARRY

        ResponderEliminar
        Respuestas
        1. Saludos!!

          Respuesta 1: Bueno algo estas configurando mal en tu código (de ser posible mándame un correo con tu código que estas usando, para darle una checada), ya que no tendrías que dividir por 9000 para que funcione, probablemente no se este inicializando bien el ADC.

          Respuesta 2: De igual forma tendría que ver como estas haciendo o como esta tu código del tal USBproject y así podría decir puedes agregarlo en tal lugar o así.

          Te recuerdo que hace ya mucho que no uso PBP, pero si creo que podría ayudarte.

          Eliminar
        2. muchas gracias , te eviare el codigo manana

          Saludo

          Harry

          Eliminar
      3. Se me olvido utilizo une potentiometro de 10K

        Harry

        ResponderEliminar