Autor Tema: Una manito por favor  (Leído 49115 veces)

0 Usuarios y 8 Visitantes están viendo este tema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #75 en: 27 de Mayo de 2009, 19:14:46 »
El protocolo I2C tiene asignados 7 bits para determinar la dirección con la que se quiere comunicar. El bit restante(el de menor peso) se utiliza para determinar si la petición es de escritura/lectura.

Muchos dispositivos comerciales, traen cierta parte de la dirección ya predeterminada, es decir, no configurable por el usuario.

Ejemplo:

Las memorias EEPROM 24LCXXX vienen con los 4 bits(más significativos) de su dirección ya definidos: '1010' y permite que selecciones mediante ciertos pines(A2,A1,A0) los 3 bits restantes de menor peso. Esto implica(y limita) que el máximo de 24LCXXX que podrías utilizar en un mísmo I2C es de 8.
El DS1307 probablemente, como corresponde a otro tipo de dispositivo distinto a las EEPROM utilice otro sub-grupo de direcciones(por lo que menciona marvic, utiliza el subgrupo 0xD contra el 0xA de las EEPROM). De esta manera(utilizando sub-grupos de dirección pre asignados) se reduce la cantidad de pines necesarios para determinar la dirección del dispositivo a la vez que se asignan distintos "subgrupos" según el tipo de dispositivo porque se cree que de esta manera se asegura que tu diseño permita compartir en un mísmo bus I2C diversos "tipos" de dispositivos sin tener que tener colisiones en la dirección de éstos.

Un saludo.
Un saludo




"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #76 en: 27 de Mayo de 2009, 20:29:59 »
gracias por la info Bruno.

y alguna vez habrá alguna casualidad que tengamos 2 dispositivos I2C con la misma dirección sin que podamos hacer nada??

en caso de necesitar más de 8 eeproms 24LC tendríamos que usar de otra familia más, supongo que si, no?

saludos
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #77 en: 27 de Mayo de 2009, 21:37:33 »
Claro que puede suceder. Por ejemplo, la dirección: 1101000X es la que usa el DS1307 y no hay forma de cambiarla(al menos que yo sepa). Esto implica que no podría haber más de un DS1307 en un mísmo bus I2C.

Creo que todas las EEPROM comparten el 0xA que las identifica...asi que lo veo poco probable, pero si hubiese otro tipo de memoria que te sirviese y tuviese otro ID podrías usarlas sin problema ;).

Fijate que las EEPROM dejan los 3 ultimos bits de su dirección libres para que el usuario pueda configurarlos y poder de este modo usar hasta 8 en un mísmo bus, pero el DS1307 no da ningun bit de libertad. Esto es como comente anteriormente, porque "por lógica" es probable que tu circuito use más de una EEPROM pero poco probable que más de un DS1307(RTC).

Salu2

"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #78 en: 28 de Mayo de 2009, 09:35:03 »
ok entendido Bruno, gracias nuevamente

ahora una consulta más, nose si busque mal por el hilo pero no encontré un rutina para el 4094 en ASM, si se puede me la mostrarían?

muchas gracias, un saludo
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #79 en: 28 de Mayo de 2009, 15:12:58 »
Ehh...No se si está en el hilo..

Pero, la programo en real time:

Código: ASM
  1. ;Envio de un byte. LSB a MSB. Recibe byte a enviar
  2. SEND_BYTE_4094_LSB_FIRST
  3.         mowf    TEMP
  4.         movlw   .8
  5.         movwf   CONT
  6.                        
  7. LOOP_LSB
  8.         rrf     TEMP,F
  9.         bcf     DATA
  10.         btfsc   STATUS,C
  11.         bsf     DATA
  12.  
  13.         bsf     CLOCK
  14.         bcf     CLOCK
  15.  
  16.         decfsz  CONT,F
  17.         goto    LOOP_LSB
  18.  
  19.         ;falta pulso strobe si queres efectivizar cambios
  20.  
  21.         return
  22.  
  23. ;Envio de un byte. MSB a LSB. Recibe byte a enviar
  24. SEND_BYTE_4094_MSB_FIRST
  25.         mowf    TEMP
  26.         movlw   .8
  27.         movwf   CONT
  28.                        
  29. LOOP_MSB
  30.         rlf     TEMP,F
  31.         bcf     DATA
  32.         btfsc   STATUS,C
  33.         bsf     DATA
  34.  
  35.         bsf     CLOCK
  36.         bcf     CLOCK
  37.  
  38.         decfsz  CONT,F
  39.         goto    LOOP_MSB
  40.  
  41.         ;falta pulso strobe si queres efectivizar cambios
  42.  
  43.         return
  44.  
  45.  
  46. ;Envio de un bit por columna.
  47. ;Recorre indirectamente el buffer de columnas
  48. ;Recibe mascara a aplicar(fila actual)
  49. ;Ej. 0x01 para fila 1, 0x02 para fila 2, 0x04 para fila 3...
  50.  
  51. SEND_BIT_PER_COL
  52.         movwf   MASC
  53.  
  54.         movlw   COL1
  55.         movwf   FSR
  56.  
  57. LOOP_BPC
  58.         bcf     DATA
  59.         movf    INDF,
  60.         andwf   MASC,W
  61.         btfss   STATUS,Z       
  62.         bsf     DATA
  63.  
  64.         bsf     CLOCK
  65.         bcf     CLOCK
  66.  
  67.         incf    FSR,F
  68.         movf    FSR,W
  69.         xorlw   COL80+1 ;o la direccion RAM de la ultima columna
  70.                         ;(cuidado si dir COL80==0xFF)
  71.         btfss   STATUS,Z
  72.         goto    LOOP_BCP
  73.        
  74.         bsf     STROBE
  75.         bcf     STROBE
  76.         return
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #80 en: 29 de Mayo de 2009, 13:30:10 »
listo Bruno, como anillo al dedo, muchas gracias :-/ :-/
.

Desconectado marvicdigital

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 311
Re: Una manito por favor
« Respuesta #81 en: 29 de Mayo de 2009, 13:35:35 »
Ehh...No se si está en el hilo..

Pero, la programo en real time:

Código: ASM
  1. ;Envio de un byte. LSB a MSB. Recibe byte a enviar
  2. SEND_BYTE_4094_LSB_FIRST
  3.         mowf    TEMP
  4.         movlw   .8
  5.         movwf   CONT
  6.                        
  7. LOOP_LSB
  8.         rrf     TEMP,F
  9.         bcf     DATA
  10.         btfsc   STATUS,C
  11.         bsf     DATA
  12.  
  13.         bsf     CLOCK
  14.         bcf     CLOCK
  15.  
  16.         decfsz  CONT,F
  17.         goto    LOOP_LSB
  18.  
  19.         ;falta pulso strobe si queres efectivizar cambios
  20.  
  21.         return
  22.  
  23. ;Envio de un byte. MSB a LSB. Recibe byte a enviar
  24. SEND_BYTE_4094_MSB_FIRST
  25.         movwf   TEMP  ;estaba como mowf..
  26.         movlw   .8
  27.         movwf   CONT
  28.                        
  29. LOOP_MSB
  30.         rlf     TEMP,F
  31.         bcf     DATA
  32.         btfsc   STATUS,C
  33.         bsf     DATA
  34.  
  35.         bsf     CLOCK
  36.         bcf     CLOCK
  37.  
  38.         decfsz  CONT,F
  39.         goto    LOOP_MSB
  40.  
  41.         ;falta pulso strobe si queres efectivizar cambios
  42.  
  43.         return
  44.  
  45.  
  46. ;Envio de un bit por columna.
  47. ;Recorre indirectamente el buffer de columnas
  48. ;Recibe mascara a aplicar(fila actual)
  49. ;Ej. 0x01 para fila 1, 0x02 para fila 2, 0x04 para fila 3...
  50.  
  51. SEND_BIT_PER_COL
  52.         movwf   MASC
  53.  
  54.         movlw   COL1
  55.         movwf   FSR
  56.  
  57. LOOP_BPC
  58.         bcf     DATA
  59.         movf    INDF,
  60.         andwf   MASC,W
  61.         btfss   STATUS,Z       
  62.         bsf     DATA
  63.  
  64.         bsf     CLOCK
  65.         bcf     CLOCK
  66.  
  67.         incf    FSR,F
  68.         movf    FSR,W
  69.         xorlw   COL80+1 ;o la direccion RAM de la ultima columna
  70.                         ;(cuidado si dir COL80==0xFF)
  71.         btfss   STATUS,Z
  72.         goto    LOOP_BCP
  73.        
  74.         bsf     STROBE
  75.         bcf     STROBE
  76.         return

Había un pequeño error de tipografía....faltaba la v .. :mrgreen: Gracias BrunoF....ahora estoy un poco ocupado y no he podido terminar mi pasa mensajes con todas las de la ley ...apenas la termine y halla el tiempito para eso lo estaré mostrando por acá.

Saludos

Santo Dios,  había escrito Había con "v" ...ahhhhhhh perdón por el horror
« Última modificación: 29 de Mayo de 2009, 17:06:02 por marvicdigital »

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #82 en: 29 de Mayo de 2009, 13:47:14 »
que v?
.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Una manito por favor
« Respuesta #83 en: 29 de Mayo de 2009, 13:52:44 »
No sería raro que fallase alguna V. Ha comenzado a fallar la tecla física de mi teclado hace un mes y puede que me falte alguna...

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #84 en: 29 de Mayo de 2009, 21:18:12 »
ok, ya vi que v :mrgreen:

en la línea de código 3.
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Una manito por favor
« Respuesta #85 en: 07 de Junio de 2009, 14:13:28 »
si, así lo hacía yo, colocando una letra por matriz.

Pero con la pequeña charla que me dio Bruno manejaré de otra manera los datos, para hacerlo con punteros, pues me ha convencido que es la mejor manera para poder lograr varios efectos y hacerlos de la manera más sencilla posible.

podrías usar entonces dos int32 y tu cartel llegará a 64 columnas :mrgreen: y al rotar el carrie excesivo pasa a la cola del otro byte y el carrie de ese byte al primero, pero Bruno te dirá que mejor guardes los datos por columnas uses un buffer y en estos ordenes de una manera diferente los datos recibidos, pues todos los últimos bits de los bytes de tu buffer serán la primera fila, del cartel, todos los bits6 serán la segunda y así sucesivamente hasta la 7ma u 8va fila. Todos los bits 7 los vas mandando de ocho en ocho a los registros y tienes los datos para cada fila. Los punteros te ayudarán a tener un desplazamineto y otros efectos más eficientemente según las experiencias de Bruno.

Ahora solo queda hacer algo de código, que personalmente estoy en eso, solo que dejo unos pequeños pendientes y me pongo a full a trabajar con esto.

Un saludo.

Hola.

Pues mejor he colocado un array para las filas ... ocupa menos espacio en RAM que definir los int32 y he seguido el consejo de Cryn para rotar el carry de un byte a otro.


Le puse otras chuladas con el reloj ... y va bien.

Gracias y saludos
El papel lo aguanta todo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #86 en: 07 de Junio de 2009, 20:02:17 »
se ve bien MLO__, que bueno que te haya servido mi tip :mrgreen:

pero coincido con Bruno, que la mejor manera es la que te describí previamente, si existe una descompensación en RAM creo que se compensa con las facilidades que te da manejarlo en cuanto a efectos se refiere.

Corrijo lo que dije anteriormente:
Citar
los vas mandando de ocho en ocho a los registros y tienes los datos para cada fila
a: Lo envías directamente del arreglo buffer y aprovechas el uso de una variable extra para encender las filas, en realidad haces una AND con 0b00000001 para la primera fila por ejemplo y ese mismo se usa para encender el transistor, no hace falta tener los datos de 8 en 8 bits, se lo envía directamente.

Un saludo
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Una manito por favor
« Respuesta #87 en: 14 de Junio de 2009, 18:48:19 »
Bueno, viendo los trabajos que han realizado Cryn, MLO_, marvidigital entre otros me dedique a diseñar un publik  :mrgreen: . Para el mensaje cree un buffer que contiene en cada elemento las columnas del mensaje (Siguiendo el consejo de BrunoF en este post) y un buffer que contiene la sección del mensaje a visualizar en el cartel de leds. Para manejar la visualización se utiliza una variable que funcionaria como puntero, que indica la posición de la primer columna ha visualizar. También le agregue la animación de un caballo galopando, esta fue la principal motivación de realizar el publik, aquí hay un video que encontré en youtube: Caballo Galopando
La animación se coloco después del mensaje, y con el uso de 3 buffer adicionales que tienen precargados  los frames se crea la escena de animación. Estos buffer se copian en el buffer del mensaje cada cierto tiempo para crear el efecto de animación.
Les muestro un video de la simulación:

Quiero seguir agregándoles cosas y hacerlo realidad  :roll:
Saludos!


Pd: Gracias MLO_ por la data del software para realizar el video!
« Última modificación: 14 de Junio de 2009, 18:50:32 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Una manito por favor
« Respuesta #88 en: 14 de Junio de 2009, 19:02:56 »
Buen trabajo suky, te ha quedado muy bueno el caballo, y el tuyo si corre, no esta patinando :D

como hiciste el caballo? lo dibujaste tu a mano desde cero??
.

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Una manito por favor
« Respuesta #89 en: 14 de Junio de 2009, 19:06:42 »
Buen trabajo suky, te ha quedado muy bueno el caballo, y el tuyo si corre, no esta patinando :D

como hiciste el caballo? lo dibujaste tu a mano desde cero??
Jajajaja! Corre hasta por ahí nomas, en suelo de aceite!  :D
El caballo lo fui creando mirando el video detenidamente y mirando algunos gif de caballos animados.
No contesto mensajes privados, las consultas en el foro