TODOPIC
Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: antimason en 05 de Febrero de 2009, 10:06:25
-
Aqui teneis el código para una matriz de leds 8x8 para representar tres animaciones, en el PROTEUS no funciona, en la vida real si.
;****************************************************************************************************************************
; TRES EFECTOS VISUALES *
;****************************************************************************************************************************
;registro a usar 74HC164.
;CLOCK= Patilla 1 PORTA,2.
;DATA= Patilla 2 PORTA,3.
;Todas las patitas del PORTB se conectaran a resistencias de 1k5 ohmios y a su vez estas resistencias a base de transistor PNP BC-327
;calculado para soportar un máximo de 15mA x 8 leds.
;las salidas del registro de desplazamiento se conectaran a resistencias de 1/4 w y serán entre 330 ohmio, 220 ohmio según veamos
;la luminosidad de los leds.
;*****************************************************************************************************************************
;PASOS A SEGUIR PARA MOSTRAR UN PATRON DE 8 BITS (1 BYTE) EN UNA MATRIZ DE LEDS 8x8
;*****************************************************************************************************************************
;1) Apagar todas las filas.
;2) Escribir los valores correspondientes a la primer fila en el registro de desplazamiento, teniendo en cuenta que el primer
; digito binario colocado corresponde al último LED de la fila, y el ultimo en poner al de la primer columna.
;3) Encenderla primer fila, esperar un tiempo, y volver a apagarla.
;4) Repetir los pasos 2 y 3 para las filas restantes.
;*****************************************************************************************************************************
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
EEPROM EQU 0x1C ;registro de control
ALMACEN EQU 0x20 ;aquí se guarda la informacion para llevarla al registro de desplazamiento
CONTADOR EQU 0x21 ;contador 8 bits
DI EQU 7 ;bit de control
DO EQU 6 ;bit de control
ORG 0X00 ;Inicio del ensamblado desde 00
goto INICIO ;Salto a la primera instruccion
ORG 0X05 ;Ensamblar desde 05
INICIO bsf STATUS,RP0 ;pagina 1
clrf TRISB ;portb salidas
clrf TRISA ;porta salidas
bcf STATUS,RP0 ;pagina 0
clrf PORTB
clrf PORTA
movlw B'11111111' ;todas las filas apagadas
movwf PORTB ;1 en base transistores PNP y por lo tanto leds apagados
;**********************************************************************************************************************************
;BARRIDO HORIZONTAL
;**********************************************************************************************************************************
PRINCIPAL movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA1 movlw B'11111110' ;activo fila 1 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA2 movlw B'11111101' ;activo fila 2 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA3 movlw B'11111011' ;activo fila 3 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA4 movlw B'11110111' ;activo fila 4 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA5 movlw B'11101111' ;activo fila 5 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA6 movlw B'11011111' ;activo fila 6 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA7 movlw B'10111111' ;activo fila 7 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'00000000' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
FILA8
movlw B'01111111' ;activo fila 8 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
;**********************************************************************************************************************************
;PIXEL OBLICUO
;**********************************************************************************************************************************
movlw B'11111110' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA8 movlw B'11111110' ;activo columna 8 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111101' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA7 movlw B'11111101' ;activo columna 7 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111011' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA6 movlw B'11111011' ;activo columna 6 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11110111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA5 movlw B'11110111' ;activo columna 5 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11101111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA4 movlw B'11101111' ;activo columna 4 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11011111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA3 movlw B'11011111' ;activo columna 3 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'10111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA2 movlw B'10111111' ;activo columna 2 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'01111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
COLUMNA1 movlw B'01111111' ;activo columna 1 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
;**********************************************************************************************************************************
;PIXEL OBLICUO_2
;**********************************************************************************************************************************
movlw B'01111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11111110' ;activo columna 8 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'10111111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11111101' ;activo columna 7 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11011111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11111011' ;activo columna 6 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11101111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11110111' ;activo columna 5 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11110111' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11101111' ;activo columna 4 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111011' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'11011111' ;activo columna 3 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111101' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'10111111' ;activo columna 2 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
movlw B'11111110' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
movlw B'01111111' ;activo columna 1 para mostrar dato del registro
movwf PORTB
call Retardo_500ms
movlw B'11111111'
movwf PORTB
goto PRINCIPAL
;*******************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;*******************************************************************************************************************************
TX movlw .8 ;pone 8 en W
movwf CONTADOR ;carga contador con 8
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT bsf STATUS,RP0 ;pagina 1
movlw 0X00
movwf TRISA ;puerta A salida
bcf STATUS,RP0 ;pagina 0
btfss EEPROM,DO ;mira el bit DO y salta si vale 1
goto BITLOW
bsf PORTA,3 ;pone a 1 DATA
goto CLOCK
BITLOW bcf PORTA,3 ;pone a 0 DATA
;********************************************************************************************************************************
;RUTINA DE TRANSMISIÓN SEÑAL DE RELOJ A REGISTRO 74HC164
;********************************************************************************************************************************
CLOCK bcf PORTA,2 ;pone a 0 CLOCK
nop ;espera 1 micros
nop ;otro
nop ;otro
nop ;otro
bsf PORTA,2 ;pone a 1 CLOCK
nop ;1 micros
return
INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
END
-
El código es un poco largo, intentaré simplificarlo con el uso de tablas y mas adelante pondré la información en una memoria I2C para que sea mas sencillo todavía. En este post iré desarrollando todo el proceso, ser pacientes.
-
Hola!
¿Tenes el esquema a mano?
Saludos!
-
Muy buenas Antimason!, gracias por compartir el codigo ! :-/
Además de emplear tablas, puedes usar rotación en el puerto b, para achicar código (RLF) :mrgreen:
Un abrazo
Norberto
-
He editado el código, pues existía el pequeño fallo de que al encenderse los leds correspondientes, el resto, los que debieran permanecer apagados, poseían una leve iluminación que fastidiaba el contraste entre leds encendidos y leds apagados. Tambien he quitado el efecto "BARRIDO VERTICAL" pues al activar todas las filas al tiempo se produce una caida de tensión que hace que los leds queden con una iluminación muy apagada.
-
Hola!
¿Tenes el esquema a mano?
Saludos!
La verdad es que lo hice en un folio con un bolígrafo, pero lo haré en PROTEUS y la captura la postearé aquí. Pero..............¿como se ponen imágenes en un foro?, colocar vídeos de youtube si sé hacerlo, pero lo de las fotos no lo tengo tan claro.
-
Muy buenas Antimason!, gracias por compartir el codigo ! :-/
Además de emplear tablas, puedes usar rotación en el puerto b, para achicar código (RLF) :mrgreen:
Un abrazo
Norberto
Gracias a vosotros por tener un foro tan didáctico y explicativo de este mundillo de los PICS.
-
Hola!
Podes scanear la imagen que dibujaste con el boli...yo uso papel casi siempre para mis diseños :)
Para poner la imagen, tenes que usar la opcion que aparece abajo del cuadro en el que escribir el mensaje, el link que pone "(http://www.todopic.com.ar/foros/Themes/SoftDark/images/expand.gif)Opciones Adicionales...". Dentro de eso está
Adjuntar: (más archivos)
Ahi buscas la imagen que scaneaste, la agregas, y queda como adjunto al mensaje.
Si luego queres que se vea en el cuerpo del mensaje, escribis [ img ] ruta_de_la_imagen [ /img ] (pero sin espacios) y listo!
Saludos!
-
A ver la foto.......
-
Perfecta!
No fue tan dificil, no? :)
Ya pude ver el esquema. Gracias!
-
Muy bueno los efectos ..de pensar que yo empece asi ... con una matriz pequeña de 7x5 luego 32x7 despues 80x7 ahora voy por una de 90x8 yo tambien trabajo en asm ....
si es de ayuda dejo unos ejemplos pero creo que es mas avanzado ...
http://micros.mforos.com/1149907/8023880-desarrollo-panel-88x7-16f877-y-eeprom-24lc256/
Saludos y pon una foto del circuito funcionando :mrgreen:
-
Muy bueno los efectos ..de pensar que yo empece asi ... con una matriz pequeña de 7x5 luego 32x7 despues 80x7 ahora voy por una de 90x8 yo tambien trabajo en asm ....
si es de ayuda dejo unos ejemplos pero creo que es mas avanzado ...
http://micros.mforos.com/1149907/8023880-desarrollo-panel-88x7-16f877-y-eeprom-24lc256/
Saludos y pon una foto del circuito funcionando :mrgreen:
Menudas matrices, eso si es nivel. A ver cuando llego a algo así.
-
lo unico que puedo decir es que hacer tu propia matriz te sale mas barato ya que comprar una hecha sale 300 dolares y yo solo me e gastado un promedio de 100, claro que con la caja y el acabado puede salir algo mas (ojo me refiero a una de ese tamaño) e visto otras matrices del mismo tamaño hechas con matrices pre fabricadas de 8x8 de tres colores verde amarilli y rojo esas si estan mas caras creo que las traen de afuera son importadas ......
tengo una pregunta que dejo a continuacion....se trata sobre el metodo de usar una matriz es decir lo que mayormente e encontrado en internet es el metodo multiplexado ya sea por columnas o filas ...pero me pregunto si los paneles comerciales esos ya profecionales que vemos en las tiendas usaran esa misma tecnica, lo digo porque e leido en otros foros que lo que hacen es usar un registro por cada ocho leds o algo asi es decir los leds estan siempre encendidos ......
espero que los que sepan algo me puedan sacar la duda que tengo gracias
saludos...
Los paneles comerciales usan cada vez menos el multiplexado por varias razones (de hecho los fabricantes líderes dejaron de multiplexar pantallas desde finales de los 90s). Las razones principales son que el multiplexado interfiere con la filmación o grabación de video en pantallas que se usan en sets de tv, estadios deportivos, etc. Que los nuevos leds introducidos al mercado a principios de los 90s (GaInN) y que son la base actual de todas las pantallas de leds, no ganan eficiencia con el multiplexado (a diferencia de otros materiales como el AlGaP que tanto se utilizó), además que reducen su vida útil muchísimo se se multiplexan con corrientes apenas ligeramente mayores a la del promedio. Que debido a la gran cantidad de datos seriales que se manejan (aunque estén divididas por módulos pequeños) los nuevos ICs permiten un conexionado muy simple sin multiplexar (con expensas al costo pero con gran ganancia en calidad de imagen), ya que la norma general es que esas pantalla no llevan memorias eeprom ni generadores de caracteres ni nada de eso. De tu señal de video conectas directo al codec de video, de ahí sale tu señal en 4:2:2 o RGB, y va directo (los ICs ya vienen fabricados con esa facilidad de conexión) a tu memoria multipuertos en donde quedas independiente de la velocidad de video y puedes con un microcontrolador estar leyendo la información para enviarla serialmente a tus drivers. La ventaja de este sistema es que desligas totalmente la información que hay que desplegar de lo que tiene que hacer tu circuitería.
-
Gracias por la respuesta....... :) bueno lo unico que puedo decir es que no pretendo llegar a ser fabricante :D solo que como me parecio un proyecto muy interesante segui insistiendo y si se que multiplexando la matriz se pierde eficiencia intencidad de los leds ......pero me pregunto entonces para que vienen las matrices esas pre fabricadas de 8x8 o 7x5 ya que e visto matrices comerciales que las usan inclusive son tri color ...........creo que la respuesta que me diste es tirando para las matrices que ya muestran video con leds rgb .........yo solo busco llegar a una matriz monocolor de gran tamaño
saludos y gracias por la info :mrgreen:
-
El video del código de tres efectos:
-
Aquí otro código para matriz 8x8, representa la letra "A" e invierte los leds para que se vea la "A" como una sombra. Ya subiré el vídeo.
;****************************************************************************************************************************
; EFECTOS VISUALES *
;****************************************************************************************************************************
;La vista humana puede retener información que se muestre durante 20 ó 30 ms, por eso los tiempos de encendido y apagado
;de las filas han de programarse teniendo en cuenta esto. Cuantos mayores tiempos demos cercanos a esos 20 ó 30 ms mas
;luminosos se mostraran los leds, en cambio la sensación de parpadeo será mayor. Como ejemplo de ello tenemos la superposición
;de los cuadros de las tv que funcionan a 50Hz-----> F = 1/T -----> T= 1/50 = 0,02s = 20ms
;registro a usar 74HC164.
;CLOCK= Patilla 1 PORTA,2.
;DATA= Patilla 2 PORTA,3.
;Todas las patitas del PORTB se conectaran a resistencias de 1k5 ohmios y a su vez estas resistencias a base de transistor PNP BC-327
;calculado para soportar un máximo de 15mA x 8 leds.
;las salidas del registro de desplazamiento se conectaran a resistencias de 1/4 w y serán entre 330 ohmio, 220 ohmio según veamos
;la luminosidad de los leds.
;****************************************************************************************************************************
;PASOS A SEGUIR PARA MOSTRAR UN PATRON DE 8 BITS (1 BYTE) EN UNA MATRIZ DE LEDS 8x8 *
;****************************************************************************************************************************
;1) Apagar todas las filas.
;2) Escribir los valores de la primer fila en el registro de desplazamiento, teniendo en cuenta que el primer
; digito binario colocado corresponde al último LED de la fila, y el ultimo en poner al de la primer columna.
;3) Encenderla primer fila, esperar un tiempo, y volver a apagarla.
;4) Repetir los pasos 2 y 3 para las filas restantes.
;****************************************************************************************************************************
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
EEPROM EQU 0x1C ;registro de control
ALMACEN EQU 0x20 ;aquí se guarda la informacion para llevarla al registro de desplazamiento
CONTADOR EQU 0x21 ;contador 8 bits
REPITE EQU 0x22 ;repetición ciclos en columna
DI EQU 7 ;bit de control
DO EQU 6 ;bit de control
ORG 0X00 ;Inicio del ensamblado desde 00
goto INICIO ;Salto a la primera instruccion
ORG 0X05 ;Ensamblar desde 05
INICIO bsf STATUS,RP0 ;pagina 1
clrf TRISB ;portb salidas
clrf TRISA ;porta salidas
bcf STATUS,RP0 ;pagina 0
clrf PORTB
clrf PORTA
;****************************************************************************************************************************
; LETRA A
;****************************************************************************************************************************
PRINCIPAL movlw B'11111111' ;todas las filas apagadas
movwf PORTB ;1 en base transistores PNP y por lo tanto leds apagados
CARGA movlw D'60' ;cargo registro con 60 para que se visualize letra A 1 seg
movwf REPITE
COMIENZA movlw D'231' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'254'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'195' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'253'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'153' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'251'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'153' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'247'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'129' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'239'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'153' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'223'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'153' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'191'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'153' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'127'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
decfsz REPITE,1 ;decrementa control salta si vale 0
goto COMIENZA
movlw D'60'
movwf REPITE
;****************************************************************************************************************************
; A INVERSA
;****************************************************************************************************************************
SIGUE movlw D'24' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'254'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'60' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'253'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'102' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'251'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'102' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'247'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'126' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'239'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'102' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'223'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'102' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'191'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movlw D'102' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'127'
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
decfsz REPITE,1 ;decrementa control salta si vale 0
goto SIGUE
goto PRINCIPAL
;****************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;****************************************************************************************************************************
TX movlw .8 ;pone 8 en W
movwf CONTADOR ;carga contador con 8
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT bsf STATUS,RP0 ;pagina 1
movlw 0X00
movwf TRISA ;puerta A salida
bcf STATUS,RP0 ;pagina 0
btfss EEPROM,DO ;mira el bit DO y salta si vale 1
goto BITLOW
bsf PORTA,3 ;pone a 1 DATA
goto CLOCK
BITLOW bcf PORTA,3 ;pone a 0 DATA
;****************************************************************************************************************************
;RUTINA DE TRANSMISIÓN SEÑAL DE RELOJ A REGISTRO 74HC164
;****************************************************************************************************************************
CLOCK bcf PORTA,2 ;pone a 0 CLOCK
nop ;espera 1 micros
nop ;otro
nop ;otro
nop ;otro
bsf PORTA,2 ;pone a 1 CLOCK
nop ;1 micros
return
INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
END
-
bueno lo unico que puedo decir es que no pretendo llegar a ser fabricante
Pues creo que ya lo fuiste ¿no? porque creo que el publik que hiciste fue para una aplicación comercial ¿o me equivoco?.
......pero me pregunto entonces para que vienen las matrices esas pre fabricadas de 8x8 o 7x5 ya que e visto matrices comerciales que las usan inclusive son tri color
Sólo por convencionalismo. La matriz de 7x5 es típica para representar cualquier caracter alfanumérico, como en el caso de los LCDs de caracteres.
...........creo que la respuesta que me diste es tirando para las matrices que ya muestran video con leds rgb .........yo solo busco llegar a una matriz monocolor de gran tamaño
No necesariamente. De hecho poniendo ceros en los coeficientes de corrección de gamma de las memorias multipuertos para los colores verde y azul te quedaría la típica matriz roja monocromática. Incluso con un publik monocromático se simplifica totalmente la escritura de los mensajes a desplegar, ya que si se visualiza una matriz de mayor tamaño como si fueran pequeños módulos de 7 por NColumnas sería complicadísimo, además de tedioso, tratar de programar los mensajes y hacer efectos. Esto ya se había tratado en el siguiente hilo:
http://www.todopic.com.ar/foros/index.php?topic=19091.msg196153#msg196153
-
hola Jacrmr con decir que no pretendo llega a ser fabricante es que no pretendo vender o comercializar los paneles que hago solo me pico poder hacer algo mas grande de lo que encuentro comunmente en internet .........como un joby me entiendes :mrgreen:
veo que tienes muchos conocimiento de esto .......dime no te a picado hacer un panel con las caracteristicas que mencionas?
todo lo que describes en el enlace que me pusiste lo pude vivir en la practica porque el ultimo panel que estoy haciendo es de 90 x8 y cuenta con 20 efectos programables por puerto usb y capacidad de 5000 caracteres ...podremos decir que no esta mal pero ya se que los comerciales me pasan de largo ........bueno para que el pic logre trabajar varias tareas a la vez es algo imposible ya que siempre todos nuestro progrmas son lineales , digamos que las interrupciones tratan de simular eso de la multitarea pero tiene que dejar una tarea para hacer otra cosa ....pienso que por eso dices que no se puede hacer con un simple pic esa tarea de hacer un gran panel y dejame decirte que estoy totalmente deacuerdo contigo
saludos
-
hola Jacrmr con decir que no pretendo llega a ser fabricante es que no pretendo vender o comercializar los paneles que hago solo me pico poder hacer algo mas grande de lo que encuentro comunmente en internet .........como un joby me entiendes
Claro.
veo que tienes muchos conocimiento de esto .......dime no te a picado hacer un panel con las caracteristicas que mencionas?
De hecho los hago cada vez que me piden uno. Precisamente en estos momentos estoy terminando uno monocromático de 80x32. Si me queda algo de tiempo al rato subo algunas fotos o videos.
todo lo que describes en el enlace que me pusiste lo pude vivir en la practica porque el ultimo panel que estoy haciendo es de 90 x8 y cuenta con 20 efectos programables por puerto usb y capacidad de 5000 caracteres
¿es uno azul que subiste fotos en algún otro foro creo? Muy bueno quedó.
-
ya me suponia eres un conocedor en esto de los paneles ..........no podrias compartir algo de informacion de los paneles que haces o es secreto profesional ? ..............te contere que yo tengo poco tiempo con esto de los pic y solo me e dedicado a usarlos para estos panelitos que hago y tengo una duda los paneles que haces cuanto de energia consumen ya que supongo que usaras fuentes conmutadas .......ese es uno de los problemitas que tengo la fuente ya que a mayor cantidad de leds mayor es el consumo y ya con las justas me alcansa mi humilde fuente lineal si pudieras dar las carcteristicas que tiene las fuentes que usas me refiero a corriente voltaje etc..?
-
Aquí el vídeo del segundo código, notar el parpadeo perceptible a vista de cámara que no en la realidad, del multiplexado por líneas:
-
El detalle está en que varios de los circuitos integrados que facilitan todo sólo se consiguen por contrato en base anual (como memorias multipuertos de IDT). En cuestión de fuentes de alimentación sólo uso fuentes de 3.3 volts (para leds rojos para no disipar tanta potencia). El aspecto del software, ó más bien el firmware para exportar de un video en Adobe Premiere a un PIC tan simple como el PIC16F59 sí está manejado a un nivel de propiedad intelectual y por lo mismo no podría dar más detalles al respecto. Sin embargo, los publiks que han implementado nico y Cryn no le piden nada a ningún publik comercial.
-
Muy bien con el video antimason ahora esperamos ver un mensajito desplazarse por tu matriz jejeje :mrgreen:
Jacrmr gracias por responder muy interesante los datos que das ........seguire con lo mio haber hasta donde llego.....
quien sabe tal ves llegue a hacer algo interesante pra el foro.....
SAludos
-
Muy bien con el video antimason ahora esperamos ver un mensajito desplazarse por tu matriz jejeje :mrgreen:
Jacrmr gracias por responder muy interesante los datos que das ........seguire con lo mio haber hasta donde llego.....
quien sabe tal ves llegue a hacer algo interesante pra el foro.....
SAludos
Con paciencia todo llega. :mrgreen:
-
Por fin, aquí el código con uso de tablas para mostrar la letra "A" y la "A" invertida o sombreada, perdonadme si es algo largo (soy un poco torpe :D), solo teneis que ir poniendo en la tabla el caracter que os dé la gana y cambiar algo en el código sobre el offset para ir mostrando lo que querais (mientras haya memoria claro). El reto siguiente es poner un mensaje desplazandose, usaré tablas para hacerlo. Luego como la memoria de programa del 16F84 no dará mucho de si intentaré colocar los datos en una memoria I2C y acceder a ella por emulación de software del protocolo I2C (por aquí andan algunos ejemplos supongo que serviran). :mrgreen:
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
EEPROM EQU 0x1C ;registro de control
ALMACEN EQU 0x20 ;aquí se guarda la informacion para llevarla al registro de desplazamiento
CONTADOR EQU 0x21 ;contador 8 bits
REPITE EQU 0x22 ;repetición ciclos en columna
SALIDA EQU 0x23 ;registro para rotación de salida PORTB
PUNTERO EQU 0x24 ;registro para offset
FILA1 EQU 0x25
FILA2 EQU 0x26
FILA3 EQU 0x27
FILA4 EQU 0x28
FILA5 EQU 0x29
FILA6 EQU 0x30
FILA7 EQU 0x31
FILA8 EQU 0x32
VECES EQU 0x33 ;controla nº de veces que se produce un evento
DI EQU 7 ;bit de control
DO EQU 6 ;bit de control
ORG 0X00 ;Inicio del ensamblado desde 00
goto INICIO ;Salto a la primera instruccion
ORG 0X05 ;Ensamblar desde 05
INICIO bsf STATUS,RP0 ;pagina 1
clrf TRISB ;portb salidas
clrf TRISA ;porta salidas
bcf STATUS,RP0 ;pagina 0
clrf PORTB
clrf PORTA
clrf FILA1
clrf FILA2
clrf FILA3
clrf FILA4
clrf FILA5
clrf FILA6
clrf FILA7
clrf FILA8
clrw
;****************************************************************************************************************************
;AQUI HAGO LA LLAMADA A LA TABLA PARA IR SACANDO LOS DATOS Y CARGAR LOS REGISTROS
;****************************************************************************************************************************
RESET clrf PUNTERO ;comienza PUNTERO en 0
movlw D'2' ;cada vez que se hace reset se carga el registro con 2
movwf VECES ;para controlar el nº de veces que se muestra la A y la
;A inversa
CARGA movf PUNTERO,0 ;muevo contenido dígito a W
call TABLA ;llamo a tabla
movwf FILA1 ;y cargo resultado en FILA1
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA2 ;y cargo resultado en FILA2
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA3 ;y cargo resultado en FILA3
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA4 ;y cargo resultado en FILA4
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA5 ;y cargo resultado en FILA5
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA6 ;y cargo resultado en FILA6
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA7 ;y cargo resultado en FILA7
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA8 ;y cargo resultado en FILA8
call REG
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
goto CARGA
;****************************************************************************************************************************
;AQUI CARGO LOS REGISTROS LLAMADOS FILA_X EN EL REGISTRO ALMACEN PARA SER SACADOS POR REGISTRO DE DESPLAZAMIENTO
;****************************************************************************************************************************
REG movlw D'60' ;cargo registro con 60 para que se visualize el dato 1 seg
movwf REPITE
MUESTRATE movf FILA1,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'254' ;activo fila 1
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA2,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'253' ;activo fila 2
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA3,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'251' ;activo fila 3
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA4,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'247' ;activo fila 4
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA5,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'239' ;activo fila 5
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA6,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'223' ;activo fila 6
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA7,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'191' ;activo fila 7
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA8,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'127' ;activo fila 8
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
decfsz REPITE,1 ;decrementa control salta si vale 0
goto MUESTRATE
decfsz VECES,1 ;controla que se mostró la A y la A inversa, es decir 2 veces
;para poner offset a 0 y empezar desde el principio de la tabla
return
goto RESET ;reset en offset y comienza de nuevo
;****************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;****************************************************************************************************************************
TX movlw .8 ;pone 8 en W
movwf CONTADOR ;carga contador con 8
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT bsf STATUS,RP0 ;pagina 1
movlw 0X00
movwf TRISA ;puerta A salida
bcf STATUS,RP0 ;pagina 0
btfss EEPROM,DO ;mira el bit DO y salta si vale 1
goto BITLOW
bsf PORTA,3 ;pone a 1 DATA
goto CLOCK
BITLOW bcf PORTA,3 ;pone a 0 DATA
;****************************************************************************************************************************
;RUTINA DE TRANSMISIÓN SEÑAL DE RELOJ A REGISTRO 74HC164
;****************************************************************************************************************************
CLOCK bcf PORTA,2 ;pone a 0 CLOCK
nop ;espera 1 micros
nop ;otro
nop ;otro
nop ;otro
bsf PORTA,2 ;pone a 1 CLOCK
nop ;1 micros
return
;****************************************************************************************************************************
;TABLA DONDE SE GUARDA LA INFORMACIÓN A MOSTRAR
;****************************************************************************************************************************
TABLA addwf PCL,F
retlw D'231'
retlw D'195'
retlw D'153'
retlw D'153' ;letra A
retlw D'129'
retlw D'153'
retlw D'153'
retlw D'153'
retlw D'24'
retlw D'60'
retlw D'102'
retlw D'102' ;letra A inversa
retlw D'126'
retlw D'102'
retlw D'102'
retlw D'102'
INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
END
-
;Este código desplaza la letra "A" a la izquierda hasta que desaparece y vuelve a aparecer y vuelve a desplazarse. Tiene un error y es que al desplazarse
;aparecen unos leds encendidos, ¿alguien me puede ayudar a que salga bien y se queden apagados?.
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
EEPROM EQU 0x0D ;registro de control
ALMACEN EQU 0x0E ;aquí se guarda la informacion para llevarla al registro de desplazamiento
CONTADOR EQU 0x0F ;contador 8 bits
REPITE EQU 0x10 ;repetición ciclos en columna
SALIDA EQU 0x11 ;registro para rotación de salida PORTB
PUNTERO EQU 0x12 ;registro para offset
FILA1 EQU 0x13
FILA2 EQU 0x14
FILA3 EQU 0x15
FILA4 EQU 0x16
FILA5 EQU 0x17
FILA6 EQU 0x18
FILA7 EQU 0x19
FILA8 EQU 0x1A
OCHOVECES EQU 0x1B
DI EQU 7 ;bit de control
DO EQU 6 ;bit de control
ORG 0X00 ;Inicio del ensamblado desde 00
goto INICIO ;Salto a la primera instruccion
ORG 0X05 ;Ensamblar desde 05
INICIO bsf STATUS,RP0 ;pagina 1
clrf TRISB ;portb salidas
clrf TRISA ;porta salidas
bcf STATUS,RP0 ;pagina 0
clrf PORTB
clrf PORTA
clrf FILA1
clrf FILA2
clrf FILA3
clrf FILA4
clrf FILA5
clrf FILA6
clrf FILA7
clrf FILA8
clrw
RESET clrf PUNTERO ;comienza PUNTERO en 0
CARGA movf PUNTERO,0 ;muevo contenido dígito a W
call TABLA ;llamo a tabla
movwf FILA1 ;y cargo resultado en FILA1
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA2 ;y cargo resultado en FILA2
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA3 ;y cargo resultado en FILA3
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA4 ;y cargo resultado en FILA4
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA5 ;y cargo resultado en FILA5
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA6 ;y cargo resultado en FILA6
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA7 ;y cargo resultado en FILA7
nop
incf PUNTERO,F ;incremento PUNTERO como offset para tabla
movf PUNTERO,0 ;y lo cargo en w
call TABLA ;llamo a tabla
movwf FILA8 ;y cargo resultado en FILA8
nop
movlw D'9'
movwf OCHOVECES
;****************************************************************************************************************************
;AQUI CARGO LOS REGISTROS LLAMADOS FILA_X EN EL REGISTRO ALMACEN PARA SER SACADOS POR REGISTRO DE DESPLAZAMIENTO
;****************************************************************************************************************************
DELAY movlw D'60'
movwf REPITE
MUESTRATE movf FILA1,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'254' ;activo fila 1
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA2,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'253' ;activo fila 2
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA3,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'251' ;activo fila 3
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA4,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'247' ;activo fila 4
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA5,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'239' ;activo fila 5
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA6,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'223' ;activo fila 6
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA7,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'191' ;activo fila 7
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
movf FILA8,0
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
movlw D'127' ;activo fila 8
movwf PORTB
call Retardo_2ms
movlw B'11111111'
movwf PORTB
decfsz REPITE,1 ;decrementa REPITE cuando sea O salta
goto MUESTRATE ;no es 0
call ROTACION ;si es 0
decfsz OCHOVECES,1 ;acude 8 veces a rotación de bits
goto DELAY
goto RESET
;****************************************************************************************************************************
;RUTINA DE ROTACION DE BITS DE LOS REGISTROS "FILA_X"
;****************************************************************************************************************************
ROTACION rlf FILA1,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA2,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA3,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA4,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA5,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA6,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA7,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA8,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
return
;****************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;****************************************************************************************************************************
TX movlw .8 ;pone 8 en W
movwf CONTADOR ;carga contador con 8
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT bsf STATUS,RP0 ;pagina 1
movlw 0X00
movwf TRISA ;puerta A salida
bcf STATUS,RP0 ;pagina 0
btfss EEPROM,DO ;mira el bit DO y salta si vale 1
goto BITLOW
bsf PORTA,3 ;pone a 1 DATA
goto CLOCK
BITLOW bcf PORTA,3 ;pone a 0 DATA
;****************************************************************************************************************************
;RUTINA DE TRANSMISIÓN SEÑAL DE RELOJ A REGISTRO 74HC164
;****************************************************************************************************************************
CLOCK bcf PORTA,2 ;pone a 0 CLOCK
nop ;espera 1 micros
nop ;otro
nop ;otro
nop ;otro
bsf PORTA,2 ;pone a 1 CLOCK
nop ;1 micros
return
;****************************************************************************************************************************
;TABLA DONDE SE GUARDA LA INFORMACIÓN A MOSTRAR
;****************************************************************************************************************************
TABLA addwf PCL,F
retlw D'231'
retlw D'195'
retlw D'153'
retlw D'153' ;letra A
retlw D'129'
retlw D'153'
retlw D'153'
retlw D'153'
INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
END
-
En el siguiente video se vé la A desplazándose y el fallo que he comentado anteriormente.
-
bueno ..muy bueno te salio el desplazamiento ..........voy a chequear el codigo
:-/ :-/ :-/
Saludos :mrgreen:
-
antimason seguramente ya solucionaste el problema pero no esta demas .......aqui dejo la solucion
solamente se le agrego el BSF STATUS,C al principio de la rutina :mrgreen: :mrgreen:
;****************************************************************************************************************************
;RUTINA DE ROTACION DE BITS DE LOS REGISTROS "FILA_X"
;****************************************************************************************************************************
ROTACION bsf STATUS,C
rlf FILA1,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA2,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA3,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA4,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA5,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA6,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA7,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
rlf FILA8,1 ;roto una posición a la izquierda la trama de bits
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
nop ;la derecha de la matriz
return
-
Has sido mas rápido que yo jmcs87, ya había encontrado la solución como está el código ahi abajo, el problema radicaba en que efectuaba la rotación en la primera línea antes de modificar el bit de acarreo del registro STATUS, por lo que en esa primera línea me llevaba ese acarreo y aparecían esos leds encendidos. De todas formas tú colaboración y aporte hubiera sido clave para la solución del problema. Gracias mil jmcs87.
;****************************************************************************************************************************
;RUTINA DE ROTACION DE BITS DE LOS REGISTROS "FILA_X"
;****************************************************************************************************************************
ROTACION bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA1,1 ;roto una posición a la izquierda la trama de bits
nop
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA2,1 ;roto una posición a la izquierda la trama de bits
nop
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA3,1 ;roto una posición a la izquierda la trama de bits
nop
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA4,1 ;roto una posición a la izquierda la trama de bits
nop
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA5,1 ;roto una posición a la izquierda la trama de bits
nop
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA6,1 ;roto una posición a la izquierda la trama de bits
nop
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA7,1 ;roto una posición a la izquierda la trama de bits
nop
bsf STATUS,C ;borro el bit de acarreo para que no aparezca por
;la derecha
rlf FILA8,1 ;roto una posición a la izquierda la trama de bits
nop
return
-
Siguiente objetivo es efectuar un scroll completo de un mensaje pasante de forma que sin llegar a desaparecer del todo por la izquierda la primera letra aparezca la segunda, luego tercera etc, etc.
-
Aquí el video de la "A" con el funcionamiento correcto.
-
Hey que no me he olvidado del hilo, pero con el trabajo no dispongo de mucho tiempo para seguir adelante, paciencia y ya llegarán los siguientes avances. El próximo objetivo es un mensaje pasante a lo ancho de la matriz recogido de una tabla.
-
Manos a la obra, como a nivel de software no lo veo fácil e decidido realizar cambios a nivel hardware. Actualmente los datos entran de izquierda a derecha pero a una velocidad que hace que no se note (salvo que el código emplee un delay importante y sí lo veríamos), y como lo que se pretende es mostrar un mensaje pasante que entre desde la derecha de la matriz y salga por la izquierda he decidido invertir la forma en que se activan las columnas desde las salidas del 74ls164, de forma que aunque el registro seguirá trabajando como ahora (de izquierda a derecha) la matriz lo hará al contrario, es decir, de derecha a izquierda. De está forma irá ingresando un caracter por la derecha hasta que se muestre entero e irá siendo "empujado" por los datos que le metamos a continuación de otro caracter hasta ir desapareciendo y quedar el otro caracter que será "empujado" por el siguiente y así siempre. Bueno, no se me ha ocurrido otra forma, a lo mejor se puede hacer sin estos cambios y de una manera sencilla pero si alguien puede dar luz que la dé. Os dejo el dibujo en datos adjuntos de las reformas a emprender a nivel hardware. Manos y soldador a la obra.
-
Perdonar, pero he cometido un error, la solución anterior es válida pero solo para una trama de 8 bites que esten en el registro y sean empujadas por otra trama de 8 bites, pero para formar un caracter como ya sabemos usamos 8 tramas de 8 bites cada una que se meten al registro a una velocidad que para nuestro ojo es imperceptible y ademas se redibujan una y otra vez en función del tiempo que queremos que esté presente el caracter, de forma que nos quedamos como estábamos. Seguiremos estrujando el código a ver como se hace y disculpad el error.
-
E voila, aquí está el scrolling, de momento os dejo el video, y os dejaré en suspense respecto al código, os haré sufrir un poquito :mrgreen:, que malo soy ¿verdad?, os lo pondré a lo largo de este mes asi que teneis que ser pacientes porque os mantendré un poquito en tensión y expectantes, :D. Es curioso que en todo internet no exista un proyecto de PE a PA que explique como hacer una matriz de leds con su código y todo para PIC en asembler, pues aquí lo teneis en mi post, y me encanta ayudaros (aunque os lo dé mascado y digerido), pero de eso se trata, de compartir lo de unos y lo de otros para que esto sea la GRAN ESCUELA DE LOS PICS. Perdonad los caracteres que aparecen en mayusculas en la matriz, pero todavía no he hecho los caracteres de letras minúsculas. Aquí está:
-
Muy bueno antimanson !! Permiteme hacerte una pequeña sugerencia, en las letras W y M, intenta hacer un poco mas gruesa la parte del medio, o modificarlas de alguna manera ya que hasta que no he visto el video un par de veces no había sabido identificar esas letras jeje.
Salu2.
-
muy bueno antimason.. .. :-/ :-/ supongo que seguiras con uno mas grande
saludos
-
Muy bueno antimanson !! Permiteme hacerte una pequeña sugerencia, en las letras W y M, intenta hacer un poco mas gruesa la parte del medio, o modificarlas de alguna manera ya que hasta que no he visto el video un par de veces no había sabido identificar esas letras jeje.
Salu2.
Tomaré en cuenta tú sugerencia.
-
muy bueno antimason.. .. :-/ :-/ supongo que seguiras con uno mas grande
saludos
Eso no lo dudes :mrgreen:.
-
Mientras esperais paciente y ansiosamente el código os dejo otro video molon, el número 1 me ha salido algo descentrado, tendré que centrarlo. :mrgreen: :-/
-
:shock: :shock: te estas volviendo un mostro en esto muy bien :mrgreen: :mrgreen:
-
Aquí teneis el código, os saldrá el mensaje "HOLA MUNDO". :-/ :mrgreen: :D
-
Hola... primero que todo, felicitaciones por el proyecto. Yo estoy tratando de implementarlo, pero me surge una duda, más bien un problema... con el último programa que nos falicitaste (HOLA MUNDO), arme el circuito en proteus y no me muestra nada el display de led, eso si en los pines del 74HC164 hay tension pero no encienden los led.
Ojala me puedas ayudar en eso...
Gracias
Saludos.
-
pengordon te he respondido en privado, saludos. :-/
-
gracias Antimason... yo tambien te he enviado un mensaje por privado... ojala lo puedas leer
Saludos
-
Vaya currada, yo tambien estoy empezando con la matriz de 8x8 con un pic 16F877A y mi ilusión sería hacer un juego tipo PONG, alguien tiene algún código para a ver como empezar???
-
Vaya currada, yo tambien estoy empezando con la matriz de 8x8 con un pic 16F877A y mi ilusión sería hacer un juego tipo PONG, alguien tiene algún código para a ver como empezar???
Pues yo no tengo nada, lo siento.
-
Pregunta la multiplexacion la realizas pr filas o por columnas y usas un registro de despalzamiento y un eeprom verdad?????????????
-
Pregunta la multiplexacion la realizas pr filas o por columnas y usas un registro de despalzamiento y un eeprom verdad?????????????
- Multiplexación por filas
- Uso un registro de desplazamiento
- Uso la memoria de programa del PIC 16F84A
-
hola
primero gracias por la informacion
Soy nuevo en esto de programar pics y me pidieron un mensaje en 3 matrices de 8x8 he probado la rutina de transmision al registro 74164 de bits y esa creo que solo sirve si se usa solo para una matriz haber si me podrian ayudar para que sirva para 3 osea 24 columnas
gracias por su atencion
-
hola
primero gracias por la informacion
Soy nuevo en esto de programar pics y me pidieron un mensaje en 3 matrices de 8x8 he probado la rutina de transmision al registro 74164 de bits y esa creo que solo sirve si se usa solo para una matriz haber si me podrian ayudar para que sirva para 3 osea 24 columnas
gracias por su atencion
Creo que la clave para hacer una matriz de 8x16 bits radica en esta parte del código.
Donde pone TX y cargamos a CONTADOR con 8, ¿Por qué crees que se carga con ese valor el CONTADOR?, pues sencillo es, porque el registro 74HC164 es de 8
BITS, si colocas DOS REGISTROS 74HC164 supongo que deberas cargar al CONTADOR con 16. Haz pruebas y cuenta que tal te ha ido. Saludos.
;****************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;****************************************************************************************************************************
TX movlw .8 ;pone 8 en W (EN VEZ DE 8 PON 16)
movwf CONTADOR ;carga contador con 8 (AQUI DEBES CARGAR 16)
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT bsf STATUS,RP0 ;pagina 1
movlw 0X00
movwf TRISA ;puerta A salida
bcf STATUS,RP0 ;pagina 0
btfss EEPROM,DO ;mira el bit DO y salta si vale 1
goto BITLOW
bsf PORTA,3 ;pone a 1 DATA
goto CLOCK
BITLOW bcf PORTA,3 ;pone a 0 DATA
-
gracias amigo antimason por tu matriz esta super explicita pero me paso lo mismo que pengordon ,
no me funciono en proteus , yo tengo el 7.5..me prodias decir que paso ?????
saludos de chile :-/ :-/
-
Perdona por la tardanza en mi respuesta, el trabajo, mi hijo etc..............bien, con el PROTEUS yo tambien tuve problemas, y decididamente para el tema de las matrices pasé a la acción montando un circuito real y probando los códigos que me daban fallo en PROTEUS pero que en la realidad en circuito íban de maravilla, no sé porque ocurren esos fallos con PROTEUS por lo que estoy igual que tú, saludos. A ver si alguno se atreve con la matriz de 8 filas x 16 columnas.
-
Hola antimason agradeciendo de ante mano la ayuda, mira soy nuevo en el foro y he estado mirando los videos que publicaste en el foro con junto con los codigos, yo tengo algo de experiencia en la programacion de microcontroladores y me me entro las ganas de construir un pasa mensajes de 8x32 y la verdad que los programas que publicaste me han ayudado mucho pero lo que no puedo hacer todavia es el desplasamiento de los caracteres sobre el display de leds y quisiera ver la posibilidad si me pudieras ayudar a terminarlo talvez con informacion sobre el criterios o metodos que se utilizan para ese fin o tal vez con algun equeno programita que me ayude.
-
Revisa el siguiente link (http://www.ucontrol.com.ar/forosmf/programacion-en-asm/mis-primeros-programas-pic16f84a-y-pic16f628a/msg17048/#msg17048), seguramente va a darte una idea de como implementarlo.
Saludos!
-
Hola a todos, siento mucho no haber saludado antes, lo que psao fue es que todavia no manejo bien las probiedades del foro para publicar los mensajes asi que pidos las respectivas disculpas.
En realidada la ayuda que pido no solo es para antimason si para todos aquellos que quieran ayudarme con lo que se pueda.
-
Gracias Suky en este momento lo revisare luego les cuento si me va bien o mal.
Saludos y nuevamente gracisa!!!!
-
gracias por tu respuesta antimason el proteus que uso es 7.5 pero ahora quiero armarlo en pcb y tope en algo.
yo trabajo con protel 99se pero al diseñar la placa me di cuenta que en la conexion de los led no entendí si los transistores controlan las columnas o las filas y si van a los anodos de los o a los cátodos y lo mismo con los 74hc164.
Osea si cada fila y columna es catodo o anodo común
saludos desde chile y gracias
-
Hola, aquí dejo el esquema supermasticado de mi montaje, observareis que tambien posee una memoria 24LC256 pues tambien está preparado para usar dicha memoria.
-
Hola Amigos!, muy buena Antimason, yo estoy implementando una matriz de 10x15, y para generar las tablas, realicé este programita...
si quieres, lo adapto a 8x8 :mrgreen:
ANIMATRIX (http://www.todopic.com.ar/foros/index.php?topic=29170.msg241708#new)
Norberto
-
Hola Amigos!, muy buena Antimason, yo estoy implementando una matriz de 10x15, y para generar las tablas, realicé este programita...
si quieres, lo adapto a 8x8 :mrgreen:
ANIMATRIX (http://www.todopic.com.ar/foros/index.php?topic=29170.msg241708#new)
Norberto
Perfecto si lo haces para caracteres 8x8, ¿no podrías hacer tambien que sacase el dato hexadecimal de filas y columnas para poder implementar los caracteres en un memoria externa?. Gracias.
-
Resumiendo este hilo, se empezó colocando una animación, luego se creo un caracter que aparecía en la matriz, luego se consiguió desplazar el caracter por la matriz, mas tarde se usaron tablas para crear un texto largo que se desplazase por la matriz y quedaba pendiente el uso de una memoria externa para almacenar miles de caracteres y tener mas juego. Pues aquí os dejo el video de una animación creada con tres caracteres almacenados en memoria externa 24LC254, y que simulan el movimiento de un perrito.
-
Aquí os dejo el archivo .bin que hay que grabar en la memoria externa, el archivo asm con el código, y los archivos .INC, de las rutinas del protocolo I2C y de las rutinas de tiempo.
-
Hola, he adaptado el código de Suky: http://www.ucontrol.com.ar/forosmf/programacion-en-asm/mis-primeros-programas-pic16f84a-y-pic16f628a/msg17048/#msg17048, hecho para un PIC 16F628A y matriz 8x32, a mi matriz 8x8 basada en un PIC 16F84A, el resultado no es todo lo bueno que debiera, debido a que Suky en su código hace uso del reset (Strobe) del registro de desplazamiento y yo tengo ese reset en mi circuito a Vcc, por lo que no hago uso de la función reset. Tendría que hacer un arreglo en las pistas para habilitarlo y por ejemplo poner la patita RA4 como salida de reset teniendo en cuenta que la entrada reset de mi registro está invertida, es decir, la ausencia de señal provoca el reset y la presencia anula el reset. Los caracteres usados por Suky que pone en la tabla los he invertido debido a las caracteristicas constructivas de mi matriz, es decir, para visualizar un dato debo envíar al registro un 0 y no un 1. Aquí el video y los códigos original y el adaptado para que los compareis y podais sacar vuestras conclusiones.
-
Rectifico algo que dije en el post anterior, STROBE, no es RESET. STROBE es la función que poseen algunos registros que cuando se activa es cuando sacan por sus salidas paralelo los datos previamente cargados. Saludos.
-
muy bueno antimason :mrgreen: lo que me pregunto es porque en el video no se ve bien definido las letras? ...al parecer hay leds que no deberian prender
Saludos
-
muy bueno antimason :mrgreen: lo que me pregunto es porque en el video no se ve bien definido las letras? ...al parecer hay leds que no deberian prender
Saludos
Ese asunto es el que me ocupa actualmente y estoy detras de él, ¿tendrá que ver que en mi matriz la salida del portb para activar las filas debe ponerse a 0? ¿tendrá algo que ver que yo uso registros de desplazamiento sin función STROBE?.........en fin, a ver si alguien puede ayudar.
-
Rectifico algo que dije en el post anterior, STROBE, no es RESET. STROBE es la función que poseen algunos registros que cuando se activa es cuando sacan por sus salidas paralelo los datos previamente cargados. Saludos.
no uso los mismos registros pero puede darte alguna idea
lo que no entiendo es si no utilizas el strobe, como haces para sacar los datos del serie al paralelo :shock: yo utilizo los 74595 por que se pueden enlazar en cascada y lo que hago es tirar en serie la trama clock/dato, clock/dato....x64 y despues activar el estrobe, bueno yo lo llamo latch, para sacar los datos por el p. paralelo de los registros, pero si lo dejo fijo en un estado no salen hasta que no vuelve de alto a bajo el nivel del strobe/latch, podrias para no complicarte mucho en modificar el circuito, cortar la pista de la pcb del strobe, y tirar un modesto cablecillo hasta una salida del pic. por que si van saliendo los datos al paralelo segun los tiras en serie, es normal que se vean otros led encendidos aparte de los que deberian, menos por que es muy poco tiempo hasta que los pone en su sitio, pero algo se iluminan. tambien puedes intentar desactivar las filas hasta que esten las columnas colocadas, o desactivar las columnas hasta que esten colocadas las filas, no se si se me entiende :oops:. de esta forma "creo" no se encenderia ningun otro led mientras salen los datos en serie por el paralelo, aunque le veo mejor ponerle el cablecillo y usar el strobe. asi los tengo colocados para que las salidas de clock y data sean tambien el latch y clock de otros registros 74165 estos tambien se pueden poner en cascada, los uso para ampliar entradas, utilizan una entrada al pic para recibir los datos. usea con 4 pines del pic manejas todos los registros de entrada y salida que necesites
un saludo
-
Rectifico algo que dije en el post anterior, STROBE, no es RESET. STROBE es la función que poseen algunos registros que cuando se activa es cuando sacan por sus salidas paralelo los datos previamente cargados. Saludos.
no uso los mismos registros pero puede darte alguna idea
lo que no entiendo es si no utilizas el strobe, como haces para sacar los datos del serie al paralelo :shock: yo utilizo los 74595 por que se pueden enlazar en cascada y lo que hago es tirar en serie la trama clock/dato, clock/dato....x64 y despues activar el estrobe, bueno yo lo llamo latch, para sacar los datos por el p. paralelo de los registros, pero si lo dejo fijo en un estado no salen hasta que no vuelve de alto a bajo el nivel del strobe/latch, podrias para no complicarte mucho en modificar el circuito, cortar la pista de la pcb del strobe, y tirar un modesto cablecillo hasta una salida del pic. por que si van saliendo los datos al paralelo segun los tiras en serie, es normal que se vean otros led encendidos aparte de los que deberian, menos por que es muy poco tiempo hasta que los pone en su sitio, pero algo se iluminan. tambien puedes intentar desactivar las filas hasta que esten las columnas colocadas, o desactivar las columnas hasta que esten colocadas las filas, no se si se me entiende :oops:. de esta forma "creo" no se encenderia ningun otro led mientras salen los datos en serie por el paralelo, aunque le veo mejor ponerle el cablecillo y usar el strobe. asi los tengo colocados para que las salidas de clock y data sean tambien el latch y clock de otros registros 74165 estos tambien se pueden poner en cascada, los uso para ampliar entradas, utilizan una entrada al pic para recibir los datos. usea con 4 pines del pic manejas todos los registros de entrada y salida que necesites
un saludo
Yo uso el registro 74HC164 que solo tienen clock, data, y reset, y en los anteriores códigos enviaba la trama en serie de 8 bits a dicho registro y una vez hecho esto activaba la fila correspondiente así quedaba asegurado que sólo los leds correspondientes se encendieran. El problema es que el código de Suky que he adaptado a mi matriz está pensado para usar registros con esa función de STROBE, y claro, al usarlo con registros que no tienen STROBE da ese fallo de leds que debieran estar apagados estar parcialmente encendidos. A ver si puedo retocar mas el código para asegurar que la fila sólo se encienda cuando esten cargados la trama de bits en el registro. Saludos.
-
Hola.
Con el 74hc164 hay que apagara todas las filas para enviar los datos, cuando hallas terminado de enviarlos, habilitas la fila correspondiente. Antes de la rutina de enviar los datos a los registros de desplazamiento, deberias poner a 0 el registro del puerto controlador de las filas.
Saludos
-
Solucionado, hay que ver lo que es usar unos registros u otros, lo que te puede cambiar el resultado, ya está adaptado el código para su uso con registros 74HC164, gracias MLO por tu colaboración y tambien a alogic.on
-
Excelente.
Muy bien trabajo antimason
Saludos
-
A ver si alguien me pasa una rutina para que caracteres almacenados en columnas en vez de en filas pueda pasarlos a un registro de desplazamiento, creo haber leido algo de que se coge el byte de la primera columna y se se hace AND con la primera fila, si el resultado es diferente a 0 se envíaba un 1 a DATA del registro, pero claro, ENVÍA UN SÓLO DATO, sea 1 ó 0, pero ¿como se envían los 7 bits restantes?, y los demás bytes de un caracter de 8x8. ¿O sea, como enviaría este caracter a un registro?:
00000000
00000000
11111100
00010010
00010010 ;letra A de 7x5
00010010
11111100
00000000
-
A ver si alguien me pasa una rutina para que caracteres almacenados en columnas en vez de en filas pueda pasarlos a un registro de desplazamiento, creo haber leido algo de que se coge el byte de la primera columna y se se hace AND con la primera fila, si el resultado es diferente a 0 se envíaba un 1 a DATA del registro, pero claro, ENVÍA UN SÓLO DATO, sea 1 ó 0, pero ¿como se envían los 7 bits restantes?, y los demás bytes de un caracter de 8x8. ¿O sea, como enviaría este caracter a un registro?:
00000000
00000000
11111100
00010010
00010010 ;letra A de 7x5
00010010
11111100
00000000
Bueno, como hasta ahora siempre había almacenado los datos a mostrar en la matriz en forma de FILAS, ahora quiero desarrollar desplazamientos de mensajes almacenados en forma de COLUMNAS. Ya he realizado una primera prueba con un dibujo estático y da un fallo, queda como efecto "ESPEJO", es decir, queda invertido el resultado respecto al dato almacenado, si esperaba esto en la matriz:
11111111
10000011
10000011
10000011
10000011
10000011
10000011
11111111
En cambio me da esto:
11111111
11000001
11000001
11000001
11000001
11000001
11000001
11111111
Ahí dejo el código y la foto de la simulación en PROTEUS por si alguien me puede ayudar y me dice donde está el fallo.
-
Hola veo que sigues con tus avances muy bien ;-) ..... ya vi q arreglaste el problema anterior :-/ :-/ .
ahora por q te sale en forma de espejo....facil, porque al cargar los datos en el registro este lo carga uno de tras de otro empujando la informacion.
ten en cuenta que para cargar la informacion en tu caso debes empesar por la columna final(en vez de empesar con byte_1 empiesa con byte_8)
saludos
te dejo el codigo modificado
; CARTEL DE LEDS. de 8x8. Pruebas de transmisión de un caracter almacenado en columnas.
; Xtal = 4 Mhz
list p=16F84A ;Microcontrolador utilizado
#include P16F84A.inc ;Definicion de registros SFR
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C ;En esta posicion se declaran los registros de usuario
MASCARA ;mascara para operación AND con ALMACEN
ALMACEN ;Registro donde se coloca el byte para operación AND con MASCARA
FILA ;Registro que rota cada 2ms para realizar multiplexión por filas
CARACTER ;Registro que controla los 8 bytes que forman el caracter
ENDC
BData equ 3 ;pin por donde salen datos al 74HC164
BClock equ 2 ;pin que ejecuta el clock de transmisión de datos al registro
;****************************************************************************************************************************
;
;****************************************************************************************************************************
Reset org 0x00
goto Inicio ;Salto a inicio del programa
org 0x05
;****************************************************************************************************************************
; Inicio del microcontrolador
;****************************************************************************************************************************
Inicio bsf STATUS,RP0 ;Banco 1
movlw 0x00
movwf TRISA ;puerta A salida
movlw 0x00
movwf TRISB ;puerta B salida
movlw b'00000110'
bcf STATUS,RP0 ;Banco 0
clrf PORTA ;limpio registros
clrf MASCARA
clrf FILA
clrf CARACTER
movlw b'11111111' ;aseguramos todas las filas apagadas
movwf PORTB
movlw b'11111110' ;registro de filas empieza activada la fila 1
movwf FILA
movlw b'00000001' ;cargo 1 en mascara
movwf MASCARA
movlw .8
movwf CARACTER ;8 bytes forman el caracter
;****************************************************************************************************************************
; AQUI LLAMO A LOS BYTES QUE CONFORMAN EL CARACTER
;****************************************************************************************************************************
Dato call byte_8
movwf ALMACEN
call TX
call byte_7
movwf ALMACEN
call TX
call byte_6
movwf ALMACEN
call TX
call byte_5
movwf ALMACEN
call TX
call byte_4
movwf ALMACEN
call TX
call byte_3
movwf ALMACEN
call TX
call byte_2
movwf ALMACEN
call TX
call byte_1
movwf ALMACEN
call TX
movf FILA,0 ;muevo el contenido de FILA a PORTB
movwf PORTB ;para activar la salida que corresponda del PORTB
call Retardo_2ms ;durante 2 ms
bcf STATUS,C ;evito acarreos
rlf MASCARA ;roto mascara para siguiente dato de operación AND
bsf STATUS,C ;evito acarreos
rlf FILA ;roto fila para sigiente fila de la multiplexación
decfsz CARACTER,1 ;controlo si pasaron ya los 8 bytes del caracter
goto Dato ;no, pues siguiente dato a registro
goto Inicio ;si, pues vuelta a empezar
;****************************************************************************************************************************
; Rutina envia bit
;****************************************************************************************************************************
TX movlw b'11111111'
movwf PORTB
movf ALMACEN,0
andwf MASCARA,0 ;Hacemos ALMACEN (AND) MASCARA para determinar el bit a enviar.
subwf MASCARA,0 ;[ALMACEN (AND) MASCARA] - MASCARA, si esto es cero el bit a enviar es 1, sino 0.
bcf PORTA,BData ;Primero cargamos un 0.
btfsc STATUS,Z ;La operacion anterior es 0?
bsf PORTA,BData ;Si, cargamos un 1 en el bit
bcf PORTA,BClock ;pone a 0 CLOCK
nop ;espera 1 micros (a 4Mhz)
nop ;otro
nop ;otro
nop ;otro
bsf PORTA,BClock ;pone a 1 CLOCK
nop ;1 micros
return`
;****************************************************************************************************************************
; CARACTER
;****************************************************************************************************************************
byte_1 movlw b'11111111'
return
byte_2 movlw b'10000001'
movwf ALMACEN
return
byte_3 movlw b'10000001'
movwf ALMACEN
return
byte_4 movlw b'10000001'
movwf ALMACEN
return
byte_5 movlw b'10000001'
movwf ALMACEN
return
byte_6 movlw b'10000001'
movwf ALMACEN
return
byte_7 movlw b'11111111'
movwf ALMACEN
return
byte_8 movlw b'11111111'
movwf ALMACEN
return
INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
END
-
jmcs87, agradezco tu respuesta, pero aunque en este caso valdría lo que propones, imagínate que los datos los voy cogiendo de una memoría externa de forma secuencial.........¿como me apañaría?, tú solución se me hace algo dificil en ese caso.
-
En el caso de usar memoria externa lo que hago es sacar la data que quiero mostrar a la ram del pic y de ahi pasarla al letrero, es mas recomendable esta opcion que estar haciendolo directamente con la eprom.
Saludos :mrgreen:
-
Buenas a todos, es de las primeras veces que escribo en este foro, creo que la tercera. Bueno, estaba yo liado aprendiendo a programar para los PICS y el proyecto que estoi liado ahora es esto de las matrices de Led's, buscando algo de información me topé con este post que lo veo muy interesante.
Bueno lo que vengo ha hacer es a dejaros aqui lo que he hecho hasta ahora por si os puede servir de algo, o si veis alguna modificación que le pueda hacer. El proyecto no esta testeado al 100% (fisicamente), ya que en el ISIS no hay manera y ahora no dispongo ni de leds suficientes ni tiempo para ir a la ciudad para comprarlos.
Parcialmente si esta comprovado y en teoria deberia funcionar.
Adjunto un programa que realice en C# para generar caracteres para la memoria I2C, por defecto vienen unas mayusculas bastante cutres, podeis modificarlas y adjuntar mas caracteres. En el tu escribes la frase que quieras visualizar en la matriz y este te genera el *.hex para el I2C, tambien lleva un pequeño simulador...
El esquema utilizado lo podreis ver dentro del programa en la pestaña ayuda, podreis comprobar que no utilizo registro de desplazamiento sino que uso un multiplexor (es lo que tenia a mano).
Este es el codigo para el Pic16F84a:
;************************************************** MATRIZ LEDS 8X8 ********************************************************************
;
;
;
;ZONA DE DATOS******************************************************************************************************************************
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
UNO
DOS
TRES
CUATRO
CINCO
SEIS
SIETE
OCHO
Datomov
VarRep
ENDC
Rep EQU .5 ;numero de refrescos antes de solicitar otra columna
;ZONA DE CODIGOS****************************************************************************************************************************
ORG 0
Inicio
bsf STATUS,RP0 ;accedo a banco 1
clrf PORTB ;port b como salida
movlw b'11000' ;del puerto a, los 2 bits altos como entrada
movwf PORTA ;los 3 bajos como salida
bcf STATUS,RP0 ;acces a banc 0
clrf PORTB
clrf PORTA
Puestacero
clrf UNO
clrf DOS
clrf TRES
clrf CUATRO
clrf CINCO
clrf SEIS
clrf SIETE
clrf OCHO
movlw Rep
movwf VarRep
call I2CReset
Principal
movf PORTA,W ;cargo el contenido del puerto a
andlw b'11000' ;me quedo con los dos bits altos
iorlw b'00000' ;dejo los 2bits altos como estaban i cambio los otros 3
movwf PORTA ;resultado a Puerto A
movf UNO,W ;muevo a W el contenido de la variable UNO
call RetardoMOV ;llamo a la subrutina que se encarga de mandar W al pueto B y el tiempo que se mantiene encendido
movf PORTA,W ;desde aqui igual para las demas columnas
andlw b'11000'
iorlw b'00001'
movwf PORTA
movf DOS, W
call RetardoMOV
movf PORTA,W
andlw b'11000'
iorlw b'00010'
movwf PORTA
movf TRES, W
call RetardoMOV
movf PORTA,W
andlw b'11000'
iorlw b'00011'
movwf PORTA
movf CUATRO, W
call RetardoMOV
movf PORTA,W
andlw b'11000'
iorlw b'00100'
movwf PORTA
movf CINCO, W
call RetardoMOV
movf PORTA,W
andlw b'11000'
iorlw b'00101'
movwf PORTA
movf SEIS, W
call RetardoMOV
movf PORTA,W
andlw b'11000'
iorlw b'00110'
movwf PORTA
movf SIETE, W
call RetardoMOV
movf PORTA,W
andlw b'11000'
iorlw b'00111'
movwf PORTA
movf OCHO, W
call RetardoMOV
decfsz VarRep, F ;compruebo si ha hecho los refrescos predefinidos
goto Principal ;si no es asi vuelvo a repetir
;subrutina per passar sa lletre
; AQUI ES DONDE CARGAMOS LOS NUEVOS DATOS
Pasalletre
movlw Rep ;recargamos el refresco
movwf VarRep ;
call Tablas ;llamamos a la memoria I2C para que nos envie el nuevo Byte
movlw b'11111111' ;aqui compruebo si datomov es 11111111, si es asi lo entiendo como final
subwf Datomov,W ;y reinicio la memoria
btfsc STATUS,Z
goto Puestacero
rlf Datomov, F ;Hago rotar el Byte recibido a izquierdas, el bit
rlf UNO, F ;de mayor peso entra en el carry, a continuacion
rlf Datomov, F ;hago rotar la primera variable (el bit de mayor peso lo desecho) y el que
rlf DOS, F ;estaba en el carry entra como bit de menor peso
rlf Datomov, F ;
rlf TRES, F ;Esto lo hago con todas las variables de columnas
rlf Datomov, F
rlf CUATRO, F
rlf Datomov, F
rlf CINCO, F
rlf Datomov, F
rlf SEIS, F
rlf Datomov, F
rlf SIETE, F
rlf Datomov, F
rlf OCHO, F ;ya hemos movido el caracter un punto a la izquierda
goto Principal
;subrutina retardo y mover dato a puerto B
RetardoMOV
movwf PORTB
call Retardo_5ms ;tiempo que permanece encendido cada led,
return
;Aqui leemos un byte de la memoria
Tablas
call I2C_EnviaStart ;enviamos la condicion start de protocolo I2C
movlw b'10100001' ;direccion Memoria en modo lectura
call I2C_EnviaByte ;la enviamos
call I2C_LeeByte ;LEEMOS EL SIGUIENTE BYTE
movwf Datomov ;lo movemos a la variable
call I2C_EnviaStop ;enviamos el Stop
return
;Indica a la memoria I2C desde donde empezar a leer
I2CReset
call I2C_EnviaStart ;enviamos la condicion start de protocolo I2C
movlw b'10100000' ;direccion Memoria en modo escritura
call I2C_EnviaByte ;la enviamos
movlw b'00000000' ;pagina donde empezar a leer/escribir
call I2C_EnviaByte ;la enviamos
movlw b'00000000' ;direccion donde empezar a leer/escribir
call I2C_EnviaByte ;la enviamos
call I2C_EnviaStop ;enviamos el Stop, no queremos escribir
return
INCLUDE<BUS_I2C.INC>
INCLUDE<RETARDOS.INC>
END
Las librerias estan sacadas del libro "Microcontrolador Pic16f84 desarroyo de proyectos" con el que estoy iniciandome.
Espero les guste o les sirva. Tambien agradeceria si algo no lo hago bien o lo que sea (estoi aprendiendo :P)
Saludos
-
Que bien, felicidades tannke por tu aportación, y el programa para realizar caracteres y pasar directamente el texto a una memoria externa está fenomenal, gracias por tu estupenda contribución. :-/ :-/
-
Muchas gracias, espero les sea util, resubo el programa porque vi un par de fallos, como el de no dejar utilizar la tecla backspace para borrar la frase, y he puesto una opción nueva para invertir los caracteres, ya sea para mostrar las letras invertidas o para que los que enciendan los caracteres con CEROS y no con unos.
Pudiendo hacer mas pruebas he visto que con el codigo para el pic parpadean un poco los leds, lo he solucionado cambiando los valores:
Rep EQU .5 por Rep EQU .15
y
call Retardo_5ms por call Retardo_2ms
es ir jugando con estos valores para conseguir la velocidad de desplazamiento deseado y que no se note el parpadeo.
saludos
-
2ms es el tiempo típico de temporización en el barrido de cada fila, por cierto por lo que he podido ver en tu proyecto tu multiplexas las filas con (valga la redundancia) un multiplexador, y activas los datos de las columnas por el PORTB. Aprovecho de nuevo la ocasión para felicitarte por el programa que has compartido con nosotros.
-
tannke, tu programa no permite editar el caracter del "espacio", pues yo necesito que sea un espacio de 8x8 y al editarlo y guardarlo no lo guarda como 8x8, para ello he recurrido a un truco que es asignar el espacio de 8x8 al caracter +, y así me he apañado. Y tambien decirte que el programa que has hecho se ve que es para caracteres hechos por columnas y no por filas, pero no es problemático adaptarlo a caracteres por filas pues he editado los caracteres girados 90º y ademas en forma de "espejo", es decir invertidos, saludos. :-/
-
Aiba! razon tienes con lo del espacio, ni me di cuenta y no se ni donde puede estar el fallo... ahora mismo lo buscaré. Al principio al leer pensaba que seria porque antes no tenia el guardar actibado hasta que se cambiaba algun bite (ya que hasta que alguno no cambia no se genera el codigo hexa) ya que poniendo o quitando columnas no lo implemente pq tenia que cambiar medio codigo y opté por desactivar el guargar hasta que hubiera un cambio de bite.
Hasta que encuentre el fallo, lo que si puedes hacer si tienes el office es habrir manualmente el archivo Libreria. Y ya dentro puedes modificarlo manualmente poniendo en la columna dato los 16 ceros y en Datoinv las 16 F. Las otras 2 columnas no las toques, ya que podria dar luego algun error raro en el programa.
La contraseña es 0423.
Sobre lo segundo, tb tienes razón ya que yo hago el barrido por columnas. Lo que si voy ha hacer (haber como lo meto) es en las opciones intentar poner las (creo que serian todas) "Invertir 0 por 1" "Modo columna o fila" y "espejo".
Saludos y gracias
EDIT: Bueno lo primero ha sido una pijadilla que no tuve en cuenta (algunos problemas que tuve con el espacio en la base de datos acces...) aqui te lo resubo.
Una cosa, guarda tu archivo "Libreria" ahi es donde estan todos los caracteres, lo digo porque si ya los editastes no tener que hacerlo cada vez que corrija algun fallo.
Para lo segundo ya si voi a tardar algo mas (ahun tengo que pensar como lo implemento). saludos
-
Bueno, de nuevo por aqui, he hecho una nueva actualización. En esta he puesto en las opciones poder elegir el tipo de barrido a utilizar, el modo invertido (ceros por unos) y el modo espejo.
Ademas le he añadido una opcion para actualizar para no tener que volver a subir el archivo en la pagina (por si fuera necesario modificar algo mas)
Lo unico malo de este es que no he podido utilizar la misma libreria que las anteriores por lo que si utilizais esta version tendres que volver a editar los caracteres...
pero bueno, si os sirve el anterior es tonteria poneros este :)
Por cierto, hoy he podido pasarme por la ciudad a comprar los diodos y algunos componentes mas. Ahora voi a liarme ha hacer la placa y luego a empezar a soldar leds, haber como se ve el pryecto :)
Un saludo!!
-
Bueno, de nuevo por aqui, he hecho una nueva actualización. En esta he puesto en las opciones poder elegir el tipo de barrido a utilizar, el modo invertido (ceros por unos) y el modo espejo.
Ademas le he añadido una opcion para actualizar para no tener que volver a subir el archivo en la pagina (por si fuera necesario modificar algo mas)
Lo unico malo de este es que no he podido utilizar la misma libreria que las anteriores por lo que si utilizais esta version tendres que volver a editar los caracteres...
pero bueno, si os sirve el anterior es tonteria poneros este :)
Por cierto, hoy he podido pasarme por la ciudad a comprar los diodos y algunos componentes mas. Ahora voi a liarme ha hacer la placa y luego a empezar a soldar leds, haber como se ve el pryecto :)Un saludo!!
Luego nos pones un video que lo veamos. :-/
-
Buenas a todos de nuevo, bueno decirles que tube un pequeño descuido montando la matriz... cuando puse la placa en el acido justo me llamaron al telefono y ahi se quedo :oops: jeje. Ahora tengo una bonita placa de fibra con algunos pegotillos de cobre por ahi...
A todo esto me decidi a montarla si o si con lo que tenia y la acabé armando en una placa de puntos. El resultado no es muy profesional pero almenos puedo andar ya haciendo las prubas.
Aqui les dejo el vido de la primera prueba (con exito). El video está cortado, el mensaje dura mas de 10 minutos (usando el 7% de la memoria) y se hacian bastante pesado leerlo y a esa velocidad
-
Felicidades, ¿el código que usaste es el mismo que posteaste aquí o reformaste algo?. :-/ :-/
-
es el mismo nada mas cambie las variables de refresco, que ya comente unas lineas mas atras (las 15 repeticiones) y (los 2ms que me dijistes que era el tiempo optimo)
bueno, tambíen cambié en la parte cuando comprueba el dato entrante de la memoria si era 0xFF (b'11111111') reiniciaba el ciclo. En este caso lo he cambiado por 0x00(B'00000000') ya que activo los leds con '0' (ceros).
lo malo de esta manera de detectar el final es que no puedo encender ninguna columa entera ya que me reinicia el bucle... tendré que encontrar alguna otra manera de detectar que ya ha llegado al final del mensaje para reiniciar.
Saludos
-
Hola, os dejo una hoja de excel con caracteres numéricos y alfabéticos y su código para filas y columnas en formato hexadecimal, debeis tener instalado la función BIN.A.HEX en vuestro excel, sino no podreis ver la conversión. Por cierto, para los expertos de excel, ¿como hago para que en esta hoja que he subido cuando ponga 1 ó 0 se sombree la casilla sin tener que hacerlo luego al margen?, los 1 están como podeis ver sombreados en color verde y los 0 en blanco.
-
Subo este código que está mejorado respecto al que puse por aquí de "HOLA MUNDO", este no usa interrupción por desbordamiento del TMR0 como aquel si usaba. Lo podeis simular bien en PROTEUS pero tened en cuenta que aunque en PROTEUS veais bien los caracteres, en el Hardware de mi matriz se verían invertidos, vamos, como efecto "sombra". Pronto subiré otro código pasamensajes pero con almacenamiento externo, es decir, con memoria externa I2C.
-
tankee, te propongo otra modificacion de tu programa y se trata de que cuando escribas en memoria puedas elegir la pagina y posicion a partir de donde escribir el mensaje. Seria muy util porque te permitiria crear un mensaje almacenarlo en la pagina y posicion deseada, a continuacion por ejemplo saltar a un efecto de animacion en alguna rutina de animacion y volver a la memoria a por el siguiente mensaje conociendo la pagina y posicion donde lo hayamos almacenado y visualizarlo etc. A ver que te parece la idea.
-
Buenas de nuevo. antimason, voy a ver como lo coloco, creo que una manera seria en el botón "Generar" cambiarlo por "Generar en" y debajo colocar un espacio para elegir las posiciones de memoria.
Llevaba unos dias sin entrar, he estado liado con otro proyecto, me compré un modulo web "ez web lynx" y he estado peleando con el conectandolo a un pic para hacer un par de movidillas.
Voy al lio, haber que puedo hacer con la mejora (aprobechare ahora que tengo un par horilas).
En cuanto lo denga digo cosas. Un saludo
-
Esperaremos ansiosos el resultado. :-/
-
Hola, os dejo una hoja de excel con caracteres numéricos y alfabéticos y su código para filas y columnas en formato hexadecimal, debeis tener instalado la función BIN.A.HEX en vuestro excel, sino no podreis ver la conversión. Por cierto, para los expertos de excel, ¿como hago para que en esta hoja que he subido cuando ponga 1 ó 0 se sombree la casilla sin tener que hacerlo luego al margen?, los 1 están como podeis ver sombreados en color verde y los 0 en blanco.
El caso es que hasta hoy no habia leido este post tuyo y tiene gracia, porque con las letras que subiste hice eso mismo que preguntas, para no solo tener los bytes correspondientes, sino que tambien una referencia grafica de como queda.
Para conseguir eso que preguntas, es tan facil como añadir un formato condicional a las celdas deseadas. De todos modos, subo el archivo modificado con activacion por 0 y activacion por 1 para que todo aquel que lo quiera verlo, disfrutarlo y modificar las letras a su gusto.
Un saludo!
-
Hola tannke, excelente tu proyecto!
Yo asignaría una parte de la memoria (al principio) para guardar una tabla con la posicion de cada mensaje y el largo, o solamente el largo de cada mensaje uno detras de otro, pero de esta forma, para saber donde se ubica, por ejemplo, el mensaje 10 deberias leer los 9 anteriores e ir sumando posiciones.
también se podría asignar otra parte de memoria para programar el orden en que los mensajes aparecen y cuanto tardan, efectos, esas cosas......
Son ideas, no se si te servirán...
saludos.
-
Strepto, no consigo abrir con el excel el archivo que has subido, saludos.
-
Strepto, no consigo abrir con el excel el archivo que has subido, saludos.
No se que office usaras, pero yo tengo instalado el 2007 y si usas alguna version anterior puede que no te deje abrirlo. Para ello creo recordar que microsoft tiene colgado un parche en su web para poder visualizar documentos del office 2007 con office anteriores.
Espero que sea eso. Un saludo!
P.D: Si no, puedes probar con este que he subido ahora, que lo he guardado de forma que sea compatible con versiones anteriores.
-
Como ayer me aburria en casa y me apetecia recordar un poco el funcionamiento del VB 6, me puse a programar algo que podria ser util. Aqui os dejo un programa para que podais crear vuestras imagenes 8x8 y recibais el codigo de la fila o columna. (Es lo mismo que el excel pero en programa).
Espero que les guste
-
Perdona por la tardanza en mi respuesta, el trabajo, mi hijo etc..............bien, con el PROTEUS yo tambien tuve problemas, y decididamente para el tema de las matrices pasé a la acción montando un circuito real y probando los códigos que me daban fallo en PROTEUS pero que en la realidad en circuito íban de maravilla, no sé porque ocurren esos fallos con PROTEUS por lo que estoy igual que tú, saludos. A ver si alguno se atreve con la matriz de 8 filas x 16 columnas.
:oops:
que bien este foro no he encontrado alguno asi yo estoy iniciandome en el tema de las matrices de led ya tengo armado una de 8x 32 pero no me funciona el programa, me sale el mismo mensaje en cada bloque de ocho leds ya cambie el tx de 8 a 32 y sigue igual alguien me podiria ayudadr con esto, todos los ejemplos de 8x8 funcionan bien en la practica gracias.
-
Estube leyengo algo de lo tuyo, esta muy bueno.
Fijate si podes subir algo con alguna matriz de leds de 7 x 32. y en lo posible en BASIC..
Saudos atte Tomas
-
Hola, llevaba tiempo sin pasar por aquí, os subo un código para 8x32, con ello quedaran resueltas las dudas que alguno me habeis planteado de como adaptar mi código para carteles mas largos, lo he simulado con ISIS 7 aunque con una matriz de 8x16 y funciona PERFECTAMENTE. Compararlo con mi anterior archivo "MIO2.asm" para sacar conclusiones y sacar la lógica que he seguido para ampliar el cartel. Chao.
-
Solicito a los moderadores una chincheta a este hilo, mas de 16000 visitas merecen una, pues suscita gran interes este tema de las matrices de leds.
-
muy muy buenos aportes amigo.....que bueno que hay gente como TU que comparte su trabajo con la comunidad.yo e realizado una matriz de 7x7 pero utilizo otro tipo de codigo, el cual aveces se complica un poco mas jajaja.
saludos espero luego me puedas dar algunos tips de como mejorar mi codigo. gracias.
-
bueno alguna vez yo hice una matriz de 16 x 160 y realmente se ve espectacular y se simula bien en proteus, ahora que recuerdo con amigos tambien hicimos una pantalla grafica de 128x64 con puro leds muy grande y la simulacion en el proteus se vuelvo lento pero se nota bien las imagenes, logos y animaciones que se grabaron, el chip que usamos para el barrido fue el 4094
-
Wow me encanto todo el post, lo he leido todo, y he descargado todos los archivos, soy un novato en la programacion de pics, apenas he logrado encender algunas secuencias de leds, como la del auto fantastico y cosas por el estilo, cosas sencillas, y bueno el profesor nos esta enseñando a `programar el pic16f877 con un cristal de 20Mhz, y se ha antojado de mandarnos a hacer una matriz de leds del tamaño que queramos, que se muestre un mensaje desplazandose (como un cartel de de esos lineales de publicidad), y uff no tengo idea de como trabajar tablas en ensamblador y menos de como hacer para que se muevan, me podre a analizar sus aportes, y si alguno tiene algun manual donde pueda entender la logica de matrices en pics y usando ensamblador, pues bienvenida sea la ayuda jejeje :lol: , de verdad un millon de gracias por todos los aportes, ahora me voy de inmediato a estudiarlos jejejjeje y entenderlos, para poder ir modificando y haciendo mis propios experimentos jejejjeje, espero poder aportarles luego con fotos o video, estoy emocionado :mrgreen: :-/ Saludos a todos !!!!!!!!!!!!!!!!!!!!!!!!!
P.D.: el de 8 x 32 se ve interesante, pero primero quiero experimentar el arreglo sencillo de 8x8 y ver si logro resultados :mrgreen: !!!!!!!!!!!!!!!
P.D.: No se utilizar el proteus, pero montare todo en el protoboard y hare las pruebas alli, nos vemos luego :-)
-
Hola amigos.
Creo que ustedes tienen este tema bien molido, pero a mi personalmente me esta dando duro. :z) :z)
Tengo un código, donde muestro una letra A, pero no he podido desplazarla por la matriz.
Si gustan ayudarme con el tema, lo subo para que vean.
Si alguien tiene a bien ayudarme le agradesco mucho.. :oops: :oops:
-
Hola a todos.
Quisiera saber si alguien me podría explicar como genero letras en la matrix 8x8 usando el pic 16f877a. Tengo planteado un circuito en proteus usando el pic al cual conecto directamente el portb y c a la matrix 8x8 en el cual he generado secuencias, barridos y espirales pero no he logrado generar letras.
Estoy usando lenguaje assembler atraves de mplab.
Gracias!
-
Fijate hay un post con un programita hecho en VB6 que te dice los valores de columna/filas a enviar.
Si queres tener almacenada mas de una, entonce vas a tener que guardarlas en memoria y luego ir pidiendo poco a poco una por una
-
Gracias Killer! Soy completamente nuevo en este tema de los pics y disculpa si mis preguntas son muy básicas. A qué tipo de memoria te refieres? Podrías profundizar un poco más la respuesta :oops: gracias de nuevo
-
Me refiero a la memoria de programa, que es ademas de la EEPROM, las 2 memorias no volatiles que hay. Como almacenarlas depende del PIC que tengas.
Como podrias tenerlo en tablas como podrias poner los datos directamente si es que puede leer la memoria.