TODOPIC

Microcontroladores PIC => * PROYECTOS * => Mensaje iniciado por: BrunoF en 14 de Mayo de 2010, 15:30:06

Título: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 14 de Mayo de 2010, 15:30:06
Este es el tema para sus comentarios y aportes del proyecto: Librería Matríz de LEDs  Universal[Compilador CCS] (http://www.todopic.com.ar/foros/index.php?topic=30658.0)

Espero sus comentarios, aportes o dudas. :mrgreen:
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Nocturno en 14 de Mayo de 2010, 15:49:38
¡Yo quiero, yo quiero estar aquí!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: gera en 14 de Mayo de 2010, 18:16:50
Me prendo!!
Creo que lo primero seria ponernos de acuerdo en el hardware. Una vez q estandarizado eso, habria q trabajar en funciones primitivas, como por ej:
Código: [Seleccionar]
void setpixel(int x, int y, int z);
void clrpixel(int x, int y, int z);
unsigned char getpixel(int x, int y, int z);
unsigned char inrange(int x, int y, int z);
void negpixel(int x, int y, int z);
void alterpixel(int x, int y, int z, int state);
void setplane_z(int z);
void clrplane_z(int z);
void setplane_x(int x);
void clrplane_x(int x);
void setplane_y(int y);
void clrplane_y(int y);
void setplane(unsigned char plane, int i, int state);
void setline_z(int x, int y, int z1, int z2);
void setline_x(int z, int y, int x1, int x2);
void setline_y(int z, int x, int y1, int y2);
void clrline_z(int x, int y, int z1, int z2);
void clrline_x(int z, int y, int x1, int x2);
void clrline_y(int z, int x, int y1, int y2);
void drawline_plane(int x2, int y2, int x1, int y1,unsigned char anchor);
void fill (unsigned char pattern);
void rotcube(char axis, char direccion);
void tmp2cube(void);
void cube2tmp(void);

Estas son las funciones primitivas que use en mi cubo de leds jeje. Obvio q habria q adaptarlas.
Una vez terminado esto, tendriamos q definir funciones un poco mas interesantes, como cuadrados, lineas o inclusive circulos. Y tambien letras.
Bueno, espero a ver q dice el resto. Saludos!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Suky en 14 de Mayo de 2010, 21:30:23
Universal, pero con CCS?  :D Está muy buena la idea. Yo tengo una pero no la compartiria  :P Porque sino es muy sencillo hacer un cartel, que se esfuercen  :mrgreen:

Habria que definir bien el hardware como dice Gera. Yo armé una estructura en la memoria externa para configurar cada uno de los mensajes (Largo del mensaje, Animación de entrada, movimiento, velocidad, cantidad de pasadas, tipo de mensaje (Normal o negativo), animación de salida, caracteres especiales si se quiere mostrar hora, fecha, temperatura, ect .... ), y despues hice las funciones que cargan el mensaje, visualizan el mensaje, cargan la eeprom y blablabla  :mrgreen:

Al subir los archivos, mejor sería en un rar  :roll:  :D :D Re pesado  :P


Saludos!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: gera en 14 de Mayo de 2010, 22:33:00
A todo esto.. hablamos de una matriz monocromatica comun y corriente no?
Por ahi pinta hacer algo tricolor con control de intensidad jeje.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: MLO__ en 14 de Mayo de 2010, 22:46:00
A todo esto.. hablamos de una matriz monocromatica comun y corriente no?
Por ahi pinta hacer algo tricolor con control de intensidad jeje.

Heeeyyy!!! vamos despacio  :D

Me uno al hilo, muy bueno ... muy bueno.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: martincasalis en 14 de Mayo de 2010, 23:57:10
Universal, pero con CCS?  :D Está muy buena la idea. Yo tengo una pero no la compartiria  :P Porque sino es muy sencillo hacer un cartel, que se esfuercen  :mrgreen:

Habria que definir bien el hardware como dice Gera. Yo armé una estructura en la memoria externa para configurar cada uno de los mensajes (Largo del mensaje, Animación de entrada, movimiento, velocidad, cantidad de pasadas, tipo de mensaje (Normal o negativo), animación de salida, caracteres especiales si se quiere mostrar hora, fecha, temperatura, ect .... ), y despues hice las funciones que cargan el mensaje, visualizan el mensaje, cargan la eeprom y blablabla  :mrgreen:

Al subir los archivos, mejor sería en un rar  :roll:  :D :D Re pesado  :P


Saludos!

Me parece pesima tu actitud amigo SUKY. Por si no te enteraste, este es un foro para compartir ideas, información y todo lo que tengamos con tal de ayudar a los demas. Si no pensas compartir lo que tenes, mejor ni digas que tenes algo, porque suena SUPER EGOISTA de tu parte.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Suky en 15 de Mayo de 2010, 10:51:42
Me parece pesima tu actitud amigo SUKY. Por si no te enteraste, este es un foro para compartir ideas, información y todo lo que tengamos con tal de ayudar a los demas. Si no pensas compartir lo que tenes, mejor ni digas que tenes algo, porque suena SUPER EGOISTA de tu parte.

Si, por lo menos en este caso soy egoista..  :P Pero si necesitas hacer algo, pregunta que si está a mi alcance voy a intentar ayudar, pero no voy a dar todo el código.  :mrgreen: En este caso compartí una idea de lo que se puede implementar  :D


Saludos!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 15 de Mayo de 2010, 13:25:25
Universal, pero con CCS?  :D

Bueno, opte por CCS porque la mayoría de los que programan en C, lo hacen con este compilador, y los que programan en otro compilador C, no creo que tengan mayores inconvenientes en migrarlo a su compilador, cosa que dudo en el sentido contrario.
Assembler fué descartado por la dificultad que existiría no sólo  en la explicación, sino en lograr algo estandarizado con un lenguaje de tan bajo nivel. Además, hacer cosas algo avanzadas supondría un desafío excesivo, al menos para los recursos que tengo disponible para este proyecto.

Habria que definir bien el hardware como dice Gera. Yo armé una estructura en la memoria externa para configurar cada uno de los mensajes (Largo del mensaje, Animación de entrada, movimiento, velocidad, cantidad de pasadas, tipo de mensaje (Normal o negativo), animación de salida, caracteres especiales si se quiere mostrar hora, fecha, temperatura, ect .... ), y despues hice las funciones que cargan el mensaje, visualizan el mensaje, cargan la eeprom y blablabla  :mrgreen:

Seguro se apoyará en un medio externo. Idealmente lo hará de manera transparente, sin importar si viene de un puerto USB, de una EEPROM interna o externa o de una SD. Para el tema de los comandos que irán haciendo fluir la animación, yo desarrollé un "protocolo" que veremos si tiene buena aceptación...

Al subir los archivos, mejor sería en un rar  :roll:  :D :D Re pesado  :P

No entendi bien esto, pero actualmente están en un repositorio, y creo que es la mejor manera porque seguro habrá infinidad de versiones y hasta distintas ramificaciones.


A todo esto.. hablamos de una matriz monocromatica comun y corriente no?
Por ahi pinta hacer algo tricolor con control de intensidad jeje.
Saludos!
[/quote]

Por ahora es sencilla como decís gera. Lamentablemente no creo que el alcance llegue a ser para matrices 3D, pero eso depende de ustedes. Todos los aportes y ramificaciones son bienvenidos! Cuanta más gente aporte, mejor. Yo sólo quiero dar el puntapié inicial.

Con respecto a más de un color y generación de grises, tengo que desarrollar algo de eso para un proyecto laboral. Seguramente lo comparta, aunque no se si con tanto detalle y explicación, por tema de tiempos. Estoy pensando en una matriz RGB de 64 colores(2 bits rojo, 2 verde y 2 azul). Hay que ver, porque un 18F aún con 12 MIPS se empieza a quedar corto con esos requisitos...por lo que considero que seguramente haga falta pasarse a un PIC de más alta familia, o mejor aún a un ARM Cortex.

Saludos
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 15 de Mayo de 2010, 13:45:13
Suky. Acá están los links para descargar todo el código de la última versión y el branch original:

Descarga la ultima versión en zip (http://github.com/brunof/LED-Matrix-Library/zipball/master) o en tar (http://github.com/brunof/LED-Matrix-Library/tarball/master)
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Cryn en 17 de Mayo de 2010, 18:30:44
Como faltar a un hilo sobre carteles, aquí estaré para molestar :mrgreen:

saludos y muy buena iniciativa Bruno :-/ :-/

eeyy suky que egoísta eres!! :P :P    :D :D :D :D te pasas!! :mrgreen: :mrgreen:
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 01 de Junio de 2010, 21:43:46
Agregada tipografia de 7 pixeles. Si algun alma generosa tiene una typo de 8 pixeles de altura o 16 pixeles sera bienvenida. Agregado tambien el efecto de rotacion a la izquierda. Es la primera version que muestra un mensaje. Pronto la explicacion.

Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: juanpavz en 02 de Junio de 2010, 01:15:45
Sera el destino, justo tengo a mano unos leds verdes ultrabrillantes.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 en 16 de Octubre de 2010, 22:22:57
Buenas.. ante todo quiero felicitar por la creacion de este hilo... te cuento que estoy armando un cartel y me estoy basando en tus aportes que me parecen que son muy buenos...
Mi pregunta es la siguiente... cuando definis la precarga del timer 0 lo haces mediante esta formula.
#define     PRECARGA_TMR0        (256 - 1000000 / HERTZ / FILAS / 128 * (FOSC / 4000000))

Ahora bien... yo estoy trabajando con un PIC16F876A y a 20MHz... la pregunta es que tengo que tener en cuenta para adaptarlo a mi cartel ya que por las pruebas que hice los registros dependen mucho del tiempo de refresco entre cada frame. me puedes explicar un poco que es lo que debo tener en cuenta para calcular el valor exacto del timer?? ya que con tu definicion no logro que los refrescos se hagan de la manera correcta... es como si corriera las lineas hacia arriba (fila1 pasa a ser fila7)

espero tu comentario

saludos

carlos
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Menta en 17 de Octubre de 2010, 06:04:34
Buenas.. ante todo quiero felicitar por la creacion de este hilo... te cuento que estoy armando un cartel y me estoy basando en tus aportes que me parecen que son muy buenos...
Mi pregunta es la siguiente... cuando definis la precarga del timer 0 lo haces mediante esta formula.
#define     PRECARGA_TMR0        (256 - 1000000 / HERTZ / FILAS / 128 * (FOSC / 4000000))

Ahora bien... yo estoy trabajando con un PIC16F876A y a 20MHz... la pregunta es que tengo que tener en cuenta para adaptarlo a mi cartel ya que por las pruebas que hice los registros dependen mucho del tiempo de refresco entre cada frame. me puedes explicar un poco que es lo que debo tener en cuenta para calcular el valor exacto del timer?? ya que con tu definicion no logro que los refrescos se hagan de la manera correcta... es como si corriera las lineas hacia arriba (fila1 pasa a ser fila7)

espero tu comentario

saludos

carlos

Me tomo el atrevimiento de contestar esta pregunta en lugar de Bruno, no pretendo pasar por encima de nadie y espero que no se tome a mal esta intromisión.
Estimado Carlos casi con seguridad que tu problema no tiene nada que ver con la diferencia de tiempos de un cristal a otro.
En el archivo main.h aparece la declaración: #define     FOSC     48000000
ahi le pones el cristal que uses y la fórmula que se encuentra en el archivo config.h a la que haces referencia y que sito a continuación:
#define     PRECARGA_TMR0        (256 - 1000000 / HERTZ / FILAS / 128 * (FOSC / 4000000))
te calculará el retardo correspondiente para que el cartel se "dibuje" por así decirlo HERTZ veces por segundo aproximadamente, en el ejemplo de bruno son 60 Hz.
El problema que planteas sobre un cambio de filas, parece tener una probable causa en la implementación del hardware. Desconozco si lo estás simulando o ya lo implementaste en hardware real.
Te recomiendo que analices bien el código que bruno nos cedió tan gentilmente y trates de comprenderlo. Si no logras resolver tu problema y necesitas ayuda entonces pon tu diseño de hardware que usas, tus simulaciones si las hubiera y tu código adaptado. De esa forma será mucho más facil que te respondan y ayuden con tu proyecto.
Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Menta 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.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 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...
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 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
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: smarkol en 17 de Octubre de 2010, 22:15:01
Esta muy  bueno esto, quiero aprender mas !!! :mrgreen:
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF 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.





Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 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!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 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???
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF 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.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: smarkol 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.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 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
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 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.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: cristian_elect en 20 de Octubre de 2010, 23:03:35
SE podra hacer uasando el puerto SPI letrero.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: smarkol en 20 de Octubre de 2010, 23:35:34
Por supuesto dom124,las respuestas siempre se agradecen.

saludos..
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Suky 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!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 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
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Chipcon en 21 de Octubre de 2010, 13:58:58
Saludos Dom124 dando mi opinión a tu pregunta pues las memorias SRAM paralelas son definitivamente mejores pues efectivamente su respuesta para ciclos de lectura y escritura son bastante amplios, sin embargo he trabajo con memorias SD/MMC
para almacenar los cuadros gráficos y otros comandos y funcionan bastante bien. Recordando que estas memorias son SPI con una velocidad de transferencia de hasta 10 MHZ.
La limitación que veo en el caso de las I2C pues es la velocidad de hasta 400KHZ.
Pero finalmente la elección esta ligada al diseño del cartel.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 en 22 de Octubre de 2010, 01:12:31
Perfecto Chipcon! empezare a ver que puedo conseguir para empezar a jugar con estas memorias! cuando tenga algun resultado lo comentare.
Cuando mencionas que guardas cuadros graficos... a que te refieres concretamente? imagenes fijas??? o realizas animaciones y vas leyendo cada cuadro. y hablando de animaciones como se puede ir empezando con este tema? apartando los desplazamientos ya que Bruno ya lo ha hecho en su codigo.
No estoy pidiendo el codigo de los efectos sino una idea de como pensarlos y empezar con ellos.

Saludos

Carlos
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: smarkol en 22 de Octubre de 2010, 14:21:54
.... y hablando de animaciones como se puede ir empezando con este tema? apartando los desplazamientos ya que Bruno ya lo ha hecho en su codigo.
...

mira dom124 en este link http://www.todopic.com.ar/foros/index.php?topic=19091.msg242181#msg242181 puedes ver un codigo que estuve realizando del efecto vertical, del cual no estoy muy conforme por la forma que lo realice,pero quizas te podria dar una idea...

saludos.   


Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Chipcon en 22 de Octubre de 2010, 14:40:33
Asi es compañero en concreto la memoria almacena una secuencia de cuadros es decir la matriz total,en mi caso estos son creados desde un software una vez terminada la secuencia por n cantidad de cuadros y ya asignado el efecto entre cuadros entonces se transmiten al micro
el micro recibe y almacena los datos, la generación de la animación efectivamente es la lectura progresiva de los cuadros.

Ahora bien para ayudarte en la idea de efectos etc. en mi caso y practica cada cuadro tiene una cabecera con información, digamos velocidad,efecto,permanencia etc etc.

El micro cuenta con los algoritmos para generar los efectos siguiendo el ejemplo de nuestro amigo bruno el desplazamiento.
Con que otro efecto puedes empezar? Uno fácil es el flash que tenemos que hacer? un toggle entre el cuadro y un cuadro vació.
La velocidad tu la determinas.

Saludos Cordiales
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 en 22 de Octubre de 2010, 22:43:21
Que bueno Chipcon! estuve mirando el efecto que mencionas! quedo lindo!, tal vez, una sugerencia de como lo seguiria yo, es que en vez de que vuelva a aparecer todo el texto ir haciendo aparecer cada fila desde abajo hacia arriba... seguramente no es nada nuevo lo que estoy diciendo solo se me ocurrio ahora  :mrgreen: bueno voy a tratar de hacer algo con toda la ayuda que recibi de ustedes. una vez que tenga algunos resultados los escribo y lo discutimos!

gracias y un saludo

Carlos
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 en 22 de Octubre de 2010, 23:21:54
Una cosa que me olvide de preguntar.... vamos a suponer que mi mensaje es el siguiente: "HOLA FORO DE TODO PIC ESTAMOS APRENDIENDO SOBRE MATRICES DE LEDS" como podran ver el mensaje es muy largo (teniendo en cuenta una matriz de por ej 7x64) entonces el unico efecto que podriamos hacer es el de desplazamiento no?
bueno lo que quiero saber es si los otros efectos, como por ej el que comento el amigo Chipcon antes, tambien lo hacen agarrando de a palabras? o directamente no lo hacen y pasan el texto desplazandose? o es a eleccion? como resuelven esto?
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: firepic en 02 de Febrero de 2011, 17:31:27
Qué tal todos!

También tengo el proyecto de hacer una pantalla de LEDS, así que me uno al hilo!  :-/

Por aquí les dejo un mínimo aporte, es una lista de valores para los caracteres... muy parecidas o casi iguales a las que tiene Bruno en el archivo tipos.c, sólo que todos los caracteres son 5x7... bueno es una tontería pero algo es algo... ahí está el juego de ascii básico, me falta terminar para los ascii extendidos más usados, como las ñ y otros símbolos.

Por otro lado, creo que algo que sería bueno añadir al último código de Bruno es que se deje una columna de espacio entre caracter y caracter, para facilitar la lectura... porque con todos los caracteres pegados no se lee muy bien que digamos...  :?

Estaré publicando por acá mis adelantos a ver si en algo ayudan a la librería...  :lol:

Bueno nos leemos! Saludos!  :mrgreen:
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: skisoloco en 18 de Marzo de 2011, 01:39:48
disculpa bruno f, tengo un problema llevando a cabo tu proyecto, y es que ya armé una matriz de 8x35, a la cual hice un test y funciona perfectamente pero cuando la conecto con el pic, no hace nada. es un 18F4550. Pienso que talvez sea la fuente. Me puedes decir los calculos para saber que corriente consume tu proyecto? gracias de antemano
ya que las columnas funcionan por catodo, en config.h puse esto:


#define  FILAS       8
#define  COLUMNAS    35

#define  FILAS_ANODO       TRUE
#define  COLUMNAS_CATODO   TRUE

Adjunto la simulacion en proteus (la compuerta NOT es para compensar lo anterior, ya que, el proteus no tengo las columnas como catodo pero las que yo compre en rl, si)
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 18 de Marzo de 2011, 09:37:52
Hola. Teoricamente se enciende una fila por vez, por lo que la corriente maxima que demanda el panel(sin la controladora) es de la corriente de cada LED por la cantidad de LEDs por fila que utilices.

Con 35 LEDs a 0.02A por LED,  el consumo debería ser de 0.7A RMS maximo asumiendo todo el panel encendido. Si notas un exceso de consumo en la linea,o bien un encendido leve de TODOS los LEDs a la vez, seguramente estas ante una mala configuración de esos dos parámetros.

En la simulación te funciona bien esa configuracion anodo/catodo? Hay señales ahi que no estan funcionando ademas en el simulador porque cambiaste su nombre(como CLK3,STB1,etc).

Podrias especificarme que tipo de hard estas usando? a la salida del 4094 que controla las filas, que pusiste? y a la salida de los 4094 que controlan las columnas? pusiste algun buffer(ULN o similar) por ejemplo?

También es importante respetar el cristal de 4Mhz. Si utilizas otro cristal, hay que reacomodar los FUSES y el valor de FOSC e el main.h.

Obviamente asumo que recompilaste antes de probar con esa nueva config de esos dos parámetros...

Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: MGLSOFT en 18 de Marzo de 2011, 10:03:51
Muy bueno, Bruno!!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: skisoloco en 18 de Marzo de 2011, 11:03:32
Hola. Teoricamente se enciende una fila por vez, por lo que la corriente maxima que demanda el panel(sin la controladora) es de la corriente de cada LED por la cantidad de LEDs por fila que utilices.

Con 35 LEDs a 0.02A por LED,  el consumo debería ser de 0.7A RMS maximo asumiendo todo el panel encendido. Si notas un exceso de consumo en la linea,o bien un encendido leve de TODOS los LEDs a la vez, seguramente estas ante una mala configuración de esos dos parámetros.

En la simulación te funciona bien esa configuracion anodo/catodo? Hay señales ahi que no estan funcionando ademas en el simulador porque cambiaste su nombre(como CLK3,STB1,etc).

Podrias especificarme que tipo de hard estas usando? a la salida del 4094 que controla las filas, que pusiste? y a la salida de los 4094 que controlan las columnas? pusiste algun buffer(ULN o similar) por ejemplo?

También es importante respetar el cristal de 4Mhz. Si utilizas otro cristal, hay que reacomodar los FUSES y el valor de FOSC e el main.h.

Obviamente asumo que recompilaste antes de probar con esa nueva config de esos dos parámetros...

Saludos.

Gracias por responder amigo, muy agradecido.. si, en la simulación funciona perfectamente ese parámetro anodo/catodo.

En cuanto al tipo de hardware, estoy utilizando registros 74HS164 (no me di cuenta no se como no compre los 4094) pero no deberían funcionar? A las salidas de los registros para las columnas coloque resistencias de 150 Ohm. A la salida de las filas coloque unas de 22 Ohm a la base de un BC547 y su emisor a tierra por 1KOhm como en la imagen.

En cuanto al cristal... no era esto con oscilador interno a 48MHz? jajaja no me digas que es eso lo malo..

Y si, re-compilaba...

De antemano Gracias Amigo. adjunto la simulacion y el soft
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 18 de Marzo de 2011, 12:23:22
Muy bueno, Bruno!!

Gracias Marcos!!

Gracias por responder amigo, muy agradecido.. si, en la simulación funciona perfectamente ese parámetro anodo/catodo.

En cuanto al tipo de hardware, estoy utilizando registros 74HS164 (no me di cuenta no se como no compre los 4094) pero no deberían funcionar? A las salidas de los registros para las columnas coloque resistencias de 150 Ohm. A la salida de las filas coloque unas de 22 Ohm a la base de un BC547 y su emisor a tierra por 1KOhm como en la imagen.

El 74HC595 es uno de los pocos registros de desplazamiento capaz de entregar 20mA por salida. Por eso lo recomiendo altamente. Tal vez con el que estas usando no logres buen brillo...
También destaco la falta de STROBE en los integrados que estas usando. Esto puede suponer parpadeos al azar visibles durante la carga de los registros.

En cuanto al cristal... no era esto con oscilador interno a 48MHz? jajaja no me digas que es eso lo malo..

Y si, re-compilaba...

El 18FX550 no tiene cristal interno de 20Mhz. Obviamente necesita uno externo y con sus respectivos capacitores.

Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: dom124 en 18 de Marzo de 2011, 13:21:38
bruno, una pregunta, en tu soft la configuracion de los fuses que tenes es para un cristal de 4 MHZ????? o uno de 20?? despues por PLL se va a 48 MHZ pero lo que me entro en duda es el cristal de entrada que va... supuestamente dice 20 MHZ input o le estoy errando??
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: skisoloco en 18 de Marzo de 2011, 13:24:07
Gracias, me di cuenta de que en el 74HS164 le agrego una compuerta NOT en el reset y enciende leds al azar.

No sabia la diferencia del strobe amigo

El 18FX550 no tiene cristal interno de 4Mhz. Obviamente necesita uno externo y con sus respectivos capacitores.

Saludos.
otra pregunta, con la programacion que te envie:
¿supongo que va entre los pines 13 y 14 ese oscilador? ¿no debo hacer mas nada respecto a eso (fuses)?

Es que yo programo con MKB, es primera vez que trabajo con C

Muchisimas gracias, brother
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 18 de Marzo de 2011, 13:41:43
bruno, una pregunta, en tu soft la configuracion de los fuses que tenes es para un cristal de 4 MHZ????? o uno de 20?? despues por PLL se va a 48 MHZ pero lo que me entro en duda es el cristal de entrada que va... supuestamente dice 20 MHZ input o le estoy errando??

Bien por la aclaración. Los fuses están configurados para un cristal de 20Mhz, no de 4Mhz. Gracias!

Gracias, me di cuenta de que en el 74HS164 le agrego una compuerta NOT en el reset y enciende leds al azar.

No sabia la diferencia del strobe amigo

El 18FX550 no tiene cristal interno de 4Mhz. Obviamente necesita uno externo y con sus respectivos capacitores.

Saludos.
otra pregunta, con la programacion que te envie:
¿supongo que va entre los pines 13 y 14 ese oscilador? ¿no debo hacer mas nada respecto a eso (fuses)?

Es que yo programo con MKB, es primera vez que trabajo con C

Muchisimas gracias, brother

Si, va en los pines que diga OSC1 y OSC2 con capacitores ceramicos de 27pf a GND.

Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Menta en 24 de Marzo de 2011, 12:07:44
Hola bruno, tanto tiempo...
Debido a tu experiencia quise hacerte una consulta sobre la terminación del cartel de leds y ya que está, para que quede registrado tanto en el foro cómo en este hilo, cree un nuevo tema con mis dudas al respecto y pongo en este muy buen hilo el link ya que creo están relacionados.

http://www.todopic.com.ar/foros/index.php?topic=34199.msg286214#msg286214 (http://www.todopic.com.ar/foros/index.php?topic=34199.msg286214#msg286214)

Por supuesto, cualquier opinión al respecto es bien recibida de cualquier usuario...
Muchas gracias
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Menta en 10 de Junio de 2011, 00:56:51
Bruno, tengo una duda teórica y/o práctica.

A la hora de construir un cartel de leds...
Existe alguna diferencia entre conectar los terminales de los leds de alguna de las siguientes 2 formas:
positivo a la fila y GND a la columna.
positivo a la columna y GND a la fila.
?????????
obviamente la lógica se invierte, de hecho en tu librería contemplas esto, pero a la hora de hacer un cartel hay alguna configuración que presente alguna ventaja sobre la otra? Pros y contras?
Gracias...
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 10 de Junio de 2011, 20:09:04
Hola Menta.

Se suele controlar los ánodos de los LEDs mediante las filas y los cátodos mediante las columnas, especialmente si se piensa utilizar buffers(como los ULN2xxx) ya que son NPN y no es fácil conseguir buffers similares PNP.

Un saludo.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Menta en 10 de Junio de 2011, 20:18:23
Gracias por la respuesta Bruno. En mi caso quiero usar los 74hc595 directamente sin buffers, ya que como comentaste antes entregan hasta 25mA y con eso me sobra, esto es correcto? en este caso es indistinto el cátodo a las filas o a las columnas no?

PD. Espero que lo pases lindo el domingo... :-/
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 10 de Junio de 2011, 23:09:41
En ese caso es lo mísmo :) Te van a costar un poquito mas baratos los transistores NPN para controlar las filas si alimentas los cátodos con las filas :)

Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: bravomaster en 28 de Junio de 2011, 21:41:50
Estimados: tengo una duda.

Como modifico este gran programa para una matriz de led de 7X9???

Agradesco de antemano vuestra ayuda
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: vdiazg en 03 de Febrero de 2012, 04:36:19
Amigos, quisiera que me ayuden con este error que me sale en el compilador, he creado un nuevo proyecto en el MPLAB con todos los archivos de Bruno, pero apenas lo compilo me sale un error y no se como solucionarlo.

Agradezco de antemano su ayuda
casi me olvido, yo utilizo el CCS 4.114 y el MPLAB 8.40

(http://img338.imageshack.us/img338/6757/errorencompilacion00.jpg)

Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Nocturno en 03 de Febrero de 2012, 04:39:35
Te hace falta definir el tipo de micro que usarás en tu proyecto.
Tienes que poner al principio de tu programa esto:
#defice 18F2550

Cambiando ese micro por el tuyo.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: vdiazg en 03 de Febrero de 2012, 04:49:22
Te hace falta definir el tipo de micro que usarás en tu proyecto.
Tienes que poner al principio de tu programa esto:
#defice 18F2550

Cambiando ese micro por el tuyo.

Gracias por la pronta respuesta, pero me he fijado y hay un archivo que es main.h y dentro existe una linea.
#include <18F4550.h>

de igual forma le puse lo que mencionaste #define 18F2550 pero nada, sigue saliendo el mismo error.  :shock:

Disculpa por mi ignorancia pero recien estoy empezando con esto del CCS

Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: Menta en 10 de Febrero de 2012, 23:58:02
creo que se refiere a la directiva de precompilación #device aunque normalmente esta directiva está incluida en el .h que incluimos en nuestros programas y que vienen con el picC en la carpeta device.

xxxx.c   
contiene a:
#include <18F4550.h>
que contiene a:
#device PIC18F4550

creo que tienes que buscar dónde te marca el error, ver cómo llega la secuencia de proceso a ese punto y seguramente no pasa por esa directiva y por eso el error.
veo que parece que el error está en config.h , bueno chequea qué proceso llama a config.h y en qué momento lo hace, por ahí cambiando de orden algunas sentencias se soluciona.
Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jukinch en 06 de Febrero de 2013, 16:41:19
Hola BrunoF y amigos del foro.
       Estoy estudiando la librería de manejo de matrices de leds y quería saber si está de más el archivo publik.h que contiene el zip de la última versión de la librería http://github.com/brunof/LED-Matrix-Library/zipball/master o si hay que agregarlo al archivo publik.h a mano desde algún lado desde la ide del compilador ccs.
       Hice un seguimiento de los includes que hay desde main.c y demás archivos y desde ninguno de los archivos veo que se lo incluya.
       Aclaro que logro compilar sin problemas a main.c incluso si elimino de la carpeta al archivo publik.h.
       Gracias Bruno por compartir la librería.  ((:-))
          Saludos.
                 Jukinch
             
Este sería el árbol de los includes de acuerdo a lo que estudié:

main.c    ------> #include main.h   ------> #include  18f4550.h
             |
              ------> #include  publik.c ------> #include  config.h
                                                   |
                                                   -------> #include  typos.c
                                                   |
                                                   -------> #include  efectos.c
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 08 de Febrero de 2013, 16:28:24
Hola Leo,

por lo que estoy viendo no está incluído en ninguna parte. Igual las inclusiones que hice en CCS no son las apropiadas. Es una mala costumbre de los que usamos CCS y abusamos de sus tolerancias y desviaciones del ANSI C.

La prueba final es sencillamente eliminando el archivo y viendo si compila correctamente.

Saludos!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jukinch en 08 de Febrero de 2013, 18:41:38
Hola Bruno y gracias nuevamente por tu tiempo.
       Efectivamente compila sin problemas borrando el archivo. Además hice la prueba de cargar el hex en la simulación de proteus y la matriz de leds funciona ok. Así que dicho archivo publik.h no va en el paquete de la librería.-
       Estoy estudiando todo el código con intenciones de migrar la librería a c18 y luego a xc8 Mplbab X. Y en el camino voy a comentar el código y trataré de hacer un mini tutorial al respecto.
      Con las novedades volveré a postear.
       te mando un abrazo.
            Leo

Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: oscar321 en 28 de Febrero de 2013, 16:58:30
Hola Amigos muy interesante este tema felicitaciones por el foro.

Mi pregunta es como puedo yo utilizar una cadena char definida por mi en el main sin necesidad de modificar la const char demo[] en el publik.c

esto seria util para utilizarla para diversas formas
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 01 de Marzo de 2013, 03:43:56
Hola Bruno y gracias nuevamente por tu tiempo.
       Efectivamente compila sin problemas borrando el archivo. Además hice la prueba de cargar el hex en la simulación de proteus y la matriz de leds funciona ok. Así que dicho archivo publik.h no va en el paquete de la librería.-
       Estoy estudiando todo el código con intenciones de migrar la librería a c18 y luego a xc8 Mplbab X. Y en el camino voy a comentar el código y trataré de hacer un mini tutorial al respecto.
      Con las novedades volveré a postear.
       te mando un abrazo.
            Leo



Migre! migre! Mejor aún si se migra a diversos compiladores o se la estandariza.

Hola Amigos muy interesante este tema felicitaciones por el foro.

Mi pregunta es como puedo yo utilizar una cadena char definida por mi en el main sin necesidad de modificar la const char demo[] en el publik.c

esto seria util para utilizarla para diversas formas

Oscar, por lo general el buffer de entrada es sólo uno. En el ejemplo lo puse como const, por lo que no puede modificarse en tiempo de ejecución, pero removiendo el modificador const, se convierte en un arreglo modificable en ejecución y por ende libre para ser modificado a gusto. Si te interesa poder tener varios arrays y poder elegir cuál enviarle a las mísmas subrutinas, necesitarías modificar las subrutinas para que acepten y trabajen con un puntero a un arreglo de chars, para que de esa manera sea independiente del array original. Igualmente, sólo recomiendo hacerlo si aporta gran flexibilidad o característica pretendida al software, caso contrario, no es recomendable ya que en estos uC que tienen sólo un registro de trabajo, agregar parámetros a la funciones incrementa la cantidad de memoria RAM y ROM requerida por el programa para realizar las llamadas.

Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: oscar321 en 01 de Marzo de 2013, 14:55:35

Oscar, por lo general el buffer de entrada es sólo uno. En el ejemplo lo puse como const, por lo que no puede modificarse en tiempo de ejecución, pero removiendo el modificador const, se convierte en un arreglo modificable en ejecución y por ende libre para ser modificado a gusto. Si te interesa poder tener varios arrays y poder elegir cuál enviarle a las mísmas subrutinas, necesitarías modificar las subrutinas para que acepten y trabajen con un puntero a un arreglo de chars, para que de esa manera sea independiente del array original. Igualmente, sólo recomiendo hacerlo si aporta gran flexibilidad o característica pretendida al software, caso contrario, no es recomendable ya que en estos uC que tienen sólo un registro de trabajo, agregar parámetros a la funciones incrementa la cantidad de memoria RAM y ROM requerida por el programa para realizar las llamadas.

Saludos.


Gracias amigo BrunoF, se podría utilizar una EEPROM para cargar un mensaje uno por uno definiendo la dirección de inicio y de entrada, ademas de utilizar una interrupción para cargar los datos a la EEPROM a través de USB.

Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jukinch en 01 de Marzo de 2013, 15:07:16
Buen dato a tener en cuenta lo de "... sólo recomiendo hacerlo si aporta gran flexibilidad o característica pretendida al software, caso contrario, no es recomendable ya que en estos uC que tienen sólo un registro de trabajo, agregar parámetros a la funciones incrementa la cantidad de memoria RAM y ROM requerida por el programa para realizar las llamadas."
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 01 de Marzo de 2013, 15:53:44

Oscar, por lo general el buffer de entrada es sólo uno. En el ejemplo lo puse como const, por lo que no puede modificarse en tiempo de ejecución, pero removiendo el modificador const, se convierte en un arreglo modificable en ejecución y por ende libre para ser modificado a gusto. Si te interesa poder tener varios arrays y poder elegir cuál enviarle a las mísmas subrutinas, necesitarías modificar las subrutinas para que acepten y trabajen con un puntero a un arreglo de chars, para que de esa manera sea independiente del array original. Igualmente, sólo recomiendo hacerlo si aporta gran flexibilidad o característica pretendida al software, caso contrario, no es recomendable ya que en estos uC que tienen sólo un registro de trabajo, agregar parámetros a la funciones incrementa la cantidad de memoria RAM y ROM requerida por el programa para realizar las llamadas.

Saludos.


Gracias amigo BrunoF, se podría utilizar una EEPROM para cargar un mensaje uno por uno definiendo la dirección de inicio y de entrada, ademas de utilizar una interrupción para cargar los datos a la EEPROM a través de USB.



Claro que sí, se podría. Sólo te resta hacerlo! :)

Buen dato a tener en cuenta lo de "... sólo recomiendo hacerlo si aporta gran flexibilidad o característica pretendida al software, caso contrario, no es recomendable ya que en estos uC que tienen sólo un registro de trabajo, agregar parámetros a la funciones incrementa la cantidad de memoria RAM y ROM requerida por el programa para realizar las llamadas."


Sí, y la cosa se empeora cuando se anidan funciones. Si bien la ROM necesaria no se incrementa mucho, el consumo de RAM oculto por parte del Compilador sube drásticamente. Después las personas no entienden cómo un programa que casi no tiene variables definidas por ellos puede estar consumiendo tanta RAM/ROM...

Saludos!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jukinch en 01 de Marzo de 2013, 17:00:50
Ahora me cierra el porque definiste todas las variables como globales.
Siempre las veía como mala palabra en los libros. Pero ahora no cuando son utilizadas en pro de la optimización.
No dejás de sorprenderme Bruno. ((:-))
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: oscar321 en 04 de Marzo de 2013, 13:54:44




Gracias amigo BrunoF, se podría utilizar una EEPROM para cargar un mensaje uno por uno definiendo la dirección de inicio y de entrada, ademas de utilizar una interrupción para cargar los datos a la EEPROM a través de USB.



Claro que sí, se podría. Sólo te resta hacerlo! :)



He creado un char text[500];     y al cual apunto definiendo a demo como puntero con dirección a text:
En publik.c elimino: const demo[]="";  y la remplazo con char text[500]; definiendo un maximo de palabras a 500.

En efectos.c agrego y defino a demo como puntero a text
Código: [Seleccionar]
char *demo=&text; //PUNTERO
aquí puedo utilizar en main.c para definir a text con cualquier texto definido por mi
Código: [Seleccionar]
while(ejecutando) {
char text[]="Hola amigos";
Publik_Ejecutar();
}

Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: oscar321 en 04 de Marzo de 2013, 14:12:08
Agrego libreria de EEPROM
#include "24256.c"

int8 ini, end, p, k;    //defino variables.

EN MAIN...

   init_ext_eeprom();   //Inicio Comunicación con EEPROM

   ini=read_ext_eeprom(0);  //Lectura de los 2 primeros Bytes para Inicio y Final de TEXTO.
   end=read_ext_eeprom(1);
   
   p=0;                                   //defino inicio de contador p para array text[];
   for(k=ini;k<end;k++) {       //Bucle de lectura de EEPROM para el text a mostrar
   text[p++] = read_ext_eeprom(k);   
   }
   
   for(k=0;k<7;k++) {            //
   text[p] = " ";                      //
   p++;                                 //        Espacio de Final del texto y Caracteres de Separación.
   }                                       //
   
   text[p++] = "<";
   text[p++] = "<";
   text[p++] = "<";
   text[p++] = "<";
 
   for(k=0;k<7;k++) {
   text[p] = " ";
   p++;
   }                                       //


Publik_Ejecutar();                  //Procesa el texto y muestra









Citar
Ahora mi pregunta como hago para calcular cuando el texto sea mostrado a su totalidad y para que este vuelva a hacer una lectura de la eeprom utlizando varias direcciones que podre definirlas en el inicio de la eeprom
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jeremylf en 30 de Octubre de 2013, 21:51:52
Hola Bruno, estupenda librería. Gracias por compartirla.

He adaptado tu librería para trabajar con un 16f628a a 20mhz: cambio fuses, tris y demás.
También, estoy usando 74hc595 envés de 4094 como en la simulación.
Uso una matriz 8x8 de color rojo donde las filas tienen en común los anodos y las columnas tienen en común los catodos: para esto solo basto poner:
Código: [Seleccionar]
#define  FILAS_ANODO       TRUE    //establece si las FILAS controlaran los anodos en comun de los LEDs
#define  COLUMNAS_CATODO   TRUE    //establece si las COLUMNAS controlaran los catodos en comun de los LEDs

Me e dado cuenta que hay veces que el mensaje no se desplaza y esto ocasiona un feo efecto. Investigando, el problema viene por la función efecto_rota_izq(). Dentro de esta funcion, cuando la condición "if(ProximoElementoLetra())" devuelve false, es cuando no se desplaza las letras.

No se exactamente a que se debe este problema, seguro tu lo sabes más, de todas formas seguiré estudiando tu codigo. Por el momento, he resuelto este feo efecto agregando unas lineas de codigo alfnal de esta función, quedando así:
Código: [Seleccionar]
void efecto_rota_izq()
{
   if(ProximoElementoLetra())                                     //intentar obtener proximo elemento de la lectra actual...
   {
      if(++BufferInicio >= COLUMNAS) BufferInicio=0;              //rotar...
      if(BufferInicio>0) efAux1= BufferInicio-1; else efAux1=COLUMNAS - 1;     //calcular la ultima columna actual...
      buffer[efAux1] = letraData;                                 //e inyectarle el valor leido
   }else{
      //buffer[efAux1] = 0;                                        //inyectarle 0
      if(!nuevoEfecto) archivoPosicionActual++;
      nuevoEfecto = FALSE;
      if(demo[archivoPosicionActual] == 0) archivoPosicionActual = 0;
      CargarLetra(demo[archivoPosicionActual]);
      
      // ESTO HE AGREGADO ///////////////////////////////////////////////////////////////////////////////////////////////////
     if(++BufferInicio >= COLUMNAS) BufferInicio=0;              //rotar...
      if(BufferInicio>0) efAux1= BufferInicio-1; else efAux1=COLUMNAS - 1;     //calcular la ultima columna actual...
      buffer[efAux1] = 0;

   }
}


Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jeremylf en 05 de Noviembre de 2013, 00:01:00
La verdad me parece muy curioso que les funcione de manera fluida el código de Bruno con este inconveniente que he mostrado en mi mensaje anterior. No se si será por que estoy con una matriz 8x8 o por que uso otro PIC u otra cosa y solo me pasa a mi; pero realmente no lo creo porque hasta en la simulación se puede notar que cada vez que intenta mostrar una nueva letra se detiene por un momento haciendo que el mensaje no corra fluidamente.

La propuesta de solución que di antes arregla este inconveniente. Ademas, algo que no mencione, añade una fila de espacio entre letras para que se pueda leer mejor estas. No estoy muy convencido si es la mejor solución pero funciona. Ahora, para que simplemente solucione el inconveniente de fluidez sin agregar ningún espacio entre letras y, al menos para mi, pueda convencerme más de que es una mejor solución he dejado esa parte del código así:
Código: [Seleccionar]
void efecto_rota_izq()
{
   if(ProximoElementoLetra())                                     //intentar obtener proximo elemento de la lectra actual...
   {
      if(++BufferInicio >= COLUMNAS)
         BufferInicio=0;              //rotar...
      if(BufferInicio>0)
         efAux1= BufferInicio-1;
      else
         efAux1=COLUMNAS - 1;     //calcular la ultima columna actual...
      buffer[efAux1] = letraData;                                 //e inyectarle el valor leido
   }
   else
   {//output_toggle(PIN_B1);
      //buffer[efAux1] = 0;                                        //inyectarle 0
      if(!nuevoEfecto)
         archivoPosicionActual++;
      nuevoEfecto = FALSE;
      if(demo[archivoPosicionActual] == 0)
         archivoPosicionActual = 0;
      CargarLetra(demo[archivoPosicionActual]);
     
// ESTO HE AGREGADO ///////////////////////////////////////////////////////
      ProximoElementoLetra();
     if(++BufferInicio >= COLUMNAS) BufferInicio=0;              //rotar...
      if(BufferInicio>0) efAux1= BufferInicio-1;
      else efAux1=COLUMNAS - 1;     //calcular la ultima columna actual...
      buffer[efAux1] = letraData;
//////////////////////////////////////////////////////////////////////////////////

   }
}


Saludos!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 06 de Diciembre de 2013, 23:34:42
Perdoname jeremy si no puedo ofrecerte mucha ayuda, pero tengo completamente olvidado este código que escribí hace años.

Saludos!
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jeremylf en 07 de Marzo de 2014, 20:31:37
No te preocupes, solo me parece curioso que pase eso.

Por cierto, usabas resistencias o no? Porque en el archivo de simulación no aparece ninguna =D
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 07 de Marzo de 2014, 21:01:42
Si puedo le voy a pegar una mirada.

Sí, usaba resistencias pero en la simulación si no son estrictamente necesarias prefiero no colocarlas ya que cargan al CPU para simularlas.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jeremylf en 08 de Marzo de 2014, 22:50:12
Perfecto! Y de que valor? Yo estoy usando de 50 ohm para una matriz 8x8 roja y se ve bien pero para una verde ya no se ve bien, creo que le pondré 15 ohm. Espero no sobrepase los limites del 74HC595.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 15 de Marzo de 2014, 14:53:09
El valor dependerá de los LEDs y cuestiones de brillo que desees. Los límites del 74HC595? Lo tienes directo sin ULN? En ese caso trabajarás con una dV de 5V, lo que es bastante pobre para lograr buen brillo multiplexando.

Por otro lado, no he logrado que la simulación falle. Es utilizando tal cual el código? O has cambiado el texto?

Saludos.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jeremylf en 15 de Marzo de 2014, 20:11:22
Bueno, yo estoy usando para las filas y columnas los 74HC595 directos sin ULN alimentado todo a 5V. Entonces, dices que es necesario que los LEDs tengan mayor voltaje? Pero no se compensaría si la resistencia fuera menor para dejar pasar mas corriente? Total, lo LEDs funcionan a 3v aprox.

Por otro lado, no es que la simulación falle sino que el efecto de rotacion a la izquierda se detiene un poco cada vez que carga una nueva letra, haciendo que la rotacion no se vea fluida y, por el contrario, le de un mal efecto. Es un poco dificil de explicar con palabras pero siempre sucede cuando una letra a terminado de salir completa por el lado derecho y se pretende cargar la nueva letra, parece que en ese momento se demora en cargarlo o algo parecido. Y no es cosa de la simulación, pues sucede en fisico yo lo he probado. Post atras expliqué en que parte del código era que sucedía esto y mostré una rápida solución, aunque no se si del todo correcta. Efectivamente estoy usando tu código tal cual.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 15 de Marzo de 2014, 20:32:09
Sí, deberías elevar el voltaje. Pero para ello requieres agregar si o si los ULN. No puedes incrementar el voltaje con sólo los registros de desplazamiento porque tendrías siempre una diferencia de potencial presente y los LEDs no se apagarían nunca del todo.

Subes el votaje y mantienes la resistencia actual de filas. Eso debería darte mucho más brillo.

Miraré cuando pueda la simulación.

Saludos
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jeremylf en 15 de Marzo de 2014, 20:34:31
El problema es que mi fuente no puedo cambiarla por cuestiones de diseño y siempre será de 5V al menos por ahora. De esta forma, que te parece bajar las R a 15 ohm?

Gracias.
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: BrunoF en 15 de Marzo de 2014, 22:06:21
Pues si prueba bajándola y deberías ganar brillo. El multiplexado permite que castigues a los leds sin quemarlos pero no puedes permitir que una fila quede fija por algún motivo. Deberías utilizar el perro guardián pAra asegurarte que el software no quede colgado y una sola fila encendida.

SALUDOS
Título: Re: Librería Matríz de LEDs Universal[compilador CCS](Aportes y Comentarios)
Publicado por: jeremylf en 17 de Marzo de 2014, 01:29:50
Buena sugerencia (Y)