Autor Tema: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)  (Leído 34908 veces)

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

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #15 en: 17 de Octubre de 2010, 06:49:56 »
Ahora bien, a lo que vine... me tome la molestia de analizar todo lo que pude el código que pusiste Bruno. Me parece sencillamente fantabuloso y fabulantástico. Una joyita como era de esperar con esa forma tan sofisticada y optimizada que tienes de programar que ya todos los asiduos participantes de este foro conocemos.

Quise agregar un efecto muy simple, el más simple que se me ocurrió y la verdad no me resultó tan facil hacerlo. Se trata de rotar el texto hacia la derecha en lugar de la izquierda.
En sí, no parece muy útil este efecto, pero se puede combinar con el anterior y hacer cosas como un efecto rebote en el borde... además mi intención fue afianzarme con el código.

Tuve problemas porque el efecto de rotación que creaste Bruno, trabaja con las funciones de texto, es decir que va redibujando el texto y no el mapa de bits por decirlo de alguna manera, me gustaría saber por qué lo hiciste de esa manera? Es decir si hay alguna razón especial que amerite hacerlo así o si es indistinto de una forma u otra...

Bueno, el efecto que logré lo adjunto con la simulación en proteus y el código (es decir las modificaciones sobre el código de Bruno) las comento a continuación:

En el main.c agregué esto:
Código: C
  1. #int_RB                
  2. void  RB0_isr(void)
  3. {
  4.    if(input(PIN_B0)) cambiar_efecto(ROTA_DER);
  5.    else cambiar_efecto(ROTA_IZQ);
  6. }

y obviamente esto:
Código: C
  1. enable_interrupts(INT_RB);

En publik.c agregué la constante invertida:
Código: C
  1. const char demo[] = "HOLA FORO TODOPIC!  ";
  2. const char demo2[] = "  !CIPODOT OROF ALOH";
sé que está mal hacerlo de esta manera y que tendría que recorrer el texto a la inversa, pero eso se extiende un poco ya que tendría que tomar el largo de la cadena, moverme al final, modificar o agregar la rutina de recorrido letra a letra, etc.

Además modifiqué en la función void Publik_Ejecutar(void)
Código: C
  1. switch(efecto)
  2.    {
  3.       case ROTA_IZQ:
  4.          efecto_rota_izq();
  5.       break;
  6.      
  7.       case ROTA_DER:
  8.          efecto_rota_der();
  9.       break;
  10.    
  11.       default:      
  12.       break;
  13.    }

En typos.c agregué al final:
Código: C
  1. int1 AnteriorElementoLetra(void)
  2. {
  3.  
  4.    if(letraPosicionActual <= letraFinal) return FALSE;
  5.    letraData = DataLetras[--letraPosicionActual];
  6.    return TRUE;
  7. }
  8.  
  9. void RCargarLetra(char CodigoLetra)
  10. {
  11.    letraFinal = IndiceTypos[typoActual];      
  12.    letraFinal+= CodigoLetra;                        
  13.    letraPosicionActual= IndiceLetras[letraFinal];    
  14.    letraFinal= IndiceLetras[++letraFinal];          
  15.    auxiliar=letraFinal;
  16.    letraFinal=letraPosicionActual;
  17.    letraPosicionActual=auxiliar;
  18. }

y por último, en efectos.c puse:
Código: C
  1. void efecto_rota_der()
  2. {
  3.  
  4.    if(AnteriorElementoLetra())    
  5.    {            
  6.       if(--BufferInicio <= 0) BufferInicio=COLUMNAS-1;  
  7.       if(BufferInicio<COLUMNAS-1) efAux1= BufferInicio+1; else efAux1=0;
  8.       buffer[efAux1] = letraData;    
  9.    }else{
  10.       //buffer[efAux1] = 0;                            
  11.       if(!nuevoEfecto) archivoPosicionActual++;
  12.       nuevoEfecto = FALSE;
  13.       if(demo2[archivoPosicionActual] == 0) archivoPosicionActual = 0;
  14.       RCargarLetra(demo2[archivoPosicionActual]);
  15.    }
  16. }

Bueno eso es todo. Muchas Gracias Bruno.
     

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #16 en: 17 de Octubre de 2010, 19:09:25 »
Menta muchas gracias por la respuesta y sobre todo tan rapido...
Tal vez no me he explicado en mi pregunta.... yo entiendo bien lo que bruno hace en su codigo con el timer 0 y le precarga... solo que en mi hardware cuando le cargo un texto a mostrar (no para que se deslice sino para que quede estatico) me hace lo que contaba anteriormente, no creo que sea un error en el hardware ya que cuando le vario el tiempo al timer y por ejemplo lo pongo a que se refresque cada 10 ms... escribe bien la frase aunque obviamente con el parpadeo ya que se pasa de los 60 o 50 Hz... tal vez estaba pensando que para la implementacion de la rotacion del texto si me funcione... la verdad es que no lo probe... pero cuando quiero solo leer un buffer y mostrar solamente lo que hay en el me hace este problema de que una fila se desplaza.... tambien eh probado poner un delay de 1 us entre la habilitacion del latch... esto funciono solo que es como que hay un destello de una de las filas que se quiere correr... nose cual sera el problema... el codigo es el mismo que el de bruno al menos esa parte.. solo que no esta implementado el desplazamiento aun. el harware esta compuesto de 9 74hs595 los cuales 8 son para las columnas y 1 para las 8 filas obvio que todos conectados en cascada...

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #17 en: 17 de Octubre de 2010, 20:13:46 »
Haciendo unas pruebas.... parece que el problema esta en que el timer necesitaria de un tiempo minimo de ejecucion... es decir... yo para prueba cree otra variable que cumple exactamente la misma funcion que la variable mascara, entoces controlo todo con la variable mascara pero a su vez hay una variable que se llama mascara2 que solo la incrementa y evalua tal como lo hace con mascara... bueno haciendo esto funciona todo a la perfeccion... el mensaje aparece y todo muy lindo... cuando le saco esta parte de codigo al timer vuelve con el problema... es como un tiempo de ejecucion que esta necesitando parece (en realidad lo que pienso) porque no tengo idea que puede estar pasando! si con la variable que cree no estoy afectando a nada del codigo funcional... solo le estoy haciendo que la funcion del timer tarde mas en salir de alli...

Saludos

Carlos

Desconectado smarkol

  • PIC10
  • *
  • Mensajes: 20
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #18 en: 17 de Octubre de 2010, 22:15:01 »
Esta muy  bueno esto, quiero aprender mas !!! :mrgreen:

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #19 en: 18 de Octubre de 2010, 07:38:54 »
Hola disculpen la demora, pero estoy a full con el laburo.


Carlos, podrá ser debido a que cambiaste de familia el microcontrolador? Un 16F @ 20Mhz es bastante mas lento que un 18F @ 48Mhz. Igualmente creo que el programa es bastante sencillo como para que se devore los mS entre desbordamientos del Timer0.

No llego bien a detectar el problema por lo que me comentas. Por lo que mencionás parecería que hay un desfasaje en el valor que se carga en el registro de desplazamiento asociado a las filas de tu circuito. A veces hay problemas con las demoras que necesitan los registros. Bien hiciste en agregar un delay al strobe. Podrías agregrle un delay entre la subida del clock y la bajada del mísmo también, por las dudas.

Hace muchos años que trabajo con matrices y LEDs. Hace unos meses tuve un problema desarrollando un prototipo para unos paneles RGB que comercializamos, que puede ser el que se te está presentando. La distancia entre las salidas del uC y el primer 74HC595 era bastante grande(mayor a 1 metro). A esa distancia, teniamos el problema de que alguno de los 595 se robaba un dato. Algo muy loco, pero real. Si ese es también tu caso, entonces el comportamiento sería algo como lo que mencionás según lo que imagino. Obviamente la pérdida de ese dato haria no solo que se te desfase todo una fila, sino también en una columna, lo que puede pasar desapercibido porque un error de sólo una columna puede no ser visible excepto pongas algo que controles muy bien en la matriz y sepas exáctamente dónde debe aparecer y dónde no. Recordemos también que las señales de CLOCK y STROBE se comparten entre todos los 595, por lo que el PIC debe suministrar suficiente corriente para alimentar a todos, por lo que siempre hay que intentar mantener al mínimo la distancia total de esas líneas, y además, minimizar la cantidad de soldaduras en las mísmas.

Podrías adjuntar las modificaciones que hiciste para solucionarlo?


Menta, el primer cartel comercial que hice hace varios años trabajaba directamente sobre un puñado de mapas de bits, que eran generados directamente en un software que hice de PC.... Estaba todo bárbaro, pero el tamaño de los archivos generados se incrementaba significativamente. Si bien este código sólo posee implementación para trabajar con caracteres de texto, nada impide que un comando, a futuro, cambie su comportamiento a un modo gráfico, que permita directamente dibujar una trama de bits. En realidad la diferencia, si bien es algo técnica, puede que termine siendo más sobre gustos y diseño que otra cosa...

Por otro lado, a lo largo de estos meses existen varias personas que ya han fabricado matrices con este aporte, incluso le han agregado cosas y mejoras pero siempre se han comunicado por privado conmigo por algun que otro detalle que les fallaba y los ayudé a solucionarlos, y pese a mis reiterados intentos(y sus reiteradas promesas) de que compartieran los aportes, no lo han hecho.

Así que te agradezco doblemente: primero por interesarte y tomarte el tiempo de leer el hilo y mi código(+ los elogios  :D :D), y segundo por compartir una mejora que puede servir a otros.

P.D: No te elegiste un efecto realmente sencillo para empezar...Igualmente, hacer efectos en una matriz realmente no es de lo más sencillo. Hay que manipular muy bien el tema de trabajar con bits, rotaciones y operaciones lógicas para lograr efectos complejos en poco tiempo de ejecución. El tema de escribir la cadena a mostrar de derecha a izquierda al reves no me parece realmente incorrecto. Me parece una implementación sencilla de realizar para un programa de PC que debería ser el encargado de acomodar un mensaje al lenguaje que el uC entienda. De fondo a todo esto, la verdadera complejidad surje cuando querés dotar a un pasamensajes de propiedades un poco más avanzadas, y tener que revisar hacia adelante dónde termina la cadena para poder invertirla, puede ser imposible de implementar en ciertos casos donde los datos no estén disponibles todos juntos, sin que llegan a medida que van siendo necesarios.
  

Un saludo.





« Última modificación: 18 de Octubre de 2010, 07:44:22 por BrunoF »
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

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

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #20 en: 18 de Octubre de 2010, 10:47:14 »
Bueno Bruno primero te agradezco por tu comentario... es exactamente el comportamiento que describis... lo bueno es que habia pensado lo mismo que vos acerca de la corriente que le entrega el uC a todos los registros... lo de la distancia ya la tenia en cuenta pero en este caso esta solo con cables de no mas de 30 cm....
Les comento que durante estas 2 semanas estoy con el CONGRESO VIRTUAL DE MICROCONTROLADORES Y SUS APLICACIONES por lo que tambien aprovecho a invitarlos a visitar la pagina del mismo www.areacapacitacion.com.ar (perdon por el chivo pero creo que les puede servir a todos) lo que quiero decir con esto es que en breve estare cargando el codigo que si bien no me parece que sea la solucion... con esto anda... jejej...

Un saludo!

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #21 en: 18 de Octubre de 2010, 10:59:33 »
Ah Bruno me olvide de preguntarte... vos para las matrices que estas haciendo... seguis trabajando con uC de 8 bits? o migraste a algun otro uC???

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #22 en: 18 de Octubre de 2010, 11:55:54 »
Hola. Bueno gracias por la info. Espero puedas solucionar el problema.

Mira, depende la matriz. Para matrices de este tipo y monocromáticas sigo usando uC de 8 bits. Ya después para paneles RGB, de 32k colores uso ARMs de 32 bits y en un proximo futuro, FPGA.

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

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

Desconectado smarkol

  • PIC10
  • *
  • Mensajes: 20
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #23 en: 18 de Octubre de 2010, 14:18:05 »
hola,quiero comentarles que ya llevo un tiempo siguiendo sus comemtarios y aportes respecto a este tema,y tambien he desarrollado mi propia matriz (con algunos problemas de brillo,nada que no se pueda resolver  :5]) que no esta terminada completamente,  he usado los aportes de cryn que tiene en su hilo respecto al tema,de los cuales he aprendido bastante y en el entorno de mi hogar he modifcado el codigo muchas veces. Pero hay dudas que todavia dan vueltas en mi cabeza,como por ejemplo
- Consideraciones en la etapa de potencia.
- hasta que tamaño de matriz se podria hacer con un pic , me refiero a que cuando se declara una matriz va a depender de la capacidad de cada pic.
- es necesario recurrir a otros metodos en cuanto a programacion y diseño de hardware para matrices muy largas.
- en algunos casos he leido otros hilos en que solo lo manejan con un software (VB, VC,VC#),lo que da mas facilidad al tratamientos de los efectos para la matriz.

Saludos.

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #24 en: 20 de Octubre de 2010, 21:52:00 »
Bueno dejo la parte de codigo del timer 0 la cual trabajando con un PIC16F876A a 20 MHz funciona bien de esta manera tal como lo comente antes. Si encuentran algo raro me avisan y seguimos probando. saludos.!

Código: [Seleccionar]
void Mostrar_Frame (void){
//if(!inicio)
//      j=Columnas-1;
//else
//   j=inicio-1;
   
   for (i = 0; i < Columnas; i++){   //Cargo las columnas
   
         if ( Afuera[j] & mask2 )
                     output_low(Data_Fila);
         else
                     output_high(Data_Fila);
         
   output_high (Clock_Fila);
   output_low (Clock_Fila);
   
  if (!j)
         j = Columnas -1;
         
   else
         j--;
 
 
                      }
 
 
 
  aux = ~mask2;  // Para complementar la logica debido a los TIP127 (PNP)
 
  for ( i = 0 ; i < Filas ; i++ ){  //Cargo las filas al registro y voy rotando 1 bit
 
       if ( bit_test(aux,Filas - 1) )
                     output_high(Data_Fila);
       else
                     output_low(Data_Fila);
       
       output_high(Clock_Fila);
       output_low(Clock_Fila);
       
     
       aux *= 2;
       
       
  }
 
       output_high   (Latch);

       output_low    (Latch);
 
 
 if (mask >= 0x80){
            mask = 0x01;
            //output_toggle(PIN_B4);
             
 
                  } 
  else
      mask *= 2;
     
  if (mask2>=0x80){
            mask2 = 0x01;
            Nuevo_Frame = TRUE;  //Cuando llego aca es porque ya mostre el primer cuadro, entonces habilito para cargar otro.
  }



  else
         mask2 *= 2;
 
  }

Como pueden ver hay 2 mask definidos pero solo uso uno. si saco esto el cartel no funciona correctamente y genera lo que comente anteriormente. Saludos y espero les sirva a los que les paso lo mismo
Saludos
Carlos

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #25 en: 20 de Octubre de 2010, 22:00:31 »
hola,quiero comentarles que ya llevo un tiempo siguiendo sus comemtarios y aportes respecto a este tema,y tambien he desarrollado mi propia matriz (con algunos problemas de brillo,nada que no se pueda resolver  :5]) que no esta terminada completamente,  he usado los aportes de cryn que tiene en su hilo respecto al tema,de los cuales he aprendido bastante y en el entorno de mi hogar he modifcado el codigo muchas veces. Pero hay dudas que todavia dan vueltas en mi cabeza,como por ejemplo
- Consideraciones en la etapa de potencia.
- hasta que tamaño de matriz se podria hacer con un pic , me refiero a que cuando se declara una matriz va a depender de la capacidad de cada pic.
- es necesario recurrir a otros metodos en cuanto a programacion y diseño de hardware para matrices muy largas.
- en algunos casos he leido otros hilos en que solo lo manejan con un software (VB, VC,VC#),lo que da mas facilidad al tratamientos de los efectos para la matriz.

Saludos.


Bueno algunas cosas creo que voy a poder responder aunque creo que Bruno tiene mas experiencia en esto y tal vez me corrija.

Para la estapa de potencia se debe tener en cuenta la cantidad de leds que uno maneja por filas, si es que controlas las fila. si trabajas con leds a 25 o 30 mA los registros no necesitan de otro integrado para poder drenar corriente, esto si trabajas con un solo led. entonces deberias buscar transistores que se aguanten la corriente total que habria cuaando encendes toda una fila.
Creo que para la 2da consigna va. a depender de los buffer que definas y esto se traduce en cantidad de memoria ram que dispones en el uC. ademas depende la frecuencia a la que pueden trabajar estos. ya que si es muy larga necesitaras de una mayor frecuencia de trabajo.
Las demas inquietudes la verdad no sabria decirte.
Espero haberte ayudado
Un saludo
Carlos.

Desconectado cristian_elect

  • PIC18
  • ****
  • Mensajes: 453
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #26 en: 20 de Octubre de 2010, 23:03:35 »
SE podra hacer uasando el puerto SPI letrero.

Desconectado smarkol

  • PIC10
  • *
  • Mensajes: 20
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #27 en: 20 de Octubre de 2010, 23:35:34 »
Por supuesto dom124,las respuestas siempre se agradecen.

saludos..

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #28 en: 21 de Octubre de 2010, 00:26:00 »
SE podra hacer uasando el puerto SPI letrero.

¿Es una pregunta? Si la consulta es utilizar el bus SPI para entregar serialmente los valores que hay que setear en las columnas, la respuesta es si. Pero seguramente vas a ocupar mucho más lineas para su control.


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

Desconectado dom124

  • PIC10
  • *
  • Mensajes: 42
Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
« Respuesta #29 en: 21 de Octubre de 2010, 00:43:18 »
Que tipos de memorias externas son recomendadas para los carteles?? por I2C, SPI, paralelas? me supongo que tiene que ver mucho con la velocidad de lectura pero por ahi una I2C es suficiente y no necesitamos de otras... cuales ocuparon ustedes???

Saludos

Carlos


 

anything