Autor Tema: enviar datos de forma serial  (Leído 8548 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
enviar datos de forma serial
« en: 31 de Marzo de 2005, 02:48:00 »
bueno lo que pasa es que necesito enviar d forma serial cadenas de 80 bits pero la verdad es que no se como debo hacerlo ya que de la forma en que lo hago utilizo mucha memoria en el micro y tengo mas que claro que se puede hacer de alguna otra forma bueno un ejemplo en pocas palabras de lo que necesito hacer seria esto

00000000000000000000000000000000000000000000000000000000000000000000000000000001   --->cadena 1
00000000000000000000000000000000000000000000000000000000000000000000000000000010   --->cadena 2
00000000000000000000000000000000000000000000000000000000000000000000000000000100   --->cadena 3
00000000000000000000000000000000000000000000000000000000000000000000000000001000   --->cadena 4
00000000000000000000000000000000000000000000000000000000000000000000000000010000   --->cadena 5
00000000000000000000000000000000000000000000000000000000000000000000000000100000   --->cadena 6
00000000000000000000000000000000000000000000000000000000000000000000000001000000   --->cadena 7

y asi sucesivamente...

el asunto es que es para controlar unos shift register los cuales estan encargados de barrer una matriz de leds de 16 matrices de 5x7

a la vez tambien hay una señal de clock la cual por cada bit enviado tiene que activarse osea al mismo tiempo y al termino de la transmicion envio un pulso de latch para activar todos los shift registers

bueno el shift register que utilizo es el 74hc595 que es de entrada serial y salida paralela lo que me permite con uno de estos transformar 3 pines del micro en 8 y que a la vez tambien poseen una salida serial para poder ponerlos en cascada unos con otros para asi tener el numero de salidas que uno guste...

yo solo utilizo 10 de estos para asi generar 80 salidas para recorrer las columnas de mi matriz

les dejo unas fotos de la matriz para que vean como esta quedando


Foto1



Foto2



Foto3



Foto4



Foto5



Foto6



-==XooTRAooX==-

Desconectado J0N4TH4N

  • PIC10
  • *
  • Mensajes: 16
RE: enviar datos de forma serial
« Respuesta #1 en: 01 de Abril de 2005, 03:30:00 »
Holas, se me ocurre que podrias usar menos bytes para formar lo que necesitas, si almacenas las cadenas que te son necesarias si que te molestara el tema del espacio, por eso se me ocurre que al ser que esto debe ir rotando el bit podrias usar un byte con las instrucciones de rotacion y el bit C del registro status, lo que harias seria, enviar el byte 0, luego lo rotas cuanto quieras y vuelves a enviar.. mas o menos es una idea, tu que entiendes lo que haces la aplicarias a tus necesidades, como nadie ha contestado me he atrevido a darte esta solucion no muy buena Angelito .. Saludos y estare pensando para ver que se puede encontrar. Suerte!

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: enviar datos de forma serial
« Respuesta #2 en: 01 de Abril de 2005, 03:52:00 »
RollEyesRollEyesRollEyes ufff la verdad es que no entendi mucho pero igual se agradece ya que no he tenido respuestas en de los dos intentos que hecho por averiguar sobre el tema la verdad es que me tiene bien tomado del pelo este tema ya que es super interesante con decir que la matriz de las fotos es de un letrero de esos comerciales y que la verdad son bastante costosos y aunque no lo crean LO ROMPI SOLO PARA EXPERIMENTAR CON ELSonrisa GiganteSonrisa Gigante y es esa ademas una de las razones de la  improtancia para mi el poder hacerlo trabajar ya que no quiero sentirme arrepentido por haber desarmado este letrero que trabajaba sin problemas y era bastante entretenido todo lo que hacia

bueno en fin buscando por hay me encontre que en lenguaje c se puede transformar varios registros en uno solo lo cual seria ideal para lo que yo necesito

make16(variable1,variable2)

eso es en lenguaje c, ahora ¿se puede hacer eso mismo en asm y con mas registros? por ejemplo 10 a la vez

bueno si alguien pudiese hecharme una manito se agradece de antemano

Desconectado J0N4TH4N

  • PIC10
  • *
  • Mensajes: 16
RE: enviar datos de forma serial
« Respuesta #3 en: 01 de Abril de 2005, 04:04:00 »
Una pregunta.. el cartel luminoso imprime lo que tienes en memoria del pic o se conecta a un PC con un programa donde cambias el texto que quieres mostrar???... ahora voy entendiendo un poco mas y puede ser que se me ocurra algo que te sea util.. cada caracter esta formado en un cuadro de 7*5.. mas los bits que necesitas para los espacios entre ellos.. respondeme lo anterior, estaba viendo que lo que necesitas es similar al codigo necesario para escribir caracteres en un lcd grafico sin driver.. el de Nokia 3310. Saludos y disculpas por el mensaje anterios.. si que fue confuso Payaso

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: enviar datos de forma serial
« Respuesta #4 en: 01 de Abril de 2005, 04:34:00 »
bueno primero que nada agradesco tu interes y paso a explicar un poco en lo que consiste esto

mi idea es crear una matriz lo mas cercana a lo que se encuentra en el comercio la cual va a consistir n lo siguiente

por el momento el micro sera un 16f628 y si las necesidades lo requieren pensare en otro
una memoria del tipo 24lcxx que contenga los mensajes (por el momento la memoria interna basta para hacer las pruebas)
tengo pensado a la vez la posibilidad de programarlo con un teclado de pc convencional asi como tambien una interface rs232

bueno y cualquier otra sugerencia que mejore el diseño

a la vez quiero poder agregarle varios tipos de efectos, como por ejemplo

-scroll up
-scroll down
-scroll left
-scroll right
-split scroll
-random
-flash

bueno encontre un diseño que cumple mas menos con eso pero en realidad no entiendo nada ya que esta diseñado para un microcontrolador z80 el cual dejo los enlaces por si es de interes asi como el codigo fuete

http://members.lycos.co.uk/leeedavison/z80/led/

http://members.lycos.co.uk/leeedavison/z80/led/led_drvasm.html

a la vez zi alguien necesita un poco mas de informacion no dude en pedirla asi como tambien se agradecen todo tipo de comentarios

Desconectado J0N4TH4N

  • PIC10
  • *
  • Mensajes: 16
RE: enviar datos de forma serial
« Respuesta #5 en: 03 de Abril de 2005, 03:09:00 »
Holas,  la verdad que bastante complicado el tema, pero no es imposible Sonrisa ... queria consultarte.. los caracteres para formarlos, como piensas hacer?.. en columnas o en filas? .. me interesaria darte una mano ya que el tema de carteles luminosos de este tipo es interesante por su elevado costo. Si quieres agregame a tu msn y charlamos mas directo. Un Abrazo

loco mal 8 arroba hotmail punto com

Desconectado Micom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 783
RE: enviar datos de forma serial
« Respuesta #6 en: 04 de Abril de 2005, 00:13:00 »
No se si mi idea este fuera de contexto pero te sugiero que mires en el programa "PIC DREAM" si ya se que es para TV pero ahi se muestra un texto que corres de derecha a izquierda y tiene de limite como 90 letras o espacios si y todo se maneja por medio de solo 2 tablas, bueno es mi sugerencia. Hasta pronto
El programador GTP USB PLUS es un super programador
GRACIAS dobles amigo SISPIC

Tan solo queda seguir sobreviviendo

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: enviar datos de forma serial
« Respuesta #7 en: 04 de Abril de 2005, 00:53:00 »
bueno amigo micom estuve mirando lo que comentaste pero lamentablemente no es lo que necesito

lo principal por ahora es ver como se podria trabajar con un registro de por lo menos 80 bits para poder almacenar hay los datos a enviar serialmente la verdad es que esa seria una solucion bastante eficiente para lo que pretendo hacer

bueno espero poder ver como hacerle para solucionarlo ya que lo unico que he encontrado es en c pero no se si se podra hacer con mas de dos registros

bueno el codigo que encontre en c es algo asi

make16(variable1,variable2)

y lo ideal seria porsupuesto

make80(variable1,variable2,variable3,variable4,variable5,variable6,variable7,variable8,variable9,variable10)



Desconectado blocktel

  • PIC10
  • *
  • Mensajes: 11
RE: enviar datos de forma serial
« Respuesta #8 en: 05 de Abril de 2005, 21:29:00 »
Mejor por que no activas las filas que son 7 y no las columnas que son 80, yo acabo de hacer un letrero de 7x80, y me quedo ok.
el mensaje a mostrar lo grabo en una eeprom 24lc08, y cada cierto tiempo deacuerdo al desplazamiento voy leendo cada letra, despues busco su respectiva trama y lo vuelco a los registros de desplazamiento...los mensajes lo grabo,  manualmente con tres inerruptores, sube, baja  y enter respectivamente..Todo esto me ocupa media pagina del pic16f628.
bueno a ver prueba con esto,
inicializar
.
movlw.80
movwf columnas
.
interrupcion  
   decfsz columnas; por cada interrupcion activas una columna
   goto una_mas
    movlw  .80    ; nuevamente empieza
   movwf  columnas
uno_mas
    movf  columnas,w
    movwf columna_sale

    bsf  bit_desplaza  ; inicias
aqui
   decfsz  columna_sale
   goto  clock
; despúes que posicionaste la respectiva columna
; activas el ic
    bsf   activas_latch
   nop
    bcf   activas_latch
   retfie      
clock; envias el reloj
      bsf  clock_sale  
      bcf  clock_sale
      bcf  bit_desplaza ; ahora todos ceros
      goto aqui
claro con esto empiezas a activar la primera columna de iz a derecha,
prueba a ver si funciona, es una sugerencia
suerte..
     
     

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: enviar datos de forma serial
« Respuesta #9 en: 06 de Abril de 2005, 03:58:00 »
primero que nada hola a todos y gracias blocktel

amigo blocktel te explico... mi matriz esta formada por unos integrados del tipo shift registers que controlan las columnas pero estos estan en cascada por medio de una salida serial que poseen estos mismo y que trabajan mas menos de esta forma:

los 10 integrados se controlan con solo 3 pines del micro los cuales corresponden a

1- clock
2- data
3- latch

--bueno obviamente por cada bitenviado, sea alto o bajo, debe ir acompañado de un clock

--estos mismos trabajan en cierta forma como un buffer por que al enviar los primeros 8 bits de datos se activa la salida serial que poseen dejando en memoria los datos recibidos y dejan pasar los siguientes datos por su salida hacia los demas que esten en cascada es por eso que la trama de datos debe de ser larga, en este caso de 80 bits para controlar los 10 shift registers
Codigo:

           ********                      ********                     ********
 data in-- ********--data out--data in-- ********--data out--data in--********--etc...
           ********                      ********                     ********


por lo que obviamente los ultimos 8 bits solo llegan hasta el ultimo shift register formandose asi la cascada

bueno el shift register usado es el *74hc595* pero con interface de potencia siendo este el *tpic6b595n* por lo que se ahorra espacio y costos ya que internamente esta dotado de transistores mosfet lo por lo que no es necesario agregar transistores para obtener mayor drenaje para los leds

bueno quizas es mucho pedir pero es posible que compartieras tu experiencia de lo comentado para poder ir probando nuevos metodos si es posible que nos comentaras el tipo de hardware que haz usado, que tipos de shift registers, etc...
y si es posible el codigo para poder llegar a algo mas concreto, ademas te comento que con un amigo de aqui tenemos planeado llevar esto lo mas lejos posible dotandolo de una buena interfas para el pc ya que el es programador y se maneja bien en el tema lo cual seria genial poder llagar a algo tan parecido como lo que se encuentra en el comercio ademas tenemos muchas ideas de como dotarlo de efectos mas alla de los del tipo comercial

bueno espero puedas "compartir informacion y desde ya la agradesco y me despido coordialmente

-==XooTRAooX==-

Desconectado blocktel

  • PIC10
  • *
  • Mensajes: 11
RE: enviar datos de forma serial
« Respuesta #10 en: 06 de Abril de 2005, 11:43:00 »
Bueno el hardware es imilar al tuyo, primero que todo hay que lograr un multiplexado eficaz, insisto por que no vas activando las filas que son siete una a una cad 1miliseg, aqui un ejem de enviar el caracter  A

  00111000  ;activas primera fila y envias el dato serial 00111000(74595) y apagas
  01101100 ;activas 2da fila dato 01101100 y desactivas
  11000110    ...  
  11111110    ...
  11000110    ...
  11000110
  11000110   ; llegas ala ultima fila e inicias nuevamente
;si tienes 10 caracteres tendrias que activar la fila correspondiente y enviar despues  serialmente el dato (10byte), una de cada caracter que corresponda a la fila.
suerte

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: enviar datos de forma serial
« Respuesta #11 en: 06 de Abril de 2005, 17:33:00 »
mm.. una pregunta amigo blocktel,,, tu matriz se compone de caracteres de 7x8 puntos????

si es asi se hace un poco mas facil la cosa.

mira te explico un poco lo que pretendo realizar para que te hagas una idea de donde esta mi problema

lo que pasa es que para poder darle los efectos nesesarios a mi matriz primero necesito enviar los datos a unos registros en donde hay los procesaria a mi gusto, pero en mi matriz los caracteres van a ser de 7x5 puntos... lo que se resume en que es un poco mas complicado por que en tu caso se puede enviar las columnas completas de un caracter a un registro y procesarlas pero en el mio son solo los 5 columnas y a la hora de prosesarlos se complicaria un poco la cosa por que por ejemplo si quisiera hacer un efecto de scroll solo tendria que rotar esos registros pero resulta que solo 5 bits son utiles por lo que al rotar se me mesclarian con los tres bits del mismo en desuso...

lo que realmente en este caso seria conveniente es por ejemplo poder tener ya un registro mas grande como por ejemplo de 80 bits  cosa de poder manipular las columnas completamente desde un solo registro ya que si quiero hacer un scroll solo roto ese registro sin preocuparme por nada.

no se si se entiende la idea de la forma que la he planteado, espero que si y alguien pueda giarme un poco en lo que no puedo realizar

Desconectado blocktel

  • PIC10
  • *
  • Mensajes: 11
RE: enviar datos de forma serial
« Respuesta #12 en: 07 de Abril de 2005, 09:37:00 »
Bueno, primero que nada el multiplexado es independiente el tipo de matriz que sea 7x5, 7x6 7x7x o 7x8.. yo los envio de este modo
;
cblock h"20"

   byte1,byte2,byte3,byte4.................byte10    ; activo primera fila y envio
   byte11,byte12..................................byte20
    ............                                    ........byte30
    .......
    ......
    .....
    byte71........................            ..........byte80
    encd

; cuando inicias tu programa blanqueas todos los byte (byte1  a byte80)
y cargas
        movlw  byte1
        movwf   fsr     ;puntero
        MOVLW   H"BF"     ; se activa la primera fila
        MOVWF   LINEA      ; en mi caso h"BF" ; rotamos el cero

; despues creas una interrupcion de 1miliseg para activar cada fila
SIGUE_1MSEG      
     
            MOVLW .10
            MOVWF COUNT_BYTE ;SE ENVIA 10 BYTEX FILA

PRIMERO
             MOVF  INDF,W   ;    
             MOVWF BYTE     ; bufer
;
             MOVLW  H"08"
             MOVWF   COUNT_BIT  ;8 bit por byte

TX_XX

             BCF     DATO               ;del 74hc595
             RLF     BYTE,1
             BTFSC   STATUS, CARRY
             BSF     DATO
             CALL    CLOCK             ;ADENTRO
             decfsz  COUNT_BIT,1   ;ES OCHO BIT
             goto    TX_XX               ;AUN
             INCF    FSR,1                ; si el proximo byte

             DECFSZ   COUNT_BYTE,1  ;acabo los 10
             GOTO    PRIMERO              ; no el siguiente    
; si acabo

             MOVF    LINEA,W   ;tomo linea
             MOVWF   PORTB     ; activo
             NOP
             BSF     CARGO        ; cargo byte lacth 74hc595
             nop
             BCF     CARGO         ; apago
             NOP
             BSf     STATUS,CARRY
             RRF    LINEA,1            ;preoero la proxima fila
             BTFSC STATUS,CARRY  ; se acabo todas las filas
             RETFIE                         ; no
             MOVLW  BYTE1   ;si empezamos denuevo
             MOVWF   FSR      
             MOVLW   H"BF"     ; se activa la primera fila
             MOVWF   LINEA    ; bufer de salida a filas
             RETFIE

CLOCK       ; del 74hc595        
             bCf  CK              
             NOP
             NOP
             bSf  CK
             RETURN

; chequealo bien y me comentas
hasta luego


Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: enviar datos de forma serial
« Respuesta #13 en: 07 de Abril de 2005, 13:34:00 »
ok me pondre a experimentar y luego contare como es que me ha resultado por otro lado comento que realizare bien los esquemas para poder colocarlos por si es de interes para alguien

saludos desde chile

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: enviar datos de forma serial
« Respuesta #14 en: 07 de Abril de 2005, 18:58:00 »
Buenas xootraoox.

Por lo que he podido deducir, con los registros de desplazamiento lo que controlas son las columnas, es decir, si escribes un "1" en un registro y "latcheas" , este "1" activará el ánodo/cátodo común de los LEDs y los cátodos/ánodos de las filas los controlas aparte con un puerto de 7 bits del PIC, esta es la forma estándar de controlar una matriz de tantos puntos. Si es asi, no necesitas un registro de 80 bits para enviar un uno e irlo pasando de columna a columna. Tan sólo necesitas escribir un uno la primera vez y "latchear" y después escribes un cero y "latcheas" 79 veces más. Esto se puede hacer con un bucle normal de toda la vida.

Lo mejor viene cuando tengas que enviar los datos de la columna que estas "encendiendo" en ese momento por el puerto de 7 bits.

No se como anda ese PIC de memoria pero deberás reservar 80 registros para los desplazamientos de los mensajes hacia izquierda , derecha, arriba y abajo.

Se pueden hacer subrrutinas sencillas con el direccionamiento indirecto "fsr" e "indf" son muy utiles en estos casos.

Espero haberte ayudado. Dime si funciona asi tu "MATRIX".


 

anything