Autor Tema: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!  (Leído 7498 veces)

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

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Hola amigos, me he pasado como 1 mes programando una matriz de LEDs, la idea es que sea modular, con tableros de 8x8, y que en cuanto le conectes un modulo, automáticamente detecte que dimension tiene y ajuste la ventana de muestra a ese valor, siendo 8x(n *8 ), donde n es el numero de tableros que se le conecten, en fin, debo decirles que ha sido una tarea muy ardua, ya que también quiero que sea reprogramable atraves de un teclado de PC pero sin la PC, algo asi como esto:


De hecho de aquí obtuve la inspiración del teclado  :mrgreen:

En fin, les comento que ya casi completo la primer prate, que es poner a punto el paso de los mensajes en scroll, al principio queria abordar el problema con compresión de caracteres, esto para ahorrar mucha memoria, por lo que en lugar de ocupar n bytes para cada caracter, iba a ocupar solo 1 (es bastante engorroso de explicar), pero la verdad no fui capáz de dar con el algoritmo que me hacía falta (creo que me faltan conocimientos  :D), por lo que decidí cambiar la estrategia y leer a la antigua, con una EEPROM externa, use una 24LC256 de microchip, a la que le caben 0x7FFF bytes, por lo que ven, es un mundo para una matriz de LEDs, de hecho estoy muy complacido de usar esta estrategia, ya que he hecho pruebas y he podido mostrar aproximadamente 5 minutos de texto en scroll, a razón de unos 3 caracteres por segundo, y esto solo me consume como el 35% de la memoria, asi que por espacio no paro  :mrgreen:

Pero esto tiene una pega: se nota un parpadeo muuuuuy molesto al recorrer el texto posición tras posición, y llegue a la conclusión que es el tiempo que tarda en leer la eeprom, ya que he probado la matriz leyendo desde RAM y este parpadeo no se nota.

Estoy programando en CCS y uso MPlab con PCM.

Mi pregunta es: Alguien sabe si es posible aumentar más la velocidad de lectura de la EEPROM?, ya que he visto que mi programador la programa y lee en menos de 10 segundos, y yo, con la velocidad máxima, me tardo varios minutos desde mi PIC.

He probado la siguiente configuración en #use i2c:

#use i2c(master,SDA=PIN_C4,SCL=PIN_C3,fast=20000000,FORCE_HW,NO_STRETCH)

Tambien he probado con un cristal de 48MHz, pero creo que al contrario, se nota más el parpadeo.

No quisiera cambiar de método de almacenamiento, ya que estoy muy conforme con la capacidad de esta memoria, y creo que no tengo necesidad ni conocimiento por el momento de cambiarme a una SD.

Muchas gracias por su ayuda
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #1 en: 03 de Abril de 2011, 16:01:01 »
Hola.

Yo uso esas memorias para los letreros ... pero leo de letra en letra ..  me imagino que tu lees todo el mensaje  y por eso el parpadeo.

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #2 en: 03 de Abril de 2011, 18:11:30 »
Yo tuve el mismo problema. Me quedaba corto de memoria porque lo que hacia era tener en RAM un arreglo del mismo tamaño q la matriz (tantos bytes como columnas). Y ademas tenia en ROM los "dibujos" de los caracteres, que eran 5 bytes por letra (26 letras = 130 bytes).

Pero segun el video usa un PIC16F628A, que tampoco brilla por su memoria jeje. Yo creo que lo mejor es usar la eeprom para guardar los caracteres, y vas armando una matriz en RAM a medida q vas escribiendo.
saludos!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #3 en: 03 de Abril de 2011, 18:33:51 »
Creo que ya alcancé la velocidad máxima posible (sin mencionar que el programador lo hace volando) para leer y volcar mis datos, ya que lo que hago es lo siguiente:

Tengo un arreglo del tamaño de la matriz, en este caso de 8 bytes (8x8 LEDs) que llamo ventana, lo llamo así, por que por alli se va a ver la porción de la memoria que debe aparecer en la matriz. Cargo una sola vez esa ventana con el "frame" que corresponde esa posición y lo muestro las veces que sea necesario, siempre leyendo desde RAM, para ajustar la velocidad de desplazamiento. Después incremento en uno la dirección, y vuelvo a cargar mi ventana una sola vez por vez.

De esta forma el parpadeo solo se ve un brevísimo instante al actualizarse la posición (es tán breve, que estoy pensando en dejarla así, ya que casi no se percibe).

En fin, no creo que lo pueda realizar más rápido con un código más eficiente, ya que procure hacerlo muy eficiente desde la primera.

De todas formas sigo interesado en si alguien conoce alguna forma de hacer que las EEPROM vuelen, gracias por sus respuestas.  :P
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #4 en: 03 de Abril de 2011, 19:13:11 »
Podes usar 2 buffer del mismo tamaño que tengan la porción del mensaje actual y la porción de mensaje futura. Entonces vas alternando entre uno  y otro de forma circular para no pisar los datos y el tema del refresco del cartel si o si mediante interrupción.

Porque si aumentas a un cartel de 32, 40 o más columnas va a ser un desastre  :?


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #5 en: 03 de Abril de 2011, 20:05:39 »
Podes usar 2 buffer del mismo tamaño que tengan la porción del mensaje actual y la porción de mensaje futura. Entonces vas alternando entre uno  y otro de forma circular para no pisar los datos y el tema del refresco del cartel si o si mediante interrupción.

Hola suky, tu idea de dos buffers suena interesante, pero no logro comprender del todo como puede esto agilizar la carga de datos, ya que para cargarlos voy a invertir el doble de tiempo que el actual no?
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #6 en: 03 de Abril de 2011, 20:11:00 »
Hola.

Es que el problema esta en que cargas muchos datos en la RAM del PIC (o al menos eso es lo que te entiendo). Yo lo que hago es cargar byte a byte y el tiempo que toma en mover el arreglo una posición a la izquierda es mucho menor.

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #7 en: 03 de Abril de 2011, 20:12:30 »
Podes usar 2 buffer del mismo tamaño que tengan la porción del mensaje actual y la porción de mensaje futura. Entonces vas alternando entre uno  y otro de forma circular para no pisar los datos y el tema del refresco del cartel si o si mediante interrupción.

Hola suky, tu idea de dos buffers suena interesante, pero no logro comprender del todo como puede esto agilizar la carga de datos, ya que para cargarlos voy a invertir el doble de tiempo que el actual no?

No el mismo, solo que dispones de un buffer completo para representar gráficamente, mientras que en segundo lugar, con tiempo, puedes cargar el próximo.

Por eso digo, mediante interrupciones (alta prioridad) actualizas los datos sobre el letrero (cada 2ms aprox.), mientras que cuando se pueda se actualiza el buffer.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #8 en: 03 de Abril de 2011, 20:18:08 »
Yo uso esas memorias para los letreros ... pero leo de letra en letra ..  me imagino que tu lees todo el mensaje  y por eso el parpadeo.

Pues te comento que el mensaje que tengo ahorita es de 1932 caracteres, y cada caracter tiene entre 5 y 6 bytes, por lo que al comenzar el programa, lo cargo una sola vez a la eeprom y esto me demora 51 segundos, después ya voy leyendo de 8 en 8 bytes para mostrar, es quí donde se produce el pequeño parpadeo.
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #9 en: 03 de Abril de 2011, 20:20:01 »
Es que el problema esta en que cargas muchos datos en la RAM del PIC (o al menos eso es lo que te entiendo). Yo lo que hago es cargar byte a byte y el tiempo que toma en mover el arreglo una posición a la izquierda es mucho menor.

Como comente en otro mensaje, no estoy cargando todo el mensaje, solo cargo la porción de 8 bytes que voy a mostrar. Gracias por sus respuestas.
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #10 en: 03 de Abril de 2011, 20:24:34 »
No el mismo, solo que dispones de un buffer completo para representar gráficamente, mientras que en segundo lugar, con tiempo, puedes cargar el próximo.

Por eso digo, mediante interrupciones (alta prioridad) actualizas los datos sobre el letrero (cada 2ms aprox.), mientras que cuando se pueda se actualiza el buffer.

Haaaaaa, ya comprendí tu idea Suky, es escelente!, de esta forma aseguro un lapso de tiempo fijo para el refresco de la matriz con un buffer, mientras el segundo lo cargo a como pueda, voy a ver como mudo mi código a interrupciones, creo que podría funcionar, muchas gracias por la idea!  :-/
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #11 en: 03 de Abril de 2011, 20:54:21 »
Hola.

Es mejor cargar un solo byte, e ir corriendo el bufer una posicion ... pensando en lo que dices que el sistema va a ser modular.

Saludos
El papel lo aguanta todo

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #12 en: 03 de Abril de 2011, 21:02:02 »
Es mejor cargar un solo byte, e ir corriendo el bufer una posicion ... pensando en lo que dices que el sistema va a ser modular.

Creo que entonces no me explique bien, por que eso es exactamente lo que hago.
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Video de mi prototipo de matriz de LEDs 8x8
« Respuesta #13 en: 04 de Abril de 2011, 04:59:03 »
Ya subí un video de como va, por ahora es una sola matriz, que es la única que tengo que funciona (excepto por el LED (5,3) que lo queme sin querer jejejeje  :mrgreen:), ya le hice la modificación pertinente para que funcione por interrupción, como me sugirio suky, y creo que si mejoró bastante el parpadeo que tenía:


Como la ven?, alguna sugerencia?, esta es solo la punta del iceberg.
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com

Desconectado falflores

  • PIC16
  • ***
  • Mensajes: 173
    • Control, electrónica y programación en español
Re: Matriz de LEDs con eeprom externa, es muuuuuuy lenta...más velocidad!
« Respuesta #14 en: 04 de Abril de 2011, 05:03:52 »
Logré simplificar la forma en que se introducen los caracteres, para en el futuro poder introducirlos con el teclado de PC, lo hago de la siguiente manera:

Código: [Seleccionar]
matrix_putc(" Hola, me llamo Fabian y este es mi prototipo de matríces de LEDs");
matrix_putc(" Soy de México, estudio en el Instituto Politecnico Nacional.  ");
matrix_putc(" EL HARDWARE ES UN PIC 16F887 DE 40 PINES, y una memoria EEPROM");
matrix_putc(" 24LC256, de 256KB, un registro de desplazamiento 74LS164 para la");
matrix_putc(" matriz, la memoria esta cargada con algunos simbolos: !""$%&/()=?");
matrix_putc(" >=<,.;:_-/* también puedo imprimir las vocales con acento áéíóú");
matrix_putc(" El abecedario completo se encuentra grabado en la memoria: ");
matrix_putc("  ABCDEFGHIJKLMNÑOPQRSTUVWXYZ   abcdefghijklmnñopqrstuvwxyz ");
matrix_putc(" tanto en mayusculas, como minúsculas, con este texto he ocupado ");
printf(matrix_putc," aproximadamente el 15%% de espacio total de la memoria ...");

Esto es lo que se muestra en el video.

Cada llamada a la función matrix_putc soporta hasta 73 caracteres, alguien sabe si se puede hacer para que le quepan más?
Los invito a mi blog "Control, electrónica y programación en español" www.robotnias.blogspot.com


 

anything