sábado, 8 de octubre de 2011

Multiplexaje de Display

Programa para ATmega8


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