UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
FACULTAD DE INGENIERÍA
Laboratorio de Microcomputadoras
Profesor(a):
MOISES MELENDEZ REYES
EQUIPO 04
Nombre(s) Alumno(s) y Grupos de Teoría:
Fragoso Alarcón Alejandro Misael (02)
Lázaro Pérez Juan Carlos (04)
Rodriguez Vargas Jennifer (04)
Práctica No. 6
Convertidor Analógico/Digital
Semestre 2024-1
Fecha de entrega: 12/octubre/2023
Objetivo. Familiarizar al alumno con el uso y aplicación del Convertidor Analógico/Digital
de un microcontrolador.
Desarrollo
Código:
Este código está escrito en lenguaje ensamblador para el microcontrolador PIC16F877A y
se encarga de realizar una conversión analógico-digital (CAD) y mostrar el resultado en el
Puerto D del microcontrolador, el cual veremos representado en la tarjeta en los leds, Entre
cada conversión, hay un retardo generado por la subrutina retardo.
Simulación en Proteus
Código:
Este código configura el microcontrolador para realizar una conversión CAD y luego realiza
una serie de comparaciones basadas en el valor resultante para controlar el Puerto D, el
cual asignamos a una de las perillas reguladoras de voltaje de la tarjeta.
Limpiamos el registro ADCON1 para configurar los pines del Puerto A y E como canales de
entrada al CAD. Luego se establece el registro TRISD como cero para definir todos los
pines del Puerto D como salidas.
El programa entra en un bucle principal etiquetado como LOOP y se inicia la conversión
analógico-digital (CAD) mediante la instrucción BSF ADCON0,GO. Se compara el valor de
VALOR con varios umbrales y se realiza un salto condicional según el valor comparado para
saber qué número mostrar en el display de 7 segmentos.
Simulacion en Proteus:
El circuito empleado es el siguiente:
Propuesta Este programa funcionará de manera más o menos similar al anterior, solo que
esta vez en lugar de procesar una entrada analógica, serán 3, para ello analizaremos una
por una de manera subsecuente usando la herramienta integrada del propio
microcontrolador y configurándolo para que, una vez analice una, guarde su valor y pase a
analizar la siguiente, de tal forma que guarde los valores de los 3 potenciómetros, una vez
que ya los tengamos guardados, solo resta hacer una comparación entre estos 3 valores,
de esta forma obtendremos cual es el mayor y prenderemos el numero de les que
corresponden a la entrada de mayor voltaje.
Pseudocódigo
INICIO
CONFI PORTA,PORTB
EMPEZAR_
ANALISIS; recaudamos información de las entradas
ANALISIS ENTRADA 1;
Guardamos información en RAM
ANALISIS ENTRADA 2;
Guardamos información en RAM
ANALISIS ENTRADA 3;
Guardamos información en RAM
COMPROBACION DE ENTRADAS
¿Se recopilo toda información?
No: Espera
Si: Se comparan las entradas
Analisis E1, E2, E3:
¿E1 < E2?
Si: ¿E1 < E3?
Si → Call N1
NO→ Call N3
No: ¿E2< E3?
Si → Call N2
NO→Call N3
END
Código
processor 16f877
include<p16f877.inc>
val equ h'20'
analisis1 equ 0x21
analisis2 equ 0x22
analisis3 equ 0x23
org 0h
goto INICIO
org 05h
INICIO:
clrf PORTA ;Limpia el puerto A
clrf PORTB ;Limpia el puerto B
bsf STATUS,RP0
bcf STATUS,RP1 ;Cambio la banco de memoria 1
movlw 00h
movwf ADCON1 ;Configura puerto A y E como analogicos
movlw 3fh ; Valor para configurar los puertos A y E como
entrada
movwf TRISA ;Configura el puerto A como entrada
movlw h'0'
movwf TRISB ;Configura puerto B como salida
bcf STATUS,RP0 ;Regresa al banco 0
EMPEZARANALISIS:
movlw b'11000001' ;Configuracion ADCON0
movwf ADCON0 ; ADCS1:ADCS0 =Frecuencia interna del reloj del
A/C
;CHS2-0=000 (AN0)
;GO/DONE=0, es decir no ha empezado a
capturar
;bit vacio
; Encender convertidor.
call retardo
bsf ADCON0,2 ;Comenzamos la conversion
ESPERA:
btfsc ADCON0,2 ;Verificamos si ya se termino de retraer la
informacion
goto ESPERA ;No, seguimos esperando
movf ADRESH,w ;Si, pasamos la informacion al registro de
trabajo W.
movwf analisis1 ; la almacenamos temporalmente
movlw b'11001001'; ahora seleccionamos AN1 (canal 1)
movwf ADCON0 ; aplicamos el cambio
call retardo
bsf ADCON0,2; Empezamos la conversión
ESPERA1:
btfsc ADCON0,2 ; revisamos si ya terminó
goto ESPERA1
MOVF ADRESH,W ;Guardamos en RAM
MOVWF analisis2
movlw b'11001010'; ahora seleccionamos AN2 (canal 2)
movwf ADCON0
call retardo
bsf ADCON0,2; Empezamos la conversión
ESPERA2:
btfsc ADCON0,2 ; revisamos si ya terminó
GOTO ESPERA2
MOVF ADRESH,W ;Guardamos en RAM
MOVWF analisis3
;Comparamos ahora cual es la mayor
MOVF analisis1, w
subwf analisis2,w;
BTFSC STATUS, C ; se activó el carry?
GOTO l1Ml2;SI, por lo tanto, L2>L1
GOTO l2Ml1;NO L1>L2
l1Ml2:
movf analisis1,w
subwf analisis3,w
BTFSC STATUS, C; Se activó el carry?
GOTO n2;SI, por lo tanto L3>L1>L2
GOTO n0;NO, por lo tanto L1>L3>L2
l2Ml1:
movf analisis2,w
subwf analisis3,w
BTFSC STATUS,C
GOTO n2;L3>L2>L1
GOTO n1;L2>L3>L1
n0:
movlw 0X01 ;
movwf PORTB
GOTO EMPEZARANALISIS
n1:
movlw 0X03 ;
movwf PORTB
GOTO EMPEZARANALISIS
n2:
movlw 0X07 ;
movwf PORTB
GOTO EMPEZARANALISIS
retardo: ;Subrutina de retardo
movlw h'30'
movwf val
loop: decfsz val
goto loop
return
end
Ejecución
El circuito que creamos para la simulación en Proteus es el siguiente:
El ejecutar el programa de modo que se cumplan las condiciones para prender los
leds como se indica, podemos ver cada uno de los 3 casos:
Caso 1
Ve1>Ve2 y Ve3
Caso 2
Ve2>Ve1 y Ve3
Caso 3
Ve3>Ve1 y Ve2
Al final podemos ver como se cumple que indica correctamente en el panel de leds
el numero de la entrada de corriente.
Conclusiones
Fragoso Alarcón Alejandro Misael:
El Convertidor Analógico/Digital (ADC) es una pieza clave que permite al microcontrolador
interpretar señales analógicas del entorno y convertirlas en datos digitales comprensibles.
Esta funcionalidad es esencial en numerosas aplicaciones, desde sistemas de monitoreo
ambiental hasta controladores de dispositivos electrónicos esto facilita la interfaz entre el
mundo analógico y digital, brindando al microcontrolador la capacidad de procesar
información del entorno real.
Lázaro Pérez Juan Carlos:
Basado en el objetivo de la práctica, puedo concluir que el convertidor Analógico/Digital
tiene bastantes aplicaciones útiles en el campo de la electrónica —y por ende, en la
computación, ya que se usa para construir hardware (como los microprocesadores)—.
Por otra parte, aprendí cómo usar los puertos paralelos para realizar conversiones
de señales analógicas a digitales. Así como, su programación en lenguaje ensamblador
aplicado al PIC16F877A.
Rodríguez Vargas Jennifer:
Con el desarrollo de esta práctica aprendimos a configurar el microcontrolador para que
pueda recibir información analógica, analizarla y convertirla a formato digital, ya que
actualmente se requiere, ya que, la mayoría de los dispositivos actuales son digitales.
Además del uso del CAD, el conversor y los valores discretos que se pueden producir en un
rango de voltaje.