Programacion matriz led

Estoy programando para un proyecto de un reloj, y necesito saber como hacer de una forma fácil los números, para mostrarlos en el display. Encontré esta matriz que ya esta hecha pero no entiendo la parte en que pasa de tener la matriz hecha a mostrarla en el display, creo que seria la parte que esta marcada en rojo si alguien me puede ayudar con este tema, lo agradecería. Y si conocen otra solución a mi problema.
Tengo 3 display de 5x7. conformaría uno de 15x7
Esta es la matriz que ya esta hecha.

Código:
void swatch(char bor);
void letra(char ro[]);                    

//PATRONES DE ENCENDIDO DE LOS LEDS POR COLUMNA
const char SPACE[]={0X00,0X00,0X00,0X00,0X00};
const char PUNTO[]={0X00,0X00,0X00,0X00,0X80};
const char A[]={0xFC,0X12,0X12,0X12,0XFC};
const char B[]={0xFE,0X92,0X92,0X92,0X6C};
const char C[]={0x7C,0X82,0X82,0X82,0X44};
const char D[]={0xFE,0X82,0X82,0X82,0X7C};
const char E[]={0xFE,0X92,0X92,0X92,0X82};
const char F[]={0xFE,0X12,0X12,0X12,0X02};
const char G[]={0x7C,0X92,0X92,0X92,0X74};
const char H[]={0xFE,0X10,0X10,0X10,0XFE};
const char RI[]={0x00,0X82,0XFE,0X82,0X00};
const char J[]={0x70,0X80,0X80,0X80,0X7E};
const char KA[]={0xFE,0X10,0X28,0X44,0X82};
const char L[]={0xFE,0X80,0X80,0X80,0X80};
const char M[]={0xFE,0X04,0X18,0X04,0XFE};
const char N[]={0xFE,0X08,0X10,0X20,0XFE};
const char O[]={0x7C,0X82,0X82,0X82,0X7C};
const char P[]={0xFE,0X12,0X12,0X12,0X0C};
const char Q[]={0x7C,0X82,0XA2,0X42,0XBC};
const char R[]={0xFE,0X12,0X32,0X52,0X8C};
const char S[]={0x4C,0X92,0X92,0X92,0X64};
const char T[]={0x02,0X02,0XFE,0X02,0X02};
const char U[]={0x7E,0X80,0X80,0X80,0X7E};
const char UDI[]={0X7A,0X80,0X80,0X80,0X7A};
const char V[]={0x3E,0X40,0X80,0X40,0X3E};
const char W[]={0xFE,0X40,0X30,0X40,0XFE};
const char X[]={0xC6,0X28,0X10,0X28,0XC6};
const char Y[]={0x06,0X08,0XF0,0X08,0X06};
const char Z[]={0xC2,0XA2,0X92,0X8A,0X86};
const char CERO[]={0x7C,0X82,0X82,0X82,0X7C};
const char UNO[]={0x00,0X84,0XFE,0X80,0X00};
const char DOS[]={0x84,0XC2,0XA2,0X92,0X8C};
const char TRES[]={0x44,0X82,0X92,0X92,0X6C};
const char CUATRO[]={0x1E,0X10,0X10,0X10,0XFE};
const char CINCO[]={0x5E,0X92,0X92,0X92,0X62};
const char SEIS[]={0x7C,0X92,0X92,0X92,0X64};
const char SIETE[]={0x82,0X42,0X22,0X12,0X0E};
const char OCHO[]={0x6C,0X92,0X92,0X92,0X6C};
const char NUEVE[]={0x4C,0X92,0X92,0X92,0X7C};
//***********CARACTERES GRAFICOS**************
const char heart1[]={0X00,0x0C,0X1E,0X3E,0X7C};
const char heart2[]={0x1E,0X0C,0X00,0X00,0x00};
const char arrow1[]={0x10,0x38,0X7C,0XFE,0X38};
const char arrow2[]={0X38,0X38,0X38,0X38,0X00};

//FUNCION ACOMODA EN EL ARREGLO pf[] 
[COLOR=Red]//PATRON DE COLUMNAS DEL CARACTER    
void letra(char ro[])
{int i;
for(i=0;i<5;i++)
pf[jota+i]=ro[i];
jota=jota+5;
}[/COLOR]

//FUNCION BUSCA PATRON DEL CARACTER "bor"
//CCS NO MANEJA POINTERS EN MEMORIA DE CODIGO, LO CUAL HACE
//NECESARIO TRANSFERIR PRIMERAMENTE LA INFORMACION A UN
//BUFFER TEMPORAL bu[].
void swatch(char bor)
{
int i;                //variable local
char bu[5];            //BUFFER TEMPORAL
switch(bor)            //FUNCION SWITCH/CASE
{
case '.':for(i=0;i<5;i++){bu[i]=PUNTO[i];};break;
case ' ':for(i=0;i<5;i++){bu[i]=SPACE[i];};break;
case 'A':for(i=0;i<5;i++){bu[i]=A[i];};break;
case 'B':for(i=0;i<5;i++){bu[i]=B[i];};break;
case 'C':for(i=0;i<5;i++){bu[i]=C[i];};break;
case 'D':for(i=0;i<5;i++){bu[i]=D[i];};break;
case 'E':for(i=0;i<5;i++){bu[i]=E[i];};break;
case 'F':for(i=0;i<5;i++){bu[i]=F[i];};break;
case 'G':for(i=0;i<5;i++){bu[i]=G[i];};break;
case 'H':for(i=0;i<5;i++){bu[i]=H[i];};break;
case 'I':for(i=0;i<5;i++){bu[i]=RI[i];};break;
case 'J':for(i=0;i<5;i++){bu[i]=J[i];};break;
case 'K':for(i=0;i<5;i++){bu[i]=KA[i];};break;
case 'L':for(i=0;i<5;i++){bu[i]=L[i];};break;
case 'M':for(i=0;i<5;i++){bu[i]=M[i];};break;
case 'N':for(i=0;i<5;i++){bu[i]=N[i];};break;
case 'O':for(i=0;i<5;i++){bu[i]=O[i];};break;
case 'P':for(i=0;i<5;i++){bu[i]=P[i];};break;
case 'Q':for(i=0;i<5;i++){bu[i]=Q[i];};break;
case 'R':for(i=0;i<5;i++){bu[i]=R[i];};break;
case 'S':for(i=0;i<5;i++){bu[i]=S[i];};break;
case 'T':for(i=0;i<5;i++){bu[i]=T[i];};break;
case 'U':for(i=0;i<5;i++){bu[i]=U[i];};break;
case 'V':for(i=0;i<5;i++){bu[i]=V[i];};break;
case 'W':for(i=0;i<5;i++){bu[i]=W[i];};break;
case 'X':for(i=0;i<5;i++){bu[i]=X[i];};break;
case 'Y':for(i=0;i<5;i++){bu[i]=Y[i];};break;
case 'Z':for(i=0;i<5;i++){bu[i]=Z[i];};break;
case '0':for(i=0;i<5;i++){bu[i]=CERO[i];};break;
case '1':for(i=0;i<5;i++){bu[i]=UNO[i];};break;
case '2':for(i=0;i<5;i++){bu[i]=DOS[i];};break;
case '3':for(i=0;i<5;i++){bu[i]=TRES[i];};break;
case '4':for(i=0;i<5;i++){bu[i]=CUATRO[i];};break;
case '5':for(i=0;i<5;i++){bu[i]=CINCO[i];};break;
case '6':for(i=0;i<5;i++){bu[i]=SEIS[i];};break;
case '7':for(i=0;i<5;i++){bu[i]=SIETE[i];};break;
case '8':for(i=0;i<5;i++){bu[i]=OCHO[i];};break;
case '9':for(i=0;i<5;i++){bu[i]=NUEVE[i];};break;
case '%':for(i=0;i<5;i++){bu[i]=heart1[i];};break;
case '&':for(i=0;i<5;i++){bu[i]=heart2[i];};break;
case 'ü':for(i=0;i<5;i++){bu[i]=UDI[i];};break;
case '/':for(i=0;i<5;i++){bu[i]=arrow1[i];};break;
case '(':for(i=0;i<5;i++){bu[i]=arrow2[i];};break;

}
[COLOR=Red]letra(bu);            //acomoda patrón de columnas[/COLOR]
}
 
Última edición por un moderador:
Hola FacuJu

No entiendo varias cosas de tu planteamiento.
En cuál simulador para circuitos electrónicos está desarrollando tu proyecto.
Comprime con WinZip o WinRar el archivo que se genera con tu simulador y subelo.

Dices:
Estoy programando para un proyecto de un reloj, y necesito saber como hacer de una forma fácil los números, para mostrarlos en el Display.
Este Display es de 7 segmentos ??

O es el que te refieres al final de tu menaje ??
Tengo 3 Display de 5x7. conformaría uno de 15x7
Esto no es un Display sino una matriz de puntos.

Encontré esta matriz que ya esta hecha pero no entiendo la parte en que pasa de tener la matriz hecha a mostrarla en el Display,
Quieres quitar la matriz y en su lugar poner Display’s de 7 Segmentos ??

creo que seria la parte que esta marcada en rojo si alguien me puede ayudar con este tema, lo agradecería. Y si conocen otra solución a mi problema.
??

Tengo 3 Display de 5x7. conformaría uno de 15x7
Los que tienes no son Display’s sino matrices de puntos de 5x7

Esta es la matriz que ya esta hecha.
?? Sigue el texto del código que encontraste.

saludos
a sus ordenes
 
Última edición:
Bueno, primero que nada perdon porque me falto explicar muchisimas cosas.
Vamos por parte:
Lo que yo tengo me corrijo es una matriz, en realidad 3 matrices de puntos 5x7, es decir una matriz de 15x7 si se quiere.

Mi pregunta seria como hacer para mostrar la combinacion que encontre en internet, que es un patron de caracteres. en mi matriz de led, ya que no entiendo varias cosas de la programación que encontre.

Yo comenze queriendo hacer esto sin tener idea, por lo tanto mi primer idea era prender columnas y filas de esa matriz, conectandolas directamente a las patas del pic, esto me llevaba muchas patas y me ocasiono problemas, entonces busque otra forma y encontre que podia ser un patron, necesito saber como adaptarlo.

Yo uso el programa para compilar MPLAB X v 1.70 aunque por ahora todo lo que intente programar no sirvio, deberia empezar de cero, y para simular uso el PROTEUS v7.8i te paso el archivo de proteus que yo hice, seguramente algo tiene mal. Cosas que note mal fue que funcionaba al reves, es decir la parte de transistores creo que tiene algun error, aunque en el protoboard me funcionaba en la simulación no, por eso directamente lo que programaba lo pasaba al pic. Espero que me puedas ayudar a resolver el patron de caracteres.

Me da error el archivo pero apenas pueda te lo subo.. dame unos minutos.

Espero ser claro con las dudas que tengo, y cualquier cosa seguimos en contacto.

Saludos
 
Última edición:
Circuito?... programa?... capturas de la simulacion?? que has echo hasta ahora para tratar de solucionar el problema?? sin eso absolutamente nadie te puede ayudar...

Reglas generales de uso del foro (Extended Version)

03) Cuando preguntes, danos la máxima información posible. ¡No somos adivinos!

04) No crees temas nuevos si ya hay alguno donde se habla de lo mismo. Usa el buscador.

12) Cuando consultes sobre algún esquema en el que estás trabajando, publícalo. No presupongas que somos adivinos y sabemos de qué cosa estás hablando.
 
Circuito?... programa?... capturas de la simulacion?? que has echo hasta ahora para tratar de solucionar el problema?? sin eso absolutamente nadie te puede ayudar...

Reglas generales de uso del foro (Extended Version)

03) Cuando preguntes, danos la máxima información posible. ¡No somos adivinos!

04) No crees temas nuevos si ya hay alguno donde se habla de lo mismo. Usa el buscador.

12) Cuando consultes sobre algún esquema en el que estás trabajando, publícalo. No presupongas que somos adivinos y sabemos de qué cosa estás hablando.

Te pedi disculpas, lo hago nuevamente. Yo lo que tengo es en PROTEUS este circuito que intente simular pero no funciono muy bien, mi duda es saber como mostrar el patron de caracteres que pongo en el primer post, en la matriz de led que yo tengo si alguien me puede ayudar y necesito mas información pidamela, yo todo lo que pueda lo voy a subir, y disculpenme si no di la información suficiente hasta ahora.
Ayer no puede subirlo y le pedi un tiempo al 2do comentario, ahora subo un .rar con un PROTEUS v7.7 y algunos archivos .BMP que capture del mismo.
Tambien te subo una foto del programa que uso para programar por si eso te sirve, es MPLAB X IDE v1.70 y compilador XC8.
Espero ser claro y no causarles problemas.
 

Adjuntos

  • Matriz.rar
    197.8 KB · Visitas: 51
Última edición:
Ahora si.. eso ya es diferente... aunque ese programa parece que no esta completo y por eso no muestra nada... se declara como van a ser "pintadas" cada una de las letras y una funcion para hacer la busqueda de cada patron de cada letra... pero no se ve donde se envian al display...
 
Ahora si.. eso ya es diferente... aunque ese programa parece que no esta completo y por eso no muestra nada... se declara como van a ser "pintadas" cada una de las letras y una funcion para hacer la busqueda de cada patron de cada letra... pero no se ve donde se envian al display...


Claro me parecia que le faltaban partes, necesito saber como hacer la funcion para la busqueda de cada patron de cada letra y como enviarlo al display, osea en mi caso a la matriz de led. No tengo idea de como puedo llegar a hacer eso, o si conocen una forma mas facil de conformar en digital numeros en una matriz de led, para poder hacer mi reloj, dado que haciendolo yo led x led no me funciono tuve muchos problemas.
SALUDOS
 
Hola FacuJu

Según se ve en esquema que subiste que Tú habilitas las filas de las 3 matrices y por las columnas pretendes que enciendan tales o cuales puntos.

De esa forma es un poco más difícil y más elaborado el programa. Además utilizas casi todos los puertos del PIC16F887.

Sería más fácil el habilitar una por una las columnas y, según la que esté habilitada, -con un nivel alto-, por Las filas se le “dice”, -con un nivel bajo-, que puntos quieres encender de esa columna.

Dice tener 3 matrices de 5x7 (5 columnas x 7 Filas) lo cual no hace una matriz de 15x21 (15 columnas x 21 filas).
Las columnas deben estar independientes una de la otra mientras que las filas se conectan:
Todas las filas 1 entre si.
Todas las filas 2 entre si.
Todas las filas 3 entre si.
Todas las filas 4 entre si.
Y así sucesivamente.
Así que ahora nos queda una matriz de 15x7 (15 Columnas x 7 filas).

Cómo le haremos para ir habilitando una a una las 15 columnas con un nivel alto ??
Podría hacerse con un contador johnson de 15 BIT’s o con un registro de desplazamiento (Shift Register) como el 74LS164.
Este IC tiene una entrada de Reset(9) para poner a 0 sus salidas PIN’s: 3, 4, 5, 6, 10, 11, 12, 13.
Por su entrada en la cual aparece un &(1,2) –se llama DATO- se le aplica 1 o 0 según si queremos que el BIT X sea 1 o 0.
Luego se le aplica un pulso de transición positiva a su entrada Clock(8).

A medida que apliquemos pulsos a su entrada clock ese 1 o 0 se irá desplazando por sus salidas.
Con esto ya se puede ir habilitando cada columna con un 1 que debemos hacer que se desplace por los 74LS164.

Ahora nos falta como ir encendiendo los puntos –por medio de las filas- que nos convengan para que se vea una figura en esas 3 matrices 5x7 que dices tener.

Analiza el archivo nombrado Prueba.C que te adjunto.
En las líneas de código de la 16 a la 25 definen las letras para formar la palabra VELOTAX.
Esta palabra aparece en la matriz de puntos en la simulación para ISIS de proteus te adjunto.
En la hoja de calculo de Excel, que te adjunto, vas a notar que las letras están definidas horizontalmente.
Sin embargo si las cambiamos a verticalmente y pintamos de rojo los unos verás las letras que conforman la palabra VELOTAS.

Espero que toda esta palabrería sirva para desarrollar tu sistema.

saludos
a sus ordenes
 

Adjuntos

  • Matrix 5x7 X 8.jpg
    Matrix 5x7 X 8.jpg
    325.7 KB · Visitas: 29
  • VELOTAX.jpg
    VELOTAX.jpg
    377.7 KB · Visitas: 16
  • New.zip
    93.9 KB · Visitas: 37
Voy a mirar y analizar todo eso que me subiste, pero creo que me acabas de solucionar varias dudas, y seguramente todas. Lo unico que me faltaria es el integrado, aunque cuando te refieres a el contador johnson podria ser el 4017, porque yo consegui uno pero me dijieron que talves no funcione, me faltaria saber si es lo mismo un 4017 que el 74LS164 para este caso. De no ser asi no tengo problemas en comprar uno, solo espero conseguirlo.
Ah otra consulta es si me cambia mucho trabajar con un 16F887, en cuanto a registro y la parte de programar.
Muchas gracias, ya que me sirvio de mucho esto.
Seguramente seguimos en contacto.
Saludos
 
Última edición:
Hola FacuJu

Creo que podría servir el 4017 en lugar del 74LS164.
Pero. . . Recuerda que se requieren 15 BIT’s para la matriz y el 4017 solo tiene 10 BIT’s.
Se requerirían 2 IC’s y una circuiteria extra para que cuando el primero esté desplazando el 1 el otro NO esté habilitado y cuando el segundo el primero NO esté habilitado.

En el esquema que adjuntaste tienes el PIC16F887.
En el que te adjunté tengo el..............PIC16F877A.
Solo tendrías que cambiar en el archivo del código:
Esto:......#include <16F877A.h>
Por esto: #include <16F887.h>
Está en la primer línea.

saludos
a sus ordenes
 
Última edición:
Atrás
Arriba