uControl
Febrero 28, 2017, 02:45:23 *
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
   Inicio   Ayuda Buscar Ingresar Registrarse  
Páginas: [1]   Ir Abajo
  Imprimir  
Autor Tema: manejo display 8x8 con pic  (Leído 531 veces)
0 Usuarios y 1 Visitante están viendo este tema.
all_web
PIC10F
*
Desconectado Desconectado

Mensajes: 1


« : Enero 21, 2016, 02:48:10 »

Estimados Colegas;
Este es mi primer post. Ando jugando un poco con los pic's, como recordando épocas universitarias,ya que siempre es bueno mantenerse fresco para que no se olvide.
Me ha llegado un display 8x8: http://www.ebay.com/itm/5PCS-8x8-3mm-Dot-Matrix-display-Red-LED-Display-Common-Anode-/381374573303?hash=item58cbb22af7:g:D6AAAOSwAL9UkC~J
Haciendo test con un multímetro conseguí el patillaje, el cual detallo: Mirándolo desde el lado de los leds (enfrente) y de izquierda a derecha. Esa es la posición de los pines. C*=columna; F*=fila

C1              C3
F5              C6
F3              F4
C4              C8
F8              F6
C2              F7
F2              C7
F1              C5

Matriz de led's
F1  °  °   °   °   °   °   °   °
F2  °  °   °   °   °   °   °   °
F3  °  °   °   °   °   °   °   °
F4  °  °   °   °   °   °   °   °
F5  °  °   °   °   °   °   °   °
F6  °  °   °   °   °   °   °   °
F7  °  °   °   °   °   °   °   °
F8  °  °   °   °   °   °   °   °
   C1 C2 C3 C4 C5 C6 C7 C8

El puerto B gobierna las filas. F1=PB0; F2=PB1; F3=PB2; .....
El puerto C gobierna la activación de cada columna. C1=PC0; C2=PC1; ......
El reloj usado es 20MHz

Este es el código en ASM.
Código:
;-------------------------------------------------------
;Realizado por : allweb
;IDE : PIKLAB 0.16.2
;Sistema Operativo : DEBIAN 8
;Compilador : GPUTILS
;Hardware Programador : Pickit2 - ICSP
;Software programador : pk2cmd
;PIC : 16f873A
;Cristal : 20MHz
;
;Programa que controla matriz de LED's 8x8
;Se define PORTB como salida y control de las filas
;Se define PORTC como salida y control de la columnas
;Palabra a mostrar: HOLA
;-------------------------------------------------------
    #include <p16f873a.inc>

    __config 0x3f32
; -----------------------------------------------------------------------
;Variables usadas
CONTA1 EQU 0x21
CONTA2 EQU 0x22
CONTA3 EQU 0x23
AUX1 EQU 0x24
TEMP1 EQU 0x25
TEMP2 EQU 0x26
; -----------------------------------------------------------------------
; Declaración DEFINES
#DEFINE C1 PORTC,0
#DEFINE C2 PORTC,1
#DEFINE C3 PORTC,2
#DEFINE C4 PORTC,3
#DEFINE C5 PORTC,4
#DEFINE C6 PORTC,5
#DEFINE C7 PORTC,6
#DEFINE C8 PORTC,7

; -----------------------------------------------------------------------
;Colocación del programa
      ORG 0
      GOTO INICIO
      ORG 5
; -----------------------------------------------------------------------
;Comienzo del programa
INICIO
      BSF STATUS,RP0 ; vamos al Banco 1 para configurar los puertos
      BCF STATUS,RP1
      CLRF TRISB ;limpiamos TRISB, osea PORTB como salidas para las filas
      CLRF TRISC ;limpiamos TRISB, osea PORTC como salidas para las columnas
      BCF STATUS,RP0 ; regresamos al banco 0
      MOVLW d'1' ;VALOR DE LA RAPIDEZ ENTRE COLUMNAS EN ms
      MOVWF TEMP1 ;REGISTRA LA RAPIDEZ ENTRE COLUMNAS
      MOVLW d'100' ;VALOR DE LA RAPIDEZ ENTRE LETRA Y LETRA EN ms
      MOVWF TEMP2 ;REGISTRA LA RAPIDEZ ENTRE LETRA Y LETRA

EJECUCION
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      MOVF TEMP2,0
      MOVWF AUX1
LETRA_H
; COLUMNA 1
      MOVLW 0xFF
      MOVWF PORTB
      MOVLW 0XFE
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
      MOVLW 0xFF
      MOVWF PORTB
      MOVLW 0XFD
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
      MOVLW 0x18
      MOVWF PORTB
      MOVLW 0XFB
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
      MOVLW 0x18
      MOVWF PORTB
      MOVLW 0XF7
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
      MOVLW 0x18
      MOVWF PORTB
      MOVLW 0XEF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
      MOVLW 0x18
      MOVWF PORTB
      MOVLW 0XDF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
      MOVLW 0xFF
      MOVWF PORTB
      MOVLW 0XBF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
      MOVLW 0xFF
      MOVWF PORTB
      MOVLW 0X7F
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
      DECFSZ AUX1,1
      GOTO LETRA_H
;;;;;APAGA FILAS Y COLUMNAS
      CLRF PORTB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
      MOVF TEMP2,0
      MOVWF AUX1
LETRA_O
; COLUMNA 1
      MOVLW 0x3C
      MOVWF PORTB
      MOVLW 0XFE
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
      MOVLW 0x7E
      MOVWF PORTB
      MOVLW 0XFD
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
      MOVLW 0xC3
      MOVWF PORTB
      MOVLW 0XFB
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
      MOVLW 0xC3
      MOVWF PORTB
      MOVLW 0XF7
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
      MOVLW 0xC3
      MOVWF PORTB
      MOVLW 0XEF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
      MOVLW 0xC3
      MOVWF PORTB
      MOVLW 0XDF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
      MOVLW 0x7E
      MOVWF PORTB
      MOVLW 0XBF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
      MOVLW 0x3C
      MOVWF PORTB
      MOVLW 0X7F
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
      DECFSZ AUX1,1
      GOTO LETRA_O
;;;;;APAGA FILAS Y COLUMNAS
      CLRF PORTB
      MOVF TEMP2,0
      MOVWF AUX1
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LETRA_L
; COLUMNA 1
      MOVLW 0xFF
      MOVWF PORTB
      MOVLW 0XFE
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
      MOVLW 0xFF
      MOVWF PORTB
      MOVLW 0XFD
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
      MOVLW 0xC0
      MOVWF PORTB
      MOVLW 0XFB
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
      MOVLW 0xC0
      MOVWF PORTB
      MOVLW 0XF7
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
      MOVLW 0xC0
      MOVWF PORTB
      MOVLW 0XEF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
      MOVLW 0xC0
      MOVWF PORTB
      MOVLW 0XDF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
      MOVLW 0xC0
      MOVWF PORTB
      MOVLW 0XBF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
      MOVLW 0xC0
      MOVWF PORTB
      MOVLW 0X7F
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
      DECFSZ AUX1,1
      GOTO LETRA_L
;;;;;APAGA FILAS Y COLUMNAS
      CLRF PORTB
      MOVF TEMP2,0
      MOVWF AUX1
LETRA_A
; COLUMNA 1
      MOVLW 0xFC
      MOVWF PORTB
      MOVLW 0XFE
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 2
      MOVLW 0xFE
      MOVWF PORTB
      MOVLW 0XFD
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 3
      MOVLW 0x13
      MOVWF PORTB
      MOVLW 0XFB
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 4
      MOVLW 0x13
      MOVWF PORTB
      MOVLW 0XF7
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 5
      MOVLW 0x13
      MOVWF PORTB
      MOVLW 0XEF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 6
      MOVLW 0x13
      MOVWF PORTB
      MOVLW 0XDF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 7
      MOVLW 0xFE
      MOVWF PORTB
      MOVLW 0XBF
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;COLUMNA 8
      MOVLW 0xFC
      MOVWF PORTB
      MOVLW 0X7F
      MOVWF PORTC
      MOVF TEMP1,0
      CALL DELAY_1ms ; LLAMAR A LA RUTINA DE 1 mseg. que multiplicado por 1 dan 1ms
;;;;;REPETICION DE LETRA
      DECFSZ AUX1,1
      GOTO LETRA_A
;;;;;APAGA FILAS Y COLUMNAS
      CLRF PORTB
;;;;;Espera 1 segungo para repetir la palabra HOLA
       MOVLW d'250'
       CALL DELAY_1ms
       MOVLW d'250'
       CALL DELAY_1ms
       MOVLW d'250'
       CALL DELAY_1ms
       MOVLW d'250'
       CALL DELAY_1ms
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
      GOTO EJECUCION
;
DELAY_1ms
MOVWF CONTA3
MOVLW d'4'
MOVWF CONTA2
MOVLW d'250'
MOVWF CONTA1
NOP
DECFSZ CONTA1,F ;DECREMENTA UNA UNIDAD EL VALOR DE CONTA1 Y ALMACENALO EN F = CONTA1
GOTO $-.2
DECFSZ CONTA2,F ;DECREMENTA UNA UNIDAD EL VALOR DE CONTA2 Y ALMACENALO EN F = CONTA2
GOTO $-.6
DECFSZ CONTA3,F ;DECREMENTA UNA UNIDAD EL VALOR DE CONTA3 Y ALMACENALO EN F = CONTA3
GOTO $-.10
RETURN
END

Está demasiado largo para sólo mostrar la palabra HOLA. Cómo ṕodría optimizarlo?. Por ejemplo si tendría que displayar la palabra: ALLA. Tendría que poner 2 veces el código que displaya las palabras A y L. Alguna recomendación alguien que haya trabajado con estos tipos de matriz.
No uso ninún registro de desplazamiento ni nada. Todo directamente conectados la matriz y el pic.
Este es el video de la matriz funcionando con el pic 16f873A
https://www.dropbox.com/s/63l38f8ovl5gnls/20160121_001224.mp4?dl=0
En línea
DML
PIC10F
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 30


« Respuesta #1 : Enero 21, 2016, 08:29:50 »

Hola all_web, para optimizar un poco tu codigo podrias hacer una unica rutina llamada LETRA, en vez de repetir el mismo codigo LETRA_H, LETRA_O... etc.
Esta rutina LETRA tiene que tener 16 variables (col1...col8 + fil1...fil8), que las puede cargar de otra rutina para cargar los 16 valores para cada letra...
Entonces despues seria tan facil como poner:
Código:
CALL   CARGAR_H
CALL   LETRA
CALL   CARGAR_O
CALL   LETRA
CALL   CARGAR_L
CALL   LETRA
CALL   CARGAR_A
CALL   LETRA

Espero que te sirva, saludos
Diego
En línea
Páginas: [1]   Ir Arriba
  Imprimir  
 
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.21 | SMF © 2011, Simple Machines
SMFAds for Free Forums
XHTML 1.0 válido! CSS válido!
Página creada en 0.066 segundos con 24 consultas. (Pretty URLs adds 0.016s, 2q)
loggkey