El programa consiste en controlar la
visualización simultánea en 4 display cátodo común de 7 segmentos
utilizando el método de multiplexaje para optimizar el uso de pines del ATmega8 .
Diagrama de Conexión:
Funcionamiento:
- Se deshabilitan todos los displays (PB3-PB0=1111).
- Se envía dato a mostrar al Puerto D (PD1-PD7).
- Se habilita el display que mostrará el dato (Por ejemplo Display 1 a PB0=0).
- Se deshabilita Display (Por ejemplo Display 1 a PB0=1).
- Se envía nuevo dato al Puerto D.
- Se habilita el display que mostrará el dato.
- Se deshabilita el display.
- El procedimiento continúa hasta enviar 4 datos a los 4 displays.
- Todo el proceso se repite endefinidamente. El ojo humano no llega a notar el parpadeo de los displays pues ocurre a muy alta frecuencia, por lo tanto se percibe como si los 4 displays estuvieran iluminados y mostrando los 4 datos simultáneamente.
- El diagrama siguiente muestra el funcionamiento:
Programa en Assembler:
;-------------------------------------------------------
;Autor: LONELY113
; http://lonely113.blogspot.com
;
;Programa para multiplexar 4 display
;y mostrar el mensaje HOLA
;Salidas: Puerto D (PD1-PD7) 7 segmentos de display
; Puerto B (PB0-PB3) habilitacion de display
;Tipo de display: Catodo comun
;Oscilador interno de 8 MHz
;-------------------------------------------------------
.nolist
.include "m8def.inc"
.list
.device atmega8
.def TEMP=r17
.def DISP=r18
.org 0x0000
; Inicializacion de Stack
ldi r16,HIGH(RAMEND)
out SPH,r16
ldi r16, LOW(RAMEND)
out SPL,r16
; Fin inicializacion de Stack
; Inicio de programa
ldi r16,0x0F ; PORTB habilitacion de displays
out DDRB,r16 ; PB3-PB0
ldi r16,0xFF
out DDRD,r16 ; PORTB salida a displays
ldi r16,0x0F
out PORTB,r16 ; Deshabilita displays
BEGIN: ldi DISP,0x00
rcall CONVER
out PORTD,TEMP
cbi PORTB,3
nop
sbi PORTB,3
inc DISP
rcall CONVER
out PORTD,TEMP
cbi PORTB,2
nop
sbi PORTB,2
inc DISP
rcall CONVER
out PORTD,TEMP
cbi PORTB,1
nop
sbi PORTB,1
inc DISP
rcall CONVER
out PORTD,TEMP
cbi PORTB,0
nop
sbi PORTB,0
rjmp BEGIN
; subrutinas
CONVER: ldi ZH,HIGH(TABLE*2)
ldi ZL,LOW(TABLE*2)
add ZL,DISP
lpm
mov TEMP,r0
ret
; Tabla en memoria de programa
TABLE:
.DB 0xEC,0x7E,0x70,0xEE
Archivos de programa:
Descargar
No hay comentarios:
Publicar un comentario