MicroCode Studio y 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.

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:
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Ω
Como no podía faltar dejo el vídeo del circuito en funcionamiento:
Dejo todo el material disponible para DESCARGAR. Si tienes alguna duda, sugerencia, inquietud, trauma o comentario con respecto a este post, deja un comentario y tratare de responder lo mas pronto posible...
  • Actualización (05/12/2015): Se agrego el material para descarga.
MicroCode Studio y PBP: Uso del ADC con PIC16F887 – Encender LEDs MicroCode Studio y PBP: Uso del ADC con PIC16F887 – Encender LEDs Reviewed by Pedro Sánchez Ramírez on 1/24/2015 Rating: 5

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

Con la tecnología de Blogger.