MicroCode Studio & PBP: Uso de 3 canales analogicos con el PIC16F887 - Encender LEDs

Saludos a todos los seguidores!!! Hace unos días un seguidor del blog me comentaba que estaba realizando su practica del ADC en PBP y Microcode Studio y se encontró la publicación "Uso del ADC con  PIC16F887 - Encender LEDs" pero tenia problemas al intentar leer mas de una entrada analógica ya que solo podía leer una sola entrada a la vez, bueno revisando el datasheet se me ocurrió una solución (mejor dicho una propuesta) para resolver su problema y es ese es el motivo de esta publicación.  

Circuito:
Para iniciar seguí con la propuesta de encender unos LEDs conectados al puerto B, C y D de nuestro PIC16F887, como entradas he colocado un potenciometro en AN0, AN1 y AN4, lo demás pues ya es básico su oscilador y botón de Reset, la mecánica sera fácil para cada potenciometro le toca encender una cantidad de LEDs (que son los que están en cada puerto), así que el circuito nos queda de la siguiente forma:


Ahora bien la teoría del ADC y como configurarlo esta en la publicación antes mencionada, retomando el código anterior se puede hacer este ejemplo para iniciar lo único que se debe de hacer es leer AN0 y guardar el valor en una variable, después leemos AN1 y lo guardamos en otra variable, por ultimo leer AN4 y guardarlo en una tercera variable (si se tiene mas entradas pues se sigue la misma mecánica), procesamos el valor leido o en este caso hacemos la división y luego mostramos los valores en el puerto, bueno esta es la forma en la que se me ocurrió resolverlo se que el código falta pulirlo y depurarlo pero para efectos demostrativos es suficiente.    

Código:
El código es el siguiente:
'****************************************************************
'* Name : USO DE 3 CANALES ANALOGICOS CON EL PIC16F887 *
'* Author : https://mrchunckuee.blogspot.com/ *
'* Notice : Copyright (c) 2014 MrChunckuee *
'* : All Rights Reserved *
'* Date : 01/06/2014 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEFINE OSC 4
; PARÁMETROS DEL ADC
DEFINE ADC_BITS 10 ; NÚMERO DE BITS
DEFINE ADC_CLOCK 3 ; USAR CLOCK RC DEL ADC
DEFINE ADC_SAMPLEUS 50 ; TIEMPO DE MUESTREO EN 50uS
; VARIABLES
RES_AN0 VAR WORD ;
RES_AN1 VAR WORD ; VARIAVLE PARA EL RESULTADO DE LA CONVERSIÓN
RES_AN4 VAR WORD ;
VAL_AN0 var BYTE ;
VAL_AN1 var BYTE ;VARIABLE PARA LA SALIDA
VAL_AN4 var BYTE ;
; CONFIGURACION DE ENTRADAS-SALIDAS
TRISA.0 = 1 ; RA0 (AN0) COMO ENTRADA
TRISA.1 = 1 ; RA1 (AN1) COMO ENTRADA
TRISA.5 = 1 ; RA5 (AN4) COMO ENTRADA
TRISB = 0 ; PORTB SALIDA (ADC)
TRISC = 0 ; PORTC SALIDA (ADC)
TRISD = 0 ; PORTD SALIDA (ADC)
;LIMPIAMOS EL PUERTO ANTES DE MOSTRAR
PORTA = 0
PORTB = 0
PORTC = 0
PORTD = 0
MAIN:
GOSUB CONFIG_ADC ;CONGIGURAMOS Y LEEMOS EL ADC
; DIVIDIMOS ENTRE 127 YA QUE 1023/8 LEDS = 127.875
; LO DEJAMOS EN 127 PARA TENER UNA TOLERANCIA
VAL_AN0 = RES_AN0/127
VAL_AN1 = RES_AN1/127
VAL_AN4 = RES_AN4/127
;ENDENCEMOS LOS LEDs EN B, C Y D DEPENDIENDO DEL VALOR OPTENIDO
GOSUB MUESTRO_AN0
GOSUB MUESTRO_AN1
GOSUB MUESTRO_AN4
GOTO MAIN; REGRESA A LA ETIQUETA MAIN (BUCLE INFINITO)
CONFIG_ADC:
ADCON1 = %10000000
ADCON0 = %11000001 ; SELECCIONA AN0
ADCIN 0, RES_AN0 ; LEER AN0
ADCON0 = %11000101 ; SELECCIONA AN1
ADCIN 1, RES_AN1 ; LEER AN1
ADCON0 = %11010001 ; SELECCIONA AN4
ADCIN 4, RES_AN4 ; LEER AN4
RETURN
MUESTRO_AN0:
; ESTO ES PARA ENCENDER LOS LEDS DEL PUERTO B
; DEPENDIENDO DEL VOLTAJE DE ENTRADA EN RA0
SELECT CASE VAL_AN0
CASE 0
PORTB = %00000000
CASE 1
PORTB = %00000001
CASE 2
PORTB = %00000011
CASE 3
PORTB = %00000111
CASE 4
PORTB = %00001111
CASE 5
PORTB = %00011111
CASE 6
PORTB = %00111111
CASE 7
PORTB = %01111111
CASE 8
PORTB = %11111111
END SELECT
RETURN
MUESTRO_AN1:
; ESTO ES PARA ENCENDER LOS LEDS DEL PUERTO C
; DEPENDIENDO DEL VOLTAJE DE ENTRADA EN RA1
SELECT CASE VAL_AN1
CASE 0
PORTC = %00000000
CASE 1
PORTC = %00000001
CASE 2
PORTC = %00000011
CASE 3
PORTC = %00000111
CASE 4
PORTC = %00001111
CASE 5
PORTC = %00011111
CASE 6
PORTC = %00111111
CASE 7
PORTC = %01111111
CASE 8
PORTC = %11111111
END SELECT
RETURN
MUESTRO_AN4:
; ESTO ES PARA ENCENDER LOS LEDS DEL PUERTO D
; DEPENDIENDO DEL VOLTAJE DE ENTRADA EN RA4
SELECT CASE VAL_AN4
CASE 0
PORTD = %00000000
CASE 1
PORTD = %00000001
CASE 2
PORTD = %00000011
CASE 3
PORTD = %00000111
CASE 4
PORTD = %00001111
CASE 5
PORTD = %00011111
CASE 6
PORTD = %00111111
CASE 7
PORTD = %01111111
CASE 8
PORTD = %11111111
END SELECT
RETURN
END; FIN DEL PROGRAMA

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

      0 Comentarios