Mostrando entradas con la etiqueta atmega8 assembler multiplexaje. Mostrar todas las entradas
Mostrando entradas con la etiqueta atmega8 assembler multiplexaje. Mostrar todas las entradas

sábado, 8 de octubre de 2011

Multiplexaje de Display con Desplazamiento de Caracteres

Programa para ATmega8

El programa consiste en mostrar una serie caracteres en 4 display multiplexados.
los caracteres se muestran en grupos de 4 y se desplazan a la izquierda.

Diagrama de Conexión:




 
Funcionamiento:

  • Aplicando un procedimiento de multiplexaje se muestran los primeros 4 caraceres (CHAR1, CHAR2, CHAR3 y CHAR4). 
  • transcurrido un tiempo tal que el ojo pueda captar los caracteres se desplaza la cadena hacia la izquierda y se muestran los siguientes 4 caracteres (CHAR2, CHAR3, CHAR4, CHAR5). 
  • El programa comprueba si se mostraron todos los caracteres y cuando esto ocurre el proceso se repite.
Programa en Assembler:

;-----------------------------------------------------------
;Autor: LONELY113
;  http://lonely113.blogspot.com
;
;Programa para multiplexar 4 display
;Muestra mensaje LONELY113 con desplazamiento a la izquierda
;Salidas: Puerto D (PD1-PD7) 7 segmentos de display
;   Puerto A (PB0-PB3) habilitacion de display 
;Tipo de display: Catodo comun
;Calibrado para oscilador interno de 8 MHz
;-----------------------------------------------------------
.nolist
.include "m8def.inc"
.list
.device  atmega8

.def CHAR=r1
.def COUNT1=r20
.def COUNT2=r21
.def COUNT3=r22
.def TEMP=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,0xFF
 out DDRB,r16  ;PORTB como salida de habilitacion
 ldi r16,0xFF
 out DDRD,r16  ;PORTD como salida a displays
 ldi r16,0x0F
 out PORTB,r16 ;Deshabilitacion de displays
 clr r16
 out PORTD,r16
 clr CHAR
 ldi COUNT1,0xFF ; Inicia contadores
 ldi COUNT2,0x20
 ldi COUNT3,0x10
BEGIN: rcall CONVER
 out PORTD,TEMP
 cbi PORTB,3
 nop   ; Habilita display 4
 sbi PORTB,3
 inc CHAR
 rcall CONVER
 out PORTD,TEMP
 cbi PORTB,2
 nop   ; Habilita display 3
 sbi PORTB,2
 inc CHAR
 rcall CONVER
 out PORTD,TEMP
 cbi PORTB,1
 nop                ; Habilita display 2
 sbi PORTB,1
 inc CHAR
 rcall CONVER
 out PORTD,TEMP
 cbi PORTB,0
 nop   ; Habilita display 1
 sbi PORTB,0
 ldi r16,0x03
 sub CHAR,r16 
 dec COUNT1  ; Rutina de repeticion de 
 brne BEGIN  ; visualizacion de los 
 ldi COUNT1,0xFF ; 4 caracteres
 dec COUNT2
 brne BEGIN
 ldi COUNT1,0xFF
 ldi COUNT2,0x20
 dec COUNT3
 brne BEGIN
 ldi COUNT1,0xFF     ; Reinicia contadores
 ldi COUNT2,0x20
 ldi COUNT3,0x10
 inc CHAR         ; 4 siguientes caracteres
 ldi r16,0x0D
 cp r16,CHAR
 brne BEGIN
 clr CHAR
 rjmp BEGIN

; Subrutinas

CONVER: ldi ZH,HIGH(2*TABLE)
 ldi ZL,LOW(2*TABLE)
 add ZL,CHAR
 lpm
 mov TEMP,r0
 ret

TABLE:
.DB 0x00,0x00,0x00,0x70,0x7E,0x6E,0xF3,0x70
.DB 0xDC,0x0C,0x0C,0x9E,0x00,0x00,0x00,0x00

Archivos de Programa:
Descargar

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