Carrera de Ingeniería en Electrónica y Automatización
Período: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas
LABORATORIO DE SISTEMAS MICROPROCESADOS PRÁCTICA N°9
1.
TEMA :
BARRIDO DE DISPLAY
2.
OBJETIVO:
Diseñar un circuito y el software asociado para manejar 4 display de 7 segmentos usando la técnica de barrido.
3. MARCO TEÓRICO
El número limitado de líneas de entrada / salida que dispone el microcontrolador obliga a usar técnicas especiales cuando se deben manejar periféricos que requieren un elevado número de líneas de control. Uno de esos casos es la presentación de números que tengan varios dígitos.
En esta práctica se va a desarrollar un programa que permita mostrar 4 dígitos decimales (BCD) en 4 displays de 7 segmentos de ánodo o cátodo común, mediante barrido de los displays, tomar en cuenta que, para una correcta visualización de los símbolos en los displays, es necesario mantener activado durante un tiempo corto cada uno de los dígitos antes de continuar con el barrido.
4. TRABAJO PREPARATORIO
4.1. Modificar la subrutina de conversión de binario a BCD para 4 dígitos. En este caso debe iniciar restando 1000, para lo que debe usar aritmética de 16 bits pues debe considerar que el número máximo a convertir es 9999.
Como el resultado de la multiplicación va a R1:R0, un ejemplo sería:
…………..
BIN_BCD4_MILES1:
SUBI R0,LOW(1000) SBCI R1,HIGH(1000)
BRCS BIN_BCD4_CENTENAS INC R17
RJMP BIN_BCD4_MILES1
………
Período: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas
4.2. Escribir un programa que permita ingresar dos números en binario de 8 bits cada uno por PORTB y PORTD. El programa realizará la multiplicación de los dos números y mostrará el resultado en base 10 en los 4 displays de 7 segmentos en el circuito de barrido construido. El número máximo a convertir es 9999, por lo que si al multiplicar los números se excede este valor debe mostrar 4 guiones en los displays (----).
Adicionalmente se deberán conectar 2 interruptores (SW0 y SW1) los cuales deben funcionar con base a la siguiente tabla:
SW1 SW0 ACTIVIDAD
0 0
En el primer display se formará la letra a mayúscula y en los otros 3 displays el valor en base 10 que ingresa por el PUERTO B.
1 0
En el primer display se formará la letra b minúscula y en los otros 3 displays el valor en base 10 que ingresa por el PUERTO D.
1 ó 0 1
En los displays se mostrará el resultado de la multiplicación tal como se especifica en el párrafo anterior
Como referencia se tienen los circuitos de los anexos y el programa base. Debe preparar la simulación del circuito 1 y del circuito 3. El circuito 1 está hecho con transistores y de esa manera es como se debería construir en hardware; ó con el integrado ULN2003A como se muestra en el circuito 2. El problema con esto circuitos al simularlos es que el programa simula los transistores con el modelo SPICE analógico lo que le toma mucho tiempo y como resultado el valor en los displays aparece parpadeando, o de un dígito a la vez. Solamente para fines de poder simular y probar el programa se puede usar el circuito 3 que está realizado con inversores digitales por lo que no toma mucho tiempo la simulación y es posible visualizar de manera correcta los valores (NO SE DEBE CONSTRUIR EN HARDWARE CON ESTOS COMPONENTES pues no pueden manejar las altas corrientes necesarias);
también en este último circuito se usa un display integrado que tiene los 4 dígitos en un solo encapsulado. En este display de 4 dígitos solamente están en el interior los 4 display ya con sus conexiones; pero también es necesario usar los amplificadores de corriente y las resistencias limitadoras, tal como se construye con display de un solo dígito).
4.3. Simular en PROTEUS el circuito 1 ó el 2, y el circuito 3. Simular su programa en los dos circuitos construidos para ver el funcionamiento. Subir capturas de sus circuitos y de sus simulaciones en un solo archivo con formato pdf.
Período: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas
5. EQUIPO Y MATERIALES
• Computador con software Microchip y Proteus
• Microcontrolador Atmega 164p
• Programador de microcontroladores Atmega
• Fuente de poder de 5V
• Placa protoboard
• Display multiplexado de 4 digitos
• Materiales varios
6. PROCEDIMIENTO
6.1. Probar el correcto funcionamiento de la implementación de la aplicación planteada en el trabajo preparatorio.
6.2. Implementar los cambios que el instructor considere conveniente.
7. INFORME:
7.1. Presentar las evidencias de lo desarrollado en el desarrollo de la práctica con sus respectivos análisis y comentarios.
7.2 Realizar lo que el instructor solicite. 7.3. Conclusiones y Recomendaciones
Elaborado por: Ing. Patricio Chico Msc.
Ing. Ronald Pillajo
Revisado por:
Ing. Alex Oña Ing. Diego VargasPeríodo: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas ANEXOS
CIRCUITO 1: BARRIDO DE DISPLAYS USANDO TRANSISTORES
CIRCUITO 2: BARRIDO DE DISPLAYS USANDO UN CI ULN2003A (Octal Darlington array)
Período: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas
CIRCUITO 3 : BARRIDO DE DISPLAYS APROPIADO SOLAMENTE PARA SIMULACIÓN (NO ADECUADO PARA CONSTRUIRLO EN HARDWARE)
;
; Barrido_display.asm
;
; Created: 21/7/2020 11:47:16
; Author : pchico
;
;Un número binario de 8 bits entra por el puerto B , lo convierte a
;base 10 y los muestra con barrido de 4 displays de ANODO COMÚN
;los segmentos se encienden con 1L y se manejan con PC0(a) al PC6(g)
;los dígitos de activan con 0L y se manejan con PA4(DIG0) al PA7(DIG3)
;se trabaja con subrutinas
;BIN_BCD3 toma BINARIO de la SRAM y lo convierte a BCD y lo entrega en
;BCD0...BCD2
;BCD_7SEG4 toma BCD0...BCD3 de la SRAM y los convierte a 7 segmentos y
;los entrega en DIG0...DIG3
;BARRIDO4 toma DIG0...DIG3 de la SRAM y los muestra en los 4 display
;zona de definición de variables
.def tempo=r16 .def conta=r17 .def aux=r18
Período: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas
;reserva de espacios en la SRAM .dseg
BINARIO: .byte 1 BCD0: .byte 1 BCD2: .byte 1 BCD3: .byte 1 DIG0: .byte 1 DIG1: .byte 1 DIG2: .byte 1 DIG3: .byte 1
;zona de código .cseg
.org 0x0
ldi tempo,0b11110000
out ddra,tempo ;PA4..PA7 son salida (para los dígitos) ldi tempo,0b00000000
out ddrb,tempo ;el puertoB es entrada para el número en binario out ddrd,tempo ;el puertoD no se ocupa, es entrada
ldi tempo,0b01111111
out ddrc,tempo ;PC0..PC7 son salida (para los segmentos) ldi tempo,0b11111111 ;activo pullup de los puertos B y D out portb,tempo
out portd,tempo
ldi tempo,0b11111111 ;pines no usados son entradas con pullup activo out porta,tempo ;inicio con dígitos deshabilitados (con 1L) ldi tempo,0b10000000 ;pines no usados son entradas con pullup activo out portc,tempo ;inicio con segmentos apagados
in tempo,mcucr ;PUD=0 para activar los pullup andi tempo,0b11101111
out mcucr,tempo
ldi tempo,high(RAMEND) ;se debe inicializar el STACK POINTER out sph,tempo ;en la última localidad de la SRAM ldi tempo,low(RAMEND)
out spl,tempo salto:
in tempo,pinb ;se lee del registro PINB sts BINARIO,tempo
rcall BIN_BCD3 ;convierte de binario a BCD (3 dígitos) clr tempo
sts BCD3,tempo ;hago el dígito más significativo cero rcall BCD_7SEG4 ;convierte de BCD a 7segmentos (4 dígitos) rcall BARRIDO4 ;barre 1 vez los 4 display
rjmp salto ;vuelve a revisa si ha cambiado la entrada
BIN_BCD3:
push r16 in r16,sreg
push r16 ;almaceno en el STACK todos los registros push r17 ;que se van a usar y el registro SREG lds r16,BINARIO ;carga el valor a convertir
clr r17 ;r17 cuenta cuantas veces se ha restado 100 BIN_BCD3_cent1:
subi r16,100 ;empiezo a restar 100 para determinar las centenas brcs BIN_BCD3_decenas ;si es negativo ya se pasó y paso a las decenas inc r17 ;si es positivo incremento el contador
rjmp BIN_BCD3_cent1 ; y vuelo a restar otra vez BIN_BCD3_decenas:
subi r16,-100 ;restauro al valor anterior a hacerse negativo
Período: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas sts BCD2,r17 ;guardo las centenas
clr r17 ;r17 cuenta cuantas veces se ha restado 10 BIN_BCD3_dec1:
subi r16,10 ;empiezo a restar 10 para determinar las decenas brcs BIN_BCD3_unidades ;si es negativo ya se pasó y paso a las unidades inc r17 ;si es positivo vuelo a restar otra vez
rjmp BIN_BCD3_dec1 BIN_BCD3_unidades:
subi r16,-10 ;restauro al valor anterior a hacerse negativo sts BCD1,r17 ;guardo las decenas
sts BCD0,r16 ;guardo las unidades
pop r17 ;se restaura los recursos usados a sus pop r16 ;valores originales
out sreg,r16 pop r16 ret
BCD_7SEG4:
push r16 in r16,sreg
push r16 ;almaceno en el STACK todos los registros push r17 ;que se van a usar y el registro SREG push zh
push zl push yh push yl push xh push xl
ldi xh,high(BCD0) ;el puntero X apunta a BCD0 ldi xl,low(BCD0)
ldi yh,high(DIG0) ;el puntero Y apunta a DIG0 ldi yl,low(DIG0)
ldi r17,4 ;contador, son 4 dígitos a convertir BCD_7SEG4_salto:
ldi zh,high(BCD_7SEG4_TABLA<<1) ;Z apunta al primer elemento ldi zl,low(BCD_7SEG4_TABLA<<1) ;de la tabla
ld r16,x+ ;se traen los dígitos de BCD0 a BCD3 add zl,r16 ;se suma el puntero mas el valor del clr r16 ;dígito a convertir
adc zh,r16
lpm r16,z ;se recupera el equivalente a 7 segmentos st y+,r16 ;almaceno el resultado en DIG0..DIG3 dec r17 ;se repite 4 veces
brne BCD_7SEG4_salto
pop xl ;se restaura los recursos usados a sus pop xh ;valores originales
pop yl pop yh pop zl pop zh pop r17 pop r16 out sreg,r16 pop r16 ret
BCD_7SEG4_TABLA: ; los segmentos de la tabla están en este orden: gfedcba
Período: 2022A | https://cea.epn.edu.ec/index.php/objetivos-y-practicas .db 0b00111111,0b00000110 ;0,1
.db 0b01011011,0b01001111 ;2,3 .db 0b01100110,0b01101101 ;4,5 .db 0b01111101,0b00000111 ;6,7 .db 0b01111111,0b01101111 ;8,9
BARRIDO4:
push r16 in r16,sreg
push r16 ;almaceno en el STACK todos los registros push r17 ;que se van a usar y el registro SREG push r18
push xh push xl
ldi xh,high(DIG0) ;X apunta al primer dígito a mostrar ldi xl,low(DIG0)
ldi r17,4 ;son 4 dígitos
ldi r18,0b11101111 ;se iniciará encendiendo el dígito de la derecha ldi r16,0b11111111 ;desactivo todos los display (con 1L) y mantengo out porta,r16 ;habilitado los pullup de pines no usados
BARRIDO4_salto:
ld r16,x+ ;recupero DIG0..DIG3
ori r16,0b10000000 ;mantengo habilitado el pullup del pin no usado out portc,r16 ;envío la información de los segmentos
out porta,r18 ;enciendo el display correspondiente rcall BARRIDO4_retardo ;llamo a un retardo
ldi r16,0b11111111 ;desactivo todos los display out porta,r16
sec ;carry=1
rol r18 ;se pone el cero para activar el siguiente display dec r17 ;se repite 4 veces
brne BARRIDO4_salto
pop xl ;se restaura los recursos usados a sus pop xh ;valores originales
pop r18 pop r17 pop r16 out sreg,r16 pop r16 ret
BARRIDO4_retardo: ;rutina de retardo ldi r16,125
BARRIDO4_retardo_salto:
dec r16
brne BARRIDO4_retardo_salto ret