lunes, 10 de agosto de 2015

Mostrar una letra en una matriz 7x5

En el siguiente circuito de aplicación se va a mostrar como realizar el barrido de una matriz de leds de 7 filas y 5 columnas, en este caso se va a prender la letra C pero para cambiar esto se debe cambiar las tablas a usar. Utilizaremos el puerto A y el puerto B para poder hacer el barrido.

El barrido se realiza utilizando tablas guardadas en la FLASH que se utiliza para prender las filas, para las columnas se prende y se apaga cada columna despues de cierto tiempo en un orden sea hacia la derecha o a la izquierda según queramos.

Para prender se hace con transistores para limitar la corriente, pero  en este caso de simulación utilizamos nots.

Circuito a utilizar:

 Código:



*  Created: 13/06/2015 9:32:18
 *   Author: cdtoap
 */

 .def tempo=r16
 .def conta=r17
 .def aux=r18


 .cseg
 .org 0x00

 ;Definicion de puertos
 ;*********************************************************
 ldi tempo,$7F
 out ddra,tempo
 ldi tempo,$1F
 out ddrb,tempo
 ldi tempo,$00
 out ddrc,tempo
 out ddrd,tempo

 ldi tempo,$FF
 out porta,tempo
 out portb,tempo
 out portc,tempo
 out portd,tempo

 in tempo,mcucr
 andi tempo,$EF
 out mcucr,tempo
 ;********************************************************

 inicio:
 ldi zh,high(tabla<<1);cargamos la direccion de la tabla
 ldi zl,low(tabla<<1)
 ldi conta,5; como son 5 columnas cargamos con 5
 ldi aux,0b11111110; cargamos un valor referencial para prender las columnas
 salto:
 ldi tempo,0b11111111; mantenemos apagadas las columnas
 out portb,tempo
 lpm tempo,z+; obtenemos el valor de cada columna
 ori tempo,0b10000000; aseguramos el pull-up
 out porta,tempo; sacamos el valor de las filas
 out portb,aux; prendemos las columnas
 call retardo; esperamos un tiempo
 ldi tempo,0b11111111; apagamos las columnas
 out portb,tempo
 sec
 rol aux; movemos el valor para prender la siguiente columna
 ori aux,0b11100000; aseguramos pull-up
 dec conta ; decrementamos el numero de columna
 brne salto; vamos a la siguiente columna
 rjmp inicio;  si acabo repetimos el proceso

 ;Tabla de la flash con la letra C precargada
  tabla:
 .db 0b11111111,0b11000001
 .db 0b11000001,0b11000001
 .db 0b11000001,0b11000001
 .db 0b11000001,0b11000001

 ;retardo para cada columna
 retardo:
 push r16
 ldi  r16,255
 Retardo_01:
 dec r16
 brne retardo_01
 pop r16
 ret







Circuito Funcionando:



No hay comentarios.:

Publicar un comentario