TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: Cryn en 26 de Octubre de 2007, 18:39:35

Título: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Octubre de 2007, 18:39:35
saludos a todos, pasa que estoy en eso, en pasar de una matriz a un letrero, he visto algunos  que hay por aca, pero no explican como va el algoritmo para ir desplazando el mensaje, ya que directamente proponen registros como el 164 o el 4094, que nose como debo sincronizarlos o mandarles los datos, porque quisiera empezar con un letrero de vaya de derecha a izquierda, aca mi codigo:

Código: [Seleccionar]
#include <16f88.h>
#fuses XT,NOWDT,NOLVP,PUT,NOBROWNOUT
#use delay(clock=4000000)
#define max 50
#use fast_io(a)
#use fast_io(b)

int i,j,min=0,maxi=8,cont=0;
int const data[208]={48,120,204,204,252,204,204,204,248,204,204,248,248,204,204,248,252,
192,192,192,192,192,192,252,240,200,204,204,204,204,200,240,252,192,192,240,240,192,192,252,252,
192,192,240,240,192,192,192,60,64,192,192,216,204,204,248,204,204,204,204,252,204,204,204,252,
48,48,48,48,48,48,252,252,48,48,48,48,48,176,224,196,200,208,224,208,204,204,204,192,
192,192,192,192,192,192,252,238,214,214,198,198,198,198,198,196,228,244,212,212,204,204,196,48,
204,204,204,204,204,204,48,248,204,204,204,248,192,192,192,56,196,196,196,196,212,200,52,248,
204,204,204,248,208,200,196,120,204,192,192,120,12,12,248,252,48,48,48,48,48,48,48,204,
204,204,204,204,204,204,120,204,204,204,204,204,204,72,48,198,198,198,198,198,214,214,238,132,
132,72,48,48,72,132,132,204,204,204,120,48,48,48,48,252,252,8,16,32,64,252,252};
//int enie[8]={56,196,228,244,212,204,204,196};
void main()
{
   set_tris_a(0xf8);
   set_tris_b(0);
   setup_adc_ports(NO_ANALOGS);
   while(true)
   {
      for(j=0;j<max;j++)
      {
         for(i=min;i<maxi;i++)
         {
            output_a(cont);
            output_b(data[i]);
            delay_ms(1);
            cont++;
         }
      }
      output_b(0);
      delay_ms(500);
      min=maxi;
      maxi=maxi+8;
      cont=0;
      if(maxi>208)
      {
         min=0;
         maxi=8;
      }
   }
}

mi esquema:
(http://img100.imageshack.us/img100/8145/eskemajd5.jpg)

la simulacion:
aca (http://www.4shared.com/file/27523494/3f660137/matrix.html?dirPwdVerified=30556cb7)

he usado un demux, jeje, y siempre he visto los registros de desplazamiento, pues no entendi la logica  :oops:
alguien talvez pueda ayudarme con el algoritmo para hacer el desplazamiento de derecha a izquierda, y despues talvez agregarle otros efectos, jeje

mg
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 26 de Octubre de 2007, 19:06:14
Hola Cryn!

Con el registro de desplazamiento es muy facil desplazar el mensaje: supongamos que tu cartel tiene 80 columnas. Basta con comenzar el mensaje con 80 "0" al principio, luego de un segundo poner solo 79, luego 78....de esa forma, parecera que el texto ingresa desde la derecha del cartel.

Saludos!

Título: Re: De matriz de leds, a letrero electronico
Publicado por: micro_cadaver en 26 de Octubre de 2007, 19:13:48
aca hay un ejemplo de letrero, no es el mismo compilador pero al fin y al cabo es C. lo puedes migrar sin problemas.
 
http://www.todopic.com.ar/foros/index.php?topic=17017.msg123213#msg123213


Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Octubre de 2007, 19:20:49
Aitopes tienes algun algoritmo mas o menos, o algunos pasos, para que me ubique mejor??
enseguida lo veo microcadaver, mg
mgracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 26 de Octubre de 2007, 19:35:02
Hola Cryn!

No, no lo tengo. Ademas, es algo muuuuy basico. Pero podria funcionar.

Depende tambien de como tengas montado el hard.

Supongamos que el cartel tiene 80 columnas. La columna "1" es la de la izquierda, y esa es la primer posicion del registro de desplazamiento. Si escribis 80 datos en el registro, tendrias todas las columas (y una fila) escrita. O sea, el cartel lleno de texto. Pero si quieres que el texo parezca desplazarse por el cartel, lo que puedes hacer es agregar "0"s antes (o despues) de los datos (depende de para donde queres mover el texto)....a eso me referia.

Si pones 80 ceros despues del texto, este "desapareceria" por completo por la derecha. Si pones 79, solo se veria la utima columna, que tendria el dato de la primer columna de texto. Si pones 78, verias a la derecha las dos primeras columnas de texto, y asi......

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Octubre de 2007, 19:43:21
ok, intento hacer un mensajero de 8x64, crees que puedas hacer por aca un algorimto, para que los interesados en un publik, nos basemos es ello??
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 26 de Octubre de 2007, 19:50:06
Ok, intento usar algun rato libre del fin de semana para hacerlo.

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Octubre de 2007, 20:07:06
vale esperamos por el algoritmo, jeje

mientras alguien me ayuda a manejar el 4094? con el pic
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Octubre de 2007, 20:25:13
talvez para comenzar como envio un dato que tengo guardado en un array, atravez de un pin, digamos que una conversion del dato guardado a serial??
Título: Re: De matriz de leds, a letrero electronico
Publicado por: stk500 en 26 de Octubre de 2007, 20:46:13
Hola Cryn
Quizas te Sirva estos
http://www.hobby-elec.org/e_pic6_a.htm
Espero ayudarte
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Octubre de 2007, 20:54:46
claro que si, enseguida le doy la mirada

muchas gracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Gorgonas en 27 de Octubre de 2007, 00:36:17
Cryn mira la pagina que tiene Aitopes en su firma, hay un par de ejmplos de matrices y tiene un articulo en el cual se entiende perfectamente el funcionamiento de un registro.
Explica el 164 pero el 4094 es igual con la difrencia de que posee la opcion de mandar los datos cuando esten todos enviados en vez de enviarlos uno a uno cada vez que recibe un valor.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: pocher en 27 de Octubre de 2007, 07:20:07
Para controlar el registro de desplazamiento yo lo hice así: E/S con registros de desplazamiento (http://www.todopic.com.ar/foros/index.php?topic=885.0)

Un saludo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 27 de Octubre de 2007, 12:50:09
he visto esto (http://www.todopic.com.ar/foros/index.php?topic=16648.0) para la conversion de mi dato a serial, ahora ya lo envio serialmente al 4094 y logro desplegar mi letra via el 4094 (solo una letra), ahora tengo algunas dudas con el esquema, quiero refrescar por filas (que segun me dijo picmouse, y vi algo por el foro) ya qeu solo son 8, entonces todos los pines de las matrices que corresponden a las filas van directamente al micro?, haber hice este equema esta bien:

(http://img88.imageshack.us/img88/6505/eskemagi2.jpg)

que es solo de tres matrices conectadsa, por si esta mal, no me cuete corregir todo, jeje, y pues ahora que deberia hacer en el codigo para que se desplace??
Título: Re: De matriz de leds, a letrero electronico
Publicado por: micro_cadaver en 27 de Octubre de 2007, 13:01:22
hay una distancia entre la simulación de la etapa lógica y el momento de la implementación, pues en la implementación deberás tener en cuenta la circuitería requerida para el brillo de los leds, entiendase por buffers (uln2803) darlingtons (TIP) , según la potencia que requieras, y en la simulación no es necesario todo esto, ahora, contestando tu pregunta, en el proteus lo puedes conectar directamente, no habria problemas.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 27 de Octubre de 2007, 13:22:18
donde van los darlintong? esta bien todas las fila al micro? bueno en la realidad ahi les pusiera los transistores

como puedo comenzar con el desplazamiento, y el control en los 4094 para ello??
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 27 de Octubre de 2007, 13:33:13
Hola Cryn!

Espero que no te enojes u ofendas por el comentario que viene a continuacion:  :(

Se me ocurre que QUIZAS te convendria comenzar con un cartel menos ambicioso y complicado hasta que logres comprender claramente como funciona ese hard y ese software. Si no vas a perder mucho mas tiempo, y seguramente los resultados no van a ser tan buenos. Esto es algo que a mi me ha pasado mas de una vez, y ahora he aprendido a ir paso a paso.

Si quieres, puedes mirar un poco un proyecto que tengo en mi pagina, donde puedes ver un "cartel" de solo 8x8, con registro de desplazamiento y unos transistores para el control de los LEDs. Este es el cartel:

(http://www.ucontrol.com.ar/wiki/images/thumb/3/30/MATRIZ8x8-002.jpg/300px-MATRIZ8x8-002.jpg)

Este es el circuito:

(http://www.ucontrol.com.ar/wiki/images/thumb/8/8a/MATRIZ8x8-004.gif/600px-MATRIZ8x8-004.gif)

y este un video del cartelito funcionando:

En la pagina estan los fuentes de cada ejemplo en CCS, el PCB y el circuito con mas resolucion.

Cuando lo tengas bien claro, seguramente podras ampliarlo a la cantidad de filas y columnas que quieras.

¿Que te parece?  :lol:

Un abrazo.  :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 27 de Octubre de 2007, 14:01:36
como ofenderme si me estas ayudadndo, y bastante, mas bein agradecerte.

miro lo que ya logre, jeje, me parece que solo tengo algun problema para desplazar, talvez me puedas guiar...

(http://img505.imageshack.us/img505/6039/eskemakp9.jpg)

creo que voy por beun camino
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 27 de Octubre de 2007, 14:41:17
ok, dare la mirada por los links de aitopes, ya los estaba viendo, recuerdo qeu los vi alguna vez, pero de pasada, ahroa los hare mas minuciosamente, tendre presente lo que mencionas micro_cadaver cuando este armando el circuito

un saludo y muchas gracias a todos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 27 de Octubre de 2007, 14:57:22
Si pensas hacer trabajar a los registros a altas velocidades(que seguro es asi) no uses la salida negada(estas usando la QS negada). Usa la QS.

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 27 de Octubre de 2007, 15:13:48
ok ahora mismo lo cambio, vi mal, jeje, pensaba que esa era la no invertida, weno pequeño error, ya lo arregle.

tb he visto la matriz de aitopes, y pues la he comprendido, y es eso lo que hago para visualizar las letras, de forma similar doy los datos serialmente al 4094 y el puerto b me sirve para habilitar cada fila de las matrices, ahora, solo tenog cierto problema para desplazar el mensaje, pues todavia sigo trabajando en ello, os comentare mis avances, y pues cualquier consejo sera muy bueno, un saludo, muchas gracias por vuestra ayuda



pd.: este es mi post 500 :lol:, ya subi de nivel, jeje, que bueno, ya me falta poco para ser un ser supremo, jajaja (es broma) :-/
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 27 de Octubre de 2007, 15:59:28
Cryn:

Lamentablemente no tengo a mano ningun video de los carteles electronicos y efectos que hacen. Justamente ahora estoy haciendo otro.

Te voy a intentar explicar cómo deberías encarar el programa.

Primero:

Definir los pines involucrados con los registros de desplazamiento:

Código: C
  1. #define  DATA    pin_a0
  2. #define  CLOCK   pin_a1
  3. #define  STROBE  pin_a2
Reservar espacio en memoria para almacenar los datos del cartel y poder manipularlos facilmente:

Código: C
  1. #DEFINE COLUMNAS 24       //Defino cantidad de columnas a usar
  2.  
  3. int8  Memoria[COLUMNAS];  //Almacena los datos a mostrar en el cartel
  4.  
  5. int8 Fila;  //Fila actual a refrescar
  6.  
  7. int8    Puntero;                   //Indica cual es la primer columna a mostrar del array Memoria.
  8.  
  9. int1    VSync;                    //Indica si es momento correcto de modificar lo que se esta mostrando...
  10.  
  11. int8   i,j;                           //Variables auxiliares
  12.  
  13. int8   Inhibit;                     //Impide que se produzcan cambios en el cartel.



Código: C
  1. //Rota a la izquierda el contenido del buffer
  2.  
  3. void rotar_izq(){
  4.     if(Puntero!=0) Puntero--; else Puntero=COLUMNAS-1;
  5. }



Código: C
  1. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que querés que tu cartel refresque...
  2.  
  3. #int_TIMER0
  4. void  TIMER0_isr(void)
  5. {
  6.    ShowFila();                  //Mostremos la fila actual...
  7.    Fila++;
  8.    if(Fila==8){
  9.       Fila=0;
  10.       VSync=1;
  11.       if(Inhibit!=0) Inhibit--; else rotar_izq();
  12.    }else VSync=0;
  13.  
  14. }





Código: C
  1. void main()
  2. {
  3.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  4.    enable_interrupts(INT_TIMER0);
  5.    clear_interrupt(INT_TIMER0);
  6.    
  7.    enable_interrupts(GLOBAL);
  8.  
  9.    //Configuro los Puertos
  10.    set_tris_a(0);
  11.    set_tris_b(0);
  12.    
  13.    //Apago cartel
  14.    output_b(0xFF);
  15.    
  16.    //Aseguro inicialmente clock en bajo
  17.    output_low(CLOCK);
  18.    output_low(STROBE);
  19.    
  20.    //Comienzo por la 1er fila
  21.    Fila=0;
  22.    
  23.   Inhibit=20;
  24.  
  25.    //Indico que comienzo con sync.
  26.    VSync=1;
  27.  
  28.    //Esto es solamente para llenar con "algo" la matriz. Aqui deberian ir las cosas con sentido...:D
  29.    for(i=0;i<COLUMNAS;i++){
  30.       bit_set(Mensaje[i], i % 8);
  31.    }
  32.  
  33.    Puntero=0;
  34.  
  35. }





Código: C
  1. void ShowFila(){
  2.      
  3.      for(j=Puntero-1;j!=255;j--){
  4.          if(bit_test(Memoria[j],Fila)) output_high(DATA); else output_low(DATA);
  5.          output_high(CLOCK);
  6.          output_low(CLOCK);
  7.       }
  8.       for(j=COLUMNAS-1;j!=Puntero-1;j--){
  9.          if(bit_test(Memoria[j],Fila)) output_high(DATA); else output_low(DATA);
  10.          output_high(CLOCK);
  11.          output_low(CLOCK);
  12.       }
  13.    
  14.    bit_set(
  15.    output_b(0xFF);
  16.  
  17.    bit_clear(portb,Fila);
  18.  
  19.    output_high(STROBE);
  20.    output_low(STROBE);
  21. }

Bueno esta es, para mi, la forma óptima de establecer y rotar una matriz: con punteros. Algunos podrán desplazar todo el contenido del array un lugar a la derecha. Eso hace el código más simple,pero lleva muchísimo mas tiempo de procesado.

A esto lo tome del cartel que estoy haciendo yo, pero lo modifique un poco para tus necesidades. Espero se entienda algo...Ando medio apurado...Si llego te armo el .c  asi lo podes simular.

Saludos!

P.D. Felicitaciones x los 500.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 28 de Octubre de 2007, 10:50:38
ok, intentare entenderlo, pues con una leida no esta muy claro, seguire veindo tu codigo

muchas garcais por la yuda, un saludo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: LABmouse en 28 de Octubre de 2007, 11:07:20
Que linda matriz de 8x8 Aitopes!!!!  :-/
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 28 de Octubre de 2007, 16:10:11
Gracias Ernesto!
Esta semana pienso ponerle horas al proyecto y escribir algo mas de codigo para él. La idea es que sirva de ejemplo justamente para los que quieren hacer algun cartel del LEDs.

Saludos!  :mrgreen:

PD: Si gustas (o alguien mas!) escribir algun ejemplo, con gusto lo pruebo y pongo en la pagina!  :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 28 de Octubre de 2007, 18:36:16
ok, seria buenisimo, yo aca esperando con ansias el algoritmo que prometiste aitopes, que no se te olvide, jejeje

y sigo intentando con lo del desplazamiento, como te mencione, he visto la matriz que hiciste y la he cmprendido, pero todavia no me ubico en el desplace

venga que esperamos vuestros aportes

un saludo mg
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 20 de Diciembre de 2008, 20:06:49
Reviviendo nuevamente el tema que cree hace ya más de un año, porque no pude dedicarle tiempo lo tenía pendiente.

Ahora ya he avanzado algo, he comprendido el manejo y también el hardware viendo algunos otros hilos del foro. Logré realizar el desplazamiento de un texto, lo hice rotando los datos de un array, no me siento conforme con eso, pues como mencionó bruno no es la mejor forma, y he intentado simualr el código que dejo y no me da resultado, no he comprendido del todo las operaciones en la función ShowFila.

Nose si alguien ha desplazado un texto de cartel de LED's utilizando punteros

muchas gracias, un saludo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gera en 20 de Diciembre de 2008, 20:38:25
Hola Cryn!
Yo tengo un codigo por aca q hice hace tiempo ya, te lo adjunto asi le pegas una mirada. No lo hice con punteros, lo q hago es dibujar un arreglo en la matriz, y si quiero desplazarlo, trabajo sobre el arreglo. Quizas no sea lo mas eficiente, pero soluciona muchos problemas a la hora de querer hacer efectos, como un negativo, desplazar de forma vertical, o si queres hacer un juego.
Espero q lo entiendas porq no esta bien comentado, y estoy un poquito ocupado para hacerlo ahora :S cualquier cosa cuando ya tenga mas tiempo me pongo a hacerlo como vos pedis a ver si sale ;)
saludos y ojala te sirva!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 20 de Diciembre de 2008, 20:40:50
El problema no es sólo desplazar el mensaje sino, ¿qué pasará cuando quieras hacer un spin con el mensaje dando vueltas, digamos a manera de hélice, o algún otro tipo de animación que se te ocurra? ¿y si cambia después el texto? No es práctico ni funcional (yo creo que ni posible por lo tedioso y el tiempo involucrado) en crear un algoritmo para cada animación a visualizar, ni mucho menos en guardar cada animación en una eeprom. Desafortunadamente ese es el gran problema de los anuncios de leds de éste tipo, ya que la matriz de leds está íntimamente ligada al proceso de la generación de los mensajes. Lo ideal es que sean dos cosas separadas y que no tengan conocimiento entre sí: que la matriz de leds no reconozca ningún carácter, sólo unos y ceros, y que el generador de animaciones desconozca que "tiene" que manejar una matriz de leds. De esta forma la matriz hace su trabajo electrónico y la animación hace su trabajo en software, pudiendo hacerse en Adobe Premiere, Flash, etc.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 20 de Diciembre de 2008, 20:47:05
gracias por el código gera, lo estudiaré.

Desafortunadamente ese es el gran problema de los anuncios de leds de éste tipo, ya que la matriz de leds está íntimamente ligada al proceso de la generación de los mensajes. Lo ideal es que sean dos cosas separadas y que no tengan conocimiento entre sí: que la matriz de leds no reconozca ningún carácter, sólo unos y ceros, y que el generador de animaciones desconozca que "tiene" que manejar una matriz de leds. De esta forma la matriz hace su trabajo electrónico y la animación hace su trabajo en software, pudiendo hacerse en Adobe Premiere, Flash, etc.
suena muy interesante lo que dices jacrmr, pero y eso como se podría lograr? esta mal el hardware o el software para hacer algo como dices? cual sería el hw y sw?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 20 de Diciembre de 2008, 21:00:53
Bueno... implicaría un cambio radical en el circuito, con PLDs (no es necesario llegar a FPGAs ya que las funciones no son tan complicadas y no se requiere mucha síntesis), y algunos integrados algo raros, como memorias multipuertos síncronas. El problema puede ser que no se justifique la complejidad para manejar una matriz de 7(ú 8 ) por N, ya que sólo es un renglón e independientemente de la resolución horizontal sólo es cuestión de ir aumentando drivers, registros de corrimiento, etc. hasta alcanzar la longitud deseada. El criterio de diseño que menciono es valioso cuando estamos hablando de una matriz más grande y donde la altura del caracter no esté limitada por el tamaño del renglón. Para el caso que mencionas y que estás trabajando en C la verdad no le veo mucha ayuda llegar a manejar punteros. Es que lo veas por donde lo veas en un letrero electrónico como el que mencionas le estás cargando todo el trabajo al software (o mejor dicho al programador del software, o sea tú) y en cambio la matriz y su electrónica muy ligeros casi sin hacer nada. No está mal ni el software ni el hardware, es sólo que en estos letreros se le apostó totalmente al software para hacer el trabajo. Por ejemplo la marca líder de éste tipo de letreros unilínea (Alpha Display) lleva interiormente un sistema mínimo (RAM, ROM, micro) para generar todos sus efectos, producto de una cuidadosa (y muy larga) programación.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 20 de Diciembre de 2008, 21:07:05
No trabajé antes con PLD's mucho menos con FPGA's, seguramente se logra lo que mencionas con estos elementos, mi intención no es tener un cartel que haga todo, por el momento solo quisiera que mi cartel desplace un texto, tenga talvez algunas otras animaciones y nose, no creo que nada más, ya si alguna vez necesito un cartel más poderoso seguramente tendré que investigar sobre PLD's y FPGA's

Por el momento no tengo más laternativa que programar y programar :(

un saludo, gracias por los comentarios
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 20 de Diciembre de 2008, 21:14:39
Sé que es una gran tentación el tener el letrero y querer programar algo para visualizarlo inmediatamente, pero créeme que la mejor inversión de tiempo en programación que podrías hacer en este tipo de proyectos es que comiences en hacer tus librerías de animaciones pero generalizadas, es decir, no fijas para ningún caracter, sino partiendo desde un nivel de programación para que puedan ser variables y después fácilmente sólo tengas que asignar ahora sí los valores de los caracteres (tal vez su valor ASCII) y que te realicen la animación. Al principio puede parecer tediosa esta tarea pero una vez que lo consigas no tendrás que preocuparte de nuevo por la animación ya que ahora trabajarás al nivel de "caracteres" por así decirlo.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gera en 20 de Diciembre de 2008, 21:45:26
hmm, yo tengo algo parecido a lo q dice jacrmr, son un par de funciones que les pasas un string y lo muestran en pantalla, pero esta hecho para un giroplay. Cuando encuentre el codigo lo subo a ver como lo podemos adaptar, saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 27 de Diciembre de 2008, 22:28:45
muchas gracias a todos por la ayuda :-/ :-/

a aitopes por los consejos y por el excelente material que tiene en su página
a microcadaver, stk500, y pocher por los links
a bruno por la muy buena explicación y el código que hizo para mi
a gera por el codigo que me mostró
a ralf2 que también me presto un código y me daba ideas sobre el funcionamiento del circuito
a jacrmr or hacerme ver qeu se pueden hacer las cosas de una mejor manera
y uno especial a MLO__ que con ayuda de su código que me envió, me basé mucho para hacer esto

y después de un año y dos meses exactamente, lo logré :D :D

pasó que lo dejé y pues como muchos saben no pude hacer nada más que una particular y deje pendiente muchos proyectos, ahora me estoy dedicando a cumplirlos, y acá va el primero, nose si será la manera correcta de hacerlo, pero lo hice con software en un pic16f88

Ahora si no me pican las manos para pasar directamente a otro proyecto, le haré algunas mejoras a mi programa para darle algunos efectos

bueno pues, nada más que por el fin de año, el mensajito les dice una cosa:


gracias a todos!! un abrazo :-/ :-/ :-/
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gera en 28 de Diciembre de 2008, 00:05:56
Quedo muy bueno!! Lamento no haber ayudado un poco mas, es q justo me fui una semanita a las leñas y alla no habia internet.
En fin, excelente trabajo, felicitaciones Cryn!!!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 28 de Diciembre de 2008, 01:13:47

Felicitaciones Cryn!

Te quedo muy padre!
Citar
pero lo hice con software en un pic16f88

  i <3 p88

 :mrgreen:


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 28 de Diciembre de 2008, 01:29:08
gracias por los comentarios amigos, no te preocupes Gera tu código sirvió bastante

Citar
i <3 p88
ehh? no entendí :oops:
 :D

pero digo eso por esto:
Bueno... implicaría un cambio radical en el circuito, con PLDs (no es necesario llegar a FPGAs ya que las funciones no son tan complicadas y no se requiere mucha síntesis), y algunos integrados algo raros, como memorias multipuertos síncronas. El problema puede ser que no se justifique la complejidad para manejar una matriz de 7(ú 8 ) por N, ya que sólo es un renglón e independientemente de la resolución horizontal sólo es cuestión de ir aumentando drivers, registros de corrimiento, etc. hasta alcanzar la longitud deseada. El criterio de diseño que menciono es valioso cuando estamos hablando de una matriz más grande y donde la altura del caracter no esté limitada por el tamaño del renglón. Para el caso que mencionas y que estás trabajando en C la verdad no le veo mucha ayuda llegar a manejar punteros. Es que lo veas por donde lo veas en un letrero electrónico como el que mencionas le estás cargando todo el trabajo al software (o mejor dicho al programador del software, o sea tú) y en cambio la matriz y su electrónica muy ligeros casi sin hacer nada. No está mal ni el software ni el hardware, es sólo que en estos letreros se le apostó totalmente al software para hacer el trabajo. Por ejemplo la marca líder de éste tipo de letreros unilínea (Alpha Display) lleva interiormente un sistema mínimo (RAM, ROM, micro) para generar todos sus efectos, producto de una cuidadosa (y muy larga) programación.
:roll:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 31 de Diciembre de 2008, 15:31:06



Muy buen trabajo!!!!
Felicitaciones!
Y no te procupes....2 años y medio no es tanto tiempo!! :)

Un abrazo, y feliz 2009.
Ariel.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 31 de Diciembre de 2008, 16:03:06
Citar
....2 años y medio no es tanto tiempo!! Smile
:shock: :shock:
ya me duplicaste el tiempo aitopes :D :D

que bueno es tenerte de vuelta por aca!!

felices fiestas amigo!! :-/ :-/
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 31 de Diciembre de 2008, 16:40:31
Citar
....2 años y medio no es tanto tiempo!! Smile
:shock: :shock:
ya me duplicaste el tiempo aitopes :D :D

que bueno es tenerte de vuelta por aca!!

felices fiestas amigo!! :-/ :-/

Un año y dos meses no son dos años y medio?????? Joder!!! Toda una vida engañado!! ja ja ja!

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 31 de Diciembre de 2008, 16:47:57
 :D :D :D :D

parece que alguien ya se adelanto a los festejos de fin de año :D :D
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 31 de Diciembre de 2008, 17:31:06
Disculpas por no colocar más videos de una mejor calidad, pasa que no he podido conseguir cámara, lo único que tengo es mi teléfono móvil :D

Pero bueno creo que por ahora no hará falta, pues he decidido exprimir al máximo estas matrices que tengo, pasan que son bicolores, más o menos así:

(http://img262.imageshack.us/img262/2651/datamatriz8x8zc2.jpg)

y estaba ruteando una placa para lo que les mostré, pero pensando me di cuenta que iba a ser una perdida de tiempo si no las explotaba al máximo.

Y entonces no estoy seguro de como hacer el hardware para controlar los 2 colores, pues he usado esto para un color:

Microcontrolador:
(http://img262.imageshack.us/img262/7684/mcuwk1.jpg)
matrices:
(http://img159.imageshack.us/img159/4338/mtrixsct5.jpg)

que es básicamente ideas sacadas del foro, 8PNP's para las filas y 4094-ULN2803-resistencia para las columnas; todo a 5Voltios, y pues el resultado fue lo que vieron en el video

Ahora para utilizar el otro color de la matriz que es lo mejor que puedo hacer??, he pensado en utilizar otros 5 4094-ULN2803 (uno por cada matriz) lo que daría un total de 10 4094-uln2803 y los ENABLES de los 4094 que antes estaban todos directamente a VCC ahora tienen que ser activados con el color correspondente. Lo cual es demasiado hardware, y al ver el ruteo para un solo color en el sector de las matrices está horrible, pensar que van a aparecer muchas más pistas que hacer será solo realizable con muuucha paciencia y algo más. De este mismo modo tendremos en cada ULN resistores para el color adecuado, y creo que a pesar de ser un hardware pesado es el más óptimo.

Sin embargo, como pueden ver en el esquema interno de la matriz, son de ánodo común y otra cosa que podría hacer es girar mi matriz y usar las columnas como FILAS, de esta manera puedo controlar que fila encender y de que color con solo transistores y entonces utilizar solo los 5 4094-uln2803 y aumentar 8 transistores y 8 pines extra del micro, pero ambos colores compartirán las resistencias que tienen los ULN y solo un color de leds estarán con su valor correcto de funcionamiento, el otro color por tanto no brillará mucho, además que el programa que antes encendía los transistores con 1s ahora tendrá que ser con 0s, por tanto tendrán que ser transistores NPN y en los 4094 la lógica también deberá cambiar.

Un situación difícil para mí, pues nose que es lo mejor, o alguien conoce algún otro esquema que pueda ahorrar hardware, quizá también multiplexando los 4094-uln u otra forma??

muchas gracias, un saludo y feliz fin de año!!!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 31 de Diciembre de 2008, 17:40:47
i <3 p88


Yo (http://files.nireblog.com/blogs/amycita_1988_18/files/corazoncito.jpg) pic16F88

Yo solo te agrego mas hard , pero te dejo explotando el uC xD

Pues si mucho hard , aunque yo asi como lo veo xD
Me quedo con el mismo uC , y agrego otro 4094 para las columnas (data,clock,reset), entonces tendria 5 pines libres , con los cuales controlaria el enable de cada color, y asi tendrias colo A,color B , color AB xD.y te quedan 3 lineas más .


Asi lo imagino , a lo mejor me fallará algo .



xD

Feliz año!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 31 de Diciembre de 2008, 18:25:43
jajaja ahora entiendo tu código: I <3 p88 2

De hecho pienso cambiar de micro, lamentablemente (porque me gusta más el 88), por un 18f2550, porque tiene más RAM y tiene USB; además que pretendo copiarme la idea de muchos y colocarle también un RTC :mrgreen: y por tanta lata voy a necesitar más pines, espero que no demasiados y no tenga que pasar al 4550

Entonces, AKENAFAB, como me agregas más hardware me ayudarás a rutear :D :D :D
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 31 de Diciembre de 2008, 18:51:49

jajaja ahora entiendo tu código: I <3 p88 2

De hecho pienso cambiar de micro, lamentablemente (porque me gusta más el 88), por un 18f2550, porque tiene más RAM y tiene USB; además que pretendo copiarme la idea de muchos y colocarle también un RTC :mrgreen: y por tanta lata voy a necesitar más pines, espero que no demasiados y no tenga que pasar al 4550

Entonces, AKENAFAB, como me agregas más hardware me ayudarás a rutear :D :D :D


No gracias xD!

Ahora quiero hacer tantas cosa sy no tenfo tiempo de nada xD

Si seria lo mejor migrar a un uC más grande,menos rollo de escatimar pines  xD.

Voy a hace rmi lista de pendientes

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 02 de Enero de 2009, 07:32:32
Holas cryn, Felicidades por tu proyecto esta muy chido.  :-/

jeje al igual que tu hace tiempo deje pendientes muchos proyectos por terminar la carrera  :? y hasta hace como un mes decidi por fin terminar algunos, uno de ellos es prescisamente una matriz, hice una desde el 2005 sino mal recuerdo, pero lo hice en ensamblador, utilizaba la eeprom del micro (un 16f84 por cierto y un 74HC154), una matriz de 8x16, pero ahora creo que me han dado muy buenas ideas en el foro, asi que en cuanto adquiera mis shift regs los probare.

Feliz año !!!!!!!! A todos los Foreros que anden por ahi  :D
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 02 de Enero de 2009, 12:19:27
bien pues esperaremos al primero de tu lista :mrgreen:

que bueno es saber que el foro te da buenas ideas, porque a mi también me las dio

yo sigo buscando el mejor hardware para matrices bicolores

feliz año nuevo.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: RALF2 en 02 de Enero de 2009, 12:46:02
Que tal amigos!
Muy bueno el ejemplo tal como lo hice yo  :D

Vez no era tan dificil despues de todo  :mrgreen:

Felicitaciones!!!!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 02 de Enero de 2009, 12:51:03
siiii :-/ :-/ :-

ooops, disculpa por no mencionarte en el agradecimiento, se me olvido que fuiste de mucha ayuda también

ahora lo arreglo :-/ :-/

pero si no lo mejoro seguirá pendiente, así que a mejorarlo :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: RALF2 en 02 de Enero de 2009, 12:56:07

OK amigo no te preocupes por ello  :mrgreen:

LO importante es que te ha funcionado muy bien yo lo hice en proton ahora pienso pasarlo a MKB (mikrobasic)  :shock:  :D

Es sencillito y asi a los amigos que programan en basic les puede servir  :-/

Bueno a seguir estudiando!
Me pedire las matrices de led para poderlo hacer en grande  :D

Saludos

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 02 de Enero de 2009, 12:59:42
No hombre como no mencionar tu ayuda, fue bastante también

y como va el CCS? yo también quiero aprender proton y Basic :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: RALF2 en 02 de Enero de 2009, 13:11:29
El proton lo puse en estado de invernacion de momento  :shock: :D
Ahorita estoy dando le duro es al mkb porque veo que le han hecho mejoras muy interesantes con respecto a ediciones anteriores y lo que mas me sorprende son esas librerias que trae para manejar cinetos de cosas como es el ethernet, i2c en modo master y slave, teclados ps/2, entre otros.

Deberas que se ve bueno, asi que decidi meterme este año con el y luego pasare de alli al ccs, que lo tengo pendiente desde hace tiempo  :mrgreen:

Muchas cosas pienso aprender y acometer este año asio que por aqui estare  :mrgreen:

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 02 de Enero de 2009, 15:32:41
Citar
Ahora para utilizar el otro color de la matriz que es lo mejor que puedo hacer??, he pensado en utilizar otros 5 4094-ULN2803 (uno por cada matriz) lo que daría un total de 10 4094-uln2803 y los ENABLES de los 4094 que antes estaban todos directamente a VCC ahora tienen que ser activados con el color correspondente. Lo cual es demasiado hardware, y al ver el ruteo para un solo color en el sector de las matrices está horrible, pensar que van a aparecer muchas más pistas que hacer será solo realizable con muuucha paciencia y algo más. De este mismo modo tendremos en cada ULN resistores para el color adecuado, y creo que a pesar de ser un hardware pesado es el más óptimo.

De hecho piensa que aún agregando más ICs sigue siendo poco hardware todavía para las posibilidades y satisfacción que te ofrecerá hacerlo bicolor, y sí, ciertamente como comentas el ruteo puede ser una pesadilla, pero recuerda que si lo difícil de conseguir, fuera fácil, todo el mundo lo haría. Ya a estas alturas es difícil que ahorres en hardware. Las pantallas de leds son así. Todo va creciendo exponencialmente. El detalle tal vez vendrá (nuevamente) en el software. Recuerda que puedes usar la misma línea de datos para el rojo que para el verde y en software codificar la información respectiva a cada color.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 02 de Enero de 2009, 20:01:14
Si ya me, esperaba algo así, creo que lo mejor sería utilizar smd's para que en espacio sea más reducido, lástima que en mi ciudad no haya nada :(

bueno pues entonces comenzaré con el ruteo para un publik bicolor 8x40, ojala no tarde tanto tiempo, corre el cronómetro para ver en cuanto tiempo lo termino, usaré como dije antes un 18f2550, DS1307 (RTC), conexión a USB y si algo más se me ocurre lo tendrá :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 02 de Enero de 2009, 21:47:13
Una Memoria!

Un Sensor de temperatura!

Ya tienes el ds que es i2c , asi que el sensor y la memoria de volon pinpon!

Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 03 de Enero de 2009, 01:10:47
hola saludos a todos, una pequeña duda, no tiene nada que ver con las matrices pero necesito aclarar mi dua, alguien sabe que integrado es un "DELCO 207483"  :shock: mande pedir un ds1703  :( y me madaron el DELCO pero no encuentro hojas de especificaciones por ningun lado, me pueden ayudar, gracias.

ahora hablando del tema, justo estoy armando la matriz de 8x8 para hacer pruebas. pronto les dare mas noticias bye.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 03 de Enero de 2009, 19:57:07
una memoria podría ser, un termómetro, i2c quisiera pero no tengo en i2c, tengo un 1-wire, no esta mala la idea

pacmer, ni idea que será el delco, primera vez que leo ese nombre. venga pues esperaremos noticias de tu matriz
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 09 de Enero de 2009, 13:42:45
y ruteando estoy, como cuesta, espero no salgan muchos puentes, creo que en una PCB deberían estar solo las matrices, le puse las matrices y los 4094-uln2803 en la misma, y el circuito de control en otra, salio grande la de las matrices, mmm quizá hubiera sido bueno usar buses de 40 u 80 pines pero tal vez el ruteo hubiera sido peor, nose, pero ya ni modo lo dejo así, por ahora les muestro como quedo el circuito de control:

(http://img443.imageshack.us/img443/8595/pcbctrlljl5.jpg)

Hay alguna forma de capturar los esquemas del eagle?? porque esto lo hice con el capturador de pantalla y mientras que es muy distinto con el proteus por ejemplo, que con el copy to clipboard se copia todo y en el máximo tamaño, ustedes como copian los esquemas del eagle??
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 09 de Enero de 2009, 14:14:52

El mismo print screen  xD

No me se otra con el eagle

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 09 de Enero de 2009, 14:30:20
vale. Vi lo del CAM pero no me salio nada bien, salio a blanco y negro y con cuadritos plomos, estaba intentando en formato PS y EPS para llevarlo al photoshop, pero malos resultados tuve, y como estos esquemas que hago son algo grandes el printscreen no sacará muy bien

ni modo, gracias pro la respuesta AKENAFAB, un saludo

a seguir ruteando
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 10 de Enero de 2009, 23:43:56
y listo por fin acabé fue mucho laburo en el ruteo pero al fin, ya está, ojala no haya errores porque sino me mato :D le pego el plano de tierras y listo para la serigrafía, de hecho al redactar ya me picaban las manos para colocarle plano de tierras, y lo hice pero hay varios espacios vacíos, como relleno algo que no sea tierra o VCC? acá la imagen de lo que comprende a las matrices:

(http://img82.imageshack.us/img82/7191/pcbmtxmq2.jpg)

les dejo este link (http://rapidshare.de/files/41321037/publik.pdf.html) para que vean en pdf lo que hice sobre el ruteo y los planos de tierra y vcc

algunas sugerencias?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: droky en 11 de Enero de 2009, 01:17:01
Hola,
vale. Vi lo del CAM pero no me salio nada bien, salio a blanco y negro y con cuadritos plomos, estaba intentando en formato PS y EPS para llevarlo al photoshop, pero malos resultados tuve, y como estos esquemas que hago son algo grandes el printscreen no sacará muy bien

ni modo, gracias pro la respuesta AKENAFAB, un saludo

a seguir ruteando

Puedes usar:
Archivo --> Exportar --> Imagen
Y le das los dpi para el tamaño que quieras o luego lo bajas con el Photoshop.
Muy bueno y laborioso el ruteado...

Salu2
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 11 de Enero de 2009, 08:13:31
No hay "ruteos" ni buenos ni malos, ni fáciles ni complicados. Los "buenos" son los que implementa cada quien. Después de esto ¿qué sigue? sólo lo que desees, así sea un publik de X por Y. La base ya la tienes y la puedes expander hasta donde quieras. Felicidades Cryn.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 11 de Enero de 2009, 13:18:43
caray como se me pasó, precisamente estaba buscando ese export pero no lo encontraba, muchas gracais por el dato droky.

gracias por las palabras jacrmr, y pues si he aprendido mucho con esto del publik, y también al rutear aprendí otras cosas más, es la primera vez que he ruteado manualmente (antes siempre lo hacía en auto :mrgreen:), es muy divertido; quisiera ver como se podría hacer con cosas como con las que dijiste CPLD's o FPGA's, para un RGB por ejemplo (lastima que en mi ciudad será un poco difícil conseguirlos, pero haré algunos intetos para obtener algo y ver como es ese mundo), que en hardware será un mounstruo más grande todavía, ahora comprendo porque tienen el precio que tienen esos carteles tan grandes, de verdad que es un trabajo enorme y valen su precio. Lastima que muchas veces vemos las cosas solo por fuera y parece que fuera fácil de hacer y barato, cuando uno se mete realmente al rollo y ve las cosas desde adentro se da cuenta de muchas cosas como complejidad y precio.

Bueno pues, como hoy es domingo no puedo ir al serigrafiador, así que me esperaré hasta mañana a primera hora para comenzar con el PCB físicamente, uuuy no va ser otra tortura la perforación y la soldadura :shock: ni modo :D. Aquí son los momentos donde se necesitan más las miniestaciones de soldadura y perforado, creo que me copiaré la idea de varios de acá de foro y haré algunas de mis herramientas, jeje

Mientras buscaré más info por acá para colocar planos no necesariamente de tierra, para rellenar otros espacios en la PCB, y veré si puedo incluir el programador usb popular de willi creo para aprovecharlo en la serigrafía

Un saludo a todos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 11 de Enero de 2009, 19:13:47
Tanto como usar una FPGA para un publik pequeño o mediano es innecesario, ya que puede conseguirse el mismo propósito usando algunas GALs, o mejor aún alguna CPLD mediana. Respecto a la complejidad del ruteo, cada vez es menos usado el multiplexeo entre los fabricantes de pantallas, lo que hace que el número de componentes se eleve exponencialmente (y también el ruteo consiguiente). Por ejemplo la siguiente foto (desconozco el autor de la misma así como su origen, y de dónde fue tomada) muestra un sólo módulo de una pantalla estática (sin multiplexar).

(http://www.geocities.com/jcarlosmor/temporal/led2module.jpg)


En la siguiente foto su autor supongo que está experimentando algo con la FPGA, ya que se trata sólamente de un módulo de evaluación y no de un PCB de producción final (bastante sobrado por cierto para la aplicación así sea correción de gamma en leds RGB con entrada de video).

(http://www.geocities.com/jcarlosmor/temporal/led1module.jpg)


En esta otra foto aparece el frente de dicha placa:


Título: Re: De matriz de leds, a letrero electronico
Publicado por: droky en 11 de Enero de 2009, 22:33:26
Guau!!!
Que bestia, con una Virtex!!! eso vale una pasta!
Y que barbaridad de PCB con tanto chip!!!
Interesante saber estas cosas...
Salu2
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 11 de Enero de 2009, 23:08:50
si realmente una bestia, muy buena PCB

muy buena foto jacrmr, ojala quede así mi minipublik :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 12 de Enero de 2009, 01:32:58
Finalmente recordé de dónde se obtuvieron las fotos anteriores por si a alguien le interesa. En otro foro algunas personas querían diseñar unos reemplazos para pantallas de matriz de gas. Incluso hicieron algunas preguntas en éste foro, donde yo los persuadía que si sólo era por ahorrarse unas decenas de euros respecto a lo que ya había en el mercado iba a ser muy difícil que abarataran los costos, además del tiempo que implicaba:

http://www.todopic.com.ar/foros/index.php?topic=21196.0


El otro foro en donde están las fotos es aquí:

http://www.marcianitos.org/foro/showthread.php?t=15338&page=4
Título: Re: De matriz de leds, a letrero electronico
Publicado por: LABmouse en 12 de Enero de 2009, 16:00:50
Pueden ver en la foto que la pantalla es RGB. No hay otra manera de manejar una pantalla RGB a full color que no sea una FPGA.

SALUDOS!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jacrmr en 12 de Enero de 2009, 16:21:24
Citar
Pueden ver en la foto que la pantalla es RGB. No hay otra manera de manejar una pantalla RGB a full color que no sea una FPGA.

Se puede hacer con CPLDs ó incluso con varias GALs, pero el circuito se incrementa demasiado, y si se quiere hacer correción de gamma fiable se ocupará algún DSP básico como mínimo. La FPGA no se requiere tanto porque no haya otra forma de hacer ésa tarea, sino porque simplifica mucho por lo que dentro de ella se puede incluir que por lo general es el control serial, control de brillo, control de escala de grises, memoria multipuertos, corrección de gamma, transformación del espacio de color, y la recepción de video, todo en un sólo chip. Cada uno de estos bloques puede programarse en uno o dos pares de GALs (con excepción de la correción de gamma) pero es incómodo que se vaya haciendo un circuitería cada vez más grande.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 12 de Enero de 2009, 18:46:39
bien pues esta mañana salí de compras para el grabador y el resto de componentes para el publik, me olvidé comprar los 4094-uln2803 :lol: :lol: donde llevaré la cabeza estaba pensando solo en la bobina que no encontré :( pero lo buscaré por mis reciclados haber si hay alguno o sino nose que hacer

pero bueno el de la serigrafía me hizo la movida y me lo entregará mañana, que mal no? pero ni modo a esperar, hasta mientras arreglo las cosas que necesito como el ácido, taladro, brocas, soldador, estaño, pasta :shock: pasta se me olvidó la pasta :shock: donde andará

 :x caray ya me robaron la pasta no la encuentro :(

necesitaré también un recipiente grande para el ácido, la placa es de nos 15x15 cm, que usan ustedes?

ahora que veo muchas cosas no estan en su lugar, mejor me pongo a buscarlas y seguramente ya será mañana para recoger la placa :D

un saludete
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 12 de Enero de 2009, 19:56:22
 :-/ :-/

 Quiero un minipublik  :mrgreen:

Me has animado pana Cryn.

xD

Ya me avente el cubo de leds 33.

Me hice el tengucito  xD

y quiero publik xD

Lo malo es que no he terminado nada de ninguno y otras cosas más xD.

Pero me lo aviento.

Saludos!

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 12 de Enero de 2009, 20:47:25
:-/ :-/

 Quiero un minipublik  :mrgreen:

Me has animado pana Cryn.

xD

Ya me avente el cubo de leds 33.

Me hice el tengucito  xD

y quiero publik xD

Lo malo es que no he terminado nada de ninguno y otras cosas más xD.

Pero me lo aviento.

Saludos!

no has terminado y quieres más? :D, bien bien me parece bien así hay que ser aventado a todo, jeje

que bueno que te haya animado, porque estos publik se ven re-bien, ya tengo ganas de verlo armado enl a PCB, ya falta poco para mañana, jeje, ojala no tome más de un día con el quemado-perforado-soldado, conociéndome talvez me tome unos 2 días como mínimo, pero ya encontré la pasta, estaba donde ni siquiera yo lo puse :D

Venga pues AKENAFAB que acá estamos para ayudarte también con tu minipublik, en cuanto tenga todo acabado coloco mejores imágenes del harware (esquema y pcb) que hice, y el código para el micro

Un saludo amigo, y que bueno haberte animado por un minipublik :-/ :-/
Título: Re: De matriz de leds, a letrero electronico
Publicado por: RALF2 en 12 de Enero de 2009, 21:43:58
Mis felicitaciones CRyn!
La placa te quedo deprabada   :D
Y luego decias que no sabias usar el eagle bien  :lol:

Bueno mi pana estare pendiente por las fotos de la placa  :mrgreen:

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 12 de Enero de 2009, 21:54:47
gracias RALF, amigo

jeje y estaba oxidado, por eso tarde bastante cometía muchos errores y después tenía que corregirlos y hasta algunos los dejé por flojera jaja, hasta me cree una librería para las matrices el sensor de temperatura y el 16f88 primeramente, use las de redpic, muy buenas sus librerías ahí habían el 2550, el ds1307 y algunos otros tb, tuve que refrescarme, jeje

ahh y hasta aprendí un truquito, nose si ya lo habrán publicado en el hilo de trucos de eagle, pero lo colocó después, se me olvido, hoy ahorita estoy de salida, es sobre las vías cuando se cambia de cara de top a botton o viceversa aparecen las vías solitas una vez seleccionado el tamaño y todo, quizá lo sepa la mayoría, si no esta en los trucos lo pondré :mrgreen:

y cada vez falta menos para recoger la placa de la serigrafía :-/ :-/

bueno, nos leemos después, un saludo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 13 de Enero de 2009, 19:45:10
 :5] :5] :5] :5] :5]

caray me equivoque en la PCB!!! debí hacerlo en mirror, soy un caimán :x

pucha ahora tendré que volverlo a llevar, que idiotón que soy

ni modo, un día más a la espera :(
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 29 de Enero de 2009, 14:10:16
Hoola, después de muchos días de espera y de trabajo para mí, por fin tengo los primeros resultados

Pero primero les muestro paso a paso:

1. los materiales y la PCB serigrafiada:

(http://img91.imageshack.us/img91/5896/materialeshf8.jpg) (http://img91.imageshack.us/img91/5896/materialeshf8.jpg)

2. un vistazo más cerca de las serigrafías:

(http://img91.imageshack.us/img91/300/sermtxzw5.jpg) (http://img91.imageshack.us/img91/300/sermtxzw5.jpg)
PCB que tendrá a los 4094-uln2803 y las matrices, Circuito de visualización

(http://img150.imageshack.us/img150/7425/serctrlwr3.jpg) (http://img150.imageshack.us/img150/7425/serctrlwr3.jpg)
PCB que tendrá al micro, Circuito de Control

3. La PCB después del atacado con ácido, quedó limpiezita, lástima que no quedó así hasta el final :(, la de la esquina inferior derecha es el grabador de Willip, se coló por ahí :D

(http://img91.imageshack.us/img91/7922/quemadobq8.jpg) (http://img91.imageshack.us/img91/7922/quemadobq8.jpg)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 29 de Enero de 2009, 14:50:43
y pues siguió el trabajo largo y duro, tuve varios problemas con el tamaño de las vías y de los huecos para las resistencias que por defecto son algo pequeñas, lo de las vías traté de arreglarlo manualmente pero no fue tan bueno que digamos, al final no quedó tan bien la PCB de visualización (el de las matrices) sigo verificando varias pistas cortadas algunas por que la serigrafía estaba algo mal y otras por mi mano lenta en el soldador que hizo desplegar una que otra línea

sigo trabajando pero les dejo las imagenes de las PB's:

1. La de control, la que más me gusta, porque salió bien :mrgreen::

(http://img403.imageshack.us/img403/6968/ctrltopfw5.jpg) (http://img403.imageshack.us/img403/6968/ctrltopfw5.jpg)
Vista de arriba, lado de los componentes

(http://img220.imageshack.us/img220/1876/ctrlbackgl0.jpg) (http://img220.imageshack.us/img220/1876/ctrlbackgl0.jpg)
Vista de abajo

2. La de visualización, donde están las matrices, registros y ULN's:

(http://img144.imageshack.us/img144/718/mtxtopxq4.jpg) (http://img144.imageshack.us/img144/718/mtxtopxq4.jpg)
Vista de arriba, lado de los componentes

(http://img230.imageshack.us/img230/3162/mtxbackym7.jpg) (http://img230.imageshack.us/img230/3162/mtxbackym7.jpg)
Vista de abajo, se ensució mucho, pero bueno ojalá me disculpen

Entonces seguiré arreglando la PCB y después comienzo con el soft para el micro

Espero les haya gustado el trabajo hasta ahora, disculpas por tardar tanto y por alguna mala calidad o enfoque de las fotos o errores en la PCB

Ahí seguimos después, falta colocar un mejor esquemático con buses en eagle para que no se vea tan mal, se los colocó después

Un saludo para todo el foro.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jim_17 en 29 de Enero de 2009, 16:47:42
Hay una cosa que no entiendo, por que se utilizan transistores PNP en lugar de transistores NPN, Lo que no entiendo es que si pones la pata del PIC que está conectada al transistor PNP por la base, a "1" entonces estas poniendo un voltaje positivo en la base del PNP, y según tengo entendido estará en corte.

Lo que quiero saber es como funciona el PNP para activar el led, y el porque se pone el integrado ULN2803. (el funcioamiento del CD4094 ya lo entiendo, solo que me descuadra el transistor PNP).


Queremos ver la matriz funcionando !!! :D.

Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 29 de Enero de 2009, 21:15:23

Vaya trabajo que te has aventado pana Cryn , entre perforacion y soldadura  :mrgreen:

Felicitaciones!

Ansioso por verla funcionando , y en cuanto tenga tiempo ya te estare molestando en lo qu eno entienda  :D

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 30 de Enero de 2009, 02:29:40
Hay una cosa que no entiendo, por que se utilizan transistores PNP en lugar de transistores NPN, Lo que no entiendo es que si pones la pata del PIC que está conectada al transistor PNP por la base, a "1" entonces estas poniendo un voltaje positivo en la base del PNP, y según tengo entendido estará en corte.

Lo que quiero saber es como funciona el PNP para activar el led, y el porque se pone el integrado ULN2803. (el funcioamiento del CD4094 ya lo entiendo, solo que me descuadra el transistor PNP).

Queremos ver la matriz funcionando !!! :D.

Salu2.

En realidad el hardware que construí es una recopilación de algunos que encontré por acá y de la pagina de Ariel, de ucontrol, y esto es lo que concluyo con experiencias que tuve y leídas acá en el foro:

un NPN hace que con un 1 lógico en la base, el emisor y colector tengan aproximadamente el mismo potencial, es decir un "corto circuito virtual". Y contrariamente con un 0 lógico en base, el emisor y el colector estan en diferentes potenciales, o en palabras vulgares están abiertos, jaja

un PNP es inverso, con 1 lógico, el emisor y colector abiertos. Y con 0 lógico corto circuito. Y en la conexión también va inverso, el emisor a VCC

la razón por la que use PNP es simple, me baso en el criterio de:

*cátodo común => NPN
*ánodo común  => PNP

porque? mm pasa que es más efectivo, así pues se puede colocar a la inversa o NPN siempre, pero hay algunos desperdicios de tensión por ahí, quizá sea uno de los motivos por los que se note menos brillo algunas veces

el ULN lo puse para mejorar el brillo, y funcionó bien, porque le quite el ULN para probar y el brillo bajo considerablemente, así que es muy importante el ULN, y también va por el lado del consumo, un registro no aguanta mucho y hasta puede tender a arruinarse, con el ULN le das larga vida al circuito :mrgreen:

Y si!! yo también ya quiero verla funcionando, pero falta, falta, este PCB que me trae loco


y si AKENA fue fregado tarde como 2 tardes perforando, jajaja, si no era porque se rompía la broca era porque me cansaba, jejeje y estaba pensando seriamente en la miniestación de perforado como la de nocturno. Mis ansias son las mismas para que funcione, y con gusto te responderé cualquier duda

Un saludo amigos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jim_17 en 30 de Enero de 2009, 14:36:45
Gracias, Cryn , el funcionamiento de los NPN y los PNP los tenia claros, lo que no tenia claro era la logica con la que activavas el PNP, es decir si pones en la salida del PIC un 0 lógico, realmente es como si estubieras conectando los terminales de massa (GND)?

El conexionado de los diodos es con el PNP es colector-anodo/cátodo-GND ?, otra duda es: si en el cd4094 le transmites un 0 lógico, es como si estuvieras poniendo GND en la pin?


Gracias, por las respuestas, así me voy aclarando las dudas, cuando (y cuando tenga tiempo tambien haré mi propio Publik :D)

Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 30 de Enero de 2009, 18:42:44
lo que no tenia claro era la logica con la que activavas el PNP, es decir si pones en la salida del PIC un 0 lógico, realmente es como si estubieras conectando los terminales de massa (GND)?

El conexionado de los diodos es con el PNP es colector-anodo/cátodo-GND ?, otra duda es: si en el cd4094 le transmites un 0 lógico, es como si estuvieras poniendo GND en la pin?

la lógica con la que activo los PNP es la siguiente: como expliqué en mi anterior post y bien sabes los PNP's juntan colector-emisor con un cero lógico en su base, entonces mis matrices son de ánodo común, todos los ánodos de cada fila están conectados entre sí, es decir la fila 1 de la matriz 1 esta conectado con la fila 1 de la matriz 2 y así sucesivamente y con el resto de las filas y matrices respectivamente. Entonces el PNP tiene el emisor en VCC y el colector en cada fila (ánodos +) por eso tengo 8 transistores, uno por cada fila. Uso entonces un puerto para el encendido de las filas, el puerto B estará destinado a ello, normalmente estarán todos en uno lógico, y cuando quiera encender una fila, su línea correspondiente la colocaré en cero lógico (las otras por tanto estarán apagadas o en 1 lógico en la base de su PNP correspondiente), y como debe ser encendida una fila tras otra, lo que en realidad pasa es que se hace rotar un cero lógico por todo el puerto, B en mi caso.

La alimentación de cada led es por el colector de cada PNP, por eso también es que use transistores de mediana potencia, como son los BD140 porque tengo un publik de 8 filas x 40 columnas, como toda la fila es la que se enciende se puede consumir como máximo 20mx40=800mA por fila, y un transistor de propósito general no podrá entregar eso.

Y sobre el conexionado es así como dices, para que quede mas claro te muestro una imagen más explícita :mrgreen:

(http://img84.imageshack.us/img84/203/pnpledpm4.jpg) (http://img84.imageshack.us/img84/203/pnpledpm4.jpg)

y sobre la transmisión al 4094, si es más o menos eso lo que pasa, pero en este caso el que hace de "GND" son los ULN, que a la vez son negadores por si acaso.

espero que no me haya enredado, de ser así me avisas para tratar de aclarar nuestras dudas

un saludo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 30 de Enero de 2009, 18:49:17
Bueno para empezar con lo del hardware se me estaba olvidando colocar el esquema electrico del minipublik que tengo, esta grandote, pero ahora creo que el tamaño es lo de menos con el tamaño de los monitores que seguramente tienen :mrgreen:

No lo había puesto antes porque no sabía hacer buses en eagle, pero después del videotuto del buen Pali, me di cuenta que estaba siendo una pipoca :D

acá está en chiquito, click para agrandar:

(http://img84.imageshack.us/img84/5055/esquemabv3.jpg) (http://img84.imageshack.us/img84/5055/esquemabv3.jpg)

seguimos trabajando...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jim_17 en 30 de Enero de 2009, 20:30:49
Pues muchas gracias Cryn, ahora lo he entendido todo perfectamente :). Intenté resolver mi duda a traves de San google pero como no obtuve la respuesta preferí preguntar directamente :D.

Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 30 de Enero de 2009, 21:20:41
bien, no pasa nada, para eso estamos :mrgreen:

además queda mejor acá explicado por si alguna otra persona también está interesado

no explique muchas cosas, porque a la vez algunas cosas las saque de la web o con preguntas aca mismo, pero cualquier cosa que falte solo avisen, ya igual después estaré colocando mejores detalles

un saludo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 04 de Febrero de 2009, 15:08:07
de momento les presento el 1er código que hice para el 16f88, para que talvez pueda servir a alguien, porque de momento, aunque me duele un poco decirlo, tengo que dejarlo pendiente esto del publik, porque se me presento un proyecto urgente para un amigo, aunque en ratos que pueda le dedicaré al publik :mrgreen:

acá les dejo el 1er código:

Código: C
  1. #include <16f88.h>
  2. #fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT,MCLR
  3. #use delay(clock=20000000)
  4. #use fast_io(a)
  5. #use fast_io(b)
  6. #include <fonts.h>
  7. #include <string.h>
  8.  
  9. #define clock PIN_A1
  10. #define strobe PIN_A2
  11. #define dato PIN_A0
  12. #define size_matriz_col 8  //cantidad de columnas por matriz
  13. #define COLUMNAS 40       //Defino cantidad de columnas a usar
  14. #define matriz_num COLUMNAS/size_matriz_col  //numero de matrices usado
  15.  
  16. #byte portb=6
  17.  
  18. int matriz[matriz_num+1][size_matriz_col]={"\0"};  //Almacena los datos a mostrar en el cartel
  19. int Fila;           //Fila actual a refrescar
  20. int VSync;          //Indica si es momento correcto de modificar lo que se esta mostrando...
  21. int Inhibit;        //Impide que se produzcan cambios en el cartel.
  22. const int mensaje[1][32]={"Feliz Navidad y Feliz 2009!!..."};
  23. const int num_msj=1;
  24. const int msj_length[num_msj]={31};
  25. int carries[6],msj,letra,desplazos;
  26.  
  27. void ShowFila(void);
  28. void cargar(int datob);
  29. void desplazar_izq(void);
  30. void load_letra(int caracter);
  31.  
  32. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
  33. #int_TIMER0
  34. void  TIMER0_isr(void){
  35.  
  36.    ShowFila();                  //Mostremos la fila actual...
  37.    Fila++;
  38.    if(Fila==8){
  39.       Fila=0;
  40.       VSync=1;
  41.       if(Inhibit!=0)
  42.          Inhibit--;
  43.       else
  44.          desplazar_izq();
  45.   }
  46.   else
  47.      VSync=0;
  48. }
  49.  
  50. void main(void){
  51.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  52.    enable_interrupts(INT_TIMER0);
  53.    clear_interrupt(INT_TIMER0);
  54.    enable_interrupts(GLOBAL);
  55.    setup_adc(adc_off);
  56.    setup_adc_ports(no_analogs);
  57.    set_tris_a(0);
  58.    set_tris_b(0);
  59.    output_b(0xFF);      //Apago cartel
  60.    output_low(CLOCK);   //Aseguro inicialmente clock en bajo
  61.    output_low(STROBE);
  62.    Fila=0;              //Comienzo por la 1er fila
  63.    Inhibit=5;
  64.    VSync=1;             //Indico que comienzo con sync.
  65.    desplazos=0;
  66.    msj=0;
  67.    while(true){}
  68. }
  69.  
  70. void cargar(int datob){
  71.    int contador;
  72.  
  73.    output_low(clock);
  74.    delay_cycles(2);
  75.    output_low(strobe);
  76.    for(contador=0;contador<8;contador++){
  77.       output_bit(dato,(datob & 0x1));
  78.       datob>>=1;
  79.       output_high(clock);
  80.       delay_cycles(1);
  81.       output_low(clock);
  82.    }
  83.    output_high(strobe);
  84.    delay_cycles(1);
  85.    output_low(strobe);
  86. }
  87.  
  88. void ShowFila(void){
  89.    int i;
  90.  
  91.    output_b(0xFF);
  92.    for(i=0;i<5;i++){
  93.       cargar(matriz[i][Fila]);
  94.    }
  95.    bit_clear(portb,fila);
  96. }
  97.  
  98. void desplazar_izq(void){
  99.    int i,j,a;
  100.  
  101.    if(desplazos==8 || desplazos==0){
  102.       load_letra(mensaje[msj][letra]);
  103.       desplazos=0;
  104.    }
  105.    for(i=0;i<8;i++){
  106.       for(j=0;j<6;j++){
  107.          a=matriz[j][i];
  108.          carries[j]=shift_left(&a,1,0);
  109.          matriz[j][i]=a;
  110.       }
  111.       for(j=0;j<6;j++){
  112.          if(j!=5)
  113.             matriz[j][i]|=carries[j+1];
  114.          else
  115.             matriz[j][i]|=carries[0];
  116.       }
  117.    }
  118.    Inhibit=5;
  119.    desplazos++;
  120.    if(desplazos==8){
  121.       letra++;
  122.       if(letra>msj_length[msj])
  123.          letra=0;
  124.    }
  125. }
  126.  
  127. void load_letra(int caracter){
  128.    int i,j;
  129.  
  130.    if(isalnum(caracter)){
  131.       if(isalpha(caracter)){
  132.          if(isupper(caracter)){
  133.             switch(caracter){
  134.                case 'A': i=0; break;
  135.                case 'B': i=1; break;
  136.                case 'C': i=2; break;
  137.                case 'D': i=3; break;
  138.                case 'E': i=4; break;
  139.                case 'F': i=5; break;
  140.                case 'G': i=6; break;
  141.                case 'H': i=7; break;
  142.                case 'I': i=8; break;
  143.                case 'J': i=9; break;
  144.                case 'K': i=10; break;
  145.                case 'L': i=11; break;
  146.                case 'M': i=12; break;
  147.                case 'N': i=13; break;
  148.                case 'O': i=14; break;
  149.                case 'P': i=15; break;
  150.                case 'Q': i=16; break;
  151.                case 'R': i=17; break;
  152.                case 'S': i=18; break;
  153.                case 'T': i=19; break;
  154.                case 'U': i=20; break;
  155.                case 'V': i=21; break;
  156.                case 'W': i=22; break;
  157.                case 'X': i=23; break;
  158.                case 'Y': i=24; break;
  159.                case 'Z': i=25; break;
  160.             }
  161.             for(j=0;j<8;j++){
  162.                matriz[5][j]=letrasM[i][j];
  163.             }
  164.          }
  165.          else{
  166.             switch(caracter){
  167.                case 'a': i=0; break;
  168.                case 'b': i=1; break;
  169.                case 'c': i=2; break;
  170.                case 'd': i=3; break;
  171.                case 'e': i=4; break;
  172.                case 'f': i=5; break;
  173.                case 'g': i=6; break;
  174.                case 'h': i=7; break;
  175.                case 'i': i=8; break;
  176.                case 'j': i=9; break;
  177.                case 'k': i=10; break;
  178.                case 'l': i=11; break;
  179.                case 'm': i=12; break;
  180.                case 'n': i=13; break;
  181.                case 'o': i=14; break;
  182.                case 'p': i=15; break;
  183.                case 'q': i=16; break;
  184.                case 'r': i=17; break;
  185.                case 's': i=18; break;
  186.                case 't': i=19; break;
  187.                case 'u': i=20; break;
  188.                case 'v': i=21; break;
  189.                case 'w': i=22; break;
  190.                case 'x': i=23; break;
  191.                case 'y': i=24; break;
  192.                case 'z': i=25; break;
  193.             }
  194.             for(j=0;j<8;j++){
  195.                matriz[5][j]=letras_m[i][j];
  196.             }
  197.          }
  198.       }
  199.       else{
  200.          for(j=0;j<8;j++){
  201.             matriz[5][j]=numeros[caracter-'0'][j];
  202.          }
  203.       }
  204.    }
  205.    else{
  206.       switch(caracter){
  207.          case ' ': i=0; break;
  208.          case '!': i=1; break;
  209.          case '"': i=2; break;
  210.          case '#': i=3; break;
  211.          case '$': i=4; break;
  212.          case '%': i=5; break;
  213.          case '&': i=6; break;
  214.          case '´': i=7; break; //este es el acento
  215.          case '(': i=8; break;
  216.          case ')': i=9; break;
  217.          case '*': i=10; break;
  218.          case '+': i=11; break;
  219.          case ',': i=12; break;
  220.          case '-': i=13; break;
  221.          case '.': i=14; break;
  222.          case '/': i=15; break;
  223.          case ':': i=16; break;
  224.          case ';': i=17; break;
  225.          case '>': i=18; break;
  226.          case '=': i=19; break;
  227.          case '<': i=20; break;
  228.          case '?': i=21; break;
  229.          case '[': i=22; break;
  230.          case ']': i=23; break;
  231.          case '^': i=24; break;
  232.          case '_': i=25; break;
  233.          case '{': i=26; break;
  234.          case '|': i=27; break;
  235.          case '}': i=28; break;
  236.          case '@': i=29; break;
  237.          case 'ñ': i=30; break;  // esta es la enie
  238.          case '\f': i=31; break;
  239.       }
  240.       for(j=0;j<8;j++){
  241.          matriz[5][j]=chars[i][j];
  242.       }
  243.    }
  244. }

y el fonts.h:
Código: C
  1. const int letrasM[26][8]={{48,120,204,204,252,204,204,204},    //A
  2.                           {248,204,204,248,248,204,204,248},   //B
  3.                           {252,192,192,192,192,192,192,252},   //C
  4.                           {240,200,204,204,204,204,200,240},   //D
  5.                           {252,192,192,240,240,192,192,252},   //E
  6.                           {252,192,192,240,240,192,192,192},   //F
  7.                           {60,64,192,192,216,204,204,248},     //G
  8.                           {204,204,204,204,252,204,204,204},   //H
  9.                           {252,48,48,48,48,48,48,252},         //I
  10.                           {252,48,48,48,48,48,176,240},        //J
  11.                           {196,200,208,224,208,204,204,204},   //K
  12.                           {192,192,192,192,192,192,192,252},   //L
  13.                           {238,214,214,198,198,198,198,198},   //M
  14.                           {196,228,244,212,212,204,204,196},   //N
  15.                           {48,204,204,204,204,204,204,48},     //O
  16.                           {248,204,204,204,248,192,192,192},   //P
  17.                           {56,196,196,196,196,212,200,52},     //Q
  18.                           {248,204,204,204,248,208,200,196},   //R
  19.                           {120,204,192,192,120,12,12,248},     //S
  20.                           {252,48,48,48,48,48,48,48},          //T
  21.                           {204,204,204,204,204,204,204,120},   //U
  22.                           {204,204,204,204,204,204,72,48},     //V
  23.                           {198,198,198,198,198,214,214,238},   //W
  24.                           {132,132,72,48,48,72,132,132},       //X
  25.                           {204,204,204,120,48,48,48,48},       //Y
  26.                           {252,252,8,16,32,64,252,252}};       //Z
  27.  
  28. const int letras_m[26][8]={{0,0,112,136,8,120,136,116},        //a
  29.                            {0,128,128,128,240,136,136,240},    //b
  30.                            {0,0,0,120,128,128,128,120},        //c
  31.                            {0,8,8,8,120,136,136,120},          //d
  32.                            {0,0,0,120,136,240,128,120},        //e
  33.                            {0,96,144,128,128,224,128,128},     //f
  34.                            {0,0,112,136,136,112,8,112},        //g
  35.                            {0,128,128,128,240,136,136,136},    //h
  36.                            {0,0,32,0,32,32,32,32},             //i
  37.                            {0,0,16,0,16,16,144,96},            //j
  38.                            {0,128,144,160,192,160,144,144},    //k
  39.                            {0,32,32,32,32,32,32,32},           //l
  40.                            {0,0,0,136,212,164,164,164},        //m
  41.                            {0,0,0,176,200,136,136,136},        //n
  42.                            {0,0,0,112,136,136,136,112},        //o
  43.                            {0,0,240,136,136,240,128,128},      //p
  44.                            {0,0,120,136,136,120,8,28},         //q
  45.                            {0,0,0,176,192,128,128,128},        //r
  46.                            {0,0,112,136,128,112,8,240},        //s
  47.                            {0,32,32,112,32,32,32,24},          //t
  48.                            {0,0,0,136,136,136,152,104},        //u
  49.                            {0,0,0,136,136,136,80,32},          //v
  50.                            {0,0,0,136,136,136,168,80},         //w
  51.                            {0,0,0,136,80,32,80,136},           //x
  52.                            {0,0,0,136,136,112,16,96},          //y
  53.                            {0,0,0,248,16,32,64,248}};          //z
  54.                            
  55. const int numeros[10][8]={{0,120,132,140,148,164,196,120},     //0
  56.                           {0,16,48,80,16,16,16,124},           //1
  57.                           {0,112,136,8,16,32,64,248},          //2
  58.                           {0,112,136,8,48,8,136,112},          //3
  59.                           {0,8,24,40,72,252,8,8},              //4
  60.                           {0,124,128,128,120,4,4,248},         //5
  61.                           {0,120,128,128,248,132,132,120},     //6
  62.                           {0,252,132,8,16,32,64,64},           //7
  63.                           {0,120,132,132,120,132,132,120},     //8
  64.                           {0,120,132,132,124,4,4,120}};        //9
  65.  
  66. const int chars[31][8]={{0,0,0,0,0,0,0,0},                 //space
  67.                         {0,32,32,32,32,32,0,32},           //!
  68.                         {0,40,40,40,0,0,0,0},              //"
  69.                         {0,36,36,254,40,252,80,80},        //#
  70.                         {0,120,148,144,120,20,148,120},    //$
  71.                         {0,196,204,24,48,96,204,140},      //%
  72.                         {0,96,144,144,96,148,136,116},     //&
  73.                         {0,16,16,16,0,0,0,0},              //'
  74.                         {0,24,32,64,64,64,32,24},          //(
  75.                         {0,96,16,8,8,8,16,96},             //)
  76.                         {0,0,146,84,56,56,84,146},         //*
  77.                         {0,16,16,16,254,16,16,16},         //+
  78.                         {0,0,0,0,0,96,32,64},              //,
  79.                         {0,0,0,0,252,0,0,0},               //-
  80.                         {0,0,0,0,0,0,96,96},               //.
  81.                         {0,4,12,24,48,96,192,128},         //  /
  82.                         {0,0,96,96,0,0,96,96},             //:
  83.                         {0,0,96,96,0,96,32,64},            //;
  84.                         {0,0,192,48,12,48,192,0},          //>
  85.                         {0,0,0,252,0,252,0,0},             //=
  86.                         {0,0,12,48,192,48,12,0},           //<
  87.                         {0,120,132,4,24,16,0,16},          //?
  88.                         {0,56,32,32,32,32,32,56},          //[
  89.                         {0,56,8,8,8,8,8,56},               //]
  90.                         {16,40,68,0,0,0,0,0},              //^
  91.                         {0,0,0,0,0,0,0,254},               //_
  92.                         {0,24,32,32,64,32,32,24},          //{
  93.                         {0,32,32,32,32,32,32,32},          //|
  94.                         {0,96,16,16,8,16,16,96},           //}
  95.                         {56,68,146,170,170,148,64,60},     //@
  96.                         {0,112,0,176,200,136,136,136}};    //ñ

un saludo, espero sirva por ahora
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jonathanPIC888 en 04 de Febrero de 2009, 17:04:19
Cryn, has solucionado uno de los proyectos que tenía para el año. Muchas gracias por el aporte !!! :-/ :-/ :-/

Lo voy a montar en el proteus para ver el funcionamiento , cualquier duda te pregunto.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 04 de Febrero de 2009, 17:14:08
Bien, que bueno que pueda servirte, por ahora es solo un avance, un inicio, no esta terminado, porque el oficial es con el 18f2455 :mrgreen:, pero de ahí se puede avanzar tranquilamente

cuando termine el otro proyecto continuo, pero decirles que ya hice algunas pruebas con el hard y va todo bien logré solucionar todas las pistas :-/ :-/ ahora el hard va al 100% :-/ :-/

un saludo, espero postear pronto con los primeros pasos con el hard
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jonathanPIC888 en 04 de Febrero de 2009, 18:55:03
OK,cryn muchas gracias por compartir tu proyecto  :-) Espero ansioso el hard.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 04 de Febrero de 2009, 19:16:37
el hard? si el hard ya esta, jeje, hasta fotos puse, lo único que faltaría es un PDF, que en realidad lo tengo, pero me di cuenta que es un poquito más grande para los integrados de más de 8 pines tuve que hacer huecos un poco descentrados y más bien tendientes hacia un lado, para que entre el zócalo, me falló el ojo a pesar de que parecía que iba bien, la escala me falló. Más bien alguien me puede ayudar para obtener PDF en escala real del eagle? siempre me salen mal, que debo hacer? uso el PDF999
Título: Re: De matriz de leds, a letrero electronico
Publicado por: aitopes en 04 de Febrero de 2009, 19:37:16
Hola Cryn!
¿No sera un problema al imprimir? A veces, si el tamaño del PDF es superior al del papel que tenes "declarado" en la impresora, el muy maldito te lo reduce al 95% o 97% y ni te das cuenta...

Tengo unas placas doble faz que me hizo un amigo de españa por serigrafia, supercomplejas y que....no pude usar por ese tema. Un 2% de error, suficiente para que un PIC de 40 pines o un panel de LEDs no entre ni con calzador. :)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 04 de Febrero de 2009, 19:58:07
mmm que recuerde siempre reviso las configuraciones del papel y en este no se me olvidó, está todo en carta tanto en el eagle como en el foxit (que es mi lector de pdf's)

estas son las configuraciones que les deje, y siempre usé SCALE en 1.07 y con eso corregía en tamaño, siempre supuse que era una manera muy mala pero no tenía otra forma, acá les muestro una captura de lo que tengo

(http://img205.imageshack.us/img205/4475/eaglery0.jpg) (http://img205.imageshack.us/img205/4475/eaglery0.jpg)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jonathanPIC888 en 05 de Febrero de 2009, 01:26:52
Ok cryn tenés razón , no me había fijado bien ahora lo veo en el proteus.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 08 de Febrero de 2009, 15:42:19
Hola.

Felicitaciones Cryn (aunque sean tardias jajaja no habia leido el hilo!!!). Veo que te rindio bastante amigo.

Yo he estado tambien jugueteando con varias modificaciones del Publik (y vaya que el primero que hice si es minipublik eh??), es muy bonito el juguetito. En estos dias te paso algunas modificaciones que hice para las fuentes (queda mas chulo.)

Saludos

 :mrgreen: :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 08 de Febrero de 2009, 19:11:28
YO tengo más que agradecerte MLO__ porque fue en base a tu código como es que pude leer las letras y ordenarlas mejor en los array y en un mensaje

Si que es muy buen cacharro un publik :-/

espero entonces a ver que modificaciones le haces :mrgreen:

un saludo, y gracias nuevamente a ti
Título: Re: De matriz de leds, a letrero electronico
Publicado por: nico en 12 de Febrero de 2009, 15:45:58
Antes que nada felicitaciones Cryn, pues quedo muy bueno tu trabajo :!: :!: :!:
Por otro lado, siendo que este publik esta realizado con matrizes de 8x8, les dejo un ejemplito que tal vez podrias aplicar en el tuyo(si tienes ganas de jugar claro :D). El mismo lo hice cuando empezaba a usar estas divinuras de las matrizes. Se trata de un juego de pong, con dos matrizes de 8x8 que permite un juego de 1 o 2 jugadores, con sonido por pwm e indicacion de juego terminado(GAME OVER).... Estaba simulado con el 16f628 y fue para entretenerme nada mas.....Claro que aqui, lo podrias implementar con puntuacion y nivel.... Solo una idea...El codigo esta en asm y bastante desprolijo, ya que fue hace mucho tiempo y eran mis primero proyectos, de todos modos, si alguien lo quiere, lo colgamos...

Cryn nuevamente felicitaciones...Si te molesta este ejemplito, pues no tienes mas que avisarme y lo retiro de aqui...

Slds.
nico.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 12 de Febrero de 2009, 16:47:37

Hola amigos solo creo que el "PROYECTO" de mi pana Cryn y creo podrás estar de acuerdo deberia ir en "Proyectos".

Ahora que he tratato de entenderle mejor a este rollo de matriz de leds siempre busco tu trabajo en proyectos xD hasta que me acuerdo que no esta ahí.


bueno solo ese comentario.

P.D. COmpre unas matriz de leds de 1.8cm minis minis. de 5x7 y otra de 3cm

LA mas peque es la gris la negra nada que ver , es aun más pequeña pero es la foto que encontre XD

(http://farm1.static.flickr.com/127/382579388_c7711ce9af.jpg)

En cuanto consiga tiempo jugar ocn ellas un rato y hacerte segunda Pana.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gera en 12 de Febrero de 2009, 18:37:41
Hola AKENAFAB!! Me encanto la mini matriz, cuanto te salio? No creo q aca en mendoza (arg) se consiga. Las grandes de 8x8 salen $50 O.o un robo. Asiq voy a ver si me hago una con los leds mas pequeños q pueda conseguir jeje.
Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 12 de Febrero de 2009, 19:13:10
EL precio fue como unos 3 dolares.

Un verdadero robo , pero no las conseguia en otros lado sy pues ya andaba en el lugar donde compro el material y queda lejos de casa , pues lo compre, bueno deje que me robaran xD.


Esas matrices son de la marca sunled.

Estoy seguro que se han de conseguir mucho más baratas.
L aotr mas grande costo como 3.2 dolares xD un chsite el precio entre una y la otra , pero que se hace si una la necesita :P
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 12 de Febrero de 2009, 21:15:25
Antes que nada felicitaciones Cryn, pues quedo muy bueno tu trabajo :!: :!: :!:
Por otro lado, siendo que este publik esta realizado con matrizes de 8x8, les dejo un ejemplito que tal vez podrias aplicar en el tuyo(si tienes ganas de jugar claro :D). El mismo lo hice cuando empezaba a usar estas divinuras de las matrizes. Se trata de un juego de pong, con dos matrizes de 8x8 que permite un juego de 1 o 2 jugadores, con sonido por pwm e indicacion de juego terminado(GAME OVER).... Estaba simulado con el 16f628 y fue para entretenerme nada mas.....Claro que aqui, lo podrias implementar con puntuacion y nivel.... Solo una idea...El codigo esta en asm y bastante desprolijo, ya que fue hace mucho tiempo y eran mis primero proyectos, de todos modos, si alguien lo quiere, lo colgamos...

Cryn nuevamente felicitaciones...Si te molesta este ejemplito, pues no tienes mas que avisarme y lo retiro de aqui...

Slds.
nico.
Muchas gracias por las felicitaciones y el ánimo nico.
No hombre para nada me molesta que lo cuelgues por acá en este hilo, más bien todo un gusto para mi y me siento más elogiado :mrgreen:. Pero creo que también podrías crear un hilo nuevo en Proyectos, para la gente que alguna vez busca, de directamente en el blanco, además podrías comentar más cosas ahí y seguramente que te preguntaría mucha gente, y yo me incluyo, creo que así mantendríamos el orden en ambos temas y será más agradable para todos.


Hola amigos solo creo que el "PROYECTO" de mi pana Cryn y creo podrás estar de acuerdo deberia ir en "Proyectos".

Ahora que he tratato de entenderle mejor a este rollo de matriz de leds siempre busco tu trabajo en proyectos xD hasta que me acuerdo que no esta ahí.
OK AKENA, está hecho, lo muevo a PROYECTOS, a tu pedido :mrgreen:
Esto comenzó con una idea y ganas que tenía por ver una matriz de leds funcionando, siempre me llamó la atención, y pues como se puede ver en los primeros mensajes no tenía mucha idea, pro eso lo abrí e el subforo de lenguaje C, pero ahora que tiene buena forma, tienes mucha razón. Es mi primer hilo de verdad en Proyectos :-/

En precios de matrices acá solo vi de un tamaño 8x8 y de unos 8 a 10cms, cuesta 50Bs que es aproximadamente 7USD. Estas bicolores que usó me las compró de EBAY un buen amigo del foro, son de aproximadamente 3.5cms de lado.
Quisiera esas minúsculas que tienes AKENA, se verían muy bien en algunas aplicaciones :shock:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 12 de Febrero de 2009, 23:46:19
Si , la verdad que asi de quepeñas se ven muy llamativas.

No se si habrá bicolor , supongo que si.

Les cuento que ya habia comprado antes una xD pero tenia chip y era alfanumerica , una rabia que me dio porque la pedo 8x8 catodo comun xD y pues jum no me sirvio.

Voy a revisar bien en ebay si encunetro esas o con el fabricante.

La idea que tengo con esto es el tengucito  xD.


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: nico en 13 de Febrero de 2009, 01:28:01
Gracias Cryn por responder, creo que tendria que acomodar un poco el codigo, ya que esta muy desprolijo, fue algo hecho sin una utilidad practica mas que la de aprender, y ahora no dispongo de tiempo para hacerlo...era simplemente una idea, para quien quiera meterle al codigo, se puede encontrar con cositas muy lindas, que ayudan a pensar(ya que hay que dejar de verlo como una tabla de caracteres y trabajar con la memoria tipo extendida) y divierten,,,, luego con mas tiempo el tetris :D :D :D

Hola AKENAFAB!! Me encanto la mini matriz, cuanto te salio? No creo q aca en mendoza (arg) se consiga. Las grandes de 8x8 salen $50 O.o un robo. Asiq voy a ver si me hago una con los leds mas pequeños q pueda conseguir jeje.
Saludos!

Gera, mira, yo cuando compre, habia conseguido muy buen precio por cantidad, recuerdo que eran 2.80 dolares, habia comprado 200, de los cuales todavia algunos debo tener, habria que ver a que precio estan hoy, pero si quieres puedo fijarme, por el precio que tu compras uno de 8x8, puedes comprar varios de 7x5(tienen 53mmX38mm)...
Si te interesa enviame un privado y nos ponemos de acuerdo.
Slds.
nico
Título: Re: De matriz de leds, a letrero electronico
Publicado por: FREDD en 15 de Febrero de 2009, 16:41:46
Hola amigos y un saludo especial  a cryn
El artilugio esta saliendo muy bonito y ojala que funcione tal como lo avías previsto
Yo también estaba tras el juguetillo desde ase tiempo podría decir cuando estaba en el cole, hice un public 8*16 pero era estático y no podía moverlo las letras, hice con un CI74154 o 4067 y un pic que multiplexsaba.

La idea de hacer esto fue cuando vi en la Terminal de buses cuando colocaron uno de estos cartelitos y era muy llamativo y novedoso  me quede viendo y pensando como carajos es que esto funcionaba y que se podían controlar tantos leds en uno solo y supe que era por la técnica del multiplexado y luego vino otro problema y como podían desplegar información con tanta facilidad y que se moviera los textos de adelante asia atrás y otros efectos y me quede en eso. Y Luego de mucho tiempo lo vi al tipo de la Terminal cambiando el mensaje desde una computadora vieja que funcionaba con SDOS y asi supe que tenían una antigüedad que funcionaba muy bien. Y dije si hicieron esto ase tiempo como no se puede hacer hoy que la tecnología esta tan avanzada en hardware y software.

Y estaba investigando sobre el tema y encontré en la web un dibujo que me llamo la atención con un pic adtmel y ci74164 y nunca mas aparte los ojos del tema.
Asta que encontré una pagina francesa me parece, que te daba todo los datos para realizar tu cartelillo que incluía el esquema del circuito y la placa pcb y un software de comunicación entre la pc y el circuito. El software es maravilloso puedes crear un montón de mensajes con un montón de fuentes y efectos y dije problema resuelto lo pruebo cuando tenga algunos centavo o bs en le bolsillo y lo deje guardado y de algún tiempo me toco viajar con mi tío. Y le dije a mi tío oye no queres que te lo haga un letrero como aquello patu negocio (estábamos en la Terminal) y dijo bueno y le dije solo tienes que darme algunos pesos y mela dio y tenia un plazo de un mes para entregarle el cartelillo y asta ahora no puedo entregar y cada ves que me encuentro me para jodiendo asta cuando con el cartelillo y cree que lo estoy estafando o algo por hay. El problema es que no me di cuenta que en ese proyecto que conseguí no incluia  el  .HEX del pic o el programa y me quede colgado hay. Lo peor es que ya me lo gaste todo el adelanto que me dio.
La verdad es que no se como empezar a realizar el programa apenas programo en ccs y nada mas.
La verdad cryn lo boya estudiar y entenderlo poco a poco tu proyecto para taparle la bocota  a mi tío piensa que no puedo hacerlo. Y encuentro la gran símilaridad entre el proyecto tuyo y el que quise hacer. Por eso Quero que le des una ojeada al proyecto yo pienso que ya lo conocías la pagina y que puedas a utilizar algo o por lómenos el software de creación de los mensajes y Lugo me digas que te pareció.
Para lo cual lo e traducido la pagina del francés me párese al español la parte de interés
Y lo e impreso a pdf para ojearlo rápido bueno lo boya subir a 4shared en cuanto llegue a mi casa en un par de dias todo el material para que lo veas y adema te boya incluyo el software los circuitos y un programilla extra que encontré por hay que me era muy útil para crear diferentes textos para publis estáticos y el circuito atmel que te conté
Título: Re: De matriz de leds, a letrero electronico
Publicado por: uhsspa en 15 de Febrero de 2009, 19:19:54
wow que buen proyecto, espero que termines de arreglar el problema suerte y saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: droky en 15 de Febrero de 2009, 20:15:08
Por si os interesa, yo compré 10 módulos bicolor de 8x8 tamaño 32x32mm con leds de 3mm por unos 15US$ con porte gratuitos en:
Led Matrix bicolor 8x8 (http://cgi.ebay.com/10pcs-8x8-Dot-Matrix-3mm-dia-Bicolor-LED-Display_W0QQitemZ220358695326QQcmdZViewItemQQptZBI_Electronic_Components?hash=item220358695326&_trksid=p3286.c0.m14&_trkparms=72%3A1205|66%3A2|65%3A12|39%3A1|240%3A1318|301%3A1|293%3A1|294%3A50)

Tal que así:
(http://i17.ebayimg.com/06/i/001/21/80/a883_1.JPG)
Con esta configuración interna:
(http://www.sure-electronics.net/DC,IC%20chips/LE-MM103-4.jpg)
Es lo más económico que encontré y van muy bien.
Salu2
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 16 de Febrero de 2009, 18:12:03
Hola FREDD, muy interesante tu anécdota, y bueno es para que siempre seamos más cuidadosos con las cosas que vemos, no? :mrgreen: Será muy bueno ver el material qeu tienes, puede servir mucho para mejorar el hilo, lo esperaré.


wow que buen proyecto, espero que termines de arreglar el problema suerte y saludos
Hola ussspa, nose si me olvidé decirlo, pero si, ya corregí todos los errores en la PCB, me costo, pero ya esta, la PCB esta al 100% funcionando, algunos erran falsos contactos en las patas de las matrices, pero ya está :-/. Lo que pasó es que lo dejo pendiente unos días porque estoy correteando en otro proyecto urgente para un amigo.


Esas mismas matrices son las que yo tengo droky :D

un saludo a todos, gracias por postear en el hilo

Título: Re: De matriz de leds, a letrero electronico
Publicado por: FREDD en 17 de Febrero de 2009, 16:33:56
Como lo prometido es deuda acá esta todo el material, lo prueban y me dicen que les pareció y si se lo puede realizar alguna adaptacion al caso

esta es la direccion donde esta alojado

http://www.4shared.com/file/87786192/71a833b9/faypert.html?dirPwdVerified=19d53165
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 19 de Febrero de 2009, 18:09:18
Que lindo el sotfware, ojala un día pueda llegar a la mitad de eso :shock:

no hice ni una ventanita en VB, que mal, largo el camino que me espera :D

gracias por la info FREDD, un saludo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: droky en 23 de Febrero de 2009, 00:28:32
Si quereis ver un panel led con control de brillo de cada led, tenéis el peggy con un Arduino controlándo entre USB y el bus I2C que lo maneja y un Atmel en la placa base controladora del panel con varios STP16DP05 controlando los leds.
http://www.evilmadscientist.com/article.php/peggy2twi
Y la página del autor de la modificación del Peggy:
http://www.planetclegg.com/projects/Twi2Peggy.html

Salu2

Título: Re: De matriz de leds, a letrero electronico
Publicado por: smarkol en 11 de Junio de 2009, 13:02:17
hola a todos los amigos del foro, es un gran trabajo este letrero, en lo particular hace tiempo que estaba buscando informacion
sobre este tema, y sin duda el codigo aportado por cryn es de gran ayuda.

 en una primera instancia quise realizar una modificacion a este codigo, especificamente al procedimiento
load_letra(int caracter), lo que requeria tambien una modificacion del archivo fonts

Código: [Seleccionar]

void load_letra(int caracter){
 int j,resta;
     
      for(j=0;j<8;j++){
          matriz[5][j]=Fonts[caracter-32][j];
      }

}


el archivo fonts tendria que declararse asi      int rom Fonts[96][8] ,esto en realidad es solamemte una adaptacion
adjunte un archivo en proteus con la simulacion, para que lo puedan ver.

Pero despues me di cuenta que lo que realmente queria era realizar una lectura desde la eeprom interna lo hice de esta forma:

Código: [Seleccionar]

/************** Interrupcion RS232 para recepcion de Datos ********************/
#int_RDA
void  RDA_isr(void) {
   char ch;   


      ch = getc();   // Almaceno Los Datos en ch
      fputc(ch);
     
      if( cnti >= 63)   // cunado coloco un indice mayor a 63 hay errores
          cnti = 0;
     

         if( 0x20 <= ch && ch <= 0x7F ){
             write_eeprom(cnti,ch);
             ++cnti;
         }
            PosEnd = cnti;       // indice de pocicion final de la eeprom
   
}
////////////////////////////////////////////////////////////////////////////////



y el procedimiento para llamarlo

Código: [Seleccionar]
void DesplazarChar(){
int i,j,tmp;
   
       for(j=0;j<=6 ;j++){
           Matriz[9][j]= ~bitmap[ read_eeprom(cnt)-0x20][j];
       }
       
/* aqui va el codigo de ordenamiento
que no lo he incluido porque todavia estoy trabajando en esto*/

}


En definitiva espero que este tema no este totalmete cerrado y  proponer hacer crecer este codigo en lo que respecta
a la lectura de la eeprom e incorporacion de un reloj.

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 11 de Junio de 2009, 13:15:52
hola smarkol, que bueno que te haya servido el código, y pues que las modificaciones te vengan muy bien.

claro que el tema no está cerrado, simplemente que lo deje pendiente porque estaba realizando algunos proyectos pendientes que tengo.

y pues acá estamos para opinar y sugerir en cuanto a la eeprom y el reloj (que de hecho si lo consideré solamente que todavía no está desarrollado en soft)

Y espero pronto poner otra vez las manos de lleno en este mi proyecto que todavía no acabo, que soy lento, no??

un saludo y espero por tus aportes y/o comentarios sobre lo que mencionaste.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: J1M en 11 de Junio de 2009, 14:32:19
la leche droky!! no había visto el link, el peggy ese es genial. Un 10 para el autor de dicho engendro! :)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: smarkol en 11 de Junio de 2009, 15:42:37
saludos
       cryn y gracias por tus aportes, debo decir que a pesar de estar inscrito en este foro desde hace un largo rato, no me habia atrevido a opinar, claro hasta ahora.

con respesto a las sugerencias que puse, en realidad no se si estan del todo bien ya que recien estoy migrando al CCS pues ante utilizaba el MikroC, especificamente la declaracion del archivo fonts  int rom fonts tengo algunas dudas con esto, en mikroC lo realizaba asi const int fonts [96][8]. en realidad al directiva rom todavia no la tengo muy clara. :shock:


saludos a todos


Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 12 de Junio de 2009, 13:08:32
Hola smarkol,

la directiva rom trabaja con la flash y la eeprom, dependiendo de la dirección donde ubiques los datos, y son pregrabados en el micro en el momento de la grabación del firmware en el micro

si haces int const en CCS es un dato que se guarda en la flash, y no hace falta saber la dirección pues con nombrarla, o buscarlo en el arreglo, si lo que definiste es un arreglo, accederás a los contenidos

con el #rom casi estas obligado a saber las direcciones.

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: bmvalarezo en 26 de Junio de 2009, 23:11:08
felicidades estoy tambien en la realizacion de un cartel de 8 x 32 ya puedo presentar letras simbolos elaborados por mapa de bits pero quisiera saber como es que hacen para desplazar quisiera la ides ya que yo programos MicroCode Studio bueno gracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 06 de Julio de 2009, 13:52:52
Hola.

La idea es ir desplazando el buffer de visualizacion:

Código: [Seleccionar]
for(i=0;i<NUM_FILAS;i++)
 aux[i]=aux[i]<<1;

La idea de definir constantes no tan grandes es para que el codigo se pueda embeber en micros mas pequeños y aprovechar el resto de memoria para aumentar el tamaño del bufer de visualizacion.


La simulacion se va al 100% ... pero en el hard va normalmente.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: luise en 27 de Julio de 2009, 22:13:02
Buenas noche, quisiera que me ayudaran en un proyecto que quiero realizar con pic y matriz de led es sobre una pizarra electronica de cambio, esas que se utilizan en los juegos de futbol para motrar el numero de cambio y emtrada de los jugadores me gustaria que me ayudaran en la parte de programacion me gustaria trabajar en basic micro code stude

la idea es visualizar el cambio de entrada en verde (led verde) y salida en (rojo led rojo) espero su respuesta.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 27 de Julio de 2009, 22:17:07
Creo que una matriz de LEDs solo para mostrar numero es mucho, ademas, seria muy costosa, ya que debe tener un tamaño grande. Seria mejor hacer un "7 segmentos" con LEDs.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 11 de Agosto de 2009, 14:25:50
hola quetal Cryin...soy nuevo enel foro....queria saber si me puedes ayudar...vi tu proyecto del letrero lumninoso..yo tambien estoy haciendo el mismo proyecto ..solo que tengo un problema... logro sacar y desplazar letras en una sola matriza se 8x8..mi problema es que no puedo (bueno no se jeje)desplazar para otra matriz de 8x8...quisiera que me ayudes y me digas como hisite el tuyo...te envio mi proyect para que veas lo que tengo...te lo agradeseriabastante por la ayuda... gracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 11 de Agosto de 2009, 15:07:15
Revisa el este mensaje (http://www.todopic.com.ar/foros/index.php?topic=19091.msg201217#msg201217) donde Cryn da una idea de los que es el código :wink:

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 11 de Agosto de 2009, 21:31:53
hola mikele, como te dijo suky ahí puse el primer código de este mi publik.

La idea era tener una matriz o arreglo bidimencional del tamaño +1 de tu matriz de leds en hard, por ejemplo yo tenía 5 matrices prefabricads de 8x8 y mi arreglo fue de [6][8] y ahí hice el desplazamiento.

Y después viendo algunos otros publiks, y por consejos del buen amigo Bruno, me di cuenta que no era la mejor forma de hacerlo, ya que se puede tardar mucho tiempo en un efecto y se puede llegar a notar parpadeos indeseables o quizá poco brillo.

Una buena forma es tener un arreglo unidimensional, donde se almacenen los datos de cada columna, y no así de las filas como lo hice yo.

Para más datos te invito a pasar por el buscador, que encontrarás la respuesta a lo que te propongo, pues el código con esta otra forma de trabajarlo todavía no lo tengo del todo acabado.

Te dejo un link (http://www.todopic.com.ar/foros/index.php?topic=25723.msg213094#msg213094) del cual seguí aprendiendo mucho, ahí comento sobre el otro método que mencioné, como podrás ver también es un hilo con muchos post, hecho casi a full en asm, pero la idea esta y puede servir de mucho toda esa info

espero te sirva, saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 11 de Agosto de 2009, 23:02:38
muchas gracia a ambos por sus respuestas...me aclararon muchas dudas...creo que me toco borrar todo y empezar de nuevo...jejejeje..pero tengo una duda... como haces las exteciones.h en c compiler???... (por que el link que enviaste esta un codigo que tiene extension.h como si fuera una libreria)...o antes de guardar cambio el tipo de extension...creo que si ya revisare...de ante mano agradesco por la ayuda...voy a probarlo....
att ..mikele
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 12 de Agosto de 2009, 15:07:18
que bueno que te haya servido.

si solo es cambiar la extensión del archivo por el .h necesario

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 13 de Agosto de 2009, 19:59:51
hola Criyn...que tal...perdon si te molesto..pero nesecito otra vez tu ayuda jejeje... el codigo que dejaste (lo estoy estudiando) con el microcontrolador 16f88...pero tengo algunas preguntas...jejeje..bueno quisiera saber si en el metodo  principal main en el bucle infinito while no falta llamar a los metodos?como el de load_letra y todos los metodos creados que estan en el codigo...(o son llamados desde el timer cero?).....y lo simulaste en proteus??? por que lo estoy simulando pero no sale nada solo desplazamientos enteras de columnas de led...necesito que me ayudes y orientes en lo que estoy haciendo porfa...te lo agradeceria...gracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 14 de Agosto de 2009, 21:16:42
Hola mikele, no hace falta colocar los métodos en el bucle infinito, porque la interrupción por el timer0 llamará a los métodos correspondientes para cargar la letra y desplazar.

Sobre la simulación en proteus, para el código que hice, me quedó el circuito que dejo adjunto, creo que se me olvidó colocarlo antes.

Espero te sirva, saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 20 de Agosto de 2009, 23:20:17
hola Cryin...gracias por la ayuda...el archivo adjunto no se me abre creo que esta dañado o algo asi..podrias enviarlo otraves porfa???te lo agradeceria...te cuento que ya puedo desplazar todo el abcdario..pero tengo un problema al desplazar a otra matriz..me puedes explicar como lo haces con el 4094???si al desplazar tiene que ver mas que hardware o software o los dos??...de ante mano muchas gracias..
att mikele...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 21 de Agosto de 2009, 11:06:39
El problema con el archivo me parece que es por la versión de tu proteus, yo lo cree con la versión 7.5 sp3, o quizá una versión anterior.

Del desplazamiento, creo que más tiene que ver con software, porque el hardware solo se encarga de encender todos los leds de una fila, y dependerá de lo que tu le envíes a cada fila para completar el cuadro. Osea que tendrías que desplazar el texto por software, de la manera algo poco eficiente que hice yo en ese ejemplo, pero que para practicar funciona; o de una mejor forma, como se explicó en uno de los links que te deje.

El 4094 se encarga de pasar los datos serialmente del micro hasta el ultimo bit de los registros, datos correspondiente a toda una fila, más o menos la idea es esta:

cargas los datos de la fila 1, muestras los datos de la misma fila, apagas la fila
cargas los datos de la fila 2, muestras los datos de la misma fila, apagas la fila
...
cargas los datos de la fila 8 (ó 7), muestras los datos de la misma fila, apagas la fila

y con eso tienes un cuadro, que mostrado varias veces será visible para el ojo humano (ya que mostrado solamente una vez pasará muy rápido), después modificas los datos que vas a cargar, en nuestro caso un desplazamiento a izquierda de 1 bit de cada byte de nuestros datos, y pasas a mostrar el cuadro, que hará que el ojo humano vea el desplazamiento de un led a la izqierda, y así sucesivamente hasta terminar el mensaje y desplazando por lo largo de todo el cartel, para comenzar de nuevo.

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 25 de Agosto de 2009, 13:59:08
gracias Cryn por la ayuda...me sirvio vastante...ya logre sacar el desplazamiento a otras matrises (solo que ahora saco el abcdario jejeje)...para sacar frases ya lo tengo pensado como hacer...solo queria agradeserte por la ayuda y en esta semana voy a dejar un video de hasta donde lo tengo...jejeje..pienso dejar todo el proyecto terminado en el foro...(ojala lo termine pronto jejeje)...y de ante mano te lo agradesco.... cuidate loco...(cualquier cosa te sigo molestando....jejeje :))
att mikele...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 25 de Agosto de 2009, 14:09:45
Hola mikele, que bueno que te haya servido, si te fijas en el código que puse está una forma de cargarle una frase constante al cartel, se lo hace letra por letra, con la función load_letra

Esperamos entonces por tu video con tu cartel funcionando... :mrgreen:

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Hormiga en 19 de Octubre de 2009, 22:12:49
Ante todo cordial saludo , quiero realizar una matriz de leds 5x21 para desplegar letras en movimientos pero la verdad no tengo la minima idea para ejecutarlo, por ende le pido auxilio a Cryn  y/o participantes del foro, hasta luego y chao
Título: Re: De matriz de leds, a letrero electronico
Publicado por: nico en 19 de Octubre de 2009, 22:19:29
Pues bienvenido, yo te aconsejaria que leas y utilizes el buscador. Encontraras tanto en este hilo como en muchos otros los detalles a tener en cuenta y los tipos de hardware a utilizar. Tienes mucho por leer, una vez tengas algo hecho y encuentres dudas las podremos ir resolviendo de a poquito..

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Hormiga en 19 de Octubre de 2009, 22:26:25
Gracias por la bienvenida pero la verdad estoy urgido por el proyecto he estado leyendo y la verdad estoy un poco confundido lo otro q he percibido es q la mayoría de los programas estan en c++ y mi fuerte es asm, muchas gracias 
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 20 de Octubre de 2009, 00:46:29
Revisa el siguiente enlace (http://www.todopic.com.ar/foros/index.php?topic=25723.0), allí hay buena explicación y realizado en asm.


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 21 de Octubre de 2009, 18:18:06
un saludo hormiga .....aqui tienes todo lo necesario en el foro y es muy interesante todos los temas...te digo una cosa....yo recien estoy aprendiendo ASM...pero mi fuerte es en C jejeje...aunque me falta algunas cosas...jejej...pero la semejanza es su diagrama de flujo....haste primero el diagrama y desde ahi puedes empezar...o de no coje algunos programas en C e intenta interpretarlo para pasarlo en Asm...eso estoy haciendo con el letrero que hice ... pero como todavia soy principiante en asm creo que me va a llevar tiempo...jejeje...suerte tu programa
att mikele
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Hormiga en 22 de Octubre de 2009, 01:52:33
mikele  :) hola , gracias por esa palabras alentadora pero sí estoy dandole a la programación es asm y bueno hermano se cuida
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Hormiga en 22 de Octubre de 2009, 19:11:36
Hola paisano Mikele la verdad llevo el programa para mostrar una letra en la matriz , necistaría ayuda para rotarla de izquierda a derecha , favor me puedes explicar la manera de hacerlo : shock:, jejej bueno me decidi por el 16f873a

chao
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 17 de Noviembre de 2009, 11:24:21
Hola cryn, estupendo tu proyecto. Me lo akbo de acer pero con un 16f648A y con un registro de dezplazamiento, y digo uno porq solo he usado una matriz de 8x8. Simplemente en tu programa cambie el header y funcion todo ok. Mi problema(aunq nose si llamarlo asi) es que las letras aparecen negras y el fondo azul (estoy usando leds azules). Es decir, lo q queria y quiero esq las letras sean azules y pues no estoy muy seguro si es hardware eso o lo puedo solucionar n l software. De todas maneras gracias.

Me ha servido de mucho tu proyecto pero el montaje ha sido de lo peor xD ya pondre unas fotos o algo.

Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 17 de Noviembre de 2009, 12:53:19
Hola jeremylf,

Que bueno que te hay servido el proyecto y que tengas ya algo implementado.

Si quieres que los mensajes sean con luz azul, efectivamente tendrás que o bien comprar matrices azules si es que son fáciles de conseguir, o construirte la matriz con leds de 5 o 3mm de color azul, de la misma manera las resistencias de polarización probablemente cambien, para darle la tensión y corriente adecuada a los leds para aprovechar al máximo su brillo.

Estaré atento a ver tus avances y las imágenes que nos pongas

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 17 de Noviembre de 2009, 13:58:59
Parece que se entendió mal  :mrgreen: Creo que se puede solucionar fácilmente cambiando la lógica del mensaje, osea lo que esta en 1 pasarlo a 0 y viceversa.


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 17 de Noviembre de 2009, 15:39:22
No es que sea el color lo que quiera sino como es mostrado el mensaje. Es decir, que ahorita escribe las letras con el color no-prendido y las diferencia del fondo prendiendolas. Cosa que yo quiero lo contrario, que prenda los leds para escribir los mensajes no para ponerlo de fondo. Me dejo entendeR? =S

Gracias por responder.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 17 de Noviembre de 2009, 15:40:23
Parece que se entendió mal  :mrgreen: Creo que se puede solucionar fácilmente cambiando la lógica del mensaje, osea lo que esta en 1 pasarlo a 0 y viceversa.


Saludos!
Exacto, pues eso mismo, en q parte o deq forma supeustamente debo hacer eso?


Gracias.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 17 de Noviembre de 2009, 17:01:24
aaah ok entendí muy mal, lo que pienso que se podría hacer son 2 cosas:

1. cambiar a negado cuando se envíen los datos, en la función cargar(int datob):
output_bit(dato,(datob & 0x1)); acá se envía el dato, bit por bit dentro el ciclo for.
datob>>=1;
output_high(clock);
delay_cycles(1);
output_low(clock);

podrías intentar en es misma instrucción cambiarlo a su complemento, o colocar antes un complemento de todo el byte así:

datob=~datob;
output_bit(dato,(datob & 0x1));
datob>>=1;
...

2. complementar todos los datos de las letras. Es la solución más larga

Saludos. Ahi nos avisas como te quedó el código.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 17 de Noviembre de 2009, 17:09:44
Lo de: datob=~datob; No basta, salen las letras y todo pero hay siempre 4 columnas de leds prendidas (la 1 , 3, 5 y la 7) q falta?

Gracias por la ayuda.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 17 de Noviembre de 2009, 17:16:55
no entendí el problema que pasa con las columnas prendidas
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 17 de Noviembre de 2009, 18:05:30
fuhnciona lo q propusiste, solo q se mantiene (defondo) 4 columnas  prendidas... como si detras d las letras ubiera un background de 4 columnas. c ntiendo?

Gracias!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 17 de Noviembre de 2009, 18:14:55
Que raro según mis cálculos no deberían aparecer tales lineas.

Y si en la línea output_bit(dato,(datob & 0x1)); de alguna manera se podría cambiar el & por un or exclusivo? quizá se vea mejor, pero creo que no hay una forma directa de hacerlo, se tendría que recurrir a su forma con ands y negaciones en un or...

Buscaré algo en el manual de ccs
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 17 de Noviembre de 2009, 18:18:34
La encontré, es la función sombrerito :D

Prueba cambiando la and & por:

output_bit(dato,(datob ^ 0x1));

y comenta la linea del complemento:
//datob=~datob;

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 18 de Noviembre de 2009, 22:02:49
Funciono pero de forma erronea, es decir, no se muestra correctamente las letras; aveces se traba en alguna letra y no se muestra bien o no corre bien, no probe con mucho detalle. De todas formas gracias, me has ayudado mucho y mas con solo la publicacion de este gran proyecto tuyo. Cuando tenga mas tiempo tratere esto de forma mas minuciosa, pues me es un tema muy interesante.

Nuevamente gracias, suerte.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 19 de Noviembre de 2009, 11:23:41
La verdad que no se me ocurre más... seguro hay algo más por ahí que se debe ajustar.

Que bueno que te haya servido el avance que tuve, no he podido acabarlo todavía. Y espero que pronto nos puedas dar noticias de tu publik.

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 20 de Noviembre de 2009, 07:50:32
Finalmente no me aguante y lo revise a fondo  :D Era simple, solo habia que hacerle una negacion a todo eso envez de lo que proponias. Es decir, hacer lo siguiente:

output_bit(dato, !(datob & 0x1));

Y listo. En proteus y en la vida misma funciona correctamente.
Gracias Cryn, va perfecto.

Porcierto, en la funcion load_letra(...) pude reducir el codigo, cosa que hiciste en una parte pero no entiendo porque no en las demas. Me explico mejor mostrando como deje el codigo:
Código: [Seleccionar]

void load_letra(int caracter){
   int i,j;

   if(isalnum(caracter)){
      if(isalpha(caracter)){
         if(isupper(caracter))
         {
            for(j=0;j<8;j++){
               //matriz[5][j]=letrasM[i][j];
               matriz[5][j]=letrasM[caracter - 'A'][j];
            }
         }
         else{
            for(j=0;j<8;j++){
               //matriz[5][j]=letras_m[i][j];
               matriz[5][j]=letras_m[caracter - 'a'][j];
            }
         }
      }
      else{
         for(j=0;j<8;j++){
            matriz[5][j]=numeros[caracter-'0'][j];
         }
      }
   }
   else{
      switch(caracter){
         case ' ': i=0; break;
         case '!': i=1; break;
         case '"': i=2; break;
         case '#': i=3; break;
         case '$': i=4; break;
         case '%': i=5; break;
         case '&': i=6; break;
         case '´': i=7; break; //este es el acento
         case '(': i=8; break;
         case ')': i=9; break;
         case '*': i=10; break;
         case '+': i=11; break;
         case ',': i=12; break;
         case '-': i=13; break;
         case '.': i=14; break;
         case '/': i=15; break;
         case ':': i=16; break;
         case ';': i=17; break;
         case '>': i=18; break;
         case '=': i=19; break;
         case '<': i=20; break;
         case '?': i=21; break;
         case '[': i=22; break;
         case ']': i=23; break;
         case '^': i=24; break;
         case '_': i=25; break;
         case '{': i=26; break;
         case '|': i=27; break;
         case '}': i=28; break;
         case '@': i=29; break;
         case 'ñ': i=30; break;  // esta es la enie
         case '\f': i=31; break;
      }
      for(j=0;j<8;j++){
         matriz[5][j]=chars[i][j];
      }
   }
}

Aunq se podria ahorrar mas ROM haciendo todo en una sola matriz no se podria para micros como los 16f o menores, asiq para compatibilizacion esta bien pero para ahorrar se podria hacer y esta funcion podria eliminarse.


Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 20 de Noviembre de 2009, 11:06:40
Que bueno que ya lo tengas, recuerdo una vez haber hecho eso que dices para cambiar el estado de los LED's y no me funcionó :( por eso te dí otras alternativas que se me ocurrieron recién jeje

Lo del load_letra fue una cooperación del buen amigo MLO__ y como funcionó lo dejé así. Pero si lo haz reducido y funciona muy bien mejor, entonces haré una optimización a mi código :mrgreen:

Saludos y no se te olviden las fotos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 20 de Noviembre de 2009, 12:59:11
Hola.

Si, ese fue uno de los primeros codigos. De hecho ahora lo tengo un poco diferente. De hecho, creo que defini tres grupos diferentes, uno para mayusculas, otro para minusculas y otro para simbolos, justamente para que se pueda embeber en pics de gama media.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 23 de Noviembre de 2009, 23:54:37
Si, quiza lo usaste no para todo el parentesis, asi si no funciona pero en proteus y vida real con o sin negacion (!) funciona de forma correcta.

Gracias a ambos.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 24 de Noviembre de 2009, 01:38:57
Y como lo prometido es deuda... pero enves de una imagen, tengo un video. Fue un regalo para mi enamorada por sus 18 años (motivo por el cual me interese por todo esto). Mas que nada se ve solo el mensaje mostrado. Cuando pueda tenerlo un dia (porque ahora lo tiene ella en su casa) le tomare fotos de como me quedo el hardware internamente. Por afuera (aunq no se ve mucho porque lo grave todo oscuro) se ve bien, esta cubierto de carton maqueta blanco que ella le hizo (porque ella estuda arkitectura xD) en forma de cubo y tiene un pequeño switch que sobresale para prenderlo/apagarlo, uso una bateria de 9v Panasonic (quise comprar Duracel pero no habia y, total, me salio mas barato jaja)... Pero bueno, ahi va el video:


Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Nocturno en 24 de Noviembre de 2009, 04:50:46
Jeje, muy chulo.

Si no es indiscreción, ¿"trompa chorreada" significa lo que creo que significa?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 24 de Noviembre de 2009, 10:25:43
 :) :) Lindo mensaje  :mrgreen:

Felicidades a ambos, por el cumple y el trabajo terminado  ;-)


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 24 de Noviembre de 2009, 14:11:43
Muy bonito .. felicitaciones .. yo he hecho algunos ... pero no le he regalado ninguno a mi novia ... jeje .. menos mal ella no puede leer este hilo  ;-) si no, ya estuviera reclamandome  :P
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Nocturno en 24 de Noviembre de 2009, 14:13:35
¿Porqué no puede leer este hilo?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 24 de Noviembre de 2009, 16:33:59
Jeje, muy chulo.

Si no es indiscreción, ¿"trompa chorreada" significa lo que creo que significa?
Nose que es lo que estaras creyendo pero es un soudonimo creado por nosotros, pues me refiero a sus labios que parece una trompa y cuando duerme se "chorrea"  :mrgreen: Si, lose, dificil de explicar.

Gracias a todos, gracias.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 24 de Noviembre de 2009, 17:27:06
Bien escondido lo tenías que ibas a regalarlo a tu enamorada no?

Que bien que todo haya salido bien, quedó como de regalo :mrgreen:

saludos y felicidades a la cumpleañera
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 25 de Noviembre de 2009, 13:46:57
Osea que como quien dice, cuando duerme tuerce la boca?  :huh:

Vaya termino ... es que chorreado suena a tantas cosas
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 28 de Noviembre de 2009, 00:30:01
Que tiempo dejan encendida  cada fila??

tengo una matriz de leds de 5x7
5 columnas 7 filas catodo comun

Ahora enciendo una fila 2ms, apago y encinedo la siguiente 2ms.

Asi que 7filas x 2ms = 14ms

1/14ms=71fps.

Que tiempo dejan ustedes para cada fila , y cada cuanto tiempo refrescan toda la matriz de leds?
-------------------------

con 60frames por segundo no habria problemas, entonces

1/60fps=16.66ms
Debo refrescar minimo cada 16.666ms
Pero sigo con la duda con el minimo entre fila y fila.


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 28 de Noviembre de 2009, 12:15:20
Hola.

Yo tomo un tiempo de 1mS para dejar encendida cada fila y va bien.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 28 de Noviembre de 2009, 13:55:24
gracias pana!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 28 de Noviembre de 2009, 14:15:45
Si mal no recuerdo entre 1ms y 2ms muestro cada fila, ya para refrescar toda la pantalla tu ves cual es la mejor velocidad.

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 28 de Noviembre de 2009, 14:26:02

Ocupe esos valores y sin problemas!

Lo que veo es lo siguiente

que para tener una imagen a 60Hz , debo teer cada pantallazo de 5x7 en menos de 16ms

ya de ahi ajusto el tiempo entre fila , es lo que he estado probando con un minimo de 300us por fila.

Saludos y muchas gracias , seguire haciendo pruebas!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 28 de Noviembre de 2009, 16:13:51
video!!! video!!! Akena
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 28 de Noviembre de 2009, 16:45:37
Entre fila y fila podes dejarlo sin tiempo si los LEDs responden bien y apagan y encienden correctamente. Lo que suele pasar cuando las transiciones de fila son muy rapidas es que el/los leds de filas previas permanecen mostrando una luz residual cuando no deberían.

Para comprobar si la calidad es buena, recomiendo que enciendas sólo 1 led por columna y corrobores que los LEDs vecinos(de la columna) a cada uno de los encendidos se encuentren completamente apagados o lo más tenue posible. Para lograrlo, debes comenzar a dejar y regular un tiempo muerto(es decir, ninguna fila encendida) entre el apagado de la ultima y el encendido de la proxima.

Mi cartel funciona, actualmente, a 208 fps

Saludos.

Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 28 de Noviembre de 2009, 18:31:30

Gracias Bruno , realice la spruebas pero tengo poco brillo , no noto que alguno brille tenua , simplement eno encienden.
Utilizo el 4094, y simepre apago las columnas.

Parece que ya le voy agarrando el rollo.Solo que , como cambia de imagen rapido , tengo que hacer que se repita varias veces la imagen para que no se note un parpadeo y se aprecie bien la imagen.

------

Aqui un poco lo que llevo , me falta agregar texto >_<

(http://img21.imageshack.us/img21/3779/pedrito.mp4.th.jpg) (http://img21.imageshack.us/my.php?image=pedrito.mp4)
http://img21.imageshack.us/img21/3779/pedrito.mp4
Título: De matriz de leds, a letrero electronico
Publicado por: PACMER en 08 de Diciembre de 2009, 00:47:15
Hola a todos

pues lo prometido es deuda, aqui les dejo un video de mi matriz de leds 8x16


como habia comentado la hice con un pic16F84, un demux 74LS154, y la eeprom interna del pic, son 128 leds rojo ultra.

pues esta limitada a 16 columnas a causa del demux, asi que necesito aprender a utilizar los registros de desplazamiento,
y la eeprom interna del pic, por lo que implementare una eeprom externa

bueno como comentario deje este proyecto por un buen tiempo 11 meses y trataba de hacerlo en asm, pero despues del consejo de gera cuando le preguntaba acerca del cubo me aconsejo programar en c, y hace 1 semana retome el proyecto depues de tomarme un break, y el resultado es el video que le deje, salio mas rapido de lo que creia.

una disculpa por la calidad del video.

saludos



Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 08 de Diciembre de 2009, 10:24:11
con demux, se ve bien, y yo también empecé con un demux, pero al ver la potencia de los registros de desplazamiento me pase nomas a ellos :mrgreen:

te quedó bien tu primer cartel, felicidades
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 08 de Diciembre de 2009, 13:28:52
Te quedo muy bueno. Felicitaciones  :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 08 de Diciembre de 2009, 15:11:29
Felicitaciones!

Te ha quedado muy bien , yo todavia no puedo con el desplazamiento del texto xD.

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 08 de Diciembre de 2009, 16:19:23
 :(

Si no entiendes mi desorden me avisas ok?  ;-)

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 08 de Diciembre de 2009, 17:03:42
Felicitaciones!

Te ha quedado muy bien , yo todavia no puedo con el desplazamiento del texto xD.

Saludos!

Que método estas usando para el desplazamiento? Porque como lo implementa Bruno es realmente sencillo  ;-)

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 08 de Diciembre de 2009, 17:06:58



bueno aqui les dejo el video del mismo cartel nadamas que con una eeprom externa
como veran lo unico que cambia es que el mensaje es un poco mas largo.

la fila de hasta abajo se ve encendida no por error si porque ese pin lo utilizo para el clock

ahora estoy investigando los de los registros.

entiendo como enviar ceros y unos de acuerdo a los programas de aitopes, pero no se como implementarlo a mi programa,
por cierto yo no lo hago como cryn que ya tiene fuentes,  :(, solo lo hago leyendo direccion por direccion de la memoria.

ya saben la idea es poder enviar un texto desde la pc via rs232, creo que seria lo de menos. pero bueno paso a paso.

y gracias por las felicitaciones eso me da animos para seguir  :-/

SALUDOS
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 08 de Diciembre de 2009, 17:52:24
Si eso de las letras ya definidas es muy útil, ya que son constantes y se graban directamente en la flash. Y los mensajes dependerán de caun amplia sea o bien tu eeprom o hasta la ram.

Por ejemplo usando las letras ya definidas, podes pasar un mensaje de 256 caracteres aproximadamente, usando la eeprom interna, si usas una externa eso se multiplicará por muchas veces, e incluso con 256 caracteres disponibles se puede tener buena cantidad de mensajes sueltos...

Eso si, es solo un tipo de letra, si quisieras usar otro tipo también se tendría que crearla y defenirla...

paso a paso, vas por muy buen camino, por este hilo hay buena info tamibíen, espero que te sirva y pronto lo tengas completo.

Muy bueno el segundo video también, a seguir maquineando
Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 09 de Diciembre de 2009, 08:48:00
pues me dieron las 5:45 de la mañana, comence a las 10:00 de la noche a programar y logre hacer funcionar los registros de desplazamiento, con mi cartel de 8x16, y la eeprom externa 24C02B.

nadamas que, necesito dormir asi que el video lo subo mas tarde, jeje

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: salchig en 09 de Diciembre de 2009, 10:07:54
Hola a todos. Ya hace un tiempo tambien estube con este proyecto de cartel Pasamensajes. No sabia que aqui estaban con este tema de lo contrario hubiera entrado ya hace rato a pedirles ayuda con mi diseño. Muestro mi cartel que es de 16 filas por 96 columnas controlado por un PIC 16f873a. REgistro de desplasamiento con 4094 y decodificador 4514 para manejar las filas. El Pic lee los mensajes prediseñados de 16 pixeles de alto por lo que sea de largo desde una memoria eeprom 24c1024. Asi tengo 128Kbyte para guardar mensajes. Ahora estoy modificando este cartel para recibir los mensajes atravez del puerto serial y guardarlos en la eeprom evitando asi tener que sacar la eeprom cada vez que quiera cambiar los mensajes. Creo que en unos dias ya tendre resultados. Muestro algunas fotos de este cartel.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 09 de Diciembre de 2009, 13:03:54
Que bueno que ya lo tengas con los registros PACMER, te esforzaste mucho, pero vale la pena ;-) cuando estés descansado ya nos muestras como quedó.

Muy buenas imágenes salchig, 16 filas está muy bien, después del decodificador usas transistores? a ver si nos puedes mostrar un poco de tu hardware.

saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: salchig en 09 de Diciembre de 2009, 13:19:35
Si uso los Bd139
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 09 de Diciembre de 2009, 13:26:56
Les dejo un video que hace rato había posteado en otro foro, pero no comparti acá... :oops:

En este modo(modo "tiempo real" llamado en el producto),la matriz de leds de 7x80 se comporta como una pantalla. Está conectada por USB 2.0 a la PC, quien procesa las FFT y envía los valores de cada pixel(LED) a la pantalla nuevamente. La taza de refresco de la pantalla es de 208 fps, mientras que la de envio de datos es de 98fps.
Que lo disfruten.

Modo mono, bloques de a 4 columnas por banda de ecualizacion:


Modo stereo, bloques de a 1 columna por banda de ecualizacion por canal:


P.D:Prometi una libreria basica para encender pantallas, en cuanto tenga un tiempo la acomodo y posteo. Lamentablemente lo que ven en los videos es un proyecto comercial que estoy realizando por lo que no puedo compartirlo completamente... :? :?

P.D.2: Los videos son míos.

P.D.3.: En el primer video pueden apreciar una columna entera que no enciende. Esto fue porque es un prototipo y he hecho un corto que ha quemado los 7 LEDs durante el armado...Actualmente quemé otra columna mas, por tener restos de estaño pegados a la mesa donde estaba apoyado el prototipo que han terminado en cortocircuito...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Drod en 09 de Diciembre de 2009, 13:33:23
Jooo, en el oscuro se queda fenomenal!!!

Título: Re: De matriz de leds, a letrero electronico
Publicado por: salchig en 09 de Diciembre de 2009, 13:37:12
 :shock: :shock: :shock:Sin Palabras.. me dan escalofrios.. eso se puede hacer con una pantalla de leds? BrunoF Magnifico
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 09 de Diciembre de 2009, 13:40:31
Se me cae la baba por la versión estéreo, me parece que me voy a gastar un dinerillo y me voy a armar un cartel, no me puedo quedar con las ganas!  :5]  :mrgreen:

P.D.2: Los videos son míos.
Porque la aclaración, quien puede dudar de eso  :D

P.D.3.: En el primer video pueden apreciar una columna entera que no enciende. Esto fue porque es un prototipo y he hecho un corto que ha quemado los 7 LEDs durante el armado...Actualmente quemé otra columna mas, por tener restos de estaño pegados a la mesa donde estaba apoyado el prototipo que han terminado en cortocircuito...
Mas cuidado Bruno, por favor!!  :D :D
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 09 de Diciembre de 2009, 13:53:09
Se me cae la baba por la versión estéreo, me parece que me voy a gastar un dinerillo y me voy a armar un cartel, no me puedo quedar con las ganas!  :5]  :mrgreen:

Vale la pena...Después si mi amigo me presta su cel grabo y muestro como ilumina la habitacion con el cartel en modo ecualizador, porque a mi Nokia 1100 no le encontre la función de cámara di video... :z)

P.D.2: Los videos son míos.
Porque la aclaración, quien puede dudar de eso  :D

Ahh porque en youtube figuro como SaturnAR :D

P.D.3.: En el primer video pueden apreciar una columna entera que no enciende. Esto fue porque es un prototipo y he hecho un corto que ha quemado los 7 LEDs durante el armado...Actualmente quemé otra columna mas, por tener restos de estaño pegados a la mesa donde estaba apoyado el prototipo que han terminado en cortocircuito...
Mas cuidado Bruno, por favor!!  :D :D

Fahh! No me vuelve a pasar! Lo pegué a la pared ahora... :D
Encima no consigo mas esos LEDs rojos SMD 0805 :(
Igual, era solo el prototipo. La fabricacion en serie no pudo hacerse con esos LEDs porque resulta demasiado caro soldar esos LEDs diminutos...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 09 de Diciembre de 2009, 13:59:32
...porque a mi Nokia 1100 no le encontre la función de cámara di video... :z)

Peroo.. lo revisaste bien, tas seguro?  :D :D

Fahh! No me vuelve a pasar! Lo pegué a la pared ahora... :D
Encima no consigo mas esos LEDs rojos SMD 0805 :(
Igual, era solo el prototipo. La fabricacion en serie no pudo hacerse con esos LEDs porque resulta demasiado caro soldar esos LEDs diminutos...

Nouuu... yo me volvería loco y saldría por las noticias, seguro  :D

En las vacaciones me voy a poner a laburar  :( y me armo uno de estos bichos  :-/

Saludos y felicitaciones por lo logrado  :shock:  :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Drod en 09 de Diciembre de 2009, 14:12:35
todavia estoy en mis primeros pasos con las matrices de led´s en proteus.
Estuve observando en mi uni, los paneles de leds que tienen cambian de color. Un efecto muy bonito..

Un pequeno off, porque llevais el RedPIc en la fotita?  :oops: :oops: :oops:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 09 de Diciembre de 2009, 14:39:57
Donde vi el video?? :mrgreen:

Muy buenos videos BrunoF, que brillo de los leds :shock: a ver si nos podes mostrar algunas fotitos más de cerca del hardware del letrero, que te quedó excelente.

Y si las haces fabricar en china, no saldrá más barato incluso?

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 09 de Diciembre de 2009, 16:04:34

Wow!

Que padre se ve!

Muy muy bueno!

Me gusto mucho el modo Stereo.
-------------------------------------------
Felicitaciones!

Te ha quedado muy bien , yo todavia no puedo con el desplazamiento del texto xD.

Saludos!

Que método estas usando para el desplazamiento? Porque como lo implementa Bruno es realmente sencillo  ;-)

Saludos!

Hola Suky , pues he leido todo los post de Brunof del asm y lo que se posteo aqui , trato de seguir esos pasos , pero no lo digiero bien :(

No se como recorrer el dato.

Ya dejo bien un pantallazo , entonces tomo el siguiete dato con la posicion +1 . y si recorrer pero despues s epierde ,no se como pasar el segundo ato  al primero , el tercero al segndo y asi.

Lo mismo que comentaba MarcDigital.

sigo intentando xD por ahora la Matrix de leds ha podido más xD , solo por esta vez xD

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 09 de Diciembre de 2009, 16:16:50
Pero... en assembler  :(  :D Fíjate por aquí  (http://www.ucontrol.com.ar/forosmf/programacion-en-asm/mis-primeros-programas-pic16f84a-y-pic16f628a/msg17048/#msg17048), explico de como hacer un cartel super limitado y en eso como se puede hacer el desplazamiento.


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 09 de Diciembre de 2009, 16:22:27
Oye akena, y el .C no te sirvió?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 09 de Diciembre de 2009, 16:38:44
Pero... en assembler  :(  :D Fíjate por aquí  (http://www.ucontrol.com.ar/forosmf/programacion-en-asm/mis-primeros-programas-pic16f84a-y-pic16f628a/msg17048/#msg17048), explico de como hacer un cartel super limitado y en eso como se puede hacer el desplazamiento.


Saludos!

Ya lo habia leido tambien , pero le dare otra revisada , he andado muy bloqueado :(

Gracias nuevamente!
Oye akena, y el .C no te sirvió?

Le sigo buscando , ando de cabeza dura!

Ando leyendo de todos para intentar hacer mi codigo , pero no doy una por ahora.
--
No se que me ha pasado que ahora no pego ni una!

Gracias nuevamente!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 09 de Diciembre de 2009, 17:33:58
 :shock: Que ondas con el BrunoF  :D

Muy buen proyecto mi chavo, se ve muy perro,
quisiera hacer uno para mi cuarto ya que me gusta la musica

solo unas preguntas: espero no sean indiscretas

cómo tomas la señal de audio para el ritmo (por decirlo de alguna manera)

es decir utilizas el ADC del Pic? o algun decodificador de audio?

 :-/  :-/ Felicidades  :-/  :-/
Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 09 de Diciembre de 2009, 18:07:56
Felicitaciones!

Te ha quedado muy bien , yo todavia no puedo con el desplazamiento del texto xD.

Saludos!

bueno te voy a explicar mas o menos espero darme a entender lo hago en c (ccs) pero creo que la teoria seria la misma para asm

1° lo que la matriz debe hacer es un barrido en todas las columnas n columnas (en mi caso es por columnas) yo utilizo un for,
    dentro del for va el encendido de las columnas, ya sea con 1 o 0 de acuerdo a tu conexion, tambien dentro de ese mismo for
    le doy un valor al puertob que encenderia las filas (seria el dato), para probar le damos el mismo valor de i y tendrias lo que tu mencionas
    un mensaje fijo puede que salga al reves o algo asi pero no te preocupes ya lo cmpondremos

2° un segundo for lo utilizo para repetir n veces una misma posicion para el valor del puertob (filas), o sea repetir n veces el for anterior,

3° aqui esta el meollo del asunto, para poder desplazar el mensaje necesitas tener una referencia de donde empezar o terminar,
    y utilizo un tercer for que es un contador.... podria llamarlo contador general, entonces, este contador le dara el valor de desplazamiento
    a la matriz.

en lenguaje ccs quedaria algo asi:

3er for(cont=0;cont<capacidad de memoria;cont++)
      {
       dir_de_mem=cont; esto te dara el desplazamiento
       2° for(j=0;j<numero de repeticiones por posicion;j++)
           {
            1er for(i=;i<;i++)
                  {
                   porta=i;
                   portb=origen_de_datos(dir_de_mem--);
                   retardo(de unos 25 ms);
                   }
            }
       }

en resumen: el barrido, el numero de repeticiones por posicion y el desplazamiento.
    
pues eso es basicamente lo que escribi para lograr mi matriz como vex? el ejemplo pues seria para un demux,
y la eeprom interna del pic, de ahi pues tu lo adaptas a tus necesidades, jeje.

espero haberte ayudado  :?, claro que si deseas algo con fuentes y demas pues tendrias que esperar a que investige
mas o preguntandole a los demas compas que es lo mas seguro  :D

saludos.  :-/ :-/ y no te desanimes





Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 09 de Diciembre de 2009, 18:22:39

Bueno despues de dormir un rato aunque me levante desde las 9 porque
no podia conciliar el sueño pensando que mas agregarle a este proyecto
y como hacerlo, en fin.

pero aqui esta el video ahora con resgistros de desplazamiento.



creo que probare ver si es factible dejar asi el proyecto o modificarlo a como lo hizo el amigo cryn

en la noche seguire programando pero ahora sera VB, un software que me envie informacion a la eeprom,
y lo hare desde la pc para no saturar mi pobre (pero resultón F84  :mrgreen:)

  :mrgreen:  :mrgreen: GRACIAS TOTALES  :mrgreen:  :mrgreen:

PD: Disculpen los errores........... bueno horrores del video  :D :D

Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 12 de Diciembre de 2009, 04:02:58

Gracias por los tips , ya con mente abierta xD despues del lapsus brutus , he conseguido desplazar los caracteres.

Aunque el primer caracter al iniciar no entra recorriendo la pantalla xD , aparece completo , a partir de ese ya empeizan a recorrerse hasta donde indique el fin de los datos , al terminar los datos y el recorrido de estos se quedan los leds prendidos o el esado del ultimo byte , creo qu epor esto Cryn habia mensionado haer dejado una columna entre cada caracter , xD asi que ya la llevo mejor .

Ahora debo modificar ese programa y hacer algo parecido a lo de Cryn y MLO , que veo en sus programas , y es crear los fonts >_< , y la tablita para llamarlos.

Nuevamente gracias! y cuando tenga algo presentable xD pues ya estare chismoseando!

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 12 de Diciembre de 2009, 10:39:23
Eso del último byte me parece extraño... no recuerdo que me haya pasado :?

Sobre la primera letra que aparece completa al principio, con el 1er método de desplazamiento que hice, a mi también me pasaba, lo solucioné creando espacios virtuales para esa letra, es decir si mi matriz en hardaware era de 8x40 mi matriz en software era 8x48 y primero mostraba el dato en esos espacios virtuales, lo que hacía que aparezca la letra completa pero en mi matriz virtual, y en la real de hardware se veía todo el tiempo desplazándose.

Por ahí te sirve ese truco matemático jaja

Bueno esperamos por tus resultados finales, viste que no era nada más que salir del estado brutus :D

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 12 de Diciembre de 2009, 16:44:10
xD :afro: pues si era salir del lapsus xD

Pero me lei todo lo que hicieron xD , en C , en ASM xD , luego las explicaciones , hasta que tambien vi xD que se perdia mi programa xD por no definir bien el tamaño del mensaje xD.

Muchas gracias ha todos xD me ha servido mucho , me han ilustrado   :angel: :angel:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 19 de Diciembre de 2009, 05:55:44
Hola !

Ya logre desplazar caracteres tomando los datos desde una tabla , asi quepara cambiar el mensaje hay que escribir 8 bytes por caracter >_<.

Pero eso ya quedo.

Ahora estoy definiendo mensajes , y la unica tabla es de los caracteres definidos , bueno ya la llevo bien xD

YA desplazo el mensaje qu coloque entre " mensaje " .

Ahora solo que va de Izquierda a derecha xD

No recuerdo el nombre del programa para crear fonst??

Me pueden facilitar el nombre porfavor???

mis letras las deifno asi

Código: [Seleccionar]

letra A  esta acostadita y es para una matriz de leds 5x7

0b01111110,
0b11001000,
0b11001000,
0b11001000,
0b01111110,


Hasta que me quede bien presentable les muestro lo que ando haciendo xD si es que queda xD

Un Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 19 de Diciembre de 2009, 11:38:53
Hola.

LCDFontMaker, BitFontCreator, GLCDFontCreator.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 19 de Diciembre de 2009, 15:42:14

Hola.

LCDFontMaker, BitFontCreator, GLCDFontCreator.

Saludos
Gracias !!!! :-/ :-/

Justo lo que necesitaba compa!!

Ya estoy con los fonts que facil asi ehh!!

muchas gracias! me has ahorrado mucho trabajo! :x)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 19 de Diciembre de 2009, 23:56:16
Seee, ahorra mucho tiempo y se puede mejorar la presentación de las típica fuente 5x7.


Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 20 de Diciembre de 2009, 00:02:28
 :shock: :shock:

Muy bueno MLO!!

Sigo luchando xD con una mugrosita matriz 5x7.


Ya desplazo bien texto , ya dejo un espacio de 1 columna entre caracter y se visualiza mejor,ya vi donde moverle para que el texto caiga xD.

Ahora lo que me falta es optimizar , porque me ando llevando cerca de 80Bytes de ram >_< porque estoy convirtiendo todo el mensaje y no le veo caso porque es 1 sola matriz de leds.

Ustedes o hacen asi???

Diria que tneog una matriz virtual en la RAM y de hai me voy desplazando como comento Cryn.

Estoy pensando como usar solo la ram necesaria para las columnas existentes , en mi caso 5

Suky hizo un dibujo del espacio de la matriz , pero todavia no doy como y recorrriendo >_<

xD

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 20 de Diciembre de 2009, 00:25:16
Yo uso una arreglo para el visualizacion independiente, de esa manera queda mas facil programar los efectos, pero hay diferentes formas de hacerlo. En este caso, sacrifico RAM para ahorrar ROM.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 20 de Diciembre de 2009, 12:21:53
Muy buen publik te quedó MLO__ es de 16filas? modificaste o te creaste las matrices en el proteus?

AKENA, en algún momento dije que el uso que hice de una matriz o arreglo bidimensional un poco más grande en tamaño a la matriz real; era una manera no muy buena de solucionarlo, porque los algoritmos algo complejos que se llegan a tener para distintos efectos. Pero BrunoF me dio una mejor manera de manejar los datos con la misma cantidad de datos en RAM, usando solamente arreglos unidimensionales. una explicación corta está en el link (http://www.todopic.com.ar/foros/index.php?topic=25723.msg213094#msg213094) que ya estuviste viendo anteriormente.

Aunque de la manera que lo hice sirve para aprender :mrgreen:

Espero te sirva, saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 20 de Diciembre de 2009, 12:30:53
MLO_ veo que al efectuar el desplazamiento un par de columnas de la letra que aparece desde la derecha se encienden de golpe, es la simulación o hay un problemita ahí  :?


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 20 de Diciembre de 2009, 14:23:01
Hola.

Es de 128x14, pero el problema es que el amigo Proteus ISIS tiene sus cosas y por eso solo lo deje de 16x16 (para la simulación). Las matrices las modifique con la ayuda de un forero.

MLO_ veo que al efectuar el desplazamiento un par de columnas de la letra que aparece desde la derecha se encienden de golpe, es la simulación o hay un problemita

Es el simulador.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 20 de Diciembre de 2009, 16:12:37
Muy buen publik te quedó MLO__ es de 16filas? modificaste o te creaste las matrices en el proteus?

AKENA, en algún momento dije que el uso que hice de una matriz o arreglo bidimensional un poco más grande en tamaño a la matriz real; era una manera no muy buena de solucionarlo, porque los algoritmos algo complejos que se llegan a tener para distintos efectos. Pero BrunoF me dio una mejor manera de manejar los datos con la misma cantidad de datos en RAM, usando solamente arreglos unidimensionales. una explicación corta está en el link (http://www.todopic.com.ar/foros/index.php?topic=25723.msg213094#msg213094) que ya estuviste viendo anteriormente.

Aunque de la manera que lo hice sirve para aprender :mrgreen:

Espero te sirva, saludos.

Pues mi mensaje es unidimensional.  
Código: [Seleccionar]
char mensaje[10]={" MENSAJE "}luego tomo cada BYTE del mensaje y decodifico,después cargo mi buffer con sus 5 BYTES correspondientes
Código: [Seleccionar]
letras[27][5]={

//M
{
0x04,034,0x54,0xfe,0x3c
},
....letra N....O
}

Código: [Seleccionar]
char buffer[80];    //añmacena 80 columnas

Y en buffer tengo todo el mensaje por columnas.

Despues solo voy llamando de columna en columa

como solo tengo 5 columnas

voy apuntando al buffer.

Pero todavia estoy tierno >_<

A ver que sale xD :D
 
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 20 de Diciembre de 2009, 20:52:44
Ah, ya.

Yo lo hago por filas, ya que de aumentar el numero de columnas el tiempo de visualización se vería afectado.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 20 de Diciembre de 2009, 21:01:53
Si el mensaje que yo usaba también era unidimensional, no me refería a eso

Sino que use un arreglo bidimensional para representar a cada led físico del cartel donde decodificaba el mensaje, y esa forma no es muy correcta, sino usar un arreglo unidimensional para decodificar también.

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 24 de Diciembre de 2009, 03:01:27
Que tal?

Cryn, como podrias aumentar el numero de filas? Es algo facil? Porque para aumentar el numero de columnas solo es colocar el ultimo pin de los 74HC164 con otros y asi sucesivamente verdad? Pero para las filas lo veo algo dificil o no se me ocurre algo rapido.


Bueno, gracias.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 24 de Diciembre de 2009, 11:37:07
Tendrías que tener más pines extra del micro, para manejar cada fila extra

O podes también manejarlo con un registro de desplazamiento, con 2 registros ya tenes para 16 filas.

Después tendrías que modificar los caracteres para que sean de 15, 16 ó la cantidad que uses de filas.

Y listo, la idea para cargar, mostrar y desplazar seguiría siendo la misma

Aunque quizá el arreglo bidimensional ya no sería muy adaptable... habría que pensar en ello, o quizá modificar un poco la forma de guardar las letras decodificadas y la forma de tratarlo, y usar directamente un arreglo unidimensional de int16.

Que estas planeando jeremylf?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 24 de Diciembre de 2009, 15:57:07
Si, lo que mas me tiene pensando es en q tanto habria q modificar el programa, porque lo de usar registros de desplazamiento para las filas es de echo, ya que pienso hacer una matriz de masomenos 24x24 o mayor.

No estoy seguro todavia si lo hare, pues antes quiero asegurarme bien de ello antes decomenzar a soldar y todo... ya saben.


Gracias cryn, seguire viendo haber que tanto ay q hacer, salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 24 de Diciembre de 2009, 16:11:18
Hay que tener en cuenta el tiempo de refresco para las filas. Lo que habría que hacer es generar la tabla de valores y enviar el valor hexa correspondiente a los registros, no se ve complicado hacerlo.

Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 24 de Diciembre de 2009, 21:18:51
Si, bueno e estado intenado cambiar el uso de todo el puerto B por un registro de desplazamiento para el control de las filas pero sin conseguir bueno resultados. Haber si le pueden dar una revisada, dejo todo adjuntado (c, hex, sim en proteus)

Gracias.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 24 de Diciembre de 2009, 22:42:11
Bueno, basicamente ese cambio se encuentra en la rutina ShowFila(). Hasta ahora lo tengo asi:

Código: [Seleccionar]
void ShowFila(void)
{
   int i;

   //output_b(0x0);
   for (i = 0; i < 5; i++) // 5 = numero de matrices usado
   {
      cargar(matriz[i][Fila]);
   }   
   //bit_set(portb,fila);
   
   output_low(clock2);
   delay_cycles(2);
   
   if (Fila == 0)
   {
      output_bit(dato2, 1);
   }
   else
   {
      output_bit(dato2, 0);
   }
     
   output_high(clock2);
   delay_cycles(1);
   output_low(clock2); 
   
}

Que me muestra con algunos fallos el mensaje, nose que estara mal... Dejo la simulacion con lo demas para que me entiendan, almenos ya me estoy acercando =D


Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 24 de Diciembre de 2009, 23:01:10
Ya, ya me salio =D

Dejo de nuevo todo  :-/

Aclarar que esto es lo mismo que hizo Cryn pero con la modificacion del uso de registros de dezplazamiento para las filas, para que se pueda hacer mas de las tipicas 8 filas... haber que sale  :mrgreen:

Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 25 de Diciembre de 2009, 14:46:19
Bueno, he aumentado a 16 filas haciendo los cambios necesarios, tanto en la interrupcion del timer como en ShowFila() y me muestra lo mismo solo que un poco adelantado por decirlo de alguna manera. Pense que mientras el tamaño de las letras no sobrepasaria las 8 filas, en estas 8 nuevas no deberia verse nada, pero nose que pueda estar pasando...  a esto temia, creo que se debe de modificar mas el programa en cuanto a la carga de las matrices y eso para que se muestre bieen. De todas formas dejo la simulacion otra ves (pero esta ves mas ordenado =D) trabajando a 16 filas x 24 columnas.


Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 25 de Diciembre de 2009, 15:54:04
Lo que esta pasando es que tenes conectados los registros de desplazamiento en cascada,y si no cargas adecuadamente los registros, los datos "viejos" se van pasando al registro de abajo, generando una imagen igual, pero segun mis calculos, atrasada en 8 columnas con respecto a la original.

Un saludo.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 25 de Diciembre de 2009, 16:03:39
La mejor forma de cargar las filas(y la mas rapida) es haciendo lo siguiente:

(supongo que la fila a encender se conecta a los anodos de los LEDs. Es decir, un 1 "conecta", un 0 "desconecta" la fila).

Cargar inicialmente el valor 00000000 00000000 en los registros por unica vez.
En el primer refresco, cargar solo un 1. Esto produce que en los registros se refleje el valor: 10000000 00000000
En el segundo, cargar un 0. Esto produce: 01000000 00000000
En el tercero, cargar otro 0. Esto produce: 00100000 00000000
Continuar inyectando ceros, hasta que sea turno de la primera fila nuevamente. En aquel momento debera inyectarse nuevamente otro 1.

Algoritmicamente:

Si fila es una variable que se incrementa cada vez que es momento de refrescar la proxima fila:

Cuando el programa inicia, cargar el valor 0x0000 en los registros de las filas para apagar todo e inicializar el estado logico de la matriz.

Dentro de la rutina de refresco de fila:
Si fila=0 inyecto un 1; sino inyecto un 0.
Si fila es menor a 16, incremento fila. Sino fila=0

Deberia funcionar y creo que es lo mas eficaz.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 25 de Diciembre de 2009, 17:11:46
Eso lo hice en un principio pero es necesario apagar todas las filas antes de cargar los valores de las columnas, entonces no se podria hacer eso... por eso uso el pin de reset para setear todas las filas y luego con un for poner en 1 la fila a la que corresponda, pero siempre en cada refresco de columna, antes apago todas las filas. Sino, la imagen se muestra un tanto mal echa.. ni idea de porque. Pero ese no es el problema, pues creo que aun debo de agrandar el tamaño de las matrices de los fonts para que en la segunda fila no muestra nada verdad?


Bueno, gracias Bruno, seguire n esto.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 25 de Diciembre de 2009, 19:17:12
Estoy intenado poner correctamente el uso de solo 24 columnas y no de 48, ocea disminuyendo la matriz y todo eso, pero no me funciona del todo. He modicado unas variables tambien en el funcion desplazar_izq() pero sigo con lo mismo, este codigo es tuyo verdad Bruno? Sabes cuales son las modificaciones correctas para que trabaje a 8x24 ??

Dejo adjunto si sirve de algo.

Gracias, salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 25 de Diciembre de 2009, 20:08:23
Ya, ya esta. Pude sacar siquiera la letra A en 16x24 =D El problema anterior que tenia era solo ajustar bien unos datos en esas fucniones pero bueno. Por otro lado, en la simulacion, aunq el unico mensaje es A, alcostado sale un " que nose porque sera, pero hasta aqui ya avance mucho xD! Ahora abra que crear matrices para los demas ascii y bueno asi basicamente, aunq mi idea final es color una imagen pequeña,...


Bueno, y eso , dejo dnuevo la simulacion.

Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jmcs87 en 26 de Diciembre de 2009, 16:26:04
Hola y saludos a todos los que participan en este foro...

solo escribo para aportar una matriz acondicionada en proteus de 16 filas

espero que les sea de utilidad y si necesitan alguna otra configuracion pasen la voz  :mrgreen:

saludos

JMCS87 ;-)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 27 de Diciembre de 2009, 01:25:29
Es de 128x14, pero el problema es que el amigo Proteus ISIS tiene sus cosas y por eso solo lo deje de 16x16 (para la simulación). Las matrices las modifique con la ayuda de un forero.

Ese forero es justamente jmcs87 (mi memoria parece RAM). Gracias por el dato  ;-)

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 28 de Diciembre de 2009, 03:33:17
Queria saber... Con una matriz de 16x24 y usando los registros de desplazamiento 74LS164 para las filas y columnas con resistencias de 220ohm para las columnas, aguantara estas? Me refiero, se quemara algo? Hay posibilidad? Podre prender todos los leds (uso inverso de la matriz) ?

No estoy usando ningun transistor, todo es directo; es decir, del PIC, las señales van directamente a los registros de desplazamiento tanto para las filas como para las columnas. Tal como se muestra en la simulacion en proteus que deje posts atras.


Gracias.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 28 de Diciembre de 2009, 14:46:46
Sobre los transistores no he trabajado con los 74x164, si peuden suministrar la correinte necesaria para un buen brillo supongo que no harán falta los transistores, por ejemplo con el 74hc595 estaría casi seguro que no haría falta colocarlos. Tendrás que probar con y sin transistores y notar si hay diferencia en brillo.

A cerca de las resistencias creo que va de la siguiente manera:
-si refrescas por filas => resistencias en las columnas
-si refrescas por columnas => resistencias en las filas

Al menos me parece así, yo trabajé con la primera (refresco por filas), sobre el segundo silogismo no estpy seguro pero sería una analogía :mrgreen:

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 28 de Diciembre de 2009, 15:49:08
GRacias, Cryn ahora lo estoy probando.

Mas bien, ahora tengo un problema y esque para el resfresco de las filas con este integrado es algo dificil. Digo dficil pues cuando se refresca para apagar todas las filas uso el pin de reset, pero para ir mostrando cada fila tengo q hacer un corrimiento de bit en ese integrado lo que hace un efecto por encima de las letras, pues uso un ciclo for para "poscicionar" el 1 a mostrar de la fila despues de aver copiado los datos para las columnas. Y esq es la unica forma de acer y nose que acer para quitar ese efecto de barrido que queda atras??  alguna idea? lo que pasa esq cmo digo tengo q llegar de alfuna forma a una d las filas que controla ese integrado y cmo es serie paralelo entonces ntog q acerlo uno por uno,por eso deja ese barrido q se ve masomenos pero q se ve.


Sau2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 28 de Diciembre de 2009, 20:31:56
uuuy si, que problema y es inevitable con ese integrado, tendrás que pasar a uno que tenga strobe, como el 4094 o el 74hc595, este segundo es mejor porque soporta más corriente y el brillo es muy bueno, con ello no tendrás problema de reflejo.

O lo que puedes hacer es quizá colocar un 1, y posteriormente ir rellenando de ceros en el registro hasta completar todas las filas, con eso quizá no haya ese efecto reflejo.

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 28 de Diciembre de 2009, 21:31:06
Claro, esa es la otra forma, pero ntonces el barrido es por las columnas pues no apagaria todas las filas antes de escribir n  la columna, cosa q si hiciera, no podria aumentar el deszplazamiento del integrado... vaya, parece q si es inevitable.. pense tb en usar 16 transistores ya q no tengo esos intregrados pero bueno, quiza lo deje asi... total, no se ve tan feo para las columnas..


Gracis, salu2
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 29 de Diciembre de 2009, 04:24:51
Aqui un video de como se ve esto (para el caso de las columnas)...  Poco, pero se ve como digo.

Finalmente, decir que para el aumento de filas para estas matrices, almenos yo, NO recomiento el 74LS164 :5] Ah! y tampoco estoy usando transistores, aunque en caso de que se aumente MAS las filas, creo que ya seria necesario, desde ahora, siento que la intensidad ha bajado regularmente, pero bueno.

Por otro lado, el PIC (18F2550) se calienta regularmente, cosa rara  :?


Epa, aqui el video:

[/youtube]


Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: migsantiago en 29 de Diciembre de 2009, 12:45:00
Aqui un video de como se ve esto (para el caso de las columnas)...  Poco, pero se ve como digo.

Finalmente, decir que para el aumento de filas para estas matrices, almenos yo, NO recomiento el 74LS164 :5] Ah! y tampoco estoy usando transistores, aunque en caso de que se aumente MAS las filas, creo que ya seria necesario, desde ahora, siento que la intensidad ha bajado regularmente, pero bueno.

Por otro lado, el PIC (18F2550) se calienta regularmente, cosa rara  :?


Epa, aqui el video:
Salu2.

Muy bueno Jeremy  :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 29 de Diciembre de 2009, 14:32:23
muy buena jeremylf

felicidades! te esta quedando muy bien
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 29 de Diciembre de 2009, 15:18:04
Muy bueno.

Si usan los 74XX164N, usen transistores o algún integrado ULN, ya que no siempre sacan la corriente necesaria para hacer brillar bien el LED, a mi me sucedió que me vendieron unos que solo podian con 8mA!!!!. Para el refresco de filas con ese integrado y evitar la sobreposicion de los datos de la anterior fila, basta con deshabilitar todas las filas mientras se carga los datos de una fila.

Si se recomienda usar transistores para el control de las filas ...

La ventaja de usar transistores es que puedes usar una fuente diferente para los LED con lo que puedes sacar muy buen brillo.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 29 de Diciembre de 2009, 15:51:41
Yo tampoco recomiendo que usen los 74XX164x porque no tienen latch interno. Son muchisimo mejor los 74XX4094x o los 74XX595x para controlar una matriz de estas...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: AKENAFAB en 29 de Diciembre de 2009, 17:01:04

Yo utilice los 2 registros , pero como nececitaba 1 pin mas , le di preferencia al 164, lo unico que hago es apagar las columnas, aunque el dato de las filas siga presente pues no se ve nada.


Muy bueno pana!

Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Nocturno en 29 de Diciembre de 2009, 17:02:36
Muy chulo, Jeremy.

Una curiosidad, veo que en ese negocio venden gaseosa, golosinas y tarjetas Movistar, pero ¿qué es "claro"?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: todopic en 29 de Diciembre de 2009, 17:06:21
Claro es una compania telefonica, antes llamada CTI  :D

Un gran abrazo!

Norberto
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 29 de Diciembre de 2009, 23:31:34
Exacto, ocea hace referencia a que venden tarjetas CLARO y MOVISTAR aunque obviando el "y" pero bueno.

Gracias a todos, justo hoy hace un rato lo entrege y ya me pagaron por esto, oh se! ahora ya tengo pa irme de viaje por año nuevo a ver a la persona que por su culpa me meti en esto de las matrices y que, ahora, pude sacar algo de provecho, pues el 1ro fue un regalo como recordaran a esa misma persona haha :mrgreen:


Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 29 de Diciembre de 2009, 23:35:49
Hola.

Que bueno .... la culpable saca provecho tambien eh?

Unas preguntas: se puede cambiar el mensaje al letrero? Cuantos caracteres tiene como máximo de almacenamiento?

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 29 de Diciembre de 2009, 23:42:04
Asi es  :D

Claro que se peude, es muy facil, todo esta en cambiar correctamente estas variables:

Código: [Seleccionar]
const int mensaje[2][60] = {{"GASEOSAS GOLOSINAS TARJETAS CLARO MOVISTAR... AQUI >>>>>  \0"}, {"ShArOn\0"}};
const int num_msj = 2;

const int msj_length[num_msj]={58, 6};//const int msj_length[num_msj]={31};


Y nada, en el de las luces que hice anteriormente de 8x8 pude escribir bastante, siendo un 16F. Ahora, al usar un 18F pues la cosa aumenta. Aunq con una memoria externa ya todo es diferente.


Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 30 de Diciembre de 2009, 00:53:45
jeje

Me refería a si el usuario final puede cambiar el mensaje por RS232 o USB ...

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 30 de Diciembre de 2009, 00:55:48
Ah, no en este caso no xD! Mejor, asi le cobro por el cambio del mensaje hahaha

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Nocturno en 30 de Diciembre de 2009, 04:11:18
Tú si que sabes  :D
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 30 de Diciembre de 2009, 12:41:05
Ah, no en este caso no xD! Mejor, asi le cobro por el cambio del mensaje hahaha
:D muy buena jeremylf, que bueno que lograste hacer una venta...

saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 30 de Diciembre de 2009, 12:43:14
Ah, no en este caso no xD! Mejor, asi le cobro por el cambio del mensaje hahaha

 :D :D :D :D
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 30 de Diciembre de 2009, 13:34:05
 :mrgreen:

Y asi, termino este proyecto poniendo unos dos videos mas..

El primero muestra las conexiones y lo horrible del cableado y todo eso que se ve destripado xD! Decir que tuve que poner silicona al soldar las filas para que no chocaran con las columnas.. mucha silicona haha y pues, en total, fueron como 6 horas de soldar sin parar mas o menos todos estos 384 LEDs, eso sin contar la tarjeta de control y todo los cables vistos y por haber  :D... pero bueno, ahi va:
[/youtube]


Por otro lado, este es la version final o, mejor dicho, como quedo la presentacion y pues eso:
[/youtube]

Si, si, si,... mi padre queria que saliera todo desde 0; es decir, que yo entre con la matriz y la conecte y todo... por eso salgo yo  :mrgreen:


Nada, gracias a todos.
Salu2.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: PACMER en 06 de Enero de 2010, 01:32:08
hola jer oie que proteus usas porque no puedo abrir las simulaciones, por cierto quedo muy bien tu publik, felicidades
Título: Re: De matriz de leds, a letrero electronico
Publicado por: jeremylf en 06 de Enero de 2010, 01:35:39
7.5 SP3

Gracias eh!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: KALLITOS en 07 de Enero de 2010, 02:49:59
Yaaaa jeremilf  :D, nuevo jale de AL FONDO HAY SITIO, jajaja.

Muy bueno tu letrero, felicitaciones!!

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: smarkol en 07 de Enero de 2010, 16:45:50
me parece que en uno de los videos que han expuesto vi un efecto de desplazamiento vertical.
como se realiza ese efecto!, por mi parte he intentado realizar ese efecto y solo he logrado que se desplace hasta la sexta fila.
ya que me quedo sin rom, es un aviso de me da ccs al compilar, debe ser un error  de codigo, lo que hago es consultar la fila y lleno la matriz con los datos, utilizando el codigo de cryn mas o menos el mismo criterio del desplazamiento horizontal que planteo cryn, en sus codigos iniciales..





Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 07 de Enero de 2010, 19:27:18
Hola smarkol, no he terminado la matriz de verdad que he ha faltado tiempo y me da mucho bronca por no poder acabarlo.

No hice más que el efecto de desplazamiento con la idea que puse en el código. Pero hay una mejor forma de hacerlo, y es teniendo los datos guardados por columnas y utilizar un arreglo unidimensional para enviar los datos, y de esta manera los efectos se facilitan, al menos eso me ha dicho Bruno.

Espero que puedas tener el efecto qeu estas buscandopronto

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 07 de Enero de 2010, 20:41:05
Hola.

Yo lo que hago es mover el contenido de la n a la fila n-1 por medio de un ciclo for.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 07 de Enero de 2010, 22:02:40
Mas o menos como dice MLO_, lo único es que hay que agregar un enmascaramiento que dependerá de la posición que lleve el mensaje en el eje vertical para apagar los leds "debajo" del mensaje y lograr una entrada limpia. Hay que tener bastante "imaginación" para lograr estos efectos  :tongue:


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 07 de Enero de 2010, 22:31:12
Hola a todos.

Repito: A mi parecer, la mejor manera de trabajar, es utilizando como unidad de memoria el eje de la matriz con menor cantidad de elementos. En estos carteles pasamensajes, eso seria hacerlo por columnas.

Fijense que si lo hacen por filas, la particion de la matriz se hace bidimensional, mientras que mapeandolo por columnas, es unidireccional. Además, cualquier operación que se realice sobre un elemento de 32 bits o bidireccional, resulta mucho más costosa para el compilador. Van a consumir la ROM del PIC mucho más rápido, excepto esten trabajando con uC nativos de 16 o 32 bits.

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=19091.0;attach=10890)

Con respecto al efecto de desplazamiento vertical. Por ejemplo, para levantar un texto que se esta mostrando, siempre y cuando hayan acomodado los datos por columnas como a mi me parece conveniente, solo basta con rotar a la izquierda cada una de los elementos(columnas). Si organizaron los datos de manera horizontal, la cosa no es tan sencilla pero puede hacerse. En el grafico puede verse que en ese caso habria que comenzar haciendo que Elemento 0 = Elemento 3, Elemento 1= Elemento 4, Elemento 2= Elemento 5, Elemento 3 = Elemento 6, Elemento 4= Elemento 7,etc...

Saludos.

Título: Re: De matriz de leds, a letrero electronico
Publicado por: smarkol en 08 de Enero de 2010, 15:34:58
ok, voy a tratar de hacer lo que me sugieren, despues les comento.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: smarkol en 12 de Enero de 2010, 12:54:36
hola Suky , cuando te refieres a enmascarar te refieres a crear otra matriz que se puerponga a la matriz que contiene los datos ??por ejemplo:

Matriz1 -> Matriz de datos(nuestros Mensajes)

Martriz2-> Matriz con ceros o unos (para enmascarar)

y Con respecto a lo que planteas BrunoF, me gustaria si pudieras expandirte en el tema, la verdad que no me queda muy claro..
Título: Re: De matriz de leds, a letrero electronico
Publicado por: smarkol en 25 de Enero de 2010, 17:15:11
Hola a todos, bueno he tratado de realizar el efecto vertical , y he sacado la idea del codigo de JMCS87 , pienso que este podria ser un primer acercamiento , adjunto los codigo y el archivo en proteus 7.6 sp0, para que puedan darme sus comentarios ..
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Strepto en 19 de Marzo de 2010, 09:50:25
Buenas!

Con tanto ver matrices de leds hasta en la sopa, me decidido a empezar yo tambien con ellas. Y mi circuito ha quedado tal que asi:

(http://www.todopic.com.ar/foros/index.php?action=dlattach;topic=19091.0;attach=11498)

De momento no es mas que en una matriz de 8x8, en la cual la informacion se envia por columnas y los leds se activan a nivel bajo (por 0).

El programa esta hecho en basic con proton
Código: [Seleccionar]
           Device 16F876
            
            Dim i As Bit
            Dim aux As Byte
            Dim cont As Word
            Dim cont2 As Word
            Dim A As Word
            Dim B As Word
            Dim repeticiones As Word
            
            TRISB = %00000000
            TRISC = %00000000
            PORTB = 0
            TRISC = 0
Repite:     i = 0            
            cont = 0
            cont2 = 0
            aux = 0
            A = 0
            B = 7
                                                                  
            While i < 1                                                            
                For repeticiones = 0 To 12    'numero maximo de repeticiones
                    For cont = A To B          
                        PORTB = LookUp cont,[$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$80,$F7,$F7,$F7,$80,$FF,$F1,$EE,$EE,$EE,$F1,$FF,$BE,$80,$FE,$FF,$FD,$EA,$EA,$EA,$F0,$FF,$FF,$FF,$FF,$FF,$FF,$FF]                        
                        aux = cont - cont2
                        PORTC = aux
                        DelayMS 1
                        PORTB= $FF
                        DelayMS 1
                    Next
                Next    
                
                Inc A
                Inc B
                Inc cont2
                
                If B = 36 Then   'longitud frase
                    cont2 = 0
                    A = 0
                    B = 7
               End If              
                                                  
            Wend i
                  
            End

Pero claro, esto tiene un inconveniente; como quiera mostrar textos largos, el lookup seria infinitamente largo y ocuparia mucha memoria sin contar que el proton no permite lineas con mas de 250 caracteres, por lo que me queda hacerle un pequeño apaño al programa para hacer lectura de datos de una eeprom.

Un saludo!

PD: Adjunto la simulacion con el hex por si alguien quiere probarlo y una tabla excel que se comenta en este post (http://www.todopic.com.ar/foros/index.php?topic=24712.msg249380#msg249380).
Título: Re: De matriz de leds, a letrero electronico
Publicado por: zagoaristides en 27 de Marzo de 2010, 21:51:30
Hola mikele, no hace falta colocar los métodos en el bucle infinito, porque la interrupción por el timer0 llamará a los métodos correspondientes para cargar la letra y desplazar.

Sobre la simulación en proteus, para el código que hice, me quedó el circuito que dejo adjunto, creo que se me olvidó colocarlo antes.

Espero te sirva, saludos.

No puedo abrir con proteus 7.4 tu archivo. Gracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 28 de Marzo de 2010, 11:14:01
zagoaristides, yo usé seguramente una versión superior, la 7.5 o 7.6 si existía ya la última para esas fechas.

Prueba conseguir la versión de prueba u otro de la última versión de proteus y seguramente que lo podrás abrir.

Strepto, Se ve muy bien tu primer paso, a ver cunado nos sorprendes con un cartel.

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 28 de Marzo de 2010, 12:00:34
zagoaristides, yo usé seguramente una versión superior, la 7.5 o 7.6 si existía ya la última para esas fechas.

Prueba conseguir la versión de prueba u otro de la última versión de proteus y seguramente que lo podrás abrir.

Strepto, Se ve muy bien tu primer paso, a ver cunado nos sorprendes con un cartel.

saludos.



Cryn, al guardarlo puedes elegir versión compatible con 7.x o algo así. Digo, porque yo usando la 7.4 no pasaría a una más actual  :mrgreen:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Strepto en 28 de Marzo de 2010, 12:48:00
...
Strepto, Se ve muy bien tu primer paso, a ver cunado nos sorprendes con un cartel
...

En cuanto saque un poco de tiempo para modificar el programa y asi hacer la lectura de la eeprom, empezare a pensar en montar algun cartelito o algo por el estilo xDD

Un saludo!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 29 de Marzo de 2010, 00:08:24
Cryn, al guardarlo puedes elegir versión compatible con 7.x o algo así. Digo, porque yo usando la 7.4 no pasaría a una más actual  :mrgreen:
esa no la sabía, cambiado entonces, gracias por el dato suky

Como no se puede modificar lo dejo por acá nomas

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 16 de Abril de 2010, 16:44:45
Según Pacmer: " entiendo como enviar ceros y unos de acuerdo a los programas de aitopes, pero no se como implementarlo a mi programa, por cierto yo no lo hago como cryn que ya tiene fuentes,  Sad, solo lo hago leyendo direccion por direccion de la memoria"
Yo lo hago de la misma manera. Tengo una matriz (en Proteus) de 8x24 + 1 eeprom 24Lc256 + 3 registros 4094.
Lo que se hace muy tedioso es armar las "pantallas" en Excel y luego generar el archivo .bin con Winpic (pasando byte x byte).
Les adjunto el  archivo de proteus, el .c(de CCS), el hex, la planilla de Excel y el .bin para la EEprom.
Mi pregunta es: hay alguna forma más sencilla de realizarlo ?
Desde ya muchas gracias a todos y este foro me ayudo mucho.
Saludos.
Fernando.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 16 de Abril de 2010, 18:52:13
Claro que hay una forma más sencilla, la que propuse en este hilo, con ayuda de MLO__ que me dio un código que él hizo y yo tras entender como funcionaba lo modifique en algunas cosillas para adaptarlo a lo que estaba necesitando.

Eso consiste en simplemente guardar el mensaje como string o cadena de caracteres, es decir los códigos ASCII de cada letra del mensaje, y el soft se encarga de decodifcar ello a caracteres en el cartel de leds.

Todas las letras del abecedario tanto mayúsculas como minúsculas, y algunos signos los debes definir bit a bit de preferencia en la flash como constantes y tu string se encarga de cargar las letras correspondientes.

En C de CCS me parece relativamente sencilla esta tarea, en ASM quizá sea algo más trabajado.

Cargar todo el mensaje bit por bit en una eeprom es completamente antipaciencia :lol:, creo que la mejor manera es usar el código ascii y tener el abecedario en tu eeprom, o en un otro mejor lugar.

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 16 de Abril de 2010, 21:21:44
Yo lo hago como comenta Cryn, y utilizando las misma fuente de las librería graphics de CCS:


Código: C
  1. char _Character;
  2.  
  3.  
  4.    _Character=read_ext_eeprom(OffsetMessage);
  5.    for(k=0;k<LenghtMessageCurrent;k++){
  6.       if(_Character<'S'){
  7.          memcpy(&BufferMessage[k],FONT[_Character-' '],5);
  8.          k+=5;
  9.       }else if(_Character<'~'){
  10.          memcpy(&BufferMessage[k],FONT2[_Character-'S'],5);
  11.          k+=5;
  12.       }else{
  13.          memcpy(&BufferMessage[k],FONT[0],5);
  14.          k+=5;
  15.       }
  16.       _Character=read_ext_eeprom_current_address();
  17.   }


En la eeprom solo está guardado el string.


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 16 de Abril de 2010, 22:08:34
Hola.

La forma en que diseñe el código es para no depender de algún software adicional para programar el cartel, yo lo hacia con el hyperterminal. Pero, se puede hacer de otra manera: por medio de un software en el PC; el cual se encargaría de decodificar bit a bit lo que quieres hacer, luego guardaría esa info en la memoria y listo, el PIC del cartel solo se encargaría de volcar la información del memoria al cartel de LED. La ventaja de este último método es que se puede desplegar lo que quieras de una forma mucho mas sencilla  (animaciones) por ejemplo y podrías tener una infinidad de fuentes. Desventajas (para mi sobre todo) que hay que realizar un soft para PC que se encargue de hacer todo lo debido para enviar bytes a la memoria para que despliegue todo, además que si quieres animaciones y demás, la memoria externa debe ser grande, pero bueno, para eso están las SD Card.


Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 17 de Abril de 2010, 00:20:09
Muy buena MLO_!!! Yo estoy en pleno proceso, pero soldar leds me está dando mucha vagancia  :( Hice el soft con varias animaciones, la idea es usar USB para la conexión con la PC, cargar la cantidad de mensajes que se quieran en el soft con sus configuraciones, velocidad desplazamiento, animaciones, además de otros comandos especiales, como medir temperatura, hora, fecha, ect... Otra que tengo en mente es usar un 18F67J60 y trabajarlo por una pagina web  8)  Pero todo eso lleva tiempo  :x  :D


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 17 de Abril de 2010, 08:18:12
Muchas gracias MLO, Cryn y Suky, voy a seguir trabajando y seguramente les volveré a consultar.
Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 17 de Abril de 2010, 08:26:52
Cryn, antes de seguir trabajando.....
Tu dijiste: "Todas las letras del abecedario tanto mayúsculas como minúsculas, y algunos signos los debes definir bit a bit de preferencia en la flash como constantes y tu string se encarga de cargar las letras correspondientes."
Estas definiciones(mayusculas, minusculas y signos) las puedo hacer en una EEprom externa (por ej 24lc256)? Y luego dependiendo del string que quiera (ya sea este declarado en la EEprom o ingresado por RS232) ir leyendo la EEprom para así después realizar el efecto que quiera?
Nuevamente gracias y buen fin de semana.
Fernando.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 17 de Abril de 2010, 08:48:23
Revisa la librería graphics.c, ahí hay definida una fuente almacenada en la memoria de programa...


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 18 de Abril de 2010, 11:16:10
Estas definiciones(mayusculas, minusculas y signos) las puedo hacer en una EEprom externa (por ej 24lc256)? Y luego dependiendo del string que quiera (ya sea este declarado en la EEprom o ingresado por RS232) ir leyendo la EEprom para así después realizar el efecto que quiera?
Nuevamente gracias y buen fin de semana.
Fernando.
Seguro que lo puedes hacer, pero perderás algún tiempo precioso quizá. Pienso que al leer constantemente las letras, cargar byte a byte cada letra (ya que una letra tendrá entre 5 a 8 bytes) de una memoria externa se perderá mucho más tiempo que leerlo de una memoria del micro como la flash.

Me parece que programas en C, tienes que declarar tus datos del abecedario como const en un arreglo y ya lo tienes en la flash.

De todas maneras dale una mirada a lo que te sugiere suky, puede que tengas una mejor respuesta.

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: bigluis en 25 de Abril de 2010, 19:15:20
Hola amigos.

He estado trabajando en una libreria que manda a imprimir los datos al letrero, pero en mi caso si utilizo los punteros.

A continuación escribo el código correspondiente a las letras.

Código: C++
  1. //Font Generated by GLCD Font Creator 1.1.0 - mikroElektronika Edition
  2. //Copyright 2009 Pocket MicroTechnics
  3. //http://www.pocketmt.com
  4.  
  5. //FontName : matriz
  6. //FontSize : 7 x 5
  7.  
  8. const unsigned short matriz[] = {
  9.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char
  10.         0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04,  // Code for char !
  11.         0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0x00,  // Code for char "
  12.         0x0A, 0x0A, 0x1F, 0x0A, 0x1F, 0x0A, 0x0A,  // Code for char #
  13.         0x0E, 0x14, 0x14, 0x0E, 0x05, 0x05, 0x1E,  // Code for char $
  14.         0x19, 0x1A, 0x02, 0x04, 0x04, 0x0B, 0x0B,  // Code for char %
  15.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char &
  16.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char '
  17.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char (
  18.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char )
  19.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char *
  20.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char +
  21.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char ,
  22.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char -
  23.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char .
  24.         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  // Code for char /
  25.         0x0E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x0E,  // Code for char 0
  26.         0x04, 0x0C, 0x04, 0x04, 0x04, 0x04, 0x0E,  // Code for char 1
  27.         0x06, 0x09, 0x01, 0x02, 0x04, 0x08, 0x1F,  // Code for char 2
  28.         0x0E, 0x11, 0x01, 0x06, 0x01, 0x11, 0x0E,  // Code for char 3
  29.         0x02, 0x06, 0x0A, 0x1F, 0x02, 0x02, 0x07,  // Code for char 4
  30.         0x1F, 0x10, 0x1E, 0x01, 0x01, 0x11, 0x0E,  // Code for char 5
  31.         0x0E, 0x10, 0x10, 0x1E, 0x11, 0x11, 0x0E,  // Code for char 6
  32.         0x1F, 0x11, 0x01, 0x02, 0x02, 0x04, 0x04,  // Code for char 7
  33.         0x0E, 0x11, 0x11, 0x0E, 0x11, 0x11, 0x0E,  // Code for char 8
  34.         0x0E, 0x11, 0x11, 0x0F, 0x01, 0x01, 0x0E,  // Code for char 9
  35.         0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00,  // Code for char :
  36.         0x00, 0x04, 0x00, 0x04, 0x04, 0x08, 0x00,  // Code for char ;
  37.         0x00, 0x03, 0x0C, 0x10, 0x0C, 0x03, 0x00,  // Code for char <
  38.         0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00,  // Code for char =
  39.         0x00, 0x18, 0x06, 0x01, 0x06, 0x18, 0x00,  // Code for char >
  40.         0x0E, 0x11, 0x01, 0x02, 0x04, 0x00, 0x04,  // Code for char ?
  41.         0x0C, 0x12, 0x11, 0x05, 0x0B, 0x09, 0x06,  // Code for char @
  42.         0x0E, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11,  // Code for char A
  43.         0x1E, 0x11, 0x11, 0x1E, 0x11, 0x11, 0x1E,  // Code for char B
  44.         0x0E, 0x11, 0x10, 0x10, 0x10, 0x11, 0x0E,  // Code for char C
  45.         0x1E, 0x11, 0x11, 0x11, 0x11, 0x11, 0x1E,  // Code for char D
  46.         0x1F, 0x10, 0x10, 0x1E, 0x10, 0x10, 0x1F,  // Code for char E
  47.         0x1F, 0x10, 0x10, 0x1E, 0x10, 0x10, 0x10,  // Code for char F
  48.         0x1F, 0x11, 0x10, 0x17, 0x15, 0x11, 0x1F,  // Code for char G
  49.         0x11, 0x11, 0x11, 0x1F, 0x11, 0x11, 0x11,  // Code for char H
  50.         0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,  // Code for char I
  51.         0x01, 0x01, 0x01, 0x01, 0x11, 0x11, 0x1F,  // Code for char J
  52.         0x11, 0x12, 0x14, 0x18, 0x14, 0x14, 0x12,  // Code for char K
  53.         0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F,  // Code for char L
  54.         0x11, 0x1B, 0x15, 0x11, 0x11, 0x11, 0x11   // Code for char M
  55.         //Aqui puedes segir escribiendo el codigo correspondiente a los demas caracteres.
  56.         };

A continuación escribo el código de las funciones que se encargan de hacer esto, y también un ejemplo de como utilizarlo.

Código: C++
  1. #include "letras.c"
  2.  
  3. #define firstCLK PORTD.F3
  4. #define secondCLK PORTD.F5
  5. #define Enable  PORTD.F7
  6. #define Reset   PORTD.F6
  7. #define Data    PORTD.F4
  8.  
  9. //La siguiente funcion se encarga de transmitir los datos hacia los registros de desplazamiento
  10.  
  11. transmitir_registros(char DATO){
  12.         short k=5;          //Declaramos k, quien controla las 5 columnas de los display
  13.         do{                 //comenzamos el ciclo de transmision.
  14.                 firstCLK = 0;     //ponemos el pin firstCLK a cero.
  15.                 Data = DATO.F0;   //hacemos que el pin DATA sea igual al bit 0 de DATO (la letra a transmitir)
  16.                 firstCLK = 1;     //ponemos el pin firstCLK a uno para almacenar el dato.
  17.                 DATO >>= 1;       //Desplazamos hacia la derecha un bit la variable dato.
  18.         }while(--k);        //predecrementamos el valor de k, y preguntamos si es cero para salir del ciclo.
  19.         }
  20.        
  21. //La siguiente funcion se encarga de decodificar los datos correspondientes a cada letra, para luego
  22. //transmitirlos a los registros que manejan las 5 columnas de cada display.
  23.  
  24. print_matriz5x7(const char *letras){
  25.   char l,i=0,j=0;                       //l=letra a decodificar en ASCII, i=indice del display,
  26.                                         //j=indice de la fila de la matriz de 5*7.
  27.   char display[20];                     //display a los que se les transmitiran los datos
  28.   do{                                   //Comienzo del ciclo de decodificacion y transmision
  29.         while(l=*letras++)                    //almacenamos en l la letra a decodificar a partir del puntero
  30.                                               //letras y luego lo posincrementamos
  31.     display[i++]=matriz[(l- ' ')*7+j];  //Almacenamos el dato de cada letra en el arreglo display.
  32.                                         //a l se le resta el valor ASCII del espacio, ya que es el primer
  33.                                         //simbolo en la matriz de letras, a eso lo multiplicamos por 7 (# de filas)
  34.                                         //y le sumamos j.
  35.   letras-=i+1;                          //regresamos el puntero letras a la direccion inicial del string
  36.         secondCLK=0;                          //ponemos a cero el pin secondCLK
  37.         Reset=1;                              //ponemos a uno el pin Reset, para borrar el dato en los registros.
  38.   while(i)                              //Mientras i sea distinto de cero
  39.     transmitir_registros(display[--i]); //predecrementamos i, y transmitimos el valor de display[i].
  40.   if(j) PORTB=(PORTB<<1)+1;             //Si j es distinto de cero, desplazamos 1 bit el PORTB.
  41.   else PORTB=254;                       //de lo contrario PORTB=254
  42.         secondCLK=1;                          //ponemos a uno el pin secondCLK
  43.         Reset=0;                              //ponemos a cero el pin Reset, para almacenar los nuevos datos en los registros.
  44.   }while(++j<8);                        //predecrementamos j, y mientras sea menor que 8 continuamos el ciclo.
  45.   }
  46.  
  47. //Funcion Primcipal***************************************************************************************8
  48.  
  49. main(){  
  50.         CMCON=7;                  //Apagamos los comparadores Analogicos
  51.         TRISB=0;                  //Todo el puerto B como salida
  52.         TRISC=0;                  //Todo el puerto C como salida
  53.         TRISD=0;                  //Todo el puerto D como salida
  54.   PORTC=6;                  //PORTC sera igual a 6.
  55.   Enable=0;                 //ponemos a cero el pin Enable, para habilitar los registros.
  56.   while(1)                  //inicio del ciclo infinito.
  57.           print_matriz5x7("0123456789ABCDEFGHIK"); //Mandamos a imprimir la cadena a los display de 5x7.
  58. }

El código fue hecho en MikroC v3.2, tambien adjunto los archivos correspondientes a la simulación y el código fuente
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Abril de 2010, 12:17:36
buen aporte bigluis, muchas gracias

 :-/
Título: Re: De matriz de leds, a letrero electronico
Publicado por: marturetjulio en 02 de Mayo de 2010, 03:13:36
hola saludos a todos los amigos del foro..queria solicitarles su ayuda en un codigo es acerca de una matriz de led 8x8 que estoy tratando de entender, ya lei los tutoriales del amigo ariel en ucontrol y pude avanzar un poco pero ahora tengo un problema y es que quisiera desplazar una letra atravez de la matriz ya logre escribirla pero no se como desplazarla...he visto los codigos de cryn y son realmente sorprendentes pero desafortunadamente son un poco complejos para mi por eso es que les coloco mi codigo para ver si este se puede adaptar para rotar la letra de izquierda a derecha o no se entender como hacerla porque he leido los codigos y no encuentro como adaptarlos al que yo hice...bueno espero no molestar mucho y de ante mano gracias por su ayuda les adjunto la simulacion y el codigo.


#include <18f452.h>
#fuses xt,nolvp,nowdt,noprotect
#use delay(clock=4000000)
#BYTE PORTB = 0x06
#BYTE PORTD = 0x08

int8 LETRA_A[8]={0X00, 0XFE, 0X11, 0X11, 0X11, 0X11, 0XFE, 0X00};   //la letra A
int1 columnas[16]={1,0,0,0,0,0,0,0};
int8 i=0;
int8 x=0;
int8 y;
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
void main(){
  set_tris_b(0);   
  set_tris_d(0);
  output_low(PIN_D0);
while (TRUE){
 for(x=0;x<=20;x++){
 for(i=0;i<=7;i++){
  delay_ms(1);
  output_bit(PIN_D1,columnas);
  delay_us(2);
  output_low(PIN_D0);
  delay_us(2);
  output_high(PIN_D0);
  output_b(~LETRA_A); 
  delay_ms(1);
}

}
 // shift_left(&LETRA_A,8,0);   
 rotate_left(&LETRA_A,8);
delay_ms(10);
}
}


Título: Re: De matriz de leds, a letrero electronico
Publicado por: marturetjulio en 05 de Mayo de 2010, 13:23:23
hola cryn no se si leiste mi post pero alguna vez intentaste rotar la letra en la matrix de led empleando la instrucion rotate_left, estoy intentando usar esa instruccion y ella se desplaza solo en 8 posiciones como podria hacer para que se siguiera desplazando
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 05 de Mayo de 2010, 14:31:54
Hola marturetjulio,

Si acabo de leer tu post y vi tu simulación. Esa forma de realizarlo no está mal, ya que es la que más o menos plantie con mi código, se debe considerar un buffer, es decir unas variables temporales (o arreglos de preferencia) donde iras haciendo la rotación de tu letra y posteriormente enviar tu buffer al registro de desplazamiento, y no enviar los datos tal como son rotados, ya que lo veo muy confuso y difícil al momento de manejar en código, por eso que tus datos se pierden y ya solo envías ceros al registro por eso no puedes ver más nada.

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: marturetjulio en 06 de Mayo de 2010, 22:02:42
HOLA CRYN GRACIAS POR TU EXPLICACION PERO POR MAS QUE TRATE NO ME DABA ASI...ENTONCES BUSQUE ESTA EXPLICACION DEL AMIGO PALMER SOBRE COMO HACER EL DESPLAZAMIENTO, ES ESTA.

bueno te voy a explicar mas o menos espero darme a entender lo hago en c (ccs) pero creo que la teoria seria la misma para asm

1° lo que la matriz debe hacer es un barrido en todas las columnas n columnas (en mi caso es por columnas) yo utilizo un for,
    dentro del for va el encendido de las columnas, ya sea con 1 o 0 de acuerdo a tu conexion, tambien dentro de ese mismo for
    le doy un valor al puertob que encenderia las filas (seria el dato), para probar le damos el mismo valor de i y tendrias lo que tu mencionas
    un mensaje fijo puede que salga al reves o algo asi pero no te preocupes ya lo cmpondremos

2° un segundo for lo utilizo para repetir n veces una misma posicion para el valor del puertob (filas), o sea repetir n veces el for anterior,

3° aqui esta el meollo del asunto, para poder desplazar el mensaje necesitas tener una referencia de donde empezar o terminar,
    y utilizo un tercer for que es un contador.... podria llamarlo contador general, entonces, este contador le dara el valor de desplazamiento
    a la matriz.

en lenguaje ccs quedaria algo asi:

3er for(cont=0;cont<capacidad de memoria;cont++)
      {
       dir_de_mem=cont; esto te dara el desplazamiento
       2° for(j=0;j<numero de repeticiones por posicion;j++)
           {
            1er for(i=;i<;i++)
                  {
                   porta=i;
                   portb=origen_de_datos(dir_de_mem--);
                   retardo(de unos 25 ms);
                   }
            }
       }

en resumen: el barrido, el numero de repeticiones por posición y el desplazamiento.


Y  TRATE DE ENTENDERLA Y PUDE HACER EL CODIGO, AHORA SI SE DESPLAZA HACIA LA IZQUIERDA PERO NO SE PORQUE SALE COMO UN SUCIO QUE AFECTA LA DATA QUE SALE Y QUE SE VA DEZPLAZANDO...ME PREGUNTABA SI ALGUNO DE LOS AMIGOS PODIA HECHARLE UNA MIRADA Y VER EL PORQUE  ESTE ES EL CODIGO Y LA SIMULACION..GRACIAS DE ANTEMANO A TODOS POR POSTEAR SUS PROYECTOS Y GRACIAS A DIOS POR CREAR PERSONAS TAN AMABLES COMO LO SON LA MAYORIA DE LOS QUE AYUDAN EN EL FORO..SALUDOS


#include <18f452.h>
#fuses xt,nolvp,nowdt,noprotect
#use delay(clock=4000000)
#BYTE PORTB = 0x06
#BYTE PORTD = 0x08


int LETRA_J[8]={0X40, 0X80, 0X81, 0X81, 0X7F, 0X01, 0X01, 0X00};   //la letra J
int LETRA_U[8]={0X00, 0X7F, 0X80, 0X80, 0X80, 0X80, 0X7F, 0X00};   //la letra U
int LETRA_L[8]={0X00, 0XFF, 0X80, 0X80, 0X80, 0X80, 0X80, 0X00};   //la letra L
int LETRA_I[8]={0X00, 0X81, 0X81, 0XFF, 0X81, 0X81, 0X00, 0X00};   //la letra I
int LETRA_O[8]={0X00, 0X3C, 0X42, 0X81, 0X81, 0X81, 0X42, 0X3C};   //la letra O
int LETRA_M[8]={0X00, 0XFF, 0X02, 0X04, 0X04, 0X02, 0XFF, 0X00};   //la letra M
int1 columnas[49]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int8 i=0;
int8 x=0,z;
int8 y;
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
void main(){
  set_tris_b(0);   
  set_tris_d(0);
  output_low(PIN_D0);
  output_b(0);
while (TRUE){
 for(y=49;y>0;y--){
 z=y;
 for(x=0;x<=1;x++){
 output_b(0);
 for(i=0;i<=49;i++){
  delay_ms(1);
  output_bit(PIN_D1,columnas);
  delay_us(2);
  output_low(PIN_D0);
  delay_us(2);
  output_high(PIN_D0);   
  output_b(~LETRA_J[z++]);
}

}
}
}
}

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 07 de Mayo de 2010, 13:36:38
Hola marturetjulio,

Bueno es difícil saber porque sucede ese paso de la basurita, pero al menos ya haz logrado un muy buen avance.

Me parece que estás refrescando por columnas, y eso no está mal, pero no es lo adecuado al menos para este cartel de más columnas que filas, lo mejor es enviar el dato de las columnas a los registros de desplazamiento fila por fila y mediante un puerto completo y transistores encender solamente una fila a la vez, se debe a muy alta velocidad ver más o menos algo así (http://www.todopic.com.ar/foros/index.php?topic=25723.msg212971#msg212971)

Te recomiendo que veas ese hilo completo hay muy buenos conceptos y sugerencias para un mejor manejo de un cartel. Ya que la idea es lo principal y de ahí se pasa al lenguaje que más gustes.

Y para un mejor manejo de los mensajes, teniendo almacenado todo el abecedario de preferencia en la memoria flash del micro y guardar el mensaje que se va a pasar por el cartel directamente como cadena ASCII, te recomiendo ver y tratar de entender el código que deje en este tema (http://www.todopic.com.ar/foros/index.php?topic=19091.msg201217#msg201217).

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: marturetjulio en 09 de Mayo de 2010, 12:40:01
hola amigo pero como podría hacer esto...

"Me parece que estás refrescando por columnas, y eso no está mal, pero no es lo adecuado al menos para este cartel de más columnas que filas, lo mejor es enviar el dato de las columnas a los registros de desplazamiento fila por fila y mediante un puerto completo y transistores encender solamente una fila a la vez"

fijate yo entiendo que debo enviar bit a bit al registro de desplazamiento...corrigeme si me equivoco..y si es asi como podria enviar el dato de 8 bits que antes enviaba por las filas por el registro de desplazamiento...disculpame tanta molestia es solo que me gusta aprender bien las cosas..leí los codigos y el que tu me colocaste tambien pero hay instrucciones que no se como trabajan por ejemplo esta load_letra(mensaje[msj][letra]);   se supone que load_letra(int caracter) es una funcion que debe llevar dentro un caracter pero en ves de eso esta mensaje[msj][letra]    osea 2 arreglos naguara alli me perdi y claro en muchas otras cosas jeje pero eso nunca lo habia visto disculpa mi ignorancia pero en ese caso se multiplican o se suman los valores de los arreglos o que ocurre en esos casos porque eso no lo habia visto yo antes...voy a tratar de buscarlo
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 10 de Mayo de 2010, 18:14:03
Lo que deberías hacer es enviar los datos de todas las columnas correspondientes a una fila primeramente a los registros de desplazamiento, después las columnas de toda la otra fila y así sucesivamente...

Citar
fijate yo entiendo que debo enviar bit a bit al registro de desplazamiento...corrigeme si me equivoco..y si es asi como podria enviar el dato de 8 bits que antes enviaba por las filas por el registro de desplazamiento...
Tendrías que hacer precisamente eso, coger bit a bit y enviarlo al registro de desplazamiento, para ello te puede ayudar la función output_bit dentro de un ciclo for e ir desplazando bit a bit cada byte, más o menos como hice en mi función void cargar(int datob) en el código.

Citar
hay instrucciones que no se como trabajan por ejemplo esta load_letra(mensaje[msj][letra]);   se supone que load_letra(int caracter) es una funcion que debe llevar dentro un caracter pero en ves de eso esta mensaje[msj][letra]    osea 2 arreglos
Efectivamente load_letra es una función que recibe un byte como parámetro y por tanto mensaje[msj][letra] hace referencia a un byte, mensaje[ x ][ y ] es un arreglo bidimensional de bytes o también casualmente conocida como matriz.

Una matriz tiene 2 indices, va más o menos así:

matriz[3][3]= 1   2   3
                   4   5   6
                   7   8   9

el ejemplo que te puse es una matriz 3x3 en CCS la declaras así:

int8 matriz[3][3]={{1,4,7},{2,5,8},{3,6,9}};
y para llamar/usar a los datos/bytes de la matriz usas 2 indices, como un 'x' y 'y' del sistema cartesiano, para nuestro ejemplo:
matriz[1][1]=1
matriz[1][2]=4
matriz[1][3]=7
....
matriz[3][2]=6
matriz[3][3]=9

Para que complicarme la vida si podría usar un arreglo unidimensional? y hacer:
int array[9]={1,2,3,4,5,6,7,8,9};
simplemente yo escogí usar la bidimensional, ya que al usar los 2 índices me era más fácil desplazarme con todos los datos que el cartel necesitaba.


Es un poco complicado para mi explicar estás ideas, pues al inicio es también un mundo algo complicado esto de los carteles, cuando comprendas algunas ideas de su funcionamiento te será más fácil programarlas.

Lo que te recomiendo es que leas más detenidamente los consejos y sugerencias que hay en el primer link que te deje en mi anterior post, y quizá las imágenes que dejé en ese mismo link, en la respuesta #50 que publiqué en ese hilo puse unas imágenes que explican a grandes rasgos más o menos como va el asunto.

La idea del arreglo bidimensional que usé para el código de mi cartel quizá no sea la correcta, pero al menos me sirvió de mucho para empezar y comprender la idea de los carteles.

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: marturetjulio en 10 de Mayo de 2010, 20:45:49
hola amigo Cryn muchisimas gracias por tu explicación...la entendi y bueno he tratado de seguir tus consejos y bueno logre hacer un código según lo que entendi lo voy a postear espero me puedas guiar y decirme si esa es la forma de paso tuve que leer el data sheet del 4094 que es el registro de desplazamiento que tu empleas...discúlpame de verdad que sea tan terco y no me conforme con copiar tu codigo y simularlo...es solo que quisiera hacerlo yo mismo no con la calidad que tu tienes claro pero bueno que al menos funcione el desplazamiento jeje...gracias de verdad por todas tus explicaciones amigo yo sigo intentando e intentando jeje.. este codigo es un arreglo que le hice a un codigo que posteo una ves ariel en un codigo que maneja un 4094 con display. a quien le agradesco mucho tambien por sus tutoriales en ucontrol.

#include <18f452.h>
#fuses xt,nolvp,nowdt,noprotect
#use delay(clock=4000000)
#BYTE PORTB = 0x06
#BYTE PORTD = 0x08
#define DATA PIN_D1
#define CLOCK PIN_D0
#define STROBE PIN_D2

int   const letra[8]={0x3E,0X08, 0X08, 0X08, 0X08, 0X08,0X88,0x70};
int filas[8]={128,64,32,16,8,4,2,1};
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
int t;

// declaración de la función escribir_4094
void escribir_4094(int caracter);
// programa principal
void  main(){
   output_d(0x0);
   output_b(0x0);
   set_tris_d(0x0);
   set_tris_b(0x0);
  while(true){
     for(t=0;t<8;t++){
         escribir_4094(t);             
         delay_us(30);
     }
   }
}
void escribir_4094(int caracter){
int contador_8;
   output_low(DATA);
   output_low(STROBE);
   output_low(CLOCK);
   for(contador_8=0;contador_8<8;contador_8++){
      output_bit(DATA,bit_test(letra[caracter],contador_8));
      output_high(CLOCK);
      delay_cycles(1);
      output_low(CLOCK);
   }
   output_b(~filas[caracter]);
   output_low(CLOCK);
   output_high(STROBE);
   delay_cycles(1);
   output_low(STROBE);
   }



Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 10 de Mayo de 2010, 22:41:11
Vas por muy buen camino marturetjulio, ya dentro te poco te sacarás la espina del cartel.

No hombre, no te preocupes, entiendo perfectamente y me gusta tu idea de sacar tus propias cosas adelante.

No es ningún problema usar un registro de desplazamiento u otro, ya que todos funcionan prácticamente igual, la característica de los 4094 es el strobe, que los 74164 no lo poseen, con el strobe tienes un mejor control. Si te recomendaría un registro sería el TPIC6595 de texas, que es un mounstrito en suministro de corriente ya que posee salidas de mosfet, aunque me parece que son algo difíciles de conseguir y hasta quizá un poco caros. Pero los 74HC595 son como sus hermanos menores y en brillo para los leds son la mejor solución, los 164 no los probé, me quedé con los tpic y con los 595 (que ambos tienen strobe) y no probé nada más, ya que los 4094 son una lágrima para el brillo de los leds.

Tu código va muy bien, ahora te falta el desplazo que tanto buscas. Algo que puedo reiterarte de las recomendaciones es que utilices un buffer, es decir un otro arreglo donde ahi puedas cargar tu mensaje a mostrar. Ya que me parece que tienes en el cartel la letra J desplazada hacia abajo, por falta de un buffer.

Hay dos opciones que puedes usar para el desplazo:
-Guardar en tu arreglo las letras por filas
-Guardar en tu arreglo las letras por columnas

por filas:                        por columnas:              orden en el array:

00011000                       00111111                    array[0]
00111100                       01000100                    array[1]
01100110                       01000100                    array[2]
01100110                       01000100                    array[3]
01111110                       00111111                    array[4]
01100110                       
01100110                       
00000000                       

letra 8x8                        letra 5x7
Ambos son una letra 'A'

Con la primera opción tienes que hacer algo similar a lo que hice acá en mi código, no necesariamente con una matriz, también podría ser en un arreglo. Como te dije yo escogí la matriz porque me pareció más sencillo el manejo e ir desplazando los datos del buffer que posteriormente se enviará a los registros, el buffer se carga con las letras del mensaje que quieres mostrar.

Con la segunda opción deberás reacomodar los datos de las letras, ya que las tendrías almacenadas por columnas, pero esta reacomodación, te dará un mejor control del cartel, ya que el desplazamiento ya no será por el mismo desplazamiento de los bytes(como el caso anterior), sino por un índice o puntero a las columnas que estarán en tu buffer.

Esta segunda idea no la se explicar muy bien, pero seguro que comprendes la idea del master BrunoF que seguramente la ha dejado plasmada en el link del hilo donde habían las imágenes fila por fila. Como te dije para mi es un poco difícil poder explicarla, ya que ni yo la comprendí a la primera :oops:  jeje

A seguirle machando, ya de acá a unos días o mucho menos seguro que nos sorprendes con tu avance.

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 10 de Mayo de 2010, 23:03:05
Bueno. Creo que es hora de explicarlo paso a paso. Hay mucha gente interesada en esto por lo visto. Hubiese jurado que Suky había hecho un tutorial de matrices de LEDs, pero no logré encontrarlo.

En cuanto pueda empiezo por lo más básico. Crear el buffer que contendrá la información a mostrar y en base a ello empezaremos a ver cómo manipularlo. Por ahora deberíamos empezar con eso y aprender a controlar el tema del refresco,etc.

En cuanto tenga un rato abro un hilo para dedicarselo a ésto. Mis carteles comerciales utilizan una cierta estructura creada por mi, que podríamos llegar a adoptar. Habría que ver qué sale y tal vez podamos hasta estandarizar un poco todo.

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: MLO__ en 11 de Mayo de 2010, 00:08:32
Vendría muy bien .. no tenes un videillo por ahí para ir abriendo boca?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 14 de Mayo de 2010, 11:07:23
Cryn: buenos días. Tengo algunos dudas con respecto al programa de la hoja 5 , te agradecería si pudieras resolverlas.
int matriz[matriz_num+1][size_matriz_col]={"\0"};   // por qué se inicializa con '0' ?


#int_TIMER0
void  TIMER0_isr(void){

   ShowFila();                  //Mostremos la fila actual...
   Fila++;
   if(Fila==8){
      Fila=0;
      VSync=1;                         
      if(Inhibit!=0)            // no entiendo bien este if-else
         Inhibit--;
      else
         desplazar_izq();
  }
  else
     VSync=0;
}

Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 14 de Mayo de 2010, 11:32:32
int matriz[matriz_num+1][size_matriz_col]={"\0"};   // por qué se inicializa con '0' ?
Para que no me muestre basura por la matriz al comienzo del programa.

#int_TIMER0
void  TIMER0_isr(void){

   ShowFila();                  //Mostremos la fila actual...
   Fila++;
   if(Fila==8){
      Fila=0;
      VSync=1;                         
      if(Inhibit!=0)            // no entiendo bien este if-else
         Inhibit--;
      else
         desplazar_izq();
  }
  else
     VSync=0;
}
Este If else sirve para mostrar una determinada cantidad de veces lo que el buffer tiene, para que posteriormente se desplaze el mensaje una posición, en mi caso muestro 5 veces el mismo cuadro y después desplazo, ese valor determinará la velocidad del desplazamiento, si se muestra muchos más cuadros obviamente el desplazamiento será más lento, y por el contrario mientras menos cuadros más rápido pasa el mensaje y a veces no se puede ni leer XD

Un cuadro para mi es la muestra de una pasada de todas las filas.

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 14 de Mayo de 2010, 11:44:59
Muchas gracias Cryn, qué velocidad de respuesta !!
Por último te pido, si es posible, que me explique aunque sea en pocas palabras esta función:
void desplazar_izq(void){
   int i,j,a;

   if(desplazos==8 || desplazos==0){
      load_letra(mensaje[msj][letra]);
      desplazos=0;
   }
   for(i=0;i<8;i++){
      for(j=0;j<6;j++){
         a=matriz[j];
         carries[j]=shift_left(&a,1,0);
         matriz[j]=a;
      }
      for(j=0;j<6;j++){
         if(j!=5)
            matriz[j]|=carries[j+1];
         else
            matriz[j]|=carries[0];
      }
   }
   Inhibit=5;
   desplazos++;
   if(desplazos==8){
      letra++;
      if(letra>msj_length[msj])
         letra=0;
   }
}


Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 14 de Mayo de 2010, 13:11:32
Código: C
  1. void desplazar_izq(void){
  2.    int i,j,a;
  3.  
  4.    if(desplazos==8 || desplazos==0){  //uso caracteres de 8x8, por tanto deberé cargar una nueva letra si ya se han hecho 8 desplazos o ninguno.
  5.       load_letra(mensaje[msj][letra]);  //cargo la nueva letra
  6.       desplazos=0;                           //restablezco el valos de desplazos
  7.    }
  8.    for(i=0;i<8;i++){  //este for desplaza un bit a la izquierda de mi buffer matriz de cada fila, la matriz es de 6x8, en hadware tenía un cartel 8x40,
  9. //con un buffer de 5x8 bastaba, pero el 6to apareció por ser uno temporal para ir cargando ahí el nuevo caracter
  10.       for(j=0;j<6;j++){
  11.          a=matriz[j][i];  se carga el primer byte en una variable temporal
  12.          carries[j]=shift_left(&a,1,0); //desplazo esa variable temporal un bit a la izquierda, y almaceno en valor desplazado en un arreglo.
  13.          matriz[j][i]=a; //guardo el nuevo valor de la variable temporal que esta desplazada, en la misma posición de antes
  14.       }
  15.       for(j=0;j<6;j++){  //coloco los carries donde corresponden
  16.          if(j!=5)
  17.             matriz[j][i]|=carries[j+1];
  18.          else
  19.             matriz[j][i]|=carries[0];
  20.       }
  21.    }
  22.    Inhibit=5;   //restablezco valor de Inhibit
  23.    desplazos++;  //incremento el valor de desplazos
  24.    if(desplazos==8){   //si se han hecho 8 desplazos
  25.       letra++;  //hay que pasar a mostrar la siguiente letra del mensaje
  26.       if(letra>msj_length[msj])   //si se ha llegado a la última letra
  27.          letra=0;     //se comienza desde la primera letra del mensaje
  28.    }
  29. }

Eso más o menos...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 14 de Mayo de 2010, 15:32:59
He creado a comenzar una librería para explicar y estandarizar un poco todo.

Está aquí: Librería Matríz de LEDs Universal[Compilador CCS] (http://www.todopic.com.ar/foros/index.php?topic=30658.0)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 14 de Mayo de 2010, 18:05:18
Cryn, nuevamente gracias !
Estoy simulando tu código en proteus y me parece que algo tengo mal ya que el comportamiento no es el correcto.
Lo hice con un 16F628A ya que así lo tenía armado anteriormente.
Te adjunto los archivos por si podés darle una mirada.
Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 14 de Mayo de 2010, 18:18:13
brunoF, espero ansioso ese tutorial
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 15 de Mayo de 2010, 11:07:04
Cryn, nuevamente gracias !
Estoy simulando tu código en proteus y me parece que algo tengo mal ya que el comportamiento no es el correcto.
Lo hice con un 16F628A ya que así lo tenía armado anteriormente.
Te adjunto los archivos por si podés darle una mirada.
Saludos.
Está casi todo OK, si cambias el orden de las matrices en tu esquema verás el mensaje desplazandose, la que está de 1ra a la izquierda la llevas al lado 1ro derecha, el 2izquierda será 2derecha y así sucesivamente..

Y una cosa más:
const int msj_length[num_msj]={31};
sirve para determinar el largo del mensaje, en tu caso deberías usar 4, en vez de 31. Esa parte la deje así porque ya no trabajé mucho sobre el cartel, pero podrías optimizar el código para que el programa sea el que cuente la cantidad de caracteres (strlen, por ejemplo de la librería string.h) o directamente buscar el caracter NULL para que se sepa que se ha terminado el mensaje.

Te adjunto el esquema modificado
Título: Re: De matriz de leds, a letrero electronico
Publicado por: marturetjulio en 15 de Mayo de 2010, 23:05:57
hola amigos he intentado lo que me aconsejo cryn pero no entiendo como crear el otro buffer y ir rotando sobre el de verdad que lo intente de varias formas y nada...solo quiero aprender a rotar las letras estoy empleando un 4094 el cual emplea 3 pines para enviarle la data...bueno yo entiendo que primero se coloca el STROBE en bajo y el CLOCK Y EL DATO.. luego envio los primeros 8 bits al registro de desplazamiento y luego se coloca al STROBE en alto para que el registro los muestre en su salida...pero como hago ahora para rotar los valores de las columnas...yo entiendo que debo rotarlo para ver el desplazamiento pero no se como hacerlo en codigo...espero me puedan ayudar y  disculpen mi ignorancia...

este es el código que he realizado pero con su simulación...lo que hice fue colocarle otro contador para que no se corra hacia abajo la letra pero por fa que alguien me ayude a crear otro arreglo para rotar porque no entiendo como hacerlo

#include <18f452.h>
#fuses xt,nolvp,nowdt,noprotect
#use delay(clock=4000000)
#BYTE PORTB = 0x06
#BYTE PORTD = 0x08
#define DATA PIN_D1
#define CLOCK PIN_D0
#define STROBE PIN_D2

int   const letra[16]={0x3E,0X08, 0X08, 0X08, 0X08, 0X08,0X88,0x70,0X00, 0X7F, 0X80, 0X80, 0X80, 0X80, 0X7F, 0X00};
int desplazando[8];
int filas[8]={128,64,32,16,8,4,2,1};
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
int t;

// declaración de la función escribir_4094
void escribir_4094(int caracter);
// programa principal
void  main(){
   output_d(0x0);
   output_b(0x0);
   set_tris_d(0x0);
   set_tris_b(0x0);
  while(true){
     for(t=0;t<8;t++){
         escribir_4094(t);       
         delay_ms(3);
     }
   }
}
void escribir_4094(int caracter){
int contador2;
int contador_8;
for(contador2=0;contador2<8;contador2++){
   output_low(DATA);
   output_low(STROBE);
   output_low(CLOCK);
   for(contador_8=0;contador_8<8;contador_8++){
      output_bit(DATA,bit_test(letra[caracter],contador_8));
      output_high(CLOCK);
      delay_cycles(1);
      output_low(CLOCK); 
   }
   output_b(~filas[caracter]);
   output_low(CLOCK);
   output_high(STROBE);// transfiere los datos a las salidas del registro 4094
   delay_cycles(1);
   output_low(STROBE);
  }
}
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 17 de Mayo de 2010, 14:58:23
Cryn, era eso nomás, el orden de las matrices, muchas gracias.
Tengo pensado armar fisicamente una matriz de 8x24. Hace un tiempo compré leds de 5 mm de los comunes, tu qué opinas? utilizo esos leds o compro los que tienen mayor brillo ?
Con respecto al registro de desplzamiento, compro los 4094 o 595 ?
Es necesaria la utilización de los ULN2803 o 2003?
Saludos.
Fernando.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 17 de Mayo de 2010, 16:24:12
hola amigos he intentado lo que me aconsejo cryn pero no entiendo como crear el otro buffer y ir rotando sobre el de verdad que lo intente de varias formas y nada...solo quiero aprender a rotar las letras estoy empleando un 4094 el cual emplea 3 pines para enviarle la data...bueno yo entiendo que primero se coloca el STROBE en bajo y el CLOCK Y EL DATO.. luego envio los primeros 8 bits al registro de desplazamiento y luego se coloca al STROBE en alto para que el registro los muestre en su salida...pero como hago ahora para rotar los valores de las columnas...yo entiendo que debo rotarlo para ver el desplazamiento pero no se como hacerlo en codigo...espero me puedan ayudar y  disculpen mi ignorancia...

este es el código que he realizado pero con su simulación...lo que hice fue colocarle otro contador para que no se corra hacia abajo la letra pero por fa que alguien me ayude a crear otro arreglo para rotar porque no entiendo como hacerlo
Hola marturetjulio, como te dije en el MP la idea del buffer es solamente por tener una copia, para poder manipular a gusto y placer los datos que se enviaran al cartel.


Cryn, era eso nomás, el orden de las matrices, muchas gracias.
Tengo pensado armar fisicamente una matriz de 8x24. Hace un tiempo compré leds de 5 mm de los comunes, tu qué opinas? utilizo esos leds o compro los que tienen mayor brillo ?
Con respecto al registro de desplzamiento, compro los 4094 o 595 ?
Es necesaria la utilización de los ULN2803 o 2003?
Dependerá del uso que le des, o mejor dicho del ambiente donde lo colocarás, si es para ambiente cerrado, quizá con los leds comunes no haya ningún problema, si más bien será para verlo en las afueras, con mucha luz solar, los led's de alto brillo serán los que seguramente darán un mejor rendimiento, aunque tengas leds de alto brillo casi siempre estarás a merced de ese brillo y a la vez el ángulo de visibilidad, lo que te obligará a hacer algunas pruebas para llegar al led adecuado.

Los 4094 son muy pobres en corriente, y por tanto en brillo para los leds y necesitan ayuda de los ULN2803
Los 74HC595 son muy buenos con corriente, prácticamente no hace falta usar ULN's.

Los ULN2003 y los ULN2803 difieren en pines, el 2003 tiene 7 salidas, el 2803 lleva 8. Después en características eléctricas son similares. Te conviene usar el 2803, porque para tu cartel solo usarías 3, en cambio si usas los 2003 necesitarás forzosamente 4 integrados, y quedarán pines sin uso.

Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 17 de Mayo de 2010, 19:32:26
Cryn, por lo pronto voy a utilizar los leds comunes y los 74hc595, en un futuro trataré de hacer una matriz más grande (por ej 8x80) con los ULN, 74HC595 y leds de alto brillo.
En un próximo correo paso el esquemático antes de hacer la placa.
Gracias y saludos.

Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 23 de Mayo de 2010, 17:29:32
Estimados, les adjunto un esquemático de la matriz de 8x24 que voy a realizar. Si pueden mirenlo para saber si tengo que hacerle algún retoque. Muchas gracias. Fernando
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 23 de Mayo de 2010, 20:58:31
Salvo los transistores, todo bien. Los transistores que sean un BD139 por ejemplo, u otro de más corriente, por lo menos 1 ó 2A, ya que como tienes 24 columnas, y tus leds digamos que cada uno a 25mA consumirás 600mA con toda una fila encendida, y un BC557 se queda corto, puede que caliente mucho, se queme, o que no tengas un brillo bueno.

No te olvides de los condensadores de desacoplo de unos 100nF en el micro y en cada integrado.

saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 24 de Mayo de 2010, 00:07:30
Salvo los transistores, todo bien. Los transistores que sean un BD139 por ejemplo, u otro de más corriente, por lo menos 1 ó 2A, ya que como tienes 24 columnas, y tus leds digamos que cada uno a 25mA consumirás 600mA con toda una fila encendida, y un BC557 se queda corto, puede que caliente mucho, se queme, o que no tengas un brillo bueno.

No te olvides de los condensadores de desacoplo de unos 100nF en el micro y en cada integrado.

saludos.
Gracias Cryn, pero el BD169 no es NPN? Yo necesitaría PNP. Conoces algún modelo posible?
Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 24 de Mayo de 2010, 00:15:32
Si, me equivoqué de numero era el BD140, ese si es PNP, como te dije, en realidad puede ser cualquier otro que soporte más corriente que uno de propósito general.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 29 de Mayo de 2010, 08:28:14
Gente: no sé si es un tema para tratarlo aquí, se los dejo y de última ustedes me orientan por donde puedo buscar.
Estoy haciendo en Eagle el circuito de la matriz de 8x24 y tengo el sig. inconveniente:
En el transistor BD140, según EAGLE, el pin 2 es el colector, el pin 1 es el emisor y el pin 3 es la base y según la hoja de datos el pin 1 es la base, el pin 2 el colector y el 3 el emisor.
Puede ser posible o me estoy equivocando en algo?
Muchas gracias.
Saludos. Fernando.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: stk500 en 30 de Mayo de 2010, 04:34:08
Segun que fabricante cambian la posiciones de los pines, el mismo problema estuve yo asi que fijaste que fabricante es, y si no lo sabe pregunta donde lo compraste.
aqui vera y te dara cuenta (http://www.datasheetcatalog.net/es/datasheets_pdf/B/D/1/4/BD140-10.shtml)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 31 de Mayo de 2010, 08:57:28
Rafael, tenés razón !! Cambian el emisor con la base. Muchas gracias. Saludos. Fernando.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 22 de Julio de 2010, 19:28:23
Gente, como andan? Les comento que conecté todo, medi y aparentemente estaba todo bien. Coloqué el PIC y los 74HC595, conecté los +5 V y pasado un tiempo se quemaron el PIC y los registros. No sé qué pasó ??
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 23 de Julio de 2010, 14:17:39
seguro que es un problema de tu hardware, cual es tu esquema?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 23 de Julio de 2010, 19:24:00
Cryn, en este link está el esquemático:  http://rapidshare.com/files/408690238/matriz_8x24-3.sch.pdf
No encuentro el error y tengo miedo de colocar nuevamente otro PIC y que me pase lo mismo.
Gracias y saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: 1jabato1 en 26 de Julio de 2010, 17:02:53
Hola fgaretto.

Perdona que me entrometa,¿estas haciendo un refresco para encender los leds,o enciendes todos a la vez?.Si enciendes todos a la vez,es posible que los registros no aguanten la corriente y se crucen,provocando la rotura del pic también.

Saludos!!!
Javi.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Julio de 2010, 17:36:03
Hola fgaretto, vi tu esquema, parece estar todo bien

Por que no intentas probar por partes, primero solamente los leds correspondientes a un registro, después el otro, y al final juntas todo, quizá en ese trabajo descubrás pro donde va tu error.

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 27 de Julio de 2010, 19:19:51
Hola fgaretto.

Perdona que me entrometa,¿estas haciendo un refresco para encender los leds,o enciendes todos a la vez?.Si enciendes todos a la vez,es posible que los registros no aguanten la corriente y se crucen,provocando la rotura del pic también.

Saludos!!!
Javi.

1jabato1: hago refresco por filas. Mañana si puedo adjunto el programa en C.
Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 27 de Julio de 2010, 19:28:01
Hola fgaretto, vi tu esquema, parece estar todo bien

Por que no intentas probar por partes, primero solamente los leds correspondientes a un registro, después el otro, y al final juntas todo, quizá en ese trabajo descubrás pro donde va tu error.

saludos
Cryn, voy a probar de la forma que me dices. Luego te comento. Muchas gracias.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 28 de Julio de 2010, 15:21:46
Este es el soft:
#include <16f876a.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define  DATA    pin_a0
#define  CLOCK   pin_a1
#define  STROBE  pin_a2   

#DEFINE COLUMNAS 40       //Defino cantidad de columnas a usar
int8  Mensaje[COLUMNAS]={126   32   16   32   126   0   62   72   72   72   62
0   64   64   126   64   64   0   126   88   84   114   0   66   126   66   0 
70   74   82   98   66   0
};
 //Almacena los datos a mostrar en el cartel
int8 Mascara[8]={0b10000000,0b01000000,0b00100000,0b00010000,0b00001000,0b00000100,0b00000010,0b00000001};
int8 FILAX[8]={0b11111110,0b11111101,0b11111011,0b11110111,0b11101111,0b11011111,0b10111111,0b01111111};
int8 i,Inicio;
int1 Vsync;
int8 Fila;
int8 Inhibit;
void ShowFila();
void rotar_izq();
#int_TIMER0
void TIMER0_isr(void){
   ShowFila();
   Fila++;
   if(Fila==8){
      Fila=0;
      Vsync=1;
      if(Inhibit!=0) Inhibit-- ; else rotar_izq();
   }
   else
      Vsync=0;
}     
void main(){
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   enable_interrupts(INT_TIMER0);
   clear_interrupt(INT_TIMER0);
   enable_interrupts(GLOBAL);
   set_tris_a(0);
   set_tris_b(0);
//Apago cartel
   output_b(0xFF);
//Aseguro inicialmente clock en bajo
   output_low(CLOCK);
   output_low(STROBE);
   Fila=0;
   Inhibit=10;
   Vsync=1;
   Inicio=0;
   while(true){}
}
void ShowFila(){
         for(i=Inicio-1;i!=255;i--){
            if((Mensaje & Mascara[Fila])==0) output_low(DATA); else output_high(DATA);
               output_high(CLOCK);
               delay_cycles(1);
               output_low(CLOCK);
         }
         for(i=COLUMNAS-1;i!=Inicio-1;i--){
            if((Mensaje[i-1] & Mascara[Fila])==0) output_low(DATA); else output_high(DATA);
               output_high(CLOCK);
               delay_cycles(1);
               output_low(CLOCK);
         }
         output_b(0xff);
         //output_b(FILAX[Fila]);
         output_high(STROBE);
         delay_cycles(1);   
         output_low(STROBE);
         output_b(FILAX[Fila]);
         
   
}
void rotar_izq(){
   Inicio++;
   if(Inicio==COLUMNAS){
      Inicio=0;
   }
}
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 28 de Julio de 2010, 15:30:26
Adjunto el .C y el de Proteus.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 02 de Agosto de 2010, 08:44:35
GENTE, BUENAS....
Alguien me podría explicar el primer FOR del cógigo siguiente?  Desde ya muchas gracias y saludos
 
for(i=Inicio-1;i!=255;i--){
            if((Mensaje & Mascara[Fila])==0) output_low(DATA); else output_high(DATA);
               output_high(CLOCK);
               delay_cycles(1);
               output_low(CLOCK);
}

for(i=COLUMNAS-1;i!=Inicio-1;i--){
            if((Mensaje[i-1] & Mascara[Fila])==0) output_low(DATA); else output_high(DATA);
               output_high(CLOCK);
               delay_cycles(1);
               output_low(CLOCK);
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 02 de Agosto de 2010, 12:53:30
Me parece que ese 1er FOR es el que está enviando los datos a través de un registro de desplazamiento. En función a la fila correspondiente del dato Mensaje, a Mensaje no le hace falta algún índice?

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 02 de Agosto de 2010, 15:25:41
Cryn, gracias. Si a Mensaje le falta el indice. Lo que no entiendo es que serían indices negativos, empieza en -1 y termina en -255. Otra cosa, al cambiar el número 255 por otro me da error en el Proteus. La verdad que estoy un poco desorientado.
Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 02 de Agosto de 2010, 18:47:49
Raro que se tenga indice negativo, no lo había visto antes...

Pero si funciona seguramente es por el tema de los desbordes.

No te olvides que un número negativo simplemente es un complemento a 2 de su positivo.

¿Cómo está definido Inicio como int? int16? con signo? sin signo?
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 02 de Agosto de 2010, 19:10:09
Hola.

Como se usa una variable(Inicio) para facilitar las rotaciones, y siendo que el primer bit que envíes de una tanda de refresco a los registros de desplazamiento va a ser el que termine probablemente en la última columna, entonces:

1) Se envía desde el la que sería la última fila hasta la 1era;
2) Al desplazarse el Inicio y quedando transformado en un buffer cíclico, la rutina de refresco puede plantearse como 2 bucles for separados.

Para verlo mejor, qué mejor que un ejemplo?

Supongamos que en un punto X, la variable Inicio = 3;

Entonces, mirando al cartel, la información que debería mostrar el cartel debería estar ordenada así:

Mensaje[3]        Mensaje[4]            Mensaje[5]            Mensaje[...] Mensaje[COLUMNAS-2] Mensaje[COLUMNAS - 1] Mensaje[0] Mensaje[1] Mensaje[2]

Ahora, aplicando 1) en el algorítmo, hay que enviar en orden inverso, quedando:

Mensaje[2] Mensaje[1] Mensaje[0] Mensaje[COLUMNAS-1] Mensaje[COLUMNAS-2] Mensaje[...] Mensaje[Inicio+2] Mensaje[Inicio+1] Mensaje[Inicio]

De esta manera, la primer columna enviada, es en realidad, la última. Esto se debe a que los registros de desplazamiento van desplazando bit a bit la información enviada. El primer bit enviado será el que más lejos llegue en la cascada de registros, debido a que será el que más veces ha sido desplazado por ellos.

Si ahora reemplazo los valores con los del Inicio, verás que queda:

//Mensaje[2] Mensaje[1] Mensaje[0] Mensaje[COLUMNAS-1] Mensaje[COLUMNAS-2] Mensaje[...] Mensaje[Inicio+2] Mensaje[Inicio+1] Mensaje[Inicio]
  Mensaje[Inicio-1] Mensaje[Inicio-2] Mensaje[Inicio-3] Mensaje[COLUMNAS-1] Mensaje[COLUMNAS-2] Mensaje[...] Mensaje[Inicio+2] Mensaje[Inicio+1] Mensaje[Inicio]
  
Y como podrás observar, ocurre un salto del valor del índice brusco(excepto uses 256 COLUMNAS...). El salto aparece, en este caso, del elemento Mensaje[Inicio-3]. Aqui el índice sería 0, y en el próximo elemento(Mensaje[COLUMNAS-1]) el índice será mucho mayor a cero probablemente(sería 79 para 80 COLUMAS).
Ese salto, hace que algunos opten por dividir a la rutina en 2 partes. El 255 de la condición del primer bucle es por el desbordamiento(underflow) de la variable i al querer restarle 1 más cuando ya vale 0.  Si mirás el valor inicial de la variable i en el segundo for, verás que comienza precisament, valiendo COLUMNAS - 1.

Te muestro la rutina de refresco que hice para la Librería Matríz de LEDs Universal[compilador CCS] (http://www.todopic.com.ar/foros/index.php?topic=30658.0)

Código: C
  1. //ENVIO DE COLUMNAS A ENCENDER
  2.    if(!BufferInicio) j = COLUMNAS - 1; else j = BufferInicio - 1;
  3.    for(i =0; i < COLUMNAS; i++)
  4.    {
  5.          if(buffer[j] & mascara) output_high(SHIFT_DATA); else output_low(SHIFT_DATA); //enviar cada columna en alto o bajo segun corresponda con logica invertida
  6.       output_high(SHIFT_CLK);
  7.       output_low(SHIFT_CLK);
  8.      
  9.       if(!j) j = COLUMNAS - 1; else j--;    //j==0?
  10.    }
en la que los dos bucles están combinados en uno solo.

Suerte.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 04 de Agosto de 2010, 17:16:21
Bruno, muchas gracias. Lo voy a analizar. Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 04 de Agosto de 2010, 17:25:37
Raro que se tenga indice negativo, no lo había visto antes...

Pero si funciona seguramente es por el tema de los desbordes.

No te olvides que un número negativo simplemente es un complemento a 2 de su positivo.

¿Cómo está definido Inicio como int? int16? con signo? sin signo?
Inicio está definido como INT8. Bruno dio una explicación. La voy a estudiar, seguramente ahí está la respuesta. Te comento que funcionó la matriz de 8x24, no se quemó nada. Primero probé con un texto fijo y luego con desplazamiento vertical, todo OK.
No me funciona bien con el desplazamiento horizontal, pero seguramente es problema de mi soft.
Por lo tanto voy a trabajar sobre ello.
Tuve que colocar un cristal de 4 MHz ya que con el 20 Mhz no me funciona. Lo probé en un protoboard para prender y apagar un led y tampoco, saben a que se puede deber esto?
Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 04 de Agosto de 2010, 18:16:52
Para 20MHz es un problema de alimentación, asegúrate que la tensión esté en 5V y no te olvides utilizar condensadores de desacoplo de 100nf entre Vcc y Gnd, cada integrado debería tener su condensador de desacoplo y cerca del integrado.

saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 04 de Agosto de 2010, 18:21:30
Raro que se tenga indice negativo, no lo había visto antes...

Pero si funciona seguramente es por el tema de los desbordes.

No te olvides que un número negativo simplemente es un complemento a 2 de su positivo.

¿Cómo está definido Inicio como int? int16? con signo? sin signo?
Inicio está definido como INT8. Bruno dio una explicación. La voy a estudiar, seguramente ahí está la respuesta. Te comento que funcionó la matriz de 8x24, no se quemó nada. Primero probé con un texto fijo y luego con desplazamiento vertical, todo OK.
No me funciona bien con el desplazamiento horizontal, pero seguramente es problema de mi soft.
Por lo tanto voy a trabajar sobre ello.
Tuve que colocar un cristal de 4 MHz ya que con el 20 Mhz no me funciona. Lo probé en un protoboard para prender y apagar un led y tampoco, saben a que se puede deber esto?
Saludos.


No se que PIC estás usando, pero si es un 16F o familia más baja, para cristales de más de 4Mhz tenes que usar el FUSE HS. Con un cristal de 4MHz usá XT.

Saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: fgaretto en 04 de Agosto de 2010, 18:53:12
Bruno, OK, y con respecto a los otros FUSES ?
Estoy utilizando un 16F876A, mi configuración es:
Fuses XT,NOWDT,NOBROWNOUT,NOPROTECT ( con respecto a PUT, debe ir PUT o NOPUT?)
Muchas gracias
Saludos
Fernando
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 04 de Agosto de 2010, 19:43:17
Yo casi siempre uso PUT
Título: Re: De matriz de leds, a letrero electronico
Publicado por: BrunoF en 04 de Agosto de 2010, 21:09:28
Bruno, OK, y con respecto a los otros FUSES ?
Estoy utilizando un 16F876A, mi configuración es:
Fuses XT,NOWDT,NOBROWNOUT,NOPROTECT ( con respecto a PUT, debe ir PUT o NOPUT?)
Muchas gracias
Saludos
Fernando

Como te dice Cryn, mejor PUT excepto requieras un encendido extremadamente rápido del dispositivo. Es mejor poner PUT(Power Up Timer) para asegurar que las tensiones y el cristal estén completamente estabilizados antes de que el uC empiece a ejecutar su firmware.

La configuración está bien, pero recordá que XT es para cristales de hasta 4Mhz. Más que eso usá HS, sino no funciona.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: OSS en 12 de Octubre de 2010, 19:55:45
Saludos Amigos de todo pic, yo tambien he estado algo sumergido en lo de los carteles he armado una matriz de 7x64 no soy un experto en programacion pero quiero suministrar el codgo(psi) y el archivo de simulacion en proteus utilizo el psi porque me facilita la programacion espero migrar al C en un futuro, espero que el codigo los pueda ayudar en algo y si alguien lo puede mejorar(reducir lineas) se los agradeceria esto forma parte de un proyecto que vengo desarrollando poco a poco ire informando de mis avances ya que todavia me falta mucho por hacer y la verdad no tengo muchos conocimientos en programacion hago lo mejor posible   ;-)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: smarkol en 14 de Octubre de 2010, 12:39:35
Salvo los transistores, todo bien. Los transistores que sean un BD139 por ejemplo, u otro de más corriente, por lo menos 1 ó 2A, ya que como tienes 24 columnas, y tus leds digamos que cada uno a 25mA consumirás 600mA con toda una fila encendida, y un BC557 se queda corto, puede que caliente mucho, se queme, o que no tengas un brillo bueno.

No te olvides de los condensadores de desacoplo de unos 100nF en el micro y en cada integrado.

saludos.

en mi caso yo he  realizado una matriz de 7 filas x 60 columnas  lo que implicaria un consumo de 1,5 A por cada fila de acuerdo a lo mencionado y en vez de el BD139 yo he colocado una configuracion darlington a la salida de cada fila con el bc558 y tip42,y para las columnas el 74hc4094 y a la salida de este un bc547 en vez de los ULN los led que he utilizado son difusos,el resultado de esto es que he tenido poco brillo con respecto a lo que deberia tener el led difuso.
mis dudas que tengo repecto a esto:

- debo cambiar a los ULN?
tambien he diseñado una fuente, adjunto el esquematico para que lo vean
- que consideraciones debo tener para esta fuente?

Saludos..
Título: Re: De matriz de leds, a letrero electronico
Publicado por: OSS en 08 de Noviembre de 2010, 20:15:12
Bueno queda decir que en el display 7x64 que arme el consumo es minimo ya que hice la medicion con el amperimetro y apenas pude medir no mas de 0.5 A hay que aclarar que uso una configuracion de barrido por filas esto quiere decir que cada fila estara prendida 1/7 parte por un periodo de 1-2 mS que es como si se estuvieran encendiendo atraves de una especie de "PWM" lo que me lleva a cambiar las resistencias de 100 ohm de cada fila por la de 47 ohm para obtener un brillo mejor aún, he utilizado unos TIP 32 los he sensado y no caientan absolutamente nada no esta mal utilizar los BD 139 van sobrados para esta configuración aqui adjunto algunos archivos y un video de muestra para lo que estoy utilizando esta matriz de leds saludos  ;-)


(http://img202.imageshack.us/img202/1633/matrizled.jpg)

El video, disculpen la resolucion ...
 
.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: redk292 en 17 de Diciembre de 2010, 18:59:00
Como lo prometido es deuda acá esta todo el material, lo prueban y me dicen que les pareció y si se lo puede realizar alguna adaptacion al caso

esta es la direccion donde esta alojado

http://www.4shared.com/file/87786192/71a833b9/faypert.html?dirPwdVerified=19d53165


Hola todos, si alguien me ayuda es que intente descargar este proyecto del link y no aparece.
Estoy tratando de realizar un letrero de 3 matrices de alto por 6 de largo para que cada letra sea de 12 pixeles de alta, ademas quiero aprender a manejar el bicolor, las matrices que compre son de 6 cm bicolor a $4.25US en Colombia.
Si conocen un buen libro que me enseñe a programar en C, tengo el C Compiler, ademas si conocen un buen tutorial paso a paso para matrices, les agradezco.  :oops:
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Cryn en 26 de Diciembre de 2010, 13:11:17
Hola, el link de descarga que pusiste está funcionando bien.

Lo que en este hilo se tiene te puede servir para poder ingresar al mundo de los carteles y servirte de base para lo que pretendes.

Te dejo este link (http://www.todopic.com.ar/foros/index.php?topic=30658.0) para que ahí también veas que hay muchas cosas interesantes para los carteles.

Para aprender a programar en C, al menos en CCS según yo, no hay mejor que lo en el foro puedes encontrar date una vuelta por los temas del subforo de lenguaje C (http://www.todopic.com.ar/foros/index.php?board=4.0)

Saludos :x)
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Strepto en 25 de Febrero de 2011, 07:49:45
Despues de mucho tiempo sin haber tocado el tema por motivo de estudios y trabajo, lo que viene siendo falta de tiempo, me puesto manos a la obra con mi letrero haciendo un contador, para mas adelante empezar con el reloj y esto es lo que me ha quedado.

Como podeis ver, dispone de todo lo necesario para la matriz de leds y una memoria para almacenar datos. Aqui es donde guardo numeros y mas adelante desde frases hasta fechas. La informacion la envio por columnas y la activacion de los leds es mediante ceros.

El codigo es el siguiente.
Código: [Seleccionar]
         
            Device 16F877A
            
            All_Digital TRUE
            Xtal 20
            
            TRISA = %00000000
            TRISD = %00000000
            TRISB = %11111111

            OPTION_REG = %01000111
            INTCON = %00010000
    
            Declare SCL_Pin PORTC.3
            Declare SDA_Pin PORTC.4
            
            Dim dira As Word
            Dim dirb As Word
            Dim mostrar[32] As Byte
            Dim dig1[5] As Byte
            Dim dig2[5] As Byte
            Dim dig3[5] As Byte
            Dim dig4[5] As Byte
            Dim puntos[2] As Byte
            Dim digito1 As Byte
            Dim digito2 As Byte
            Dim digito3 As Byte
            Dim digito4 As Byte
            Dim cont As Byte  
            Dim i As Bit

            PORTA = %00001110   'configura los bits de desplazamiento
            PORTD = 0
            
            'Grabar numeros en la eeprom          
            BStart
            BusOut %10100000,[$00,$00,$83,$5D,$6D,$75,$83,$FF,$FF,$FF] 'numero 0
            DelayMS 50        
            BusOut %10100000,[$00,$08,$7F,$7B,$01,$7F,$7F,$FF,$FF,$FF] 'numero 1
            DelayMS 50
            BusOut %10100000,[$00,$10,$7B,$3D,$5D,$6D,$73,$FF,$FF,$FF] 'numero 2
            DelayMS 50
            BusOut %10100000,[$00,$18,$BB,$7D,$7D,$6D,$93,$FF,$FF,$FF] 'numero 3
            DelayMS 50
            BusOut %10100000,[$00,$20,$E1,$EF,$EF,$EF,$01,$FF,$FF,$FF] 'numero 4
            DelayMS 50
            BusOut %10100000,[$00,$28,$A1,$6D,$6D,$6D,$9D,$FF,$FF,$FF] 'numero 5
            DelayMS 50
            BusOut %10100000,[$00,$30,$87,$6B,$6D,$6D,$9F,$FF,$FF,$FF] 'numero 6
            DelayMS 50
            BusOut %10100000,[$00,$38,$FD,$1D,$ED,$F5,$F9,$FF,$FF,$FF] 'numero 7
            DelayMS 50
            BusOut %10100000,[$00,$40,$93,$6D,$6D,$6D,$93,$FF,$FF,$FF] 'numero 8
            DelayMS 50
            BusOut %10100000,[$00,$48,$F3,$6D,$6D,$AD,$C3,$FF,$FF,$FF] 'numero 9
            DelayMS 50
            BStop
            
            For cont = 0 To 31     'para que aparezcan todos los leds apagados
               mostrar[cont]= $FF  
            Next
            
            dira = 0        'Pone a cero las variables que vamos a usar
            dirb = 0
            digito1 = 0
            digito2 = 0
            digito3 = 0
            digito4 = 0
            
            dirb = 8*digito1 'Se multiplica por 8 por que en la memoria los numeros van de 8 en 8 bytes
            BStart
            BusOut %10100000
            BusOut dira
            BusOut dirb
            BReStart
            BusOut %10100001
            BusIn Str dig1
            BStop
            DelayMS 10
            For cont = 0 To 4
               mostrar[cont+3] = dig1[cont] 'digito 1
            Next
            
            dirb = 8*digito2            
            BStart            
            BusOut %10100000  
            BusOut dira      
            BusOut dirb      
            BReStart          
            BusOut %10100001  
            BusIn Str dig2    
            BStop              
            DelayMS 10
            For cont = 0 To 4
               mostrar[cont+9] = dig2[cont] 'digito 2
            Next

            dirb = 8*digito3        
            BStart            
            BusOut %10100000  
            BusOut dira      
            BusOut dirb      
            BReStart          
            BusOut %10100001  
            BusIn Str dig3    
            BStop              
            DelayMS 10
            For cont = 0 To 4
               mostrar[cont+18] = dig3[cont] 'digito 3
            Next

            dirb = 8*digito4        
            BStart            
            BusOut %10100000  
            BusOut dira      
            BusOut dirb      
            BReStart          
            BusOut %10100001  
            BusIn Str dig4    
            BStop              
            DelayMS 10
            For cont = 0 To 4
               mostrar[cont+24] = dig4[cont] 'digito 4
            Next
            
            On Interrupt GoTo Incrementa
            
            'inicio del programa
Inicio:
            For cont = 0 To 31      
                If cont = 0 Then
                    PORTA.0 = 1
                Else
                    PORTA.0 = 0
                EndIf
                PORTD = mostrar[cont]
                PulsOut PORTA.1,1,High
                DelayUS 500
                PORTD = $FF              
            Next
            GoTo Inicio
            
            'cuando ocurre una interrucion...
            Disable
Incrementa:            
            If digito4 = 9 Then
                If digito3 = 9 Then
                    If digito2 = 9 Then
                        If digito1 = 9 Then
                            digito1 = 0
                        Else
                            Inc digito1
                        EndIf
                        dirb = 8*digito1 'Se multiplica por 8 por que en la memoria los numeros van de 8 en 8 bytes
                        BStart
                        BusOut %10100000
                        BusOut dira
                        BusOut dirb
                        BReStart
                        BusOut %10100001
                        BusIn Str dig1
                        BStop
                        DelayMS 10
                        For cont = 0 To 4
                           mostrar[cont+3] = dig1[cont] 'digito 1
                        Next
                        digito2 = 0
                        DelayMS 10
                    Else
                        Inc digito2
                    EndIf
                    dirb = 8*digito2            
                    BStart            
                    BusOut %10100000  
                    BusOut dira      
                    BusOut dirb      
                    BReStart          
                    BusOut %10100001  
                    BusIn Str dig2    
                    BStop              
                    DelayMS 10
                    For cont = 0 To 4
                       mostrar[cont+9] = dig2[cont] 'digito 2
                    Next
                    digito3 = 0
                    DelayMS 10
                Else
                    Inc digito3
                EndIf
                dirb = 8*digito3        
                BStart            
                BusOut %10100000  
                BusOut dira      
                BusOut dirb      
                BReStart          
                BusOut %10100001  
                BusIn Str dig3    
                BStop              
                DelayMS 10
                For cont = 0 To 4
                   mostrar[cont+18] = dig3[cont] 'digito 3
                Next
                digito4 = 0
                DelayMS 10
            Else
                Inc digito4
            EndIf
            dirb = 8*digito4        
            BStart            
            BusOut %10100000  
            BusOut dira      
            BusOut dirb      
            BReStart          
            BusOut %10100001  
            BusIn Str dig4    
            BStop              
            DelayMS 10
            For cont = 0 To 4
               mostrar[cont+24] = dig4[cont] 'digito 4
            Next

            OPTION_REG = %01000111
            INTCON = %00010000
            Resume
            Enable
                
            End
            

Os adjunto la simulacion a ver que os parece y acepto sugerencias sobre posibles mejoras tanto de esquema como de codigo.

Un saludo!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: korpaztk en 08 de Abril de 2011, 00:32:45
Bueno queda decir que en el display 7x64 que arme el consumo es minimo ya que hice la medicion con el amperimetro y apenas pude medir no mas de 0.5 A hay que aclarar que uso una configuracion de barrido por filas esto quiere decir que cada fila estara prendida 1/7 parte por un periodo de 1-2 mS que es como si se estuvieran encendiendo atraves de una especie de "PWM" lo que me lleva a cambiar las resistencias de 100 ohm de cada fila por la de 47 ohm para obtener un brillo mejor aún, he utilizado unos TIP 32 los he sensado y no caientan absolutamente nada no esta mal utilizar los BD 139 van sobrados para esta configuración aqui adjunto algunos archivos y un video de muestra para lo que estoy utilizando esta matriz de leds saludos  ;-)

yo estoy haciendo una matriz ya la tengo casi pulida http://www.todopic.com.ar/foros/index.php?topic=33681.0

OSS dices que le colocas una resistencia de 47 ohm en las filas?, si veo un poco de teoria seria algo asi.

supongamos que en un momento un solo led se enciende en una fila, por ende

tenemos que, la corriente del led es igual a la tensión de alimentación menos la caída del led dividido el valor de resistencia.   IL = (Vf - Vl) / R     ===>   IL = (5v - 2.2v) / 47 dando por resultado  aprox. 60 mA, y en ese momento esa fila no va a encender mas que otras que estén con mas led encendidos?? no se si me explico bien, ya que en mi post me dijeron que debería colocar resistencias de mayor valor para no dañar al led y demas, pero mi duda sigue siendo eso de las filas que estén mas encendidas por tener menos led encendidos, o tengo mezclado un poco mis pocos conocimientos técnicos??...

Agradezco la respuesta de quien sea, hace poco empece a seguir el hilo y hay proupuestas y soluciones muy interesantes.

Saludos.-
Título: Re: De matriz de leds, a letrero electronico
Publicado por: OSS en 08 de Abril de 2011, 12:12:46
Saludos amigos Todopic, korpaztk para que puedas despejar tu duda sobre cual deben ser las resistencias por columna existe una formula para poder determinarla te voy a explicar en mi caso, como la matriz hace el barrido por filas tenemos que cada fila se enciende 2mS (T-on) y tenemos 7 filas = 14mS (T-tot) y la corriente nominal de cada led 8mA los que yo uso podemos decir que cada led va a estar encendido 1/7 parte de lo normal a una corriente de 8mA "teoricamente" pero en la practica ese led estara iluminado 7 veces menos a la nominal graficamente se puede ver de la siguiente manera:

         
Fila1:l"""l_____________________ T-on = 2mS

Fila2:___l"""l__________________

Fila3:______l"""l_______________

Fila4:_________l"""l____________

Fila5:____________l"""l_________

Fila6:_______________l"""l______

Fila7:__________________l"""l___     T-tot = nº filas * T-on = 14mS


la Formula para allar la corriente necesaria por led seria:  I-led = T-tot / T-on * corriente normal del led

Ejemplo:  I-led = 14mS / 7mS * 8mA = 56mA ~ 60mA

entonces: R=(Vf - Vl) / I-led tenemos R= (5v - 2.2v) / 60mA = 46.6 ohm ~ 47 ohm

espero haberte ayudado a aclararte lo de las resistencias Saludos. :)




Título: Re: De matriz de leds, a letrero electronico
Publicado por: korpaztk en 08 de Abril de 2011, 12:15:46
ah.. ahora entendi jejeje. pues mira te comento lo que acabo de hacer hace 10 minutos, reemplace las resistencias por unas de 20 ohms, y los led encienden barbaros, coloque mi amperimetro y leo entre 14 y 19 mA por filas, pero no se porque se me apaga despues de pasar las primeras letras, o por ahi cuando pasa una o dos veces el mensaje :S, no te ha pasado algo asi??

Saludos.-
Título: Re: De matriz de leds, a letrero electronico
Publicado por: OSS en 08 de Abril de 2011, 12:24:43
Hasta el momento no las he bajado de ese valor (47 ohm) obtuve un excelente brillo y no me ha sucedido lo que comentas, puede ser que estar superando la barrera maxima de corriente pico es decir la I-peak que soporta el led
Título: Re: De matriz de leds, a letrero electronico
Publicado por: korpaztk en 08 de Abril de 2011, 12:26:44
voy a probar subir el valor de resistencia y ahora comento que me sucede.

Saludos.-
Título: Re: De matriz de leds, a letrero electronico
Publicado por: korpaztk en 08 de Abril de 2011, 13:54:48
ahora probé con resistencias de 47 ohms como has hecho tu OSS y funciona bárbaro, ahora en próximo cartel haré lo mismo o algo parecido pero utilizare led de mas mcd porque los que tengo en este son de 4000 y ya estuve viendo unos pero de 25000 espero que halla algún resultado, pero bueno cuando me dedique a ese abriré un nuevo hilo.

Gracias por tu consejo.

Saludos.-
Título: Re: De matriz de leds, a letrero electronico
Publicado por: martin 2187 en 30 de Mayo de 2011, 03:41:53
hola.. disculpen las molestias... soy algo nuevo en esto de la programación y ando con la idea de armarme unos de esos carteles para colocar en el negocio de mi vieja... les agradecería si pudieran subir algún cartel de matrices que se pueda escribir el texto sin necesidad de una pc, o indicarme donde puedo bajarlo porque desde hace una semana estoy dando vueltas por todas las paginas y no puedo encontrar nada que me convenza... lo que estoy buscando es alguno de 7x45 o similar....

Desde ya muchas gracias...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: korpaztk en 30 de Mayo de 2011, 09:28:14
hola.. disculpen las molestias... soy algo nuevo en esto de la programación y ando con la idea de armarme unos de esos carteles para colocar en el negocio de mi vieja... les agradecería si pudieran subir algún cartel de matrices que se pueda escribir el texto sin necesidad de una pc, o indicarme donde puedo bajarlo porque desde hace una semana estoy dando vueltas por todas las paginas y no puedo encontrar nada que me convenza... lo que estoy buscando es alguno de 7x45 o similar....

Desde ya muchas gracias...

bienvenido al foro martin 2187, con respecto a tu duda no recuerdo que alguien del foro lo halla hecho, o por lo menos, con esa tipo de especificación, pero si te das un poco de maña, se puede hacer.

Saludos.-
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Menta en 30 de Mayo de 2011, 15:44:18
hola.. disculpen las molestias... soy algo nuevo en esto de la programación y ando con la idea de armarme unos de esos carteles para colocar en el negocio de mi vieja... les agradecería si pudieran subir algún cartel de matrices que se pueda escribir el texto sin necesidad de una pc, o indicarme donde puedo bajarlo porque desde hace una semana estoy dando vueltas por todas las paginas y no puedo encontrar nada que me convenza... lo que estoy buscando es alguno de 7x45 o similar....

Desde ya muchas gracias...

creo que la mejor manera sería con un teclado de pc, pero tienes que entrarle al código PS/2
saludos.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: martin 2187 en 30 de Mayo de 2011, 15:55:06
gracias por contestar tan pronto... y si para algo soy bueno es para darme maña y armar lo que sea... jaja.. bueno, voy a probar con algunas cosas y después comento como fue y lo posteo así alguien mas si lo necesita lo puede bajar sin darse tantas vueltas por todos las paginas como yo.. ja.

muchas gracias...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: martin 2187 en 30 de Mayo de 2011, 16:06:28
acá dejo el link de un video donde esta un proyecto como el que quiero... gracias por su tiempo y disculpen las molestias...

feature=related
Título: Re: De matriz de leds, a letrero electronico
Publicado por: martin 2187 en 08 de Junio de 2011, 00:44:12
hola.. disculpen las molestias... soy algo nuevo en esto de la programación y ando con la idea de armarme unos de esos carteles para colocar en el negocio de mi vieja... les agradecería si pudieran subir algún cartel de matrices que se pueda escribir el texto sin necesidad de una pc, o indicarme donde puedo bajarlo porque desde hace una semana estoy dando vueltas por todas las paginas y no puedo encontrar nada que me convenza... lo que estoy buscando es alguno de 7x45 o similar....

Desde ya muchas gracias...

creo que la mejor manera sería con un teclado de pc, pero tienes que entrarle al código PS/2
saludos.

y como podría hacer alguno con teclado?? si tenes alguno por ahí a mano me lo podrías pasar?? muchas gracias...
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Suky en 08 de Junio de 2011, 12:00:28
hola.. disculpen las molestias... soy algo nuevo en esto de la programación y ando con la idea de armarme unos de esos carteles para colocar en el negocio de mi vieja... les agradecería si pudieran subir algún cartel de matrices que se pueda escribir el texto sin necesidad de una pc, o indicarme donde puedo bajarlo porque desde hace una semana estoy dando vueltas por todas las paginas y no puedo encontrar nada que me convenza... lo que estoy buscando es alguno de 7x45 o similar....

Desde ya muchas gracias...

creo que la mejor manera sería con un teclado de pc, pero tienes que entrarle al código PS/2
saludos.

y como podría hacer alguno con teclado?? si tenes alguno por ahí a mano me lo podrías pasar?? muchas gracias...

Utiliza el buscador del foro, hay hilos donde se explica como trabajar con el teclado. El proyecto completo de un cartel de leds comandado por un teclado no lo vas a encontrar, pero si las partes, solo queda el esfuerzo propio de entenderlo y combinarlos.  ;-)


Saludos!
Título: Re: De matriz de leds, a letrero electronico
Publicado por: martin 2187 en 09 de Junio de 2011, 02:51:41
hola.. disculpen las molestias... soy algo nuevo en esto de la programación y ando con la idea de armarme unos de esos carteles para colocar en el negocio de mi vieja... les agradecería si pudieran subir algún cartel de matrices que se pueda escribir el texto sin necesidad de una pc, o indicarme donde puedo bajarlo porque desde hace una semana estoy dando vueltas por todas las paginas y no puedo encontrar nada que me convenza... lo que estoy buscando es alguno de 7x45 o similar....

Desde ya muchas gracias...

creo que la mejor manera sería con un teclado de pc, pero tienes que entrarle al código PS/2
saludos.

y como podría hacer alguno con teclado?? si tenes alguno por ahí a mano me lo podrías pasar?? muchas gracias...

Utiliza el buscador del foro, hay hilos donde se explica como trabajar con el teclado. El proyecto completo de un cartel de leds comandado por un teclado no lo vas a encontrar, pero si las partes, solo queda el esfuerzo propio de entenderlo y combinarlos.  ;-)


Saludos!

bueno.. aunque no entiendo nada de programación voy a tratar de orientarme y ver que puedo hacer....

muchas gracias... suerte.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: nediamolbap en 04 de Noviembre de 2011, 17:39:51
Saludo a todos, :)

He intentado agregar más matrices al ejemplo de Cryn en la simulación con el pic 16f88, pero al aumentar 1 o 2 matriz el mensaje empieza en dicha matriz.

he cambiado en el código
#define COLUMNAS 48 //para 6 matrices  

Como podría agregar mas matrices al ejemplo de Cryn??

Adjunto la simulación (he cambiado el pic a un 16F628A) Gracias.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 05 de Noviembre de 2011, 00:45:58
hola q tal......... bueno revise el codigo y creo q te falta esta linea.......
int carries[6] le cambias por int carries[7], intentalo ............  suerte.....
Título: Re: De matriz de leds, a letrero electronico
Publicado por: nediamolbap en 05 de Noviembre de 2011, 12:48:34
Saludo gracias,

Probé cambiando int carries[6] por int carries[7], pero sigue igual, también he intentado cambiar otros valores pero nada. Sera que solo sirve para 5 matrices?? o es problema en la simulación??  :huh:

gracias.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: mikele en 05 de Noviembre de 2011, 21:23:03
hOLA Q TAL .... PRUEBA CON ESTE CODIGO, CON LA MISMA SIMULACION, ESTA AUMENTADO (EN CODIGO) PARA 8 MATRIZ LEDS..LO AUMENTAS EN LA SIMULACION LAS MATRICES Q FALTAN.... ME AVISAS CUALQUIER COSA............SUERT.........

Código: C++
  1. #include <16F628A.h>//cambio de libreria
  2. #fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT
  3. #use delay(clock=20M)
  4. #use fast_io(a)
  5. #use fast_io(b)
  6. #include <fonts.h>//fonts
  7. #include <string.h>
  8. #define clock PIN_A1
  9. #define strobe PIN_A2
  10. #define dato PIN_A0
  11. #define size_matriz_col 8  //cantidad de columnas por matriz
  12. #define COLUMNAS 56       //Defino cantidad de columnas a usar
  13. #define matriz_num COLUMNAS/size_matriz_col  //numero de matrices usado
  14.  
  15. #byte portb=6
  16.  
  17. int matriz[matriz_num+1][size_matriz_col]={"\0"};  //Almacena los datos a mostrar en el cartel
  18. int Fila;           //Fila actual a refrescar
  19. int VSync;          //Indica si es momento correcto de modificar lo que se esta mostrando...
  20. int Inhibit;        //Impide que se produzcan cambios en el cartel.
  21.                        
  22. int mensaje[1][20/*42*/]={"*** BIENVENIDOS ***"};  //{};
  23.                          
  24. const int num_msj=1;          
  25. const int msj_length[num_msj]={19};//31--33
  26. int carries[8]/*6*/,msj,letra,desplazos;
  27.  
  28.    int i_desplazar_izq=0;
  29.    int j_desplazar_izq=0;
  30.    int a_desplazar_izq=0;
  31.    
  32.    int contador_cargar=0;
  33.    
  34.    int i,j;
  35.  
  36. void ShowFila(void);
  37. void cargar(int datob);
  38. void desplazar_izq(void);
  39. void load_letra(int caracter);
  40.  
  41. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
  42. #int_TIMER0
  43. void  TIMER0_isr(void){
  44. ShowFila();                  //Mostremos la fila actual...
  45. Fila++;
  46. if(Fila==8){
  47.       Fila=0;
  48.       VSync=1;
  49.       if(Inhibit!=0)
  50.       Inhibit--;
  51.       else
  52.       desplazar_izq();
  53.       }  
  54.       else     VSync=0;
  55.       }
  56.      
  57. void main(void){
  58.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  59.      enable_interrupts(INT_TIMER0);
  60.    clear_interrupt(INT_TIMER0);
  61.    enable_interrupts(GLOBAL);
  62.    //setup_adc(adc_off);
  63.    //setup_adc_ports(no_analogs);
  64.    set_tris_a(0);
  65.    set_tris_b(0);
  66.    output_b(0x01);      //Apago cartel
  67.    output_low(CLOCK);   //Aseguro inicialmente clock en bajo
  68.    output_low(STROBE);
  69.    Fila=0;              //Comienzo por la 1er fila
  70.    Inhibit=5;
  71.    VSync=1;             //Indico que comienzo con sync.
  72.    desplazos=0;
  73.    msj=0;
  74.    while(true){}}
  75.    
  76.    void cargar(int datob){
  77.    //int contador;
  78.    output_low(clock);
  79.    delay_cycles(2);
  80.    output_low(strobe);
  81.    for(contador_cargar=0;contador_cargar<8;contador_cargar++){
  82.    output_bit(dato,(datob & 0x1));
  83.    datob>>=1;
  84.    output_high(clock);
  85.    delay_cycles(1);
  86.    output_low(clock);   }
  87.    output_high(strobe);
  88.    delay_cycles(1);
  89.    output_low(strobe);
  90.    }
  91.    int i_showfila=0;
  92.    void ShowFila(void){
  93.    //int i;
  94.    output_b(0xFF);//*****0xFF
  95.    for(i_showfila=0;i_showfila<7;i_showfila++){//5  6
  96.    cargar(matriz[i_showfila][Fila]);
  97.    }
  98.    bit_clear(portb,fila);//*****clear
  99.    }
  100.    
  101.    void desplazar_izq(void){
  102.    //int i,j,a;
  103.    if(desplazos==8 || desplazos==0){
  104.    load_letra(mensaje[msj][letra]);
  105.    desplazos=0;   }
  106.    for(i_desplazar_izq=0;i_desplazar_izq<8;i_desplazar_izq++){
  107.    for(j_desplazar_izq=0;j_desplazar_izq<=7;j_desplazar_izq++){
  108.    a_desplazar_izq=matriz[j_desplazar_izq][i_desplazar_izq];
  109.    carries[j_desplazar_izq]=shift_left(&a_desplazar_izq,1,0);
  110.    matriz[j_desplazar_izq][i_desplazar_izq]=a_desplazar_izq;      }
  111.    for(j_desplazar_izq=0;j_desplazar_izq<=7;j_desplazar_izq++){
  112.    if(j_desplazar_izq!=7)//5
  113.    matriz[j_desplazar_izq][i_desplazar_izq]|=carries[j_desplazar_izq+1];
  114.    else  
  115.    matriz[j_desplazar_izq][i_desplazar_izq]|=carries[0];
  116.    }  
  117.    }  
  118.    Inhibit=5;
  119.    desplazos++;
  120.    if(desplazos==8){
  121.    letra++;
  122.    if(letra>msj_length[msj])
  123.    letra=0;
  124.    }
  125.    }
  126.    
  127.  void load_letra(int caracter){
  128.  //int i,j;
  129.  if(isalnum(caracter)){
  130.  if(isalpha(caracter)){
  131.  if(isupper(caracter)){
  132.  switch(caracter){
  133.  case 'A': i=0; break;
  134.  case 'B': i=1; break;
  135.  case 'C': i=2; break;
  136.  case 'D': i=3; break;
  137.  case 'E': i=4; break;
  138.  case 'F': i=5; break;
  139.  case 'G': i=6; break;
  140.  case 'H': i=7; break;
  141.  case 'I': i=8; break;
  142.  case 'J': i=9; break;
  143.  case 'K': i=10; break;
  144.  case 'L': i=11; break;
  145.  case 'M': i=12; break;
  146.  case 'N': i=13; break;
  147.  case 'O': i=14; break;
  148.  case 'P': i=15; break;
  149.  case 'Q': i=16; break;
  150.  case 'R': i=17; break;
  151.  case 'S': i=18; break;
  152.  case 'T': i=19; break;
  153.  case 'U': i=20; break;
  154.  case 'V': i=21; break;
  155.  case 'W': i=22; break;
  156.  case 'X': i=23; break;
  157.  case 'Y': i=24; break;
  158.  case 'Z': i=25; break;
  159.  }
  160.  for(j=0;j<8;j++){
  161.  matriz[7][j]=letrasM[i][j];
  162.  }
  163.  }
  164.  else{
  165.  switch(caracter){
  166.  case 'a': i=0; break;
  167.  case 'b': i=1; break;
  168.  case 'c': i=2; break;
  169.  case 'd': i=3; break;
  170.  case 'e': i=4; break;
  171.  case 'f': i=5; break;
  172.  case 'g': i=6; break;
  173.  case 'h': i=7; break;
  174.  case 'i': i=8; break;
  175.  case 'j': i=9; break;
  176.  case 'k': i=10; break;
  177.  case 'l': i=11; break;
  178.  case 'm': i=12; break;
  179.  case 'n': i=13; break;
  180.  case 'o': i=14; break;
  181.  case 'p': i=15; break;
  182.  case 'q': i=16; break;
  183.  case 'r': i=17; break;
  184.  case 's': i=18; break;
  185.  case 't': i=19; break;
  186.  case 'u': i=20; break;
  187.  case 'v': i=21; break;
  188.  case 'w': i=22; break;
  189.  case 'x': i=23; break;
  190.  case 'y': i=24; break;
  191.  case 'z': i=25; break;
  192.  }
  193.  for(j=0;j<8;j++){
  194.  matriz[7/*5*/][j]=letras_m[i][j];
  195.  }
  196.  }
  197.  }
  198.  else{
  199.  for(j=0;j<8;j++){
  200.  matriz[7][j]=numeros[caracter-'0'][j];
  201.  }
  202.  }
  203.  }
  204.  else{
  205.  switch(caracter){
  206.  case ' ': i=0; break;
  207.  case '!': i=1; break;
  208.  case '"': i=2; break;
  209.  case '#': i=3; break;
  210.  case '$': i=4; break;
  211.  case '%': i=5; break;
  212.  case '&': i=6; break;
  213.  case '´': i=7; break;//este es el acento
  214.  case '(': i=8; break;
  215.  case ')': i=9; break;
  216.  case '*': i=10; break;
  217.  case '+': i=11; break;
  218.  case ',': i=12; break;
  219.  case '-': i=13; break;
  220.  case '.': i=14; break;
  221.  case '/': i=15; break;
  222.  case ':': i=16; break;
  223.  case ';': i=17; break;
  224.  case '>': i=18; break;
  225.  case '=': i=19; break;
  226.  case '<': i=20; break;
  227.  case '?': i=21; break;
  228.  case '[': i=22; break;
  229.  case ']': i=23; break;
  230.  case '^': i=24; break;
  231.  case '_': i=25; break;
  232.  case '{': i=26; break;
  233.  case '|': i=27; break;
  234.  case '}': i=28; break;
  235.  case '@': i=29; break;
  236.  case 'ñ': i=30; break;  // esta es la enie
  237.  case '\f': i=31; break;
  238.  }
  239.  for(j=0;j<8;j++){
  240.  matriz[7][j]=chars[i][j];
  241.  }
  242.  }
  243.  }
Título: Re: De matriz de leds, a letrero electronico
Publicado por: nediamolbap en 05 de Noviembre de 2011, 22:00:33
saludo,

Muchas gracias mikele,  :)

he aumentado las matrices, y funciona bien, solo que el mensaje no empieza en la primera columna??

gracias de nuevo.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gallo961 en 30 de Noviembre de 2011, 10:23:18
de momento les presento el 1er código que hice para el 16f88, para que talvez pueda servir a alguien, porque de momento, aunque me duele un poco decirlo, tengo que dejarlo pendiente esto del publik, porque se me presento un proyecto urgente para un amigo, aunque en ratos que pueda le dedicaré al publik :mrgreen:

acá les dejo el 1er código:

Código: C
  1. #include <16f88.h>
  2. #fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT,MCLR
  3. #use delay(clock=20000000)
  4. #use fast_io(a)
  5. #use fast_io(b)
  6. #include <fonts.h>
  7. #include <string.h>
  8.  
  9. #define clock PIN_A1
  10. #define strobe PIN_A2
  11. #define dato PIN_A0
  12. #define size_matriz_col 8  //cantidad de columnas por matriz
  13. #define COLUMNAS 40       //Defino cantidad de columnas a usar
  14. #define matriz_num COLUMNAS/size_matriz_col  //numero de matrices usado
  15.  
  16. #byte portb=6
  17.  
  18. int matriz[matriz_num+1][size_matriz_col]={"\0"};  //Almacena los datos a mostrar en el cartel
  19. int Fila;           //Fila actual a refrescar
  20. int VSync;          //Indica si es momento correcto de modificar lo que se esta mostrando...
  21. int Inhibit;        //Impide que se produzcan cambios en el cartel.
  22. const int mensaje[1][32]={"Feliz Navidad y Feliz 2009!!..."};
  23. const int num_msj=1;
  24. const int msj_length[num_msj]={31};
  25. int carries[6],msj,letra,desplazos;
  26.  
  27. void ShowFila(void);
  28. void cargar(int datob);
  29. void desplazar_izq(void);
  30. void load_letra(int caracter);
  31.  
  32. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
  33. #int_TIMER0
  34. void  TIMER0_isr(void){
  35.  
  36.    ShowFila();                  //Mostremos la fila actual...
  37.    Fila++;
  38.    if(Fila==8){
  39.       Fila=0;
  40.       VSync=1;
  41.       if(Inhibit!=0)
  42.          Inhibit--;
  43.       else
  44.          desplazar_izq();
  45.   }
  46.   else
  47.      VSync=0;
  48. }
  49.  
  50. void main(void){
  51.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  52.    enable_interrupts(INT_TIMER0);
  53.    clear_interrupt(INT_TIMER0);
  54.    enable_interrupts(GLOBAL);
  55.    setup_adc(adc_off);
  56.    setup_adc_ports(no_analogs);
  57.    set_tris_a(0);
  58.    set_tris_b(0);
  59.    output_b(0xFF);      //Apago cartel
  60.    output_low(CLOCK);   //Aseguro inicialmente clock en bajo
  61.    output_low(STROBE);
  62.    Fila=0;              //Comienzo por la 1er fila
  63.    Inhibit=5;
  64.    VSync=1;             //Indico que comienzo con sync.
  65.    desplazos=0;
  66.    msj=0;
  67.    while(true){}
  68. }
  69.  
  70. void cargar(int datob){
  71.    int contador;
  72.  
  73.    output_low(clock);
  74.    delay_cycles(2);
  75.    output_low(strobe);
  76.    for(contador=0;contador<8;contador++){
  77.       output_bit(dato,(datob & 0x1));
  78.       datob>>=1;
  79.       output_high(clock);
  80.       delay_cycles(1);
  81.       output_low(clock);
  82.    }
  83.    output_high(strobe);
  84.    delay_cycles(1);
  85.    output_low(strobe);
  86. }
  87.  
  88. void ShowFila(void){
  89.    int i;
  90.  
  91.    output_b(0xFF);
  92.    for(i=0;i<5;i++){
  93.       cargar(matriz[i][Fila]);
  94.    }
  95.    bit_clear(portb,fila);
  96. }
  97.  
  98. void desplazar_izq(void){
  99.    int i,j,a;
  100.  
  101.    if(desplazos==8 || desplazos==0){
  102.       load_letra(mensaje[msj][letra]);
  103.       desplazos=0;
  104.    }
  105.    for(i=0;i<8;i++){
  106.       for(j=0;j<6;j++){
  107.          a=matriz[j][i];
  108.          carries[j]=shift_left(&a,1,0);
  109.          matriz[j][i]=a;
  110.       }
  111.       for(j=0;j<6;j++){
  112.          if(j!=5)
  113.             matriz[j][i]|=carries[j+1];
  114.          else
  115.             matriz[j][i]|=carries[0];
  116.       }
  117.    }
  118.    Inhibit=5;
  119.    desplazos++;
  120.    if(desplazos==8){
  121.       letra++;
  122.       if(letra>msj_length[msj])
  123.          letra=0;
  124.    }
  125. }
  126.  
  127. void load_letra(int caracter){
  128.    int i,j;
  129.  
  130.    if(isalnum(caracter)){
  131.       if(isalpha(caracter)){
  132.          if(isupper(caracter)){
  133.             switch(caracter){
  134.                case 'A': i=0; break;
  135.                case 'B': i=1; break;
  136.                case 'C': i=2; break;
  137.                case 'D': i=3; break;
  138.                case 'E': i=4; break;
  139.                case 'F': i=5; break;
  140.                case 'G': i=6; break;
  141.                case 'H': i=7; break;
  142.                case 'I': i=8; break;
  143.                case 'J': i=9; break;
  144.                case 'K': i=10; break;
  145.                case 'L': i=11; break;
  146.                case 'M': i=12; break;
  147.                case 'N': i=13; break;
  148.                case 'O': i=14; break;
  149.                case 'P': i=15; break;
  150.                case 'Q': i=16; break;
  151.                case 'R': i=17; break;
  152.                case 'S': i=18; break;
  153.                case 'T': i=19; break;
  154.                case 'U': i=20; break;
  155.                case 'V': i=21; break;
  156.                case 'W': i=22; break;
  157.                case 'X': i=23; break;
  158.                case 'Y': i=24; break;
  159.                case 'Z': i=25; break;
  160.             }
  161.             for(j=0;j<8;j++){
  162.                matriz[5][j]=letrasM[i][j];
  163.             }
  164.          }
  165.          else{
  166.             switch(caracter){
  167.                case 'a': i=0; break;
  168.                case 'b': i=1; break;
  169.                case 'c': i=2; break;
  170.                case 'd': i=3; break;
  171.                case 'e': i=4; break;
  172.                case 'f': i=5; break;
  173.                case 'g': i=6; break;
  174.                case 'h': i=7; break;
  175.                case 'i': i=8; break;
  176.                case 'j': i=9; break;
  177.                case 'k': i=10; break;
  178.                case 'l': i=11; break;
  179.                case 'm': i=12; break;
  180.                case 'n': i=13; break;
  181.                case 'o': i=14; break;
  182.                case 'p': i=15; break;
  183.                case 'q': i=16; break;
  184.                case 'r': i=17; break;
  185.                case 's': i=18; break;
  186.                case 't': i=19; break;
  187.                case 'u': i=20; break;
  188.                case 'v': i=21; break;
  189.                case 'w': i=22; break;
  190.                case 'x': i=23; break;
  191.                case 'y': i=24; break;
  192.                case 'z': i=25; break;
  193.             }
  194.             for(j=0;j<8;j++){
  195.                matriz[5][j]=letras_m[i][j];
  196.             }
  197.          }
  198.       }
  199.       else{
  200.          for(j=0;j<8;j++){
  201.             matriz[5][j]=numeros[caracter-'0'][j];
  202.          }
  203.       }
  204.    }
  205.    else{
  206.       switch(caracter){
  207.          case ' ': i=0; break;
  208.          case '!': i=1; break;
  209.          case '"': i=2; break;
  210.          case '#': i=3; break;
  211.          case '$': i=4; break;
  212.          case '%': i=5; break;
  213.          case '&': i=6; break;
  214.          case '´': i=7; break; //este es el acento
  215.          case '(': i=8; break;
  216.          case ')': i=9; break;
  217.          case '*': i=10; break;
  218.          case '+': i=11; break;
  219.          case ',': i=12; break;
  220.          case '-': i=13; break;
  221.          case '.': i=14; break;
  222.          case '/': i=15; break;
  223.          case ':': i=16; break;
  224.          case ';': i=17; break;
  225.          case '>': i=18; break;
  226.          case '=': i=19; break;
  227.          case '<': i=20; break;
  228.          case '?': i=21; break;
  229.          case '[': i=22; break;
  230.          case ']': i=23; break;
  231.          case '^': i=24; break;
  232.          case '_': i=25; break;
  233.          case '{': i=26; break;
  234.          case '|': i=27; break;
  235.          case '}': i=28; break;
  236.          case '@': i=29; break;
  237.          case 'ñ': i=30; break;  // esta es la enie
  238.          case '\f': i=31; break;
  239.       }
  240.       for(j=0;j<8;j++){
  241.          matriz[5][j]=chars[i][j];
  242.       }
  243.    }
  244. }

y el fonts.h:
Código: C
  1. const int letrasM[26][8]={{48,120,204,204,252,204,204,204},    //A
  2.                           {248,204,204,248,248,204,204,248},   //B
  3.                           {252,192,192,192,192,192,192,252},   //C
  4.                           {240,200,204,204,204,204,200,240},   //D
  5.                           {252,192,192,240,240,192,192,252},   //E
  6.                           {252,192,192,240,240,192,192,192},   //F
  7.                           {60,64,192,192,216,204,204,248},     //G
  8.                           {204,204,204,204,252,204,204,204},   //H
  9.                           {252,48,48,48,48,48,48,252},         //I
  10.                           {252,48,48,48,48,48,176,240},        //J
  11.                           {196,200,208,224,208,204,204,204},   //K
  12.                           {192,192,192,192,192,192,192,252},   //L
  13.                           {238,214,214,198,198,198,198,198},   //M
  14.                           {196,228,244,212,212,204,204,196},   //N
  15.                           {48,204,204,204,204,204,204,48},     //O
  16.                           {248,204,204,204,248,192,192,192},   //P
  17.                           {56,196,196,196,196,212,200,52},     //Q
  18.                           {248,204,204,204,248,208,200,196},   //R
  19.                           {120,204,192,192,120,12,12,248},     //S
  20.                           {252,48,48,48,48,48,48,48},          //T
  21.                           {204,204,204,204,204,204,204,120},   //U
  22.                           {204,204,204,204,204,204,72,48},     //V
  23.                           {198,198,198,198,198,214,214,238},   //W
  24.                           {132,132,72,48,48,72,132,132},       //X
  25.                           {204,204,204,120,48,48,48,48},       //Y
  26.                           {252,252,8,16,32,64,252,252}};       //Z
  27.  
  28. const int letras_m[26][8]={{0,0,112,136,8,120,136,116},        //a
  29.                            {0,128,128,128,240,136,136,240},    //b
  30.                            {0,0,0,120,128,128,128,120},        //c
  31.                            {0,8,8,8,120,136,136,120},          //d
  32.                            {0,0,0,120,136,240,128,120},        //e
  33.                            {0,96,144,128,128,224,128,128},     //f
  34.                            {0,0,112,136,136,112,8,112},        //g
  35.                            {0,128,128,128,240,136,136,136},    //h
  36.                            {0,0,32,0,32,32,32,32},             //i
  37.                            {0,0,16,0,16,16,144,96},            //j
  38.                            {0,128,144,160,192,160,144,144},    //k
  39.                            {0,32,32,32,32,32,32,32},           //l
  40.                            {0,0,0,136,212,164,164,164},        //m
  41.                            {0,0,0,176,200,136,136,136},        //n
  42.                            {0,0,0,112,136,136,136,112},        //o
  43.                            {0,0,240,136,136,240,128,128},      //p
  44.                            {0,0,120,136,136,120,8,28},         //q
  45.                            {0,0,0,176,192,128,128,128},        //r
  46.                            {0,0,112,136,128,112,8,240},        //s
  47.                            {0,32,32,112,32,32,32,24},          //t
  48.                            {0,0,0,136,136,136,152,104},        //u
  49.                            {0,0,0,136,136,136,80,32},          //v
  50.                            {0,0,0,136,136,136,168,80},         //w
  51.                            {0,0,0,136,80,32,80,136},           //x
  52.                            {0,0,0,136,136,112,16,96},          //y
  53.                            {0,0,0,248,16,32,64,248}};          //z
  54.                            
  55. const int numeros[10][8]={{0,120,132,140,148,164,196,120},     //0
  56.                           {0,16,48,80,16,16,16,124},           //1
  57.                           {0,112,136,8,16,32,64,248},          //2
  58.                           {0,112,136,8,48,8,136,112},          //3
  59.                           {0,8,24,40,72,252,8,8},              //4
  60.                           {0,124,128,128,120,4,4,248},         //5
  61.                           {0,120,128,128,248,132,132,120},     //6
  62.                           {0,252,132,8,16,32,64,64},           //7
  63.                           {0,120,132,132,120,132,132,120},     //8
  64.                           {0,120,132,132,124,4,4,120}};        //9
  65.  
  66. const int chars[31][8]={{0,0,0,0,0,0,0,0},                 //space
  67.                         {0,32,32,32,32,32,0,32},           //!
  68.                         {0,40,40,40,0,0,0,0},              //"
  69.                         {0,36,36,254,40,252,80,80},        //#
  70.                         {0,120,148,144,120,20,148,120},    //$
  71.                         {0,196,204,24,48,96,204,140},      //%
  72.                         {0,96,144,144,96,148,136,116},     //&
  73.                         {0,16,16,16,0,0,0,0},              //'
  74.                         {0,24,32,64,64,64,32,24},          //(
  75.                         {0,96,16,8,8,8,16,96},             //)
  76.                         {0,0,146,84,56,56,84,146},         //*
  77.                         {0,16,16,16,254,16,16,16},         //+
  78.                         {0,0,0,0,0,96,32,64},              //,
  79.                         {0,0,0,0,252,0,0,0},               //-
  80.                         {0,0,0,0,0,0,96,96},               //.
  81.                         {0,4,12,24,48,96,192,128},         //  /
  82.                         {0,0,96,96,0,0,96,96},             //:
  83.                         {0,0,96,96,0,96,32,64},            //;
  84.                         {0,0,192,48,12,48,192,0},          //>
  85.                         {0,0,0,252,0,252,0,0},             //=
  86.                         {0,0,12,48,192,48,12,0},           //<
  87.                         {0,120,132,4,24,16,0,16},          //?
  88.                         {0,56,32,32,32,32,32,56},          //[
  89.                         {0,56,8,8,8,8,8,56},               //]
  90.                         {16,40,68,0,0,0,0,0},              //^
  91.                         {0,0,0,0,0,0,0,254},               //_
  92.                         {0,24,32,32,64,32,32,24},          //{
  93.                         {0,32,32,32,32,32,32,32},          //|
  94.                         {0,96,16,16,8,16,16,96},           //}
  95.                         {56,68,146,170,170,148,64,60},     //@
  96.                         {0,112,0,176,200,136,136,136}};    //ñ

un saludo, espero sirva por ahora
hola q tal......... bueno revise el codigo y creo q te falta esta linea.......
int carries[6] le cambias por int carries[7], intentalo ............  suerte.....




buenos dias
soy nuevo en este foro
quisiera que me guiaran en mi poyecto que es parecido
estoy haciendo un publik de 5x55 con registros de ls164  con un micro de motorola jm60 en programa codewarrios
gracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gallo961 en 30 de Noviembre de 2011, 11:00:30
hola a todos
la verdad soy nuevo aca
pero es interesante este foro y creo que aprendere mucho.
estoy haciendo un publik  de 5 filas po56 colomnas con 7 registros ls164  un micro jm60 de motorola on frecalee codewarrios y me carga una letra en todos los registros y corridos de arriba  hacia abajo tengo que dividir las letras en cada registro y correrlas horizontal
gracias agradezco una guia de ustedes que y lo realizaron.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: nediamolbap en 05 de Diciembre de 2011, 17:21:26
Saludo a todos,

Retomo este proyecto, ya he conseguido las matrices y componentes que me hacían falta.  :-/

He estado intentando hacerlo funcionar, pero lo único que he conseguido es esto:

http://www.youtube.com/v/WGRzwn5dvXE

He probado con varios PIC16F628A, grabándolos desde el pickit2 y el MPLAB (sin errores).Tanto el pic como el registro tienen su correspondiente 104. He seguido algunos concejos dados en este mismo hilo por algunos usuarios, pero sigue igual.  :(

He probado con diferentes fuentes de 5v, 200mA-500mA. Con el regulador 7805 con fuente de 9 a 15V.

Adjunto el archivo que estoy grabando.
No se que mas hacer :5] :5] estaré atento a sus concejos.


Título: Re: De matriz de leds, a letrero electronico
Publicado por: 16f en 12 de Diciembre de 2011, 17:01:09
hola amigos , requiero la ayuda de ud , para poder hacer una matriz de 7 x72 con 2 filas,
la idea es controlar  el display desde un pc, yo puedo manejar el display con texto pero
no tengo idea como enviar caracteres y luego transformar a  pixel.

PC------------------micro---------------------panel  linea1 y linea 2
ya tengo el programita que envia el texto.,
saludos
 
Título: Re: De matriz de leds, a letrero electronico
Publicado por: bigluis en 13 de Diciembre de 2011, 15:57:37
 :-/ Hola amigos de Todopic.

En esta ocasion traigo un código que sirve para imprimir caracteres y cadenas en una matriz de led de 7x5 (facilmente puede ser adaptada a mas).

A continuacion muestro el código del archivo principal
Código: [Seleccionar]
#include <Matriz.h>

#include <Fonts.c>

#use fast_io(ALL)

main(){
   set_tris_b(0);
   set_tris_a(0);
   output_b(0);
   output_a(0);
   while(1)
//!      Matrix_putc('h');                //Al descomentar esta linea y comentar la siguiente solo se mostrara la letra h
      printf(Matrix_putc,"hola TODOPIC"); //Al descomentar esta linea y comentar la anterior se mostrara hola TODOPIC caracter
}                                         //por caracter en la matriz de 7x5

Y el fichero donde se guardan las funciones y arreglos de caracteres necesarios para el funcionamiento del programa.
Código: [Seleccionar]
//La siguiente matriz almacena los pixeles de cada carecter que sera impreso
const unsigned char Fonts[96][5] = {
        {0x00, 0x00, 0x00, 0x00, 0x00},            // Code for char 
        {0x00, 0x06, 0x5F, 0x06, 0x00},            // Code for char !
        {0x07, 0x03, 0x00, 0x07, 0x03},            // Code for char "
        {0x24, 0x7E, 0x24, 0x7E, 0x24},            // Code for char #
        {0x24, 0x2B, 0x6A, 0x12, 0x00},            // Code for char $
        {0x63, 0x13, 0x08, 0x64, 0x63},            // Code for char %
        {0x36, 0x49, 0x56, 0x20, 0x50},            // Code for char &
        {0x00, 0x07, 0x03, 0x00, 0x00},            // Code for char '
        {0x00, 0x3E, 0x41, 0x00, 0x00},            // Code for char (
        {0x00, 0x41, 0x3E, 0x00, 0x00},            // Code for char )
        {0x08, 0x3E, 0x1C, 0x3E, 0x08},            // Code for char *
        {0x08, 0x08, 0x3E, 0x08, 0x08},            // Code for char +
        {0x00, 0xE0, 0x60, 0x00, 0x00},            // Code for char ,
        {0x08, 0x08, 0x08, 0x08, 0x08},            // Code for char -
        {0x00, 0x60, 0x60, 0x00, 0x00},            // Code for char .
        {0x20, 0x10, 0x08, 0x04, 0x02},            // Code for char /
        {0x3E, 0x51, 0x49, 0x45, 0x3E},            // Code for char 0
        {0x00, 0x42, 0x7F, 0x40, 0x00},            // Code for char 1
        {0x62, 0x51, 0x49, 0x49, 0x46},            // Code for char 2
        {0x22, 0x49, 0x49, 0x49, 0x36},            // Code for char 3
        {0x18, 0x14, 0x12, 0x7F, 0x10},            // Code for char 4
        {0x2F, 0x49, 0x49, 0x49, 0x31},            // Code for char 5
        {0x3C, 0x4A, 0x49, 0x49, 0x30},            // Code for char 6
        {0x01, 0x71, 0x09, 0x05, 0x03},            // Code for char 7
        {0x36, 0x49, 0x49, 0x49, 0x36},            // Code for char 8
        {0x06, 0x49, 0x49, 0x29, 0x1E},            // Code for char 9
        {0x00, 0x6C, 0x6C, 0x00, 0x00},            // Code for char :
        {0x00, 0xEC, 0x6C, 0x00, 0x00},            // Code for char ;
        {0x08, 0x14, 0x22, 0x41, 0x00},            // Code for char <
        {0x24, 0x24, 0x24, 0x24, 0x24},            // Code for char =
        {0x00, 0x41, 0x22, 0x14, 0x08},            // Code for char >
        {0x02, 0x01, 0x59, 0x09, 0x06},            // Code for char ?
        {0x3E, 0x41, 0x5D, 0x55, 0x1E},            // Code for char @
        {0x7E, 0x11, 0x11, 0x11, 0x7E},            // Code for char A
        {0x7F, 0x49, 0x49, 0x49, 0x36},            // Code for char B
        {0x3E, 0x41, 0x41, 0x41, 0x22},            // Code for char C
        {0x7F, 0x41, 0x41, 0x41, 0x3E},            // Code for char D
        {0x7F, 0x49, 0x49, 0x49, 0x41},            // Code for char E
        {0x7F, 0x09, 0x09, 0x09, 0x01},            // Code for char F
        {0x3E, 0x41, 0x49, 0x49, 0x7A},            // Code for char G
        {0x7F, 0x08, 0x08, 0x08, 0x7F},            // Code for char H
        {0x00, 0x41, 0x7F, 0x41, 0x00},            // Code for char I
        {0x30, 0x40, 0x40, 0x40, 0x3F},            // Code for char J
        {0x7F, 0x08, 0x14, 0x22, 0x41},            // Code for char K
        {0x7F, 0x40, 0x40, 0x40, 0x40},            // Code for char L
        {0x7F, 0x02, 0x04, 0x02, 0x7F},            // Code for char M
        {0x7F, 0x02, 0x04, 0x08, 0x7F},            // Code for char N
        {0x3E, 0x41, 0x41, 0x41, 0x3E},            // Code for char O
        {0x7F, 0x09, 0x09, 0x09, 0x06},            // Code for char P
        {0x3E, 0x41, 0x51, 0x21, 0x5E},            // Code for char Q
        {0x7F, 0x09, 0x09, 0x19, 0x66},            // Code for char R
        {0x26, 0x49, 0x49, 0x49, 0x32},            // Code for char S
        {0x01, 0x01, 0x7F, 0x01, 0x01},            // Code for char T
        {0x3F, 0x40, 0x40, 0x40, 0x3F},            // Code for char U
        {0x1F, 0x20, 0x40, 0x20, 0x1F},            // Code for char V
        {0x3F, 0x40, 0x3C, 0x40, 0x3F},            // Code for char W
        {0x63, 0x14, 0x08, 0x14, 0x63},            // Code for char X
        {0x07, 0x08, 0x70, 0x08, 0x07},            // Code for char Y
        {0x71, 0x49, 0x45, 0x43, 0x00},            // Code for char Z
        {0x00, 0x7F, 0x41, 0x41, 0x00},            // Code for char [
        {0x02, 0x04, 0x08, 0x10, 0x20},            // Code for char BackSlash
        {0x00, 0x41, 0x41, 0x7F, 0x00},            // Code for char ]
        {0x04, 0x02, 0x01, 0x02, 0x04},            // Code for char ^
        {0x80, 0x80, 0x80, 0x80, 0x80},            // Code for char _
        {0x00, 0x03, 0x07, 0x00, 0x00},            // Code for char `
        {0x20, 0x54, 0x54, 0x54, 0x78},            // Code for char a
        {0x7F, 0x44, 0x44, 0x44, 0x38},            // Code for char b
        {0x38, 0x44, 0x44, 0x44, 0x28},            // Code for char c
        {0x38, 0x44, 0x44, 0x44, 0x7F},            // Code for char d
        {0x38, 0x54, 0x54, 0x54, 0x08},            // Code for char e
        {0x08, 0x7E, 0x09, 0x09, 0x00},            // Code for char f
        {0x18, 0xA4, 0xA4, 0xA4, 0x7C},            // Code for char g
        {0x7F, 0x04, 0x04, 0x78, 0x00},            // Code for char h
        {0x00, 0x00, 0x7D, 0x40, 0x00},            // Code for char i
        {0x40, 0x80, 0x84, 0x7D, 0x00},            // Code for char j
        {0x7F, 0x10, 0x28, 0x44, 0x00},            // Code for char k
        {0x00, 0x00, 0x7F, 0x40, 0x00},            // Code for char l
        {0x7C, 0x04, 0x18, 0x04, 0x78},            // Code for char m
        {0x7C, 0x04, 0x04, 0x78, 0x00},            // Code for char n
        {0x38, 0x44, 0x44, 0x44, 0x38},            // Code for char o
        {0xFE, 0x22, 0x22, 0x22, 0x1C},            // Code for char p
        {0x1C, 0x22, 0x22, 0x22, 0xFE},            // Code for char q
        {0x44, 0x78, 0x44, 0x04, 0x08},            // Code for char r
        {0x08, 0x54, 0x54, 0x54, 0x20},            // Code for char s
        {0x04, 0x3E, 0x44, 0x24, 0x00},            // Code for char t
        {0x3C, 0x40, 0x20, 0x7C, 0x00},            // Code for char u
        {0x1C, 0x20, 0x40, 0x20, 0x1C},            // Code for char v
        {0x3C, 0x60, 0x30, 0x60, 0x3C},            // Code for char w
        {0x6C, 0x10, 0x10, 0x6C, 0x00},            // Code for char x
        {0x9C, 0xA0, 0x60, 0x3C, 0x00},            // Code for char y
        {0x64, 0x54, 0x54, 0x4C, 0x00},            // Code for char z
        {0x08, 0x3E, 0x41, 0x41, 0x00},            // Code for char {
        {0x00, 0x00, 0x77, 0x00, 0x00},            // Code for char |
        {0x00, 0x41, 0x41, 0x3E, 0x08},            // Code for char }
        {0x02, 0x01, 0x02, 0x01, 0x00},            // Code for char ~
        {0x3C, 0x26, 0x23, 0x26, 0x3C}             // Code for char 
        };

//Esta funcion se encarga de imprimir un caracter en la matriz de led de 7x5
//Si se utiliza en conjunto con la funcion printf se pueden imprimir cadenas
void Matrix_putc(char letter){
   int i,j,l,k=20;                  //declaramos i,j,l y k=20
   letter-=' ';                     //Al valor de letter le restamos el valor ASCII de ' ' que es 32
                                    //dandonos el puntero de la letra que sera impresa
   while(--k){                      //decrementamos k y mientras sea distinto de cero (20 Veces)
      for(i=0,j=1;i<5;i++,j<<=1){   //Para i=0,j=1 mientras isea menor a 5 incrementamos i en 1
                                    //y desplazamos el valor de j hacia la izquierda
         l=Fonts[letter][i];        //l almacenara el arreglo de pixeles de la columna a mostrar
         output_b(~l);              //Negamos el valor de l y lo mostramos por el puerto B
         delay_ms(5);               //Un retraso de 5ms para hacer visible el caracter
         output_a(j);               //PORTA igual a j encendiendo una de las columnas
         delay_us(1);               //Retardo de 1us antes de apagar columnas
         output_a(0);               //Apagamos las columnas
      }
   }
   delay_ms(100);                   //Retardo de 100ms antes de pasar al siguiente caracter.
}

A continuacion mustro el diagrama del circuito
(http://img225.imagenar.com/225/b3bc6610/8529881c/matriz.png) (http://imagenar.com/i/Matriz-Descargar/xu0)

Y finalmente el archivo adjunto con la simulacion y el código
Título: Re: De matriz de leds, a letrero electronico
Publicado por: VOLTIO en 19 de Diciembre de 2011, 09:08:34
Buen dia  amigos del foro, quisiera saber algo que parece tonto (a lo mejor lo es ajaj) y es la distancia entre leds en un cartel led comercializable, esto es porque quiero hacer un cartel y quisiera que salga lo mas "profesional" posible, quisiera hacer del tamaño que tienen los micros de linea , que he visto son hermosos .
Bueno espero algun comentario al respecto, les envio un saludo cordial.
Atte.Ruben
Título: Re: De matriz de leds, a letrero electronico
Publicado por: 16f en 26 de Diciembre de 2011, 03:04:42
Hola amigos estoy haciendo una matriz 7 x 72, puedo escribir , pero quiero hacerlo atravez de el puerto serial.
he utilizado la base de programa y circuito de ucontrol, pero me falta hacer la comunicacion.
colocare programa para comunicarme con la pantalla.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: TDV en 29 de Enero de 2012, 11:39:59
Hola amigos estoy haciendo una matriz 7 x 72, puedo escribir , pero quiero hacerlo atravez de el puerto serial.
he utilizado la base de programa y circuito de ucontrol, pero me falta hacer la comunicacion.
colocare programa para comunicarme con la pantalla.

Hola amigo un saludo, te recomiendo que uses puerto USB ya que que el serial esta prácticamente desapareciendo y son pocas las maquinas que ya traen esta conexión, aunque no tengo un programa a la mano para colocarlo te puedo dar una ayuda. Existen varios tipos de comunicación USB entre las cuales esta: CDC que simula un puerto serial, ya que quieres trabajar con este puerto este te puede servir y con ciertas modificaciones puedes hacer lo que quieres. Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: edgarantoniobazan en 02 de Febrero de 2012, 14:04:04
tio me parece exelente tu rabajo soy nuevo en el foro, tu codigo en que  programa esta  hecho? io estoy hciendo una matriz parecida pero no me sale, me podrias pasar tu codigo y esquema para realizar tu proyecto mi correo es eabl8230@hotmail. te lo agradeseria mucho tio  y felicitaciones
Título: Re: De matriz de leds, a letrero electronico
Publicado por: edgarantoniobazan en 02 de Febrero de 2012, 14:04:44



bueno aqui les dejo el video del mismo cartel nadamas que con una eeprom externa
como veran lo unico que cambia es que el mensaje es un poco mas largo.

la fila de hasta abajo se ve encendida no por error si porque ese pin lo utilizo para el clock

ahora estoy investigando los de los registros.

entiendo como enviar ceros y unos de acuerdo a los programas de aitopes, pero no se como implementarlo a mi programa,
por cierto yo no lo hago como cryn que ya tiene fuentes,  :(, solo lo hago leyendo direccion por direccion de la memoria.

ya saben la idea es poder enviar un texto desde la pc via rs232, creo que seria lo de menos. pero bueno paso a paso.

y gracias por las felicitaciones eso me da animos para seguir  :-/

SALUDOS
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gallo961 en 03 de Junio de 2012, 16:46:55
Buenas tardes
necesito de su asesoria
temgo un cartel de 5 filas y 55colomnas multiplexadas com  7 registrso de corrimiento ls 164  y un micro de freescale jm6o ya cargo una letra escrita en toda lamattriz que es visible perfecta en el primero. que rutina utilizo para dividir cada letra de 5x8 puntos en cada registo ls164 y correrlos .
aca adjunto parte del programa donde cargo el dato.
const char Transistores[5]={0b11110,0b11101,0b11011,0b10111,0b01111};


const  char Letras[10]=  { 0b10000001, 0b11101111, 0b11101111,0b11101111,0b11101111, 
                         
                         
                          0b10000001,0b10111111, 0b10000001, 0b10111111,0b10000001};
                       
                                                           
                         
                         
                         
                           
                 

                         
                         
                         
                         
                                   
                         
                     
char PunteroLetras=0;
char PunteroTransistores=0;

void Tarea2(char dato)
{
   
   
  int i,j=1;
  for (i=1;i<8;i++)
   {
   
   
     
 
 
   PTDD_PTDD1 =(j&dato)?1:0;
   
    j=j<<1;
   
   
     
 
   
   
 
   
   
   
 
   PTDD_PTDD0 = 1;
    asm nop
    asm nop
    asm nop
   PTDD_PTDD0 = 0;
   
   
   
  }

}

void Tarea1(void)
{
 PTBD = Transistores[PunteroTransistores];
 Tarea2(Letras[PunteroLetras]);
 PunteroLetras++;
 if (Letras[PunteroLetras]==0) PunteroLetras=0;
  PunteroTransistores++;

 
if (PunteroTransistores==5)PunteroTransistores=0;
 
 
 
}

interrupt 29 void RTCISR(void)
{
 RTCSC_RTIF = 1;

Título: Re: De matriz de leds, a letrero electronico
Publicado por: gallo961 en 09 de Junio de 2012, 14:38:04
hOLA Q TAL .... PRUEBA CON ESTE CODIGO, CON LA MISMA SIMULACION, ESTA AUMENTADO (EN CODIGO) PARA 8 MATRIZ LEDS..LO AUMENTAS EN LA SIMULACION LAS MATRICES Q FALTAN.... ME AVISAS CUALQUIER COSA............SUERT.........

Código: C++
  1. #include <16F628A.h>//cambio de libreria
  2. #fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT
  3. #use delay(clock=20M)
  4. #use fast_io(a)
  5. #use fast_io(b)
  6. #include <fonts.h>//fonts
  7. #include <string.h>
  8. #define clock PIN_A1
  9. #define strobe PIN_A2
  10. #define dato PIN_A0
  11. #define size_matriz_col 8  //cantidad de columnas por matriz
  12. #define COLUMNAS 56       //Defino cantidad de columnas a usar
  13. #define matriz_num COLUMNAS/size_matriz_col  //numero de matrices usado
  14.  
  15. #byte portb=6
  16.  
  17. int matriz[matriz_num+1][size_matriz_col]={"\0"};  //Almacena los datos a mostrar en el cartel
  18. int Fila;           //Fila actual a refrescar
  19. int VSync;          //Indica si es momento correcto de modificar lo que se esta mostrando...
  20. int Inhibit;        //Impide que se produzcan cambios en el cartel.
  21.                        
  22. int mensaje[1][20/*42*/]={"*** BIENVENIDOS ***"};  //{};
  23.                          
  24. const int num_msj=1;          
  25. const int msj_length[num_msj]={19};//31--33
  26. int carries[8]/*6*/,msj,letra,desplazos;
  27.  
  28.    int i_desplazar_izq=0;
  29.    int j_desplazar_izq=0;
  30.    int a_desplazar_izq=0;
  31.    
  32.    int contador_cargar=0;
  33.    
  34.    int i,j;
  35.  
  36. void ShowFila(void);
  37. void cargar(int datob);
  38. void desplazar_izq(void);
  39. void load_letra(int caracter);
  40.  
  41. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
  42. #int_TIMER0
  43. void  TIMER0_isr(void){
  44. ShowFila();                  //Mostremos la fila actual...
  45. Fila++;
  46. if(Fila==8){
  47.       Fila=0;
  48.       VSync=1;
  49.       if(Inhibit!=0)
  50.       Inhibit--;
  51.       else
  52.       desplazar_izq();
  53.       }  
  54.       else     VSync=0;
  55.       }
  56.      
  57. void main(void){
  58.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  59.      enable_interrupts(INT_TIMER0);
  60.    clear_interrupt(INT_TIMER0);
  61.    enable_interrupts(GLOBAL);
  62.    //setup_adc(adc_off);
  63.    //setup_adc_ports(no_analogs);
  64.    set_tris_a(0);
  65.    set_tris_b(0);
  66.    output_b(0x01);      //Apago cartel
  67.    output_low(CLOCK);   //Aseguro inicialmente clock en bajo
  68.    output_low(STROBE);
  69.    Fila=0;              //Comienzo por la 1er fila
  70.    Inhibit=5;
  71.    VSync=1;             //Indico que comienzo con sync.
  72.    desplazos=0;
  73.    msj=0;
  74.    while(true){}}
  75.    
  76.    void cargar(int datob){
  77.    //int contador;
  78.    output_low(clock);
  79.    delay_cycles(2);
  80.    output_low(strobe);
  81.    for(contador_cargar=0;contador_cargar<8;contador_cargar++){
  82.    output_bit(dato,(datob & 0x1));
  83.    datob>>=1;
  84.    output_high(clock);
  85.    delay_cycles(1);
  86.    output_low(clock);   }
  87.    output_high(strobe);
  88.    delay_cycles(1);
  89.    output_low(strobe);
  90.    }
  91.    int i_showfila=0;
  92.    void ShowFila(void){
  93.    //int i;
  94.    output_b(0xFF);//*****0xFF
  95.    for(i_showfila=0;i_showfila<7;i_showfila++){//5  6
  96.    cargar(matriz[i_showfila][Fila]);
  97.    }
  98.    bit_clear(portb,fila);//*****clear
  99.    }
  100.    
  101.    void desplazar_izq(void){
  102.    //int i,j,a;
  103.    if(desplazos==8 || desplazos==0){
  104.    load_letra(mensaje[msj][letra]);
  105.    desplazos=0;   }
  106.    for(i_desplazar_izq=0;i_desplazar_izq<8;i_desplazar_izq++){
  107.    for(j_desplazar_izq=0;j_desplazar_izq<=7;j_desplazar_izq++){
  108.    a_desplazar_izq=matriz[j_desplazar_izq][i_desplazar_izq];
  109.    carries[j_desplazar_izq]=shift_left(&a_desplazar_izq,1,0);
  110.    matriz[j_desplazar_izq][i_desplazar_izq]=a_desplazar_izq;      }
  111.    for(j_desplazar_izq=0;j_desplazar_izq<=7;j_desplazar_izq++){
  112.    if(j_desplazar_izq!=7)//5
  113.    matriz[j_desplazar_izq][i_desplazar_izq]|=carries[j_desplazar_izq+1];
  114.    else  
  115.    matriz[j_desplazar_izq][i_desplazar_izq]|=carries[0];
  116.    }  
  117.    }  
  118.    Inhibit=5;
  119.    desplazos++;
  120.    if(desplazos==8){
  121.    letra++;
  122.    if(letra>msj_length[msj])
  123.    letra=0;
  124.    }
  125.    }
  126.    
  127.  void load_letra(int caracter){
  128.  //int i,j;
  129.  if(isalnum(caracter)){
  130.  if(isalpha(caracter)){
  131.  if(isupper(caracter)){
  132.  switch(caracter){
  133.  case 'A': i=0; break;
  134.  case 'B': i=1; break;
  135.  case 'C': i=2; break;
  136.  case 'D': i=3; break;
  137.  case 'E': i=4; break;
  138.  case 'F': i=5; break;
  139.  case 'G': i=6; break;
  140.  case 'H': i=7; break;
  141.  case 'I': i=8; break;
  142.  case 'J': i=9; break;
  143.  case 'K': i=10; break;
  144.  case 'L': i=11; break;
  145.  case 'M': i=12; break;
  146.  case 'N': i=13; break;
  147.  case 'O': i=14; break;
  148.  case 'P': i=15; break;
  149.  case 'Q': i=16; break;
  150.  case 'R': i=17; break;
  151.  case 'S': i=18; break;
  152.  case 'T': i=19; break;
  153.  case 'U': i=20; break;
  154.  case 'V': i=21; break;
  155.  case 'W': i=22; break;
  156.  case 'X': i=23; break;
  157.  case 'Y': i=24; break;
  158.  case 'Z': i=25; break;
  159.  }
  160.  for(j=0;j<8;j++){
  161.  matriz[7][j]=letrasM[i][j];
  162.  }
  163.  }
  164.  else{
  165.  switch(caracter){
  166.  case 'a': i=0; break;
  167.  case 'b': i=1; break;
  168.  case 'c': i=2; break;
  169.  case 'd': i=3; break;
  170.  case 'e': i=4; break;
  171.  case 'f': i=5; break;
  172.  case 'g': i=6; break;
  173.  case 'h': i=7; break;
  174.  case 'i': i=8; break;
  175.  case 'j': i=9; break;
  176.  case 'k': i=10; break;
  177.  case 'l': i=11; break;
  178.  case 'm': i=12; break;
  179.  case 'n': i=13; break;
  180.  case 'o': i=14; break;
  181.  case 'p': i=15; break;
  182.  case 'q': i=16; break;
  183.  case 'r': i=17; break;
  184.  case 's': i=18; break;
  185.  case 't': i=19; break;
  186.  case 'u': i=20; break;
  187.  case 'v': i=21; break;
  188.  case 'w': i=22; break;
  189.  case 'x': i=23; break;
  190.  case 'y': i=24; break;
  191.  case 'z': i=25; break;
  192.  }
  193.  for(j=0;j<8;j++){
  194.  matriz[7/*5*/][j]=letras_m[i][j];
  195.  }
  196.  }
  197.  }
  198.  else{
  199.  for(j=0;j<8;j++){
  200.  matriz[7][j]=numeros[caracter-'0'][j];
  201.  }
  202.  }
  203.  }
  204.  else{
  205.  switch(caracter){
  206.  case ' ': i=0; break;
  207.  case '!': i=1; break;
  208.  case '"': i=2; break;
  209.  case '#': i=3; break;
  210.  case '$': i=4; break;
  211.  case '%': i=5; break;
  212.  case '&': i=6; break;
  213.  case '´': i=7; break;//este es el acento
  214.  case '(': i=8; break;
  215.  case ')': i=9; break;
  216.  case '*': i=10; break;
  217.  case '+': i=11; break;
  218.  case ',': i=12; break;
  219.  case '-': i=13; break;
  220.  case '.': i=14; break;
  221.  case '/': i=15; break;
  222.  case ':': i=16; break;
  223.  case ';': i=17; break;
  224.  case '>': i=18; break;
  225.  case '=': i=19; break;
  226.  case '<': i=20; break;
  227.  case '?': i=21; break;
  228.  case '[': i=22; break;
  229.  case ']': i=23; break;
  230.  case '^': i=24; break;
  231.  case '_': i=25; break;
  232.  case '{': i=26; break;
  233.  case '|': i=27; break;
  234.  case '}': i=28; break;
  235.  case '@': i=29; break;
  236.  case 'ñ': i=30; break;  // esta es la enie
  237.  case '\f': i=31; break;
  238.  }
  239.  for(j=0;j<8;j++){
  240.  matriz[7][j]=chars[i][j];
  241.  }
  242.  }
  243.  }







amigo  la verdad no entendy algunas cosas de su codigo yo lo estoy haciendo en codewarrior pero necesito de su asesoria para cargar cada letra en un registro
aca envion el codigo
const char Transistores[5]={0b11110,0b11101,0b11011,0b10111,0b01111};


const  char Letras[5]=  { 0b10000001,
                           0b10111111,
                           0b10000001,
                           0b10111111,
                           0b10000001,};
                         
                         
                         
                         
                                                           
                         
                         
                         
                           
                 

                         
                         
                         
                         
                                   
                         
                     
char PunteroLetras=1;
char PunteroTransistores=0;

void Tarea2(char dato)
{
   
   
  int i,j=1;
  for (i=0;i<8;i++)                                           
  {
 
   PTDD_PTDD1 = (j&dato)?1:0;
   
    j=j<<1;
 
   
 
   
   
   
 
   PTDD_PTDD0 = 1;
    asm nop
    asm nop
    asm nop
   PTDD_PTDD0 = 0;
   
   
   
  }

}
void Tarea1(void)
{
 PTBD = Transistores[PunteroTransistores];
 Tarea2(Letras[PunteroLetras]);
 PunteroLetras++;
 if (Letras[PunteroLetras]==0) PunteroLetras=0;
  PunteroTransistores++;

 
if (PunteroTransistores==5)PunteroTransistores=0;
 
 
 
}

interrupt 29 void RTCISR(void)
{
 RTCSC_RTIF = 1;

 Tarea1();
 
 
}



extern void _Startup(void);

/* User code */                       
void main(void)

 SOPT1  = 0X20;
 
 PTBDD=0B00011111;                                 
 PTDDD=0B00000111;
 PTBD =0B00001111;
 PTDD= 0B00000100;
 
 PTDD_PTDD2 = 0;
    asm nop                                       
    asm nop
    asm nop
  PTDD_PTDD2 = 1;
 
 RTCMOD       = 32 ;
 RTCSC_RTCLKS = 2 ;
 RTCSC_RTCPS  = 8;       
 RTCSC_RTIF   = 1;
 RTCSC_RTIE   = 1;
 
 
 EnableInterrupts;
 
 
 
 for(;;)
 {
  asm WAIT;
 
 }
}
                         
                         
/*Dummy ISR */
interrupt void Dummy_ISR(void)
{
}



void (* volatile const _UserEntry[])()@0xFABC={
  0x9DCC,             // asm NOP(9D), asm JMP(CC)
  _Startup
};
 
// redirect vector 0xFFC0-0xFFFD to 0xFBC0-0xFBFD
void (* volatile const _Usr_Vector[])()@0xFBC4= {
    RTCISR,           // Int.no.29 RTC               (at FBC4) (at FFC4)
    Dummy_ISR,        // Int.no.28 IIC               (at FBC6) (at FFC6)
    Dummy_ISR,        // Int.no.27 ACMP              (at FBC8) (at FFC8)
    Dummy_ISR,        // Int.no.26 ADC               (at FBCA) (at FFCA)
    Dummy_ISR,        // Int.no.25 KBI               (at FBCC) (at FFCC)
    Dummy_ISR,        // Int.no.24 SCI2 Transmit     (at FBCE) (at FFCE)
    Dummy_ISR,        // Int.no.23 SCI2 Receive      (at FBD0) (at FFD0)
    Dummy_ISR,        // Int.no.22 SCI2 Error        (at FBD2) (at FFD2)
    Dummy_ISR,        // Int.no.21 SCI1 Transmit     (at FBD4) (at FFD4)
    Dummy_ISR,        // Int.no.20 SCI1 Receive      (at FBD6) (at FFD6)
    Dummy_ISR,        // Int.no.19 SCI1 error        (at FBD8) (at FFD8)
    Dummy_ISR,        // Int.no.18 TPM2 Overflow     (at FBDA) (at FFDA)
    Dummy_ISR,        // Int.no.17 TPM2 CH1          (at FBDC) (at FFDC)
    Dummy_ISR,        // Int.no.16 TPM2 CH0          (at FBDE) (at FFDE)
    Dummy_ISR,        // Int.no.15 TPM1 Overflow     (at FBE0) (at FFE0)
    Dummy_ISR,        // Int.no.14 TPM1 CH5          (at FBE2) (at FFE2)
    Dummy_ISR,        // Int.no.13 TPM1 CH4          (at FBE4) (at FFE4)
    Dummy_ISR,        // Int.no.12 TPM1 CH3          (at FBE6) (at FFE6)
    Dummy_ISR,        // Int.no.11 TPM1 CH2          (at FBE8) (at FFE8)
    Dummy_ISR,        // Int.no.10 TPM1 CH1          (at FBEA) (at FFEA)
    Dummy_ISR,        // Int.no.9  TPM1 CH0          (at FBEC) (at FFEC)
    Dummy_ISR,        // Int.no.8  Reserved          (at FBEE) (at FFEE)
    Dummy_ISR,        // Int.no.7  USB Statue        (at FBF0) (at FFF0)
    Dummy_ISR,        // Int.no.6  SPI2              (at FBF2) (at FFF2)
    Dummy_ISR,        // Int.no.5  SPI1              (at FBF4) (at FFF4)
    Dummy_ISR,        // Int.no.4  Loss of lock      (at FBF6) (at FFF6)
    Dummy_ISR,        // Int.no.3  LVI               (at FBF8) (at FFF8)
    Dummy_ISR,           // Int.no.2  IRQ               (at FBFA) (at FFFA)
    Dummy_ISR,        // Int.no.1  SWI               (at FBFC) (at FFFC)
};



#pragma CODE_SEG Bootloader_ROM

void Bootloader_Main(void);

void _Entry(void) {
  PTGD = 0x00;         
  PTGDD = 0xF0;                   //PTG0-3 used for KBI input
   PTGPE = 0x0F;                      //Pull-up enable
 
  // MCG clock initialization, fBus=24MHz
  MCGC2 = 0x36;
  //MCGC2_EREFS=0;
  while(!(MCGSC & 0x02));            //wait for the OSC stable
  MCGC1 = 0x1B;
   MCGC3 = 0x48;
   while ((MCGSC & 0x48) != 0x48);   //wait for the PLL is locked

  // Flash clock
  FCDIV=0x4E;                     // PRDIV8=1; DIV[5:0]=14, flash clock should be 150-200kHz
                                  // bus clock=24M, flash clock=fbus/8/(DIV[5:0]+1)
                                  // bus clock=24M, flash clock=fbus/8/(DIV[5:0]+1)
  if(!PTGD_PTGD0)
  {
    SOPT1 = 0x20;                   // disable COP only if bootloader mod is requested
    // PTG0 is pressed
    USBCTL0=0x44;
    USBCTL0_USBVREN=1;
    Bootloader_Main();            // Bootloader mode
  }
  else
    asm JMP _UserEntry;           // Enter User mode
}

#pragma CODE_SEG default

de momento les presento el 1er código que hice para el 16f88, para que talvez pueda servir a alguien, porque de momento, aunque me duele un poco decirlo, tengo que dejarlo pendiente esto del publik, porque se me presento un proyecto urgente para un amigo, aunque en ratos que pueda le dedicaré al publik :mrgreen:

acá les dejo el 1er código:

Código: C
  1. #include <16f88.h>
  2. #fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT,MCLR
  3. #use delay(clock=20000000)
  4. #use fast_io(a)
  5. #use fast_io(b)
  6. #include <fonts.h>
  7. #include <string.h>
  8.  
  9. #define clock PIN_A1
  10. #define strobe PIN_A2
  11. #define dato PIN_A0
  12. #define size_matriz_col 8  //cantidad de columnas por matriz
  13. #define COLUMNAS 40       //Defino cantidad de columnas a usar
  14. #define matriz_num COLUMNAS/size_matriz_col  //numero de matrices usado
  15.  
  16. #byte portb=6
  17.  
  18. int matriz[matriz_num+1][size_matriz_col]={"\0"};  //Almacena los datos a mostrar en el cartel
  19. int Fila;           //Fila actual a refrescar
  20. int VSync;          //Indica si es momento correcto de modificar lo que se esta mostrando...
  21. int Inhibit;        //Impide que se produzcan cambios en el cartel.
  22. const int mensaje[1][32]={"Feliz Navidad y Feliz 2009!!..."};
  23. const int num_msj=1;
  24. const int msj_length[num_msj]={31};
  25. int carries[6],msj,letra,desplazos;
  26.  
  27. void ShowFila(void);
  28. void cargar(int datob);
  29. void desplazar_izq(void);
  30. void load_letra(int caracter);
  31.  
  32. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
  33. #int_TIMER0
  34. void  TIMER0_isr(void){
  35.  
  36.    ShowFila();                  //Mostremos la fila actual...
  37.    Fila++;
  38.    if(Fila==8){
  39.       Fila=0;
  40.       VSync=1;
  41.       if(Inhibit!=0)
  42.          Inhibit--;
  43.       else
  44.          desplazar_izq();
  45.   }
  46.   else
  47.      VSync=0;
  48. }
  49.  
  50. void main(void){
  51.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  52.    enable_interrupts(INT_TIMER0);
  53.    clear_interrupt(INT_TIMER0);
  54.    enable_interrupts(GLOBAL);
  55.    setup_adc(adc_off);
  56.    setup_adc_ports(no_analogs);
  57.    set_tris_a(0);
  58.    set_tris_b(0);
  59.    output_b(0xFF);      //Apago cartel
  60.    output_low(CLOCK);   //Aseguro inicialmente clock en bajo
  61.    output_low(STROBE);
  62.    Fila=0;              //Comienzo por la 1er fila
  63.    Inhibit=5;
  64.    VSync=1;             //Indico que comienzo con sync.
  65.    desplazos=0;
  66.    msj=0;
  67.    while(true){}
  68. }
  69.  
  70. void cargar(int datob){
  71.    int contador;
  72.  
  73.    output_low(clock);
  74.    delay_cycles(2);
  75.    output_low(strobe);
  76.    for(contador=0;contador<8;contador++){
  77.       output_bit(dato,(datob & 0x1));
  78.       datob>>=1;
  79.       output_high(clock);
  80.       delay_cycles(1);
  81.       output_low(clock);
  82.    }
  83.    output_high(strobe);
  84.    delay_cycles(1);
  85.    output_low(strobe);
  86. }
  87.  
  88. void ShowFila(void){
  89.    int i;
  90.  
  91.    output_b(0xFF);
  92.    for(i=0;i<5;i++){
  93.       cargar(matriz[i][Fila]);
  94.    }
  95.    bit_clear(portb,fila);
  96. }
  97.  
  98. void desplazar_izq(void){
  99.    int i,j,a;
  100.  
  101.    if(desplazos==8 || desplazos==0){
  102.       load_letra(mensaje[msj][letra]);
  103.       desplazos=0;
  104.    }
  105.    for(i=0;i<8;i++){
  106.       for(j=0;j<6;j++){
  107.          a=matriz[j][i];
  108.          carries[j]=shift_left(&a,1,0);
  109.          matriz[j][i]=a;
  110.       }
  111.       for(j=0;j<6;j++){
  112.          if(j!=5)
  113.             matriz[j][i]|=carries[j+1];
  114.          else
  115.             matriz[j][i]|=carries[0];
  116.       }
  117.    }
  118.    Inhibit=5;
  119.    desplazos++;
  120.    if(desplazos==8){
  121.       letra++;
  122.       if(letra>msj_length[msj])
  123.          letra=0;
  124.    }
  125. }
  126.  
  127. void load_letra(int caracter){
  128.    int i,j;
  129.  
  130.    if(isalnum(caracter)){
  131.       if(isalpha(caracter)){
  132.          if(isupper(caracter)){
  133.             switch(caracter){
  134.                case 'A': i=0; break;
  135.                case 'B': i=1; break;
  136.                case 'C': i=2; break;
  137.                case 'D': i=3; break;
  138.                case 'E': i=4; break;
  139.                case 'F': i=5; break;
  140.                case 'G': i=6; break;
  141.                case 'H': i=7; break;
  142.                case 'I': i=8; break;
  143.                case 'J': i=9; break;
  144.                case 'K': i=10; break;
  145.                case 'L': i=11; break;
  146.                case 'M': i=12; break;
  147.                case 'N': i=13; break;
  148.                case 'O': i=14; break;
  149.                case 'P': i=15; break;
  150.                case 'Q': i=16; break;
  151.                case 'R': i=17; break;
  152.                case 'S': i=18; break;
  153.                case 'T': i=19; break;
  154.                case 'U': i=20; break;
  155.                case 'V': i=21; break;
  156.                case 'W': i=22; break;
  157.                case 'X': i=23; break;
  158.                case 'Y': i=24; break;
  159.                case 'Z': i=25; break;
  160.             }
  161.             for(j=0;j<8;j++){
  162.                matriz[5][j]=letrasM[i][j];
  163.             }
  164.          }
  165.          else{
  166.             switch(caracter){
  167.                case 'a': i=0; break;
  168.                case 'b': i=1; break;
  169.                case 'c': i=2; break;
  170.                case 'd': i=3; break;
  171.                case 'e': i=4; break;
  172.                case 'f': i=5; break;
  173.                case 'g': i=6; break;
  174.                case 'h': i=7; break;
  175.                case 'i': i=8; break;
  176.                case 'j': i=9; break;
  177.                case 'k': i=10; break;
  178.                case 'l': i=11; break;
  179.                case 'm': i=12; break;
  180.                case 'n': i=13; break;
  181.                case 'o': i=14; break;
  182.                case 'p': i=15; break;
  183.                case 'q': i=16; break;
  184.                case 'r': i=17; break;
  185.                case 's': i=18; break;
  186.                case 't': i=19; break;
  187.                case 'u': i=20; break;
  188.                case 'v': i=21; break;
  189.                case 'w': i=22; break;
  190.                case 'x': i=23; break;
  191.                case 'y': i=24; break;
  192.                case 'z': i=25; break;
  193.             }
  194.             for(j=0;j<8;j++){
  195.                matriz[5][j]=letras_m[i][j];
  196.             }
  197.          }
  198.       }
  199.       else{
  200.          for(j=0;j<8;j++){
  201.             matriz[5][j]=numeros[caracter-'0'][j];
  202.          }
  203.       }
  204.    }
  205.    else{
  206.       switch(caracter){
  207.          case ' ': i=0; break;
  208.          case '!': i=1; break;
  209.          case '"': i=2; break;
  210.          case '#': i=3; break;
  211.          case '$': i=4; break;
  212.          case '%': i=5; break;
  213.          case '&': i=6; break;
  214.          case '´': i=7; break; //este es el acento
  215.          case '(': i=8; break;
  216.          case ')': i=9; break;
  217.          case '*': i=10; break;
  218.          case '+': i=11; break;
  219.          case ',': i=12; break;
  220.          case '-': i=13; break;
  221.          case '.': i=14; break;
  222.          case '/': i=15; break;
  223.          case ':': i=16; break;
  224.          case ';': i=17; break;
  225.          case '>': i=18; break;
  226.          case '=': i=19; break;
  227.          case '<': i=20; break;
  228.          case '?': i=21; break;
  229.          case '[': i=22; break;
  230.          case ']': i=23; break;
  231.          case '^': i=24; break;
  232.          case '_': i=25; break;
  233.          case '{': i=26; break;
  234.          case '|': i=27; break;
  235.          case '}': i=28; break;
  236.          case '@': i=29; break;
  237.          case 'ñ': i=30; break;  // esta es la enie
  238.          case '\f': i=31; break;
  239.       }
  240.       for(j=0;j<8;j++){
  241.          matriz[5][j]=chars[i][j];
  242.       }
  243.    }
  244. }

y el fonts.h:
Código: C
  1. const int letrasM[26][8]={{48,120,204,204,252,204,204,204},    //A
  2.                           {248,204,204,248,248,204,204,248},   //B
  3.                           {252,192,192,192,192,192,192,252},   //C
  4.                           {240,200,204,204,204,204,200,240},   //D
  5.                           {252,192,192,240,240,192,192,252},   //E
  6.                           {252,192,192,240,240,192,192,192},   //F
  7.                           {60,64,192,192,216,204,204,248},     //G
  8.                           {204,204,204,204,252,204,204,204},   //H
  9.                           {252,48,48,48,48,48,48,252},         //I
  10.                           {252,48,48,48,48,48,176,240},        //J
  11.                           {196,200,208,224,208,204,204,204},   //K
  12.                           {192,192,192,192,192,192,192,252},   //L
  13.                           {238,214,214,198,198,198,198,198},   //M
  14.                           {196,228,244,212,212,204,204,196},   //N
  15.                           {48,204,204,204,204,204,204,48},     //O
  16.                           {248,204,204,204,248,192,192,192},   //P
  17.                           {56,196,196,196,196,212,200,52},     //Q
  18.                           {248,204,204,204,248,208,200,196},   //R
  19.                           {120,204,192,192,120,12,12,248},     //S
  20.                           {252,48,48,48,48,48,48,48},          //T
  21.                           {204,204,204,204,204,204,204,120},   //U
  22.                           {204,204,204,204,204,204,72,48},     //V
  23.                           {198,198,198,198,198,214,214,238},   //W
  24.                           {132,132,72,48,48,72,132,132},       //X
  25.                           {204,204,204,120,48,48,48,48},       //Y
  26.                           {252,252,8,16,32,64,252,252}};       //Z
  27.  
  28. const int letras_m[26][8]={{0,0,112,136,8,120,136,116},        //a
  29.                            {0,128,128,128,240,136,136,240},    //b
  30.                            {0,0,0,120,128,128,128,120},        //c
  31.                            {0,8,8,8,120,136,136,120},          //d
  32.                            {0,0,0,120,136,240,128,120},        //e
  33.                            {0,96,144,128,128,224,128,128},     //f
  34.                            {0,0,112,136,136,112,8,112},        //g
  35.                            {0,128,128,128,240,136,136,136},    //h
  36.                            {0,0,32,0,32,32,32,32},             //i
  37.                            {0,0,16,0,16,16,144,96},            //j
  38.                            {0,128,144,160,192,160,144,144},    //k
  39.                            {0,32,32,32,32,32,32,32},           //l
  40.                            {0,0,0,136,212,164,164,164},        //m
  41.                            {0,0,0,176,200,136,136,136},        //n
  42.                            {0,0,0,112,136,136,136,112},        //o
  43.                            {0,0,240,136,136,240,128,128},      //p
  44.                            {0,0,120,136,136,120,8,28},         //q
  45.                            {0,0,0,176,192,128,128,128},        //r
  46.                            {0,0,112,136,128,112,8,240},        //s
  47.                            {0,32,32,112,32,32,32,24},          //t
  48.                            {0,0,0,136,136,136,152,104},        //u
  49.                            {0,0,0,136,136,136,80,32},          //v
  50.                            {0,0,0,136,136,136,168,80},         //w
  51.                            {0,0,0,136,80,32,80,136},           //x
  52.                            {0,0,0,136,136,112,16,96},          //y
  53.                            {0,0,0,248,16,32,64,248}};          //z
  54.                            
  55. const int numeros[10][8]={{0,120,132,140,148,164,196,120},     //0
  56.                           {0,16,48,80,16,16,16,124},           //1
  57.                           {0,112,136,8,16,32,64,248},          //2
  58.                           {0,112,136,8,48,8,136,112},          //3
  59.                           {0,8,24,40,72,252,8,8},              //4
  60.                           {0,124,128,128,120,4,4,248},         //5
  61.                           {0,120,128,128,248,132,132,120},     //6
  62.                           {0,252,132,8,16,32,64,64},           //7
  63.                           {0,120,132,132,120,132,132,120},     //8
  64.                           {0,120,132,132,124,4,4,120}};        //9
  65.  
  66. const int chars[31][8]={{0,0,0,0,0,0,0,0},                 //space
  67.                         {0,32,32,32,32,32,0,32},           //!
  68.                         {0,40,40,40,0,0,0,0},              //"
  69.                         {0,36,36,254,40,252,80,80},        //#
  70.                         {0,120,148,144,120,20,148,120},    //$
  71.                         {0,196,204,24,48,96,204,140},      //%
  72.                         {0,96,144,144,96,148,136,116},     //&
  73.                         {0,16,16,16,0,0,0,0},              //'
  74.                         {0,24,32,64,64,64,32,24},          //(
  75.                         {0,96,16,8,8,8,16,96},             //)
  76.                         {0,0,146,84,56,56,84,146},         //*
  77.                         {0,16,16,16,254,16,16,16},         //+
  78.                         {0,0,0,0,0,96,32,64},              //,
  79.                         {0,0,0,0,252,0,0,0},               //-
  80.                         {0,0,0,0,0,0,96,96},               //.
  81.                         {0,4,12,24,48,96,192,128},         //  /
  82.                         {0,0,96,96,0,0,96,96},             //:
  83.                         {0,0,96,96,0,96,32,64},            //;
  84.                         {0,0,192,48,12,48,192,0},          //>
  85.                         {0,0,0,252,0,252,0,0},             //=
  86.                         {0,0,12,48,192,48,12,0},           //<
  87.                         {0,120,132,4,24,16,0,16},          //?
  88.                         {0,56,32,32,32,32,32,56},          //[
  89.                         {0,56,8,8,8,8,8,56},               //]
  90.                         {16,40,68,0,0,0,0,0},              //^
  91.                         {0,0,0,0,0,0,0,254},               //_
  92.                         {0,24,32,32,64,32,32,24},          //{
  93.                         {0,32,32,32,32,32,32,32},          //|
  94.                         {0,96,16,16,8,16,16,96},           //}
  95.                         {56,68,146,170,170,148,64,60},     //@
  96.                         {0,112,0,176,200,136,136,136}};    //ñ

un saludo, espero sirva por ahora
Título: Re: De matriz de leds, a letrero electronico
Publicado por: gallo961 en 09 de Junio de 2012, 14:51:10
hOLA Q TAL .... PRUEBA CON ESTE CODIGO, CON LA MISMA SIMULACION, ESTA AUMENTADO (EN CODIGO) PARA 8 MATRIZ LEDS..LO AUMENTAS EN LA SIMULACION LAS MATRICES Q FALTAN.... ME AVISAS CUALQUIER COSA............SUERT.........

Código: C++
  1. #include <16F628A.h>//cambio de libreria
  2. #fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT
  3. #use delay(clock=20M)
  4. #use fast_io(a)
  5. #use fast_io(b)
  6. #include <fonts.h>//fonts
  7. #include <string.h>
  8. #define clock PIN_A1
  9. #define strobe PIN_A2
  10. #define dato PIN_A0
  11. #define size_matriz_col 8  //cantidad de columnas por matriz
  12. #define COLUMNAS 56       //Defino cantidad de columnas a usar
  13. #define matriz_num COLUMNAS/size_matriz_col  //numero de matrices usado
  14.  
  15. #byte portb=6
  16.  
  17. int matriz[matriz_num+1][size_matriz_col]={"\0"};  //Almacena los datos a mostrar en el cartel
  18. int Fila;           //Fila actual a refrescar
  19. int VSync;          //Indica si es momento correcto de modificar lo que se esta mostrando...
  20. int Inhibit;        //Impide que se produzcan cambios en el cartel.
  21.                        
  22. int mensaje[1][20/*42*/]={"*** BIENVENIDOS ***"};  //{};
  23.                          
  24. const int num_msj=1;          
  25. const int msj_length[num_msj]={19};//31--33
  26. int carries[8]/*6*/,msj,letra,desplazos;
  27.  
  28.    int i_desplazar_izq=0;
  29.    int j_desplazar_izq=0;
  30.    int a_desplazar_izq=0;
  31.    
  32.    int contador_cargar=0;
  33.    
  34.    int i,j;
  35.  
  36. void ShowFila(void);
  37. void cargar(int datob);
  38. void desplazar_izq(void);
  39. void load_letra(int caracter);
  40.  
  41. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
  42. #int_TIMER0
  43. void  TIMER0_isr(void){
  44. ShowFila();                  //Mostremos la fila actual...
  45. Fila++;
  46. if(Fila==8){
  47.       Fila=0;
  48.       VSync=1;
  49.       if(Inhibit!=0)
  50.       Inhibit--;
  51.       else
  52.       desplazar_izq();
  53.       }  
  54.       else     VSync=0;
  55.       }
  56.      
  57. void main(void){
  58.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  59.      enable_interrupts(INT_TIMER0);
  60.    clear_interrupt(INT_TIMER0);
  61.    enable_interrupts(GLOBAL);
  62.    //setup_adc(adc_off);
  63.    //setup_adc_ports(no_analogs);
  64.    set_tris_a(0);
  65.    set_tris_b(0);
  66.    output_b(0x01);      //Apago cartel
  67.    output_low(CLOCK);   //Aseguro inicialmente clock en bajo
  68.    output_low(STROBE);
  69.    Fila=0;              //Comienzo por la 1er fila
  70.    Inhibit=5;
  71.    VSync=1;             //Indico que comienzo con sync.
  72.    desplazos=0;
  73.    msj=0;
  74.    while(true){}}
  75.    
  76.    void cargar(int datob){
  77.    //int contador;
  78.    output_low(clock);
  79.    delay_cycles(2);
  80.    output_low(strobe);
  81.    for(contador_cargar=0;contador_cargar<8;contador_cargar++){
  82.    output_bit(dato,(datob & 0x1));
  83.    datob>>=1;
  84.    output_high(clock);
  85.    delay_cycles(1);
  86.    output_low(clock);   }
  87.    output_high(strobe);
  88.    delay_cycles(1);
  89.    output_low(strobe);
  90.    }
  91.    int i_showfila=0;
  92.    void ShowFila(void){
  93.    //int i;
  94.    output_b(0xFF);//*****0xFF
  95.    for(i_showfila=0;i_showfila<7;i_showfila++){//5  6
  96.    cargar(matriz[i_showfila][Fila]);
  97.    }
  98.    bit_clear(portb,fila);//*****clear
  99.    }
  100.    
  101.    void desplazar_izq(void){
  102.    //int i,j,a;
  103.    if(desplazos==8 || desplazos==0){
  104.    load_letra(mensaje[msj][letra]);
  105.    desplazos=0;   }
  106.    for(i_desplazar_izq=0;i_desplazar_izq<8;i_desplazar_izq++){
  107.    for(j_desplazar_izq=0;j_desplazar_izq<=7;j_desplazar_izq++){
  108.    a_desplazar_izq=matriz[j_desplazar_izq][i_desplazar_izq];
  109.    carries[j_desplazar_izq]=shift_left(&a_desplazar_izq,1,0);
  110.    matriz[j_desplazar_izq][i_desplazar_izq]=a_desplazar_izq;      }
  111.    for(j_desplazar_izq=0;j_desplazar_izq<=7;j_desplazar_izq++){
  112.    if(j_desplazar_izq!=7)//5
  113.    matriz[j_desplazar_izq][i_desplazar_izq]|=carries[j_desplazar_izq+1];
  114.    else  
  115.    matriz[j_desplazar_izq][i_desplazar_izq]|=carries[0];
  116.    }  
  117.    }  
  118.    Inhibit=5;
  119.    desplazos++;
  120.    if(desplazos==8){
  121.    letra++;
  122.    if(letra>msj_length[msj])
  123.    letra=0;
  124.    }
  125.    }
  126.    
  127.  void load_letra(int caracter){
  128.  //int i,j;
  129.  if(isalnum(caracter)){
  130.  if(isalpha(caracter)){
  131.  if(isupper(caracter)){
  132.  switch(caracter){
  133.  case 'A': i=0; break;
  134.  case 'B': i=1; break;
  135.  case 'C': i=2; break;
  136.  case 'D': i=3; break;
  137.  case 'E': i=4; break;
  138.  case 'F': i=5; break;
  139.  case 'G': i=6; break;
  140.  case 'H': i=7; break;
  141.  case 'I': i=8; break;
  142.  case 'J': i=9; break;
  143.  case 'K': i=10; break;
  144.  case 'L': i=11; break;
  145.  case 'M': i=12; break;
  146.  case 'N': i=13; break;
  147.  case 'O': i=14; break;
  148.  case 'P': i=15; break;
  149.  case 'Q': i=16; break;
  150.  case 'R': i=17; break;
  151.  case 'S': i=18; break;
  152.  case 'T': i=19; break;
  153.  case 'U': i=20; break;
  154.  case 'V': i=21; break;
  155.  case 'W': i=22; break;
  156.  case 'X': i=23; break;
  157.  case 'Y': i=24; break;
  158.  case 'Z': i=25; break;
  159.  }
  160.  for(j=0;j<8;j++){
  161.  matriz[7][j]=letrasM[i][j];
  162.  }
  163.  }
  164.  else{
  165.  switch(caracter){
  166.  case 'a': i=0; break;
  167.  case 'b': i=1; break;
  168.  case 'c': i=2; break;
  169.  case 'd': i=3; break;
  170.  case 'e': i=4; break;
  171.  case 'f': i=5; break;
  172.  case 'g': i=6; break;
  173.  case 'h': i=7; break;
  174.  case 'i': i=8; break;
  175.  case 'j': i=9; break;
  176.  case 'k': i=10; break;
  177.  case 'l': i=11; break;
  178.  case 'm': i=12; break;
  179.  case 'n': i=13; break;
  180.  case 'o': i=14; break;
  181.  case 'p': i=15; break;
  182.  case 'q': i=16; break;
  183.  case 'r': i=17; break;
  184.  case 's': i=18; break;
  185.  case 't': i=19; break;
  186.  case 'u': i=20; break;
  187.  case 'v': i=21; break;
  188.  case 'w': i=22; break;
  189.  case 'x': i=23; break;
  190.  case 'y': i=24; break;
  191.  case 'z': i=25; break;
  192.  }
  193.  for(j=0;j<8;j++){
  194.  matriz[7/*5*/][j]=letras_m[i][j];
  195.  }
  196.  }
  197.  }
  198.  else{
  199.  for(j=0;j<8;j++){
  200.  matriz[7][j]=numeros[caracter-'0'][j];
  201.  }
  202.  }
  203.  }
  204.  else{
  205.  switch(caracter){
  206.  case ' ': i=0; break;
  207.  case '!': i=1; break;
  208.  case '"': i=2; break;
  209.  case '#': i=3; break;
  210.  case '$': i=4; break;
  211.  case '%': i=5; break;
  212.  case '&': i=6; break;
  213.  case '´': i=7; break;//este es el acento
  214.  case '(': i=8; break;
  215.  case ')': i=9; break;
  216.  case '*': i=10; break;
  217.  case '+': i=11; break;
  218.  case ',': i=12; break;
  219.  case '-': i=13; break;
  220.  case '.': i=14; break;
  221.  case '/': i=15; break;
  222.  case ':': i=16; break;
  223.  case ';': i=17; break;
  224.  case '>': i=18; break;
  225.  case '=': i=19; break;
  226.  case '<': i=20; break;
  227.  case '?': i=21; break;
  228.  case '[': i=22; break;
  229.  case ']': i=23; break;
  230.  case '^': i=24; break;
  231.  case '_': i=25; break;
  232.  case '{': i=26; break;
  233.  case '|': i=27; break;
  234.  case '}': i=28; break;
  235.  case '@': i=29; break;
  236.  case 'ñ': i=30; break;  // esta es la enie
  237.  case '\f': i=31; break;
  238.  }
  239.  for(j=0;j<8;j++){
  240.  matriz[7][j]=chars[i][j];
  241.  }
  242.  }
  243.  }
[quote author=fgaretto link=topic=19091.msg262510#msg262510 date=1280341306
Este es el soft:
#include <16f876a.h>
#fuses XT,NOWDT
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)
#define  DATA    pin_a0
#define  CLOCK   pin_a1
#define  STROBE  pin_a2   

#DEFINE COLUMNAS 40       //Defino cantidad de columnas a usar
int8  Mensaje[COLUMNAS]={126   32   16   32   126   0   62   72   72   72   62
0   64   64   126   64   64   0   126   88   84   114   0   66   126   66   0 
70   74   82   98   66   0
};
 //Almacena los datos a mostrar en el cartel
int8 Mascara[8]={0b10000000,0b01000000,0b00100000,0b00010000,0b00001000,0b00000100,0b00000010,0b00000001};
int8 FILAX[8]={0b11111110,0b11111101,0b11111011,0b11110111,0b11101111,0b11011111,0b10111111,0b01111111};
int8 i,Inicio;
int1 Vsync;
int8 Fila;
int8 Inhibit;
void ShowFila();
void rotar_izq();
#int_TIMER0
void TIMER0_isr(void){
   ShowFila();
   Fila++;
   if(Fila==8){
      Fila=0;
      Vsync=1;
      if(Inhibit!=0) Inhibit-- ; else rotar_izq();
   }
   else
      Vsync=0;
}     
void main(){
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
   enable_interrupts(INT_TIMER0);
   clear_interrupt(INT_TIMER0);
   enable_interrupts(GLOBAL);
   set_tris_a(0);
   set_tris_b(0);
//Apago cartel
   output_b(0xFF);
//Aseguro inicialmente clock en bajo
   output_low(CLOCK);
   output_low(STROBE);
   Fila=0;
   Inhibit=10;
   Vsync=1;
   Inicio=0;
   while(true){}
}
void ShowFila(){
         for(i=Inicio-1;i!=255;i--){
            if((Mensaje & Mascara[Fila])==0) output_low(DATA); else output_high(DATA);
               output_high(CLOCK);
               delay_cycles(1);
               output_low(CLOCK);
         }
         for(i=COLUMNAS-1;i!=Inicio-1;i--){
            if((Mensaje[i-1] & Mascara[Fila])==0) output_low(DATA); else output_high(DATA);
               output_high(CLOCK);
               delay_cycles(1);
               output_low(CLOCK);
         }
         output_b(0xff);
         //output_b(FILAX[Fila]);
         output_high(STROBE);
         delay_cycles(1);   
         output_low(STROBE);
         output_b(FILAX[Fila]);
         
r
   
}
void rotar_izq(){
   Inicio++;
   if(Inicio==COLUMNAS){
      Inicio=0;
   }
}
[/quote]

me haces el favor y me explica la linea de use fast i_(a)y (b ) que aparece en todo el codigo
y como lo hago en codewarrios
Título: Re: De matriz de leds, a letrero electronico
Publicado por: joemix010 en 07 de Julio de 2012, 16:58:10
HOLA
DISCULPEN ALGUIEN ME PUEDE AYUDAR CON ESTE CODIGO LO QUE QUIERO ES DEPLAZAR LA LETRA EN UNA MATRIZ 8X8 
HAY ESTA EL CODIGO QUE ESTOY UTILIZANDO
//Device/Fuses/Etc.---------------------------------
#INCLUDE <16F628A.H>
#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                       
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#use delay(clock=4000000)
//Defines------------------------------------------
#BYTE PORTA = 0x05
#BYTE PORTB = 0x06
#BYTE PORTA_TRIS = 0x85
#BYTE PORTB_TRIS = 0x86
#DEFINE RDD_DATA  PIN_A1
#DEFINE RDD_CLOCK PIN_A0
#DEFINE EEPROM_SCL PIN_A2
#DEFINE EEPROM_SDA PIN_A3

int letra,contador;
int E_INV   [8]={0xFF,0xFF,0x80,0xB6,0xB6,0xB6,0xFF,0xFF};   //LETRA E INVERSA   (LO QUE ENTIENDO SI QUIERO HACER UN DEPLZAZAMIENTO DERECHA A IZQ TENGO QUE HACER
POR EJEMPLO QUE ↑↑  TENDRIA QUE DEPLAZARSE           ↑↑↑ ACA EN UNA NUEVA LINEA!!! 
                              )   
//
void fConfigurar_puertos(void);
void fRDD_send_data0(void);
void fRDD_send_data1(void);
//--------------------------------------------------
//Main----------------------------------------------
//--------------------------------------------------
void main(){
 
  fConfigurar_puertos();
  output_low(RDD_CLOCK); //RELOJ = Bajo
  output_high(RDD_DATA);
  //
  while (TRUE){
              for(contador=0;contador<=100;contador++)
             {            
             for(letra=0;letra<=7;letra++)
             {
             portb=(E_INV[letra]);                  
             delay_ms(1);                  
            fRDD_send_data0();
             }
             fRDD_send_data1();
             }
         
  }//Fin while
}//Fin main
//--------------------------------------------------
//- FUNCIONES-
//--------------------------------------------------
void fConfigurar_puertos(void){
  PORTA_TRIS = 0b11000000; //1=ENTRADA, 0=SALIDA
  PORTB_TRIS = 0b00000000; //1=ENTRADA, 0=SALIDA
 // setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
//  setup_timer_1(T1_DISABLED);
//  setup_timer_2(T2_DISABLED,0,1);
//  setup_comparator(NC_NC_NC_NC);
//  setup_vref(FALSE);
}
//--------------------------------------------------
//---Envia un 0 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data0(void){
  output_low(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}
//--------------------------------------------------
//---Envia un 1 al registro de desplazamiento:
//--------------------------------------------------
void fRDD_send_data1(void){
  output_high(RDD_DATA);
  delay_us(2);
  output_low(RDD_CLOCK);
  delay_us(2);
  output_high(RDD_CLOCK);
}
SI ALGUIEN ME AYUDARIA LE AGRADECERIA UN MONTON!!!!!!




GRACIAS
Título: Re: De matriz de leds, a letrero electronico
Publicado por: ruse85 en 04 de Enero de 2013, 23:31:53
hola  buenas noches  salchig  no se si  hay  posibilidad  de  qu eme puedas pasar  el  esquematico  en PDF de tu carte ya  que  no cuento con proteus  para  simular. Gracias  y espero  tu respuesta
Título: Re: De matriz de leds, a letrero electronico
Publicado por: cmontoya en 06 de Febrero de 2013, 02:51:30


Código: C
  1. #include <16f88.h>
  2. #fuses HS,NOWDT,NOLVP,PUT,NOBROWNOUT,MCLR
  3. #use delay(clock=20000000)
  4. #use fast_io(a)
  5. #use fast_io(b)
  6. #include <fonts.h>
  7. #include <string.h>
  8.  
  9. #define clock PIN_A1
  10. #define strobe PIN_A2
  11. #define dato PIN_A0
  12. #define size_matriz_col 8  //cantidad de columnas por matriz
  13. #define COLUMNAS 40       //Defino cantidad de columnas a usar
  14. #define matriz_num COLUMNAS/size_matriz_col  //numero de matrices usado
  15.  
  16. #byte portb=6
  17.  
  18. int matriz[matriz_num+1][size_matriz_col]={"\0"};  //Almacena los datos a mostrar en el cartel
  19. int Fila;           //Fila actual a refrescar
  20. int VSync;          //Indica si es momento correcto de modificar lo que se esta mostrando...
  21. int Inhibit;        //Impide que se produzcan cambios en el cartel.
  22. const int mensaje[1][32]={"Feliz Navidad y Feliz 2009!!..."};
  23. const int num_msj=1;
  24. const int msj_length[num_msj]={31};
  25. int carries[6],msj,letra,desplazos;
  26.  
  27. void ShowFila(void);
  28. void cargar(int datob);
  29. void desplazar_izq(void);
  30. void load_letra(int caracter);
  31.  
  32. //Esta interrupcion debe suceder segun la cantidad de filas que tengas, y segun la cantidad de Hz a los que queres que tu cartel refresque...
  33. #int_TIMER0
  34. void  TIMER0_isr(void){
  35.  
  36.    ShowFila();                  //Mostremos la fila actual...
  37.    Fila++;
  38.    if(Fila==8){
  39.       Fila=0;
  40.       VSync=1;
  41.       if(Inhibit!=0)
  42.          Inhibit--;
  43.       else
  44.          desplazar_izq();
  45.   }
  46.   else
  47.      VSync=0;
  48. }
  49.  
  50. void main(void){
  51.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
  52.    enable_interrupts(INT_TIMER0);
  53.    clear_interrupt(INT_TIMER0);
  54.    enable_interrupts(GLOBAL);
  55.    setup_adc(adc_off);
  56.    setup_adc_ports(no_analogs);
  57.    set_tris_a(0);
  58.    set_tris_b(0);
  59.    output_b(0xFF);      //Apago cartel
  60.    output_low(CLOCK);   //Aseguro inicialmente clock en bajo
  61.    output_low(STROBE);
  62.    Fila=0;              //Comienzo por la 1er fila
  63.    Inhibit=5;
  64.    VSync=1;             //Indico que comienzo con sync.
  65.    desplazos=0;
  66.    msj=0;
  67.    while(true){}
  68. }
  69.  
  70. void cargar(int datob){
  71.    int contador;
  72.  
  73.    output_low(clock);
  74.    delay_cycles(2);
  75.    output_low(strobe);
  76.    for(contador=0;contador<8;contador++){
  77.       output_bit(dato,(datob & 0x1));
  78.       datob>>=1;
  79.       output_high(clock);
  80.       delay_cycles(1);
  81.       output_low(clock);
  82.    }
  83.    output_high(strobe);
  84.    delay_cycles(1);
  85.    output_low(strobe);
  86. }
  87.  
  88. void ShowFila(void){
  89.    int i;
  90.  
  91.    output_b(0xFF);
  92.    for(i=0;i<5;i++){
  93.       cargar(matriz[i][Fila]);
  94.    }
  95.    bit_clear(portb,fila);
  96. }
  97.  
  98. void desplazar_izq(void){
  99.    int i,j,a;
  100.  
  101.    if(desplazos==8 || desplazos==0){
  102.       load_letra(mensaje[msj][letra]);
  103.       desplazos=0;
  104.    }
  105.    for(i=0;i<8;i++){
  106.       for(j=0;j<6;j++){
  107.          a=matriz[j][i];
  108.          carries[j]=shift_left(&a,1,0);
  109.          matriz[j][i]=a;
  110.       }
  111.       for(j=0;j<6;j++){
  112.          if(j!=5)
  113.             matriz[j][i]|=carries[j+1];
  114.          else
  115.             matriz[j][i]|=carries[0];
  116.       }
  117.    }
  118.    Inhibit=5;
  119.    desplazos++;
  120.    if(desplazos==8){
  121.       letra++;
  122.       if(letra>msj_length[msj])
  123.          letra=0;
  124.    }
  125. }
  126.  
  127. void load_letra(int caracter){
  128.    int i,j;
  129.  
  130.    if(isalnum(caracter)){
  131.       if(isalpha(caracter)){
  132.          if(isupper(caracter)){
  133.             switch(caracter){
  134.                case 'A': i=0; break;
  135.                case 'B': i=1; break;
  136.                case 'C': i=2; break;
  137.                case 'D': i=3; break;
  138.                case 'E': i=4; break;
  139.                case 'F': i=5; break;
  140.                case 'G': i=6; break;
  141.                case 'H': i=7; break;
  142.                case 'I': i=8; break;
  143.                case 'J': i=9; break;
  144.                case 'K': i=10; break;
  145.                case 'L': i=11; break;
  146.                case 'M': i=12; break;
  147.                case 'N': i=13; break;
  148.                case 'O': i=14; break;
  149.                case 'P': i=15; break;
  150.                case 'Q': i=16; break;
  151.                case 'R': i=17; break;
  152.                case 'S': i=18; break;
  153.                case 'T': i=19; break;
  154.                case 'U': i=20; break;
  155.                case 'V': i=21; break;
  156.                case 'W': i=22; break;
  157.                case 'X': i=23; break;
  158.                case 'Y': i=24; break;
  159.                case 'Z': i=25; break;
  160.             }
  161.             for(j=0;j<8;j++){
  162.                matriz[5][j]=letrasM[i][j];
  163.             }
  164.          }
  165.          else{
  166.             switch(caracter){
  167.                case 'a': i=0; break;
  168.                case 'b': i=1; break;
  169.                case 'c': i=2; break;
  170.                case 'd': i=3; break;
  171.                case 'e': i=4; break;
  172.                case 'f': i=5; break;
  173.                case 'g': i=6; break;
  174.                case 'h': i=7; break;
  175.                case 'i': i=8; break;
  176.                case 'j': i=9; break;
  177.                case 'k': i=10; break;
  178.                case 'l': i=11; break;
  179.                case 'm': i=12; break;
  180.                case 'n': i=13; break;
  181.                case 'o': i=14; break;
  182.                case 'p': i=15; break;
  183.                case 'q': i=16; break;
  184.                case 'r': i=17; break;
  185.                case 's': i=18; break;
  186.                case 't': i=19; break;
  187.                case 'u': i=20; break;
  188.                case 'v': i=21; break;
  189.                case 'w': i=22; break;
  190.                case 'x': i=23; break;
  191.                case 'y': i=24; break;
  192.                case 'z': i=25; break;
  193.             }
  194.             for(j=0;j<8;j++){
  195.                matriz[5][j]=letras_m[i][j];
  196.             }
  197.          }
  198.       }
  199.       else{
  200.          for(j=0;j<8;j++){
  201.             matriz[5][j]=numeros[caracter-'0'][j];
  202.          }
  203.       }
  204.    }
  205.    else{
  206.       switch(caracter){
  207.          case ' ': i=0; break;
  208.          case '!': i=1; break;
  209.          case '"': i=2; break;
  210.          case '#': i=3; break;
  211.          case '$': i=4; break;
  212.          case '%': i=5; break;
  213.          case '&': i=6; break;
  214.          case '´': i=7; break; //este es el acento
  215.          case '(': i=8; break;
  216.          case ')': i=9; break;
  217.          case '*': i=10; break;
  218.          case '+': i=11; break;
  219.          case ',': i=12; break;
  220.          case '-': i=13; break;
  221.          case '.': i=14; break;
  222.          case '/': i=15; break;
  223.          case ':': i=16; break;
  224.          case ';': i=17; break;
  225.          case '>': i=18; break;
  226.          case '=': i=19; break;
  227.          case '<': i=20; break;
  228.          case '?': i=21; break;
  229.          case '[': i=22; break;
  230.          case ']': i=23; break;
  231.          case '^': i=24; break;
  232.          case '_': i=25; break;
  233.          case '{': i=26; break;
  234.          case '|': i=27; break;
  235.          case '}': i=28; break;
  236.          case '@': i=29; break;
  237.          case 'ñ': i=30; break;  // esta es la enie
  238.          case '\f': i=31; break;
  239.       }
  240.       for(j=0;j<8;j++){
  241.          matriz[5][j]=chars[i][j];
  242.       }
  243.    }
  244. }


Código: C
  1. const int letrasM[26][8]={{48,120,204,204,252,204,204,204},    //A
  2.                           {248,204,204,248,248,204,204,248},   //B
  3.                           {252,192,192,192,192,192,192,252},   //C
  4.                           {240,200,204,204,204,204,200,240},   //D
  5.                           {252,192,192,240,240,192,192,252},   //E
  6.                           {252,192,192,240,240,192,192,192},   //F
  7.                           {60,64,192,192,216,204,204,248},     //G
  8.                           {204,204,204,204,252,204,204,204},   //H
  9.                           {252,48,48,48,48,48,48,252},         //I
  10.                           {252,48,48,48,48,48,176,240},        //J
  11.                           {196,200,208,224,208,204,204,204},   //K
  12.                           {192,192,192,192,192,192,192,252},   //L
  13.                           {238,214,214,198,198,198,198,198},   //M
  14.                           {196,228,244,212,212,204,204,196},   //N
  15.                           {48,204,204,204,204,204,204,48},     //O
  16.                           {248,204,204,204,248,192,192,192},   //P
  17.                           {56,196,196,196,196,212,200,52},     //Q
  18.                           {248,204,204,204,248,208,200,196},   //R
  19.                           {120,204,192,192,120,12,12,248},     //S
  20.                           {252,48,48,48,48,48,48,48},          //T
  21.                           {204,204,204,204,204,204,204,120},   //U
  22.                           {204,204,204,204,204,204,72,48},     //V
  23.                           {198,198,198,198,198,214,214,238},   //W
  24.                           {132,132,72,48,48,72,132,132},       //X
  25.                           {204,204,204,120,48,48,48,48},       //Y
  26.                           {252,252,8,16,32,64,252,252}};       //Z
  27.  
  28. const int letras_m[26][8]={{0,0,112,136,8,120,136,116},        //a
  29.                            {0,128,128,128,240,136,136,240},    //b
  30.                            {0,0,0,120,128,128,128,120},        //c
  31.                            {0,8,8,8,120,136,136,120},          //d
  32.                            {0,0,0,120,136,240,128,120},        //e
  33.                            {0,96,144,128,128,224,128,128},     //f
  34.                            {0,0,112,136,136,112,8,112},        //g
  35.                            {0,128,128,128,240,136,136,136},    //h
  36.                            {0,0,32,0,32,32,32,32},             //i
  37.                            {0,0,16,0,16,16,144,96},            //j
  38.                            {0,128,144,160,192,160,144,144},    //k
  39.                            {0,32,32,32,32,32,32,32},           //l
  40.                            {0,0,0,136,212,164,164,164},        //m
  41.                            {0,0,0,176,200,136,136,136},        //n
  42.                            {0,0,0,112,136,136,136,112},        //o
  43.                            {0,0,240,136,136,240,128,128},      //p
  44.                            {0,0,120,136,136,120,8,28},         //q
  45.                            {0,0,0,176,192,128,128,128},        //r
  46.                            {0,0,112,136,128,112,8,240},        //s
  47.                            {0,32,32,112,32,32,32,24},          //t
  48.                            {0,0,0,136,136,136,152,104},        //u
  49.                            {0,0,0,136,136,136,80,32},          //v
  50.                            {0,0,0,136,136,136,168,80},         //w
  51.                            {0,0,0,136,80,32,80,136},           //x
  52.                            {0,0,0,136,136,112,16,96},          //y
  53.                            {0,0,0,248,16,32,64,248}};          //z
  54.                            
  55. const int numeros[10][8]={{0,120,132,140,148,164,196,120},     //0
  56.                           {0,16,48,80,16,16,16,124},           //1
  57.                           {0,112,136,8,16,32,64,248},          //2
  58.                           {0,112,136,8,48,8,136,112},          //3
  59.                           {0,8,24,40,72,252,8,8},              //4
  60.                           {0,124,128,128,120,4,4,248},         //5
  61.                           {0,120,128,128,248,132,132,120},     //6
  62.                           {0,252,132,8,16,32,64,64},           //7
  63.                           {0,120,132,132,120,132,132,120},     //8
  64.                           {0,120,132,132,124,4,4,120}};        //9
  65.  
  66. const int chars[31][8]={{0,0,0,0,0,0,0,0},                 //space
  67.                         {0,32,32,32,32,32,0,32},           //!
  68.                         {0,40,40,40,0,0,0,0},              //"
  69.                         {0,36,36,254,40,252,80,80},        //#
  70.                         {0,120,148,144,120,20,148,120},    //$
  71.                         {0,196,204,24,48,96,204,140},      //%
  72.                         {0,96,144,144,96,148,136,116},     //&
  73.                         {0,16,16,16,0,0,0,0},              //'
  74.                         {0,24,32,64,64,64,32,24},          //(
  75.                         {0,96,16,8,8,8,16,96},             //)
  76.                         {0,0,146,84,56,56,84,146},         //*
  77.                         {0,16,16,16,254,16,16,16},         //+
  78.                         {0,0,0,0,0,96,32,64},              //,
  79.                         {0,0,0,0,252,0,0,0},               //-
  80.                         {0,0,0,0,0,0,96,96},               //.
  81.                         {0,4,12,24,48,96,192,128},         //  /
  82.                         {0,0,96,96,0,0,96,96},             //:
  83.                         {0,0,96,96,0,96,32,64},            //;
  84.                         {0,0,192,48,12,48,192,0},          //>
  85.                         {0,0,0,252,0,252,0,0},             //=
  86.                         {0,0,12,48,192,48,12,0},           //<
  87.                         {0,120,132,4,24,16,0,16},          //?
  88.                         {0,56,32,32,32,32,32,56},          //[
  89.                         {0,56,8,8,8,8,8,56},               //]
  90.                         {16,40,68,0,0,0,0,0},              //^
  91.                         {0,0,0,0,0,0,0,254},               //_
  92.                         {0,24,32,32,64,32,32,24},          //{
  93.                         {0,32,32,32,32,32,32,32},          //|
  94.                         {0,96,16,16,8,16,16,96},           //}
  95.                         {56,68,146,170,170,148,64,60},     //@
  96.                         {0,112,0,176,200,136,136,136}};    //ñ



Hola amigos
Primero que todo doy gracias a Cryn por su gran código y aporte.
Para mi proyecto me base en ese código y utilice un 16f877A  +4 matrices 8x8 + 8 – bc327+
 4 74HC164
El proyecto en sí funciona perfecto, el único defecto que veo  es que alcanza a parpadear un poco
Sera que hay alguna forma para reducir este parpadeo
Y otra cosa para que sirve el strobe porque para mis 74HC164 no lo utilizo
Gracias.
Título: Re: De matriz de leds, a letrero electronico
Publicado por: planeta9999 en 06 de Febrero de 2013, 15:44:56
Citar
Para mi proyecto me base en ese código y utilice un 16f877A  +4 matrices 8x8 + 8 – bc327+
 4 74HC164
El proyecto en sí funciona perfecto, el único defecto que veo  es que alcanza a parpadear un poco
Sera que hay alguna forma para reducir este parpadeo
Y otra cosa para que sirve el strobe porque para mis 74HC164 no lo utilizo


Utiliza un registro de desplazamiento con latches, como el 74HC595, en vez del 74HC164, y no tendrás esos problemas.
Strobe (en el chip 4094), es la patilla que controla el latch.
El latch controla un registro de almacenamiento intermedio que carga los bits que va recibiendo, en cuanto has cargado los 8 bits, les das salida a los 8 a la vez poniendo la patilla Strobe a nivel alto (Strobe en el 4094,  STCP en el 74HC595).



Título: Re: De matriz de leds, a letrero electronico
Publicado por: cmontoya en 06 de Febrero de 2013, 21:13:10

Utiliza un registro de desplazamiento con latches, como el 74HC595, en vez del 74HC164, y no tendrás esos problemas.
Strobe (en el chip 4094), es la patilla que controla el latch.
El latch controla un registro de almacenamiento intermedio que carga los bits que va recibiendo, en cuanto has cargado los 8 bits, les das salida a los 8 a la vez poniendo la patilla Strobe a nivel alto (Strobe en el 4094,  STCP en el 74HC595).



Gracias por el consejo voy a probar con el 595 aver como me va
Saludos
Título: Re: De matriz de leds, a letrero electronico
Publicado por: korpaztk en 07 de Febrero de 2013, 09:59:02
espero no llegar tarde...
Si mi mente no me falla el pin de STROBE en los registros de desplazamiento sirve para una vez que el registro reciba los datos en sus entradas activamos el strobe y lo muestra en su salida...
en la pagina de Ucontrol hay un articulo que se llama Usando el "CD4094 para manejar displays 7 segmentos"
y justo en una linea comenta : "Como se usará un display 7 segmentos, lo mejor es ver el dato completo una vez finalizada la transferencia. Entonces STROBE en un nivel alto mientras enviamos los datos. Con ello garantizamos que el display no muestre valores “extraños” hasta que no pongamos STROBE en bajo, instante que se transferirán los 8 bits completos a los latches de salida."
te recomiendo que leas ese articulo que es interesante.-

Para reducir el parpadeo tienes que aumentar la velocidad de refresco, si los refrescos son de 50 HZ (20ms por pasada) el ojo no lo va a detectar, yo arme una matriz también http://www.todopic.com.ar/foros/index.php?topic=33681.0 (http://www.todopic.com.ar/foros/index.php?topic=33681.0) pero de 7x32, y bueno solucione el parpadeo haciendo eso, pero ojo también al hacer un refresco muy rápido porque eso produce que los led no enciendan tanto.-

Saludos.-
Título: Re: De matriz de leds, a letrero electronico
Publicado por: planeta9999 en 07 de Febrero de 2013, 10:44:01
Entonces STROBE en un nivel alto mientras enviamos los datos. Con ello garantizamos que el display no muestre valores “extraños” hasta que no pongamos STROBE en bajo, instante que se transferirán los 8 bits completos a los latches de salida."


Yo creo que es justo al contrario.
Extraido del datasheet del CD4094 de Fairchild:

"The output of each stage of the shift register feeds a latch, which latches data on the negative edge of the STROBE input. When STROBE is HIGH, Data propagates through the latch to 3-STATE output gates."



Título: Re: De matriz de leds, a letrero electronico
Publicado por: cmontoya en 19 de Febrero de 2013, 16:41:23
Hola amigos

En el código de Cryn  para extender más el letrero  simplemente se anexaba el número de matrices a utilizar y el número de columnas y listo.

El problema es que al hacer esta modificación no  pasa nada sigue funcionando con sus 5 matrices original
Como puede resolver esto??
Título: matriz de leds de 7 filas por 55 columnas
Publicado por: killer en 12 de Marzo de 2013, 20:01:19
[move] :-/ ((:-)) :lol: :o :shock:
alguien me podria apoyar en lo que es un letrero  de pasamensajes. bueno lo que pasa mi idea es crear un pasamensajes de 7 filas por 55 columnas, lo que es la matriz de leds ya lo tengo hecho solo que se me complica en la programacion y algunas dudas que tengo en el circuito les agradeceria mucho si alguien me podria proporcionar el codigo y el diagrama.   soy estudiante del instituto tecnologico de tuxtepec y ahorita llevamos lo que es la materia de microcontroladores y estamos utilizando el pic16f877. bueno le agradeceria si alguien me podria ayudar.. gracias
Título: Re: De matriz de leds, a letrero electronico
Publicado por: ke44si en 10 de Septiembre de 2014, 23:30:50
nesecito ayuda de como empezar hacer una matriz de 8x8 con dezplazamiento
Título: Re: De matriz de leds, a letrero electronico
Publicado por: JORGE 500000 en 08 de Marzo de 2015, 10:47:19
Aqui puedes encontrar un ejemplo que está completo con fuentes y todo en ccs compiler y la simulación en proteus, para uno más complejo
con efectos y todo con el pic 18f4550, el Proteus se quedaba chico tuve que hacerlo básico.
http://proyectosmicrocontroladores.blogspot.com/2014/12/matriz-de-leds-con-pic18f4550.html
Título: Re:De matriz de leds, a letrero electronico
Publicado por: neciito en 21 de Diciembre de 2015, 20:21:43
Bueno la humilde colaboracion!  - Tienes que ingresar para ver archivos adjuntos -

Código: CSS
  1. #INCLUDE <16F88.H>
  2. #FUSES HS,NOWDT,NOMCLR
  3. #USE DELAY(CLOCK=20000000)
  4. #USE I2C(Master,SDA=PIN_A3,SCL=PIN_A4)
  5. #BYTE ANSEL=0X9B
  6. #BYTE PORTB=0X06
  7. #BIT CLK=0X05.0
  8. #BIT DS=0X05.1
  9. #BIT ST=0X05.2
  10.  
  11. CONST INT8 Fila[8]={1,2,4,8,16,32,64,128};
  12. CONST CHAR MSJ[35]="VERANO 2016 CON FUERZA DIGITALES 3";
  13. INT8 P[24],L[7];
  14. INT8 I,J,K,M,TL;
  15. INT16 T,N;
  16.  
  17. VOID ESCRIBE_EEPROM(INT16 ADDRESS, INT8 DATO)
  18. {
  19.    I2C_START();                  //Inicio de la transmisión...
  20.    I2C_WRITE(0xA0);              //... con la dirección I2C correspondiente a la eeprom en modo escritura
  21.    I2C_WRITE(ADDRESS>>8);        //Envío parte alta dirección
  22.    I2C_WRITE(ADDRESS);           //Envío parte baja direción
  23.    I2C_WRITE(dato);              //Envío del dato
  24.    I2C_STOP();                   //Finalización de la transmisión
  25. }
  26.  
  27. INT8 LEE_EEPROM(INT16 ADDRESS)
  28. {
  29.    INT8 DATO;
  30.    I2C_START();               //Inicio de la transmisión...
  31.    I2C_WRITE(0xA0);           //...con la dirección correspondiente a la eeprom en modo escritura
  32.    I2C_WRITE(ADDRESS>>8);     //Envío parte alta dirección
  33.    I2C_WRITE(ADDRESS);        //Envío parte baja dirección
  34.    I2C_START();               //Reinicio...
  35.    I2C_WRITE(0xA1);           //...con eeprom en modo lectura
  36.    DATO=I2C_READ(0);          //Lectura del dato de la dirección enviada
  37.    I2C_STOP();                //Fin de la transmisión
  38.    RETURN(DATO);              //La función devuelve el dato leído
  39. }
  40.  
  41.  
  42. VOID CODIFICA(char LETRA)
  43. {
  44.    SWITCH (LETRA)
  45.    {
  46.       CASE 'A':
  47.          TL=8;
  48.          L[0]=0; L[1]=127; L[2]=255; L[3]=204; L[4]=204; L[5]=255; L[6]=127; L[7]=0;
  49.          BREAK;
  50.       CASE 'B':
  51.          TL=8;
  52.          L[0]=0; L[1]=255; L[2]=255; L[3]=219; L[4]=219; L[5]=255; L[6]=102; L[7]=0;
  53.          BREAK;
  54.       CASE 'C':
  55.          TL=8;
  56.          L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=195; L[5]=195; L[6]=195; L[7]=0;
  57.          BREAK;
  58.       CASE 'D':
  59.          TL=8;
  60.          L[0]=0; L[1]=255; L[2]=255; L[3]=195; L[4]=195; L[5]=255; L[6]=126; L[7]=0;
  61.          BREAK;
  62.       CASE 'E':
  63.          TL=8;
  64.          L[0]=0; L[1]=255; L[2]=255; L[3]=219; L[4]=219; L[5]=219; L[6]=195; L[7]=0;
  65.          BREAK;
  66.       CASE 'F':
  67.          TL=8;
  68.          L[0]=0; L[1]=255; L[2]=255; L[3]=216; L[4]=216; L[5]=216; L[6]=192; L[7]=0;
  69.          BREAK;  
  70.       CASE 'G':
  71.          TL=9;
  72.          L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=219; L[5]=219; L[6]=223; L[7]=30; L[8]=0;
  73.          BREAK;  
  74.       CASE 'H':
  75.          TL=8;
  76.          L[0]=0; L[1]=255; L[2]=255; L[3]=24; L[4]=24; L[5]=255; L[6]=255; L[7]=0;
  77.          BREAK;  
  78.       CASE 'I':
  79.          TL=8;
  80.          L[0]=0; L[1]=195; L[2]=195; L[3]=255; L[4]=255; L[5]=195; L[6]=195; L[7]=0;
  81.          BREAK;  
  82.       CASE 'J':
  83.          TL=9;
  84.          L[0]=0; L[1]=6; L[2]=199; L[3]=195; L[4]=255; L[5]=254; L[6]=192; L[7]=192; L[8]=0;
  85.          BREAK;  
  86.       CASE 'K':
  87.          TL=8;
  88.          L[0]=0; L[1]=255; L[2]=255; L[3]=24; L[4]=60; L[5]=103; L[6]=195; L[7]=0;
  89.          BREAK;  
  90.       CASE 'L':
  91.          TL=8;
  92.          L[0]=0; L[1]=255; L[2]=255; L[3]=3; L[4]=3; L[5]=3; L[6]=3; L[7]=0;
  93.          BREAK;  
  94.       CASE 'M':
  95.          TL=9;
  96.          L[0]=0; L[1]=255; L[2]=127; L[3]=48; L[4]=24; L[5]=48; L[6]=127; L[7]=255; L[8]=0;
  97.          BREAK;  
  98.       CASE 'N':
  99.          TL=9;
  100.          L[0]=0; L[1]=255; L[2]=127; L[3]=56; L[4]=28; L[5]=14; L[6]=255; L[7]=255; L[8]=0;
  101.          BREAK;  
  102.       CASE 'Ñ':
  103.          TL=8;
  104.          L[0]=0; L[1]=127; L[2]=191; L[3]=156; L[4]=142; L[5]=127; L[6]=127; L[7]=0;
  105.          BREAK;  
  106.       CASE 'O':
  107.          TL=8;
  108.          L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=195; L[5]=255; L[6]=126; L[7]=0;
  109.          BREAK;
  110.       CASE 'P':
  111.          TL=8;
  112.          L[0]=0; L[1]=255; L[2]=255; L[3]=204; L[4]=204; L[5]=252; L[6]=120; L[7]=0;
  113.          BREAK;
  114.       CASE 'Q':
  115.          TL=9;
  116.          L[0]=0; L[1]=126; L[2]=255; L[3]=195; L[4]=199; L[5]=255; L[6]=126; L[7]=3; L[8]=0;
  117.          BREAK;
  118.       CASE 'R':
  119.          TL=8;
  120.          L[0]=0; L[1]=255; L[2]=255; L[3]=204; L[4]=206; L[5]=251; L[6]=113; L[7]=0;
  121.          BREAK;
  122.       CASE 'S':
  123.          TL=8;
  124.          L[0]=0; L[1]=114; L[2]=251; L[3]=219; L[4]=219; L[5]=223; L[6]=78; L[7]=0;
  125.          BREAK;
  126.       CASE 'T':
  127.          TL=8;
  128.          L[0]=0; L[1]=192; L[2]=192; L[3]=255; L[4]=255; L[5]=192; L[6]=192; L[7]=0;
  129.          BREAK;
  130.       CASE 'U':
  131.          TL=8;
  132.          L[0]=0; L[1]=254; L[2]=255; L[3]=3; L[4]=3; L[5]=255; L[6]=254; L[7]=0;
  133.          BREAK;
  134.       CASE 'V':
  135.          TL=8;
  136.          L[0]=0; L[1]=252; L[2]=254; L[3]=3; L[4]=3; L[5]=254; L[6]=252; L[7]=0;
  137.          BREAK;  
  138.       CASE 'W':
  139.          TL=9;
  140.          L[0]=0; L[1]=255; L[2]=255; L[3]=6; L[4]=12; L[5]=6; L[6]=255; L[7]=255; L[8]=0;
  141.          BREAK;
  142.       CASE 'X':
  143.          TL=9;
  144.          L[0]=0; L[1]=195; L[2]=231; L[3]=60; L[4]=24; L[5]=60; L[6]=231; L[7]=195; L[8]=0;
  145.          BREAK;
  146.       CASE 'Y':
  147.          TL=8;
  148.          L[0]=0; L[1]=224; L[2]=240; L[3]=63; L[4]=63; L[5]=240; L[6]=224; L[7]=0;
  149.          BREAK;
  150.       CASE 'Z':
  151.          TL=8;
  152.          L[0]=0; L[1]=195; L[2]=199; L[3]=207; L[4]=219; L[5]=243; L[6]=231; L[7]=0;
  153.          BREAK;
  154.       CASE '0':
  155.          TL=8;
  156.          L[0]=0; L[1]=126; L[2]=255; L[3]=203; L[4]=211; L[5]=255; L[6]=126; L[7]=0;
  157.          BREAK;
  158.       CASE '1':
  159.          TL=6;
  160.          L[0]=0; L[1]=32; L[2]=96; L[3]=255; L[4]=255; L[5]=0;
  161.          BREAK;
  162.       CASE '2':
  163.          TL=8;
  164.          L[0]=0; L[1]=99; L[2]=231; L[3]=207; L[4]=219; L[5]=243; L[6]=99; L[7]=0;
  165.          BREAK;
  166.       CASE '3':
  167.          TL=8;
  168.          L[0]=0; L[1]=195; L[2]=219; L[3]=219; L[4]=219; L[5]=255; L[6]=102; L[7]=0;
  169.          BREAK;
  170.       CASE '4':
  171.          TL=8;
  172.          L[0]=0; L[1]=248; L[2]=248; L[3]=24; L[4]=24; L[5]=255; L[6]=255; L[7]=0;
  173.          BREAK;
  174.       CASE '5':
  175.          TL=8;
  176.          L[0]=0; L[1]=251; L[2]=251; L[3]=219; L[4]=219; L[5]=223; L[6]=206; L[7]=0;
  177.          BREAK;
  178.       CASE '6':
  179.          TL=8;
  180.          L[0]=0; L[1]=62; L[2]=127; L[3]=251; L[4]=219; L[5]=223; L[6]=206; L[7]=0;
  181.          BREAK;
  182.       CASE '7':
  183.          TL=8;
  184.          L[0]=0; L[1]=192; L[2]=192; L[3]=207; L[4]=223; L[5]=240; L[6]=224; L[7]=0;
  185.          BREAK;
  186.       CASE '8':
  187.          TL=8;
  188.          L[0]=0; L[1]=118; L[2]=255; L[3]=219; L[4]=219; L[5]=255; L[6]=118; L[7]=0;
  189.          BREAK;
  190.       CASE '9':
  191.          TL=8;
  192.          L[0]=0; L[1]=112; L[2]=248; L[3]=217; L[4]=219; L[5]=255; L[6]=126; L[7]=0;
  193.          BREAK;
  194.       CASE ' ':
  195.          TL=4;
  196.          L[0]=0; L[1]=0; L[2]=0; L[3]=0;
  197.          BREAK;
  198.    }
  199. }
  200.  
  201.  
  202. VOID MAIN()
  203. {
  204.    SET_TRIS_A(0);
  205.    SET_TRIS_B(0);
  206.    ANSEL=0;
  207.    M=32;
  208.    T=0;
  209.    
  210.    FOR(K=0;K<=33;K++)
  211.    {
  212.       CODIFICA(MSJ[K]);
  213.       FOR(I=0;I<TL;I++)
  214.       {
  215.          ESCRIBE_EEPROM(T,L[I]);
  216.          T=T+1;
  217.          DELAY_MS(10);
  218.       }
  219.    }
  220.    N=T;
  221.    
  222.    DO
  223.    {
  224.       FOR(T=1;T<=N+M+20;T++)
  225.       {
  226.          FOR(K=M-1;K>=1;K--)
  227.          {
  228.             P[K]=P[K-1];
  229.          }
  230.          IF(T<=N)
  231.             P[0]=LEE_EEPROM(T-1);  
  232.          ELSE
  233.             P[0]=0;
  234.            
  235.          FOR(K=1;K<=10;K++)
  236.          {
  237.             FOR(I=1;I<=8;I++)
  238.             {
  239.                FOR(J=M;J>=1;J--)
  240.                {
  241.                   IF(T>=J && T<J+N)
  242.                      DS=BIT_TEST(P[J-1],I-1);
  243.                      //DS=1-BIT_TEST(P[J-1],I-1);
  244.                   ELSE
  245.                      DS=0;
  246.                      //DS=1;
  247.                   CLK=0; DELAY_US(2); CLK=1;
  248.                 }
  249.                
  250.                PORTB=255;
  251.                ST=0; DELAY_US(2); ST=1;
  252.                PORTB=255-Fila[I-1];
  253.                //DELAY_MS(1);
  254.             }
  255.          }
  256.            
  257.       }  
  258.    }WHILE(TRUE);
  259.      
  260. }[attachment id=1 msg=380908][attachment id=1 msg=380908]
- Tienes que ingresar para ver archivos adjuntos -
Título: Re:De matriz de leds, a letrero electronico
Publicado por: rafapic2015 en 29 de Marzo de 2016, 17:30:07
hola gente como estan?. queria agradecer a todos los que comparten informacion y ayudan a solucionar los distontos problemas para armar una matriz como es el caso, yo arme una de 8x8 con registros tanto para filas como columnas como publicaron aqui en este mismo foro y anda perfecto :-/les dejo el linck del video asi la ven, saludos y de nuevo gracias a todos  ((:-)).
Título: Re: De matriz de leds, a letrero electronico
Publicado por: Moechh en 19 de Abril de 2016, 19:02:16
Aqui un video de como se ve esto (para el caso de las columnas)...  Poco, pero se ve como digo.

Finalmente, decir que para el aumento de filas para estas matrices, almenos yo, NO recomiento el 74LS164 :5] Ah! y tampoco estoy usando transistores, aunque en caso de que se aumente MAS las filas, creo que ya seria necesario, desde ahora, siento que la intensidad ha bajado regularmente, pero bueno.
 
Por otro lado, el PIC (18F2550) se calienta regularmente, cosa rara  :?


Epa, aqui el video:

[/youtube]


Salu2.
Hola amigo disculpa yo también are una matriz de esa dimencion pero no tengo ni idea de como hacer la programación crees que podrías ayudarme sólo tengo los conceptos básicos de programacion
Título: Re:De matriz de leds, a letrero electronico
Publicado por: rafapic2015 en 24 de Agosto de 2016, 12:38:15
Hola de nuevo a todos los foreros, hoy les quiero enseñar mi prototipo de una matriz que realice de 8x72; la misma consta de 192 leds verdes + 192 leds rojos y otros 192 leds azules, utilizando registros de desplazamiento 74hc164  por lo pronto esta funcional  :D tanto en simulación como en lo físico claro esta, faltan algunos detalles y depurar un poco mas todo. les comparto la simulación en proteus y el código en ccs para la matriz de 8x72 con las modificaciones respectivas. todavía me faltan agregar algunas cosas para que quede bien completamente en fin, espero les agrade los avances y si alguien ve algo que se me escape le estaré agradecido como siempre gracias a todos los que ayudan en este hilo como en general. gracias ((:-))
ha y el video con la matriz funcionando, prototipo recien.
Título: Re:De matriz de leds, a letrero electronico
Publicado por: KILLERJC en 24 de Agosto de 2016, 12:47:01
Lo que me causa mas impresion no es el tablero, los leds, o que lo pudieron hacer, sino es la cantidad de proboards con todos los cablecitos. Es como para volverse loco! Ni hablar de conectar un mal y revisar una por uno que este todo correcto.

Felicidades por el logro!
Título: Re:De matriz de leds, a letrero electronico
Publicado por: Nocturno en 24 de Agosto de 2016, 13:23:53
Uffff, sí, qué miedo a que se suelte alguno. Enhorabuena.
Título: Re:De matriz de leds, a letrero electronico
Publicado por: rafapic2015 en 26 de Agosto de 2016, 21:27:13
así es me paso eso varias veces y renegué  :5] jaja pero luego buscando encontré el error y eran las resistencias de los registros que se tocaban y salia mal el mensaje, pero en fin se pudo y ahora estoy haciendo el pcb;bien termine y este todo listo les compartiré los archivos (ya subí la simulación y los archivos .c y .hex también en un comentario anterior para el quiera extender la misma)para que alguien que quiera o necesite pueda armarla. saludos y gracias a todos los que aportan información constantemente en este foro en general.
Título: Re:De matriz de leds, a letrero electronico
Publicado por: rafapic2015 en 16 de Septiembre de 2016, 17:47:10
hola de nuevo a todos, aquí les dejo la carpeta donde esta todo para hacer funcionar la matriz de 8x72, tanto simulación como las conexiones en fisico y algun datasheet, también el pcb en el programa pcb wizard listo para planchar y armar. bien tenga tiempo continuare y tratare de agregar otras cositas en fin gracias a todos los foreros y espero les ayude. :-/