Autor Tema: manejo de matriz de 8x8 con pic  (Leído 6724 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
manejo de matriz de 8x8 con pic
« en: 19 de Junio de 2017, 11:38:17 »
quiero mostrar la temperatura en una matriz de led 8x8 o en dos de 8x8, aqui una libreria pero no se como formar los  caracteres:
Código: [Seleccionar]
#define DIN pin_A1
#define CS  pin_A2
#define CLK pin_A4

#define NOP 0x00

#define DIG0 0x01
#define DIG1 0x02
#define DIG2 0x03
#define DIG3 0x04           
#define DIG4 0x05
#define DIG5 0x06             
#define DIG6 0x07
#define DIG7 0x08

#define decode_mode_reg    0x09
#define intensity_reg            0x0A
#define scan_limit_reg        0x0B
#define shutdown_reg         0x0C
#define display_test_reg      0x0F                                     

#define shutdown_cmd 0x00     
#define run_cmd          0x01

#define no_test_cmd  0x00
#define test_cmd       0x01
                             
#define digit_0_only 0x00   
#define digit_0_to_1 0x01
#define digit_0_to_2 0x02
#define digit_0_to_3 0x03
#define digit_0_to_4 0x04
#define digit_0_to_5 0x05
#define digit_0_to_6 0x06
#define digit_0_to_7 0x07
                                                 
#define No_decode_for_all          0x00
#define Code_B_decode_digit_0       0x01
#define Code_B_decode_digit_0_to_3    0x0F
#define Code_B_decode_for_all       0xFF                       
                                       
                                         
void MAX72xx_init();
void MAX72xx_write(unsigned char address, unsigned char value); 

Código: [Seleccionar]
#include "MAX72xx.h"


void MAX72xx_init()
{
    output_high(CS);
    MAX72xx_write(shutdown_reg, run_cmd);
    MAX72xx_write(decode_mode_reg, No_decode_for_all);
    MAX72xx_write(scan_limit_reg, digit_0_to_7);
    MAX72xx_write(intensity_reg, 0x04);
    MAX72xx_write(display_test_reg, test_cmd);                     
    delay_ms(100);                                     
    MAX72xx_write(display_test_reg, no_test_cmd);           
}                                         

                                                         
void MAX72xx_write(unsigned char address, unsigned char value)
{
    unsigned char s = 0;
    unsigned long data_word = 0;               
                 
    data_word = (((unsigned long)address << 8) | value);                 
    output_low(CS);       
   
    for(s = 0; s < 16; s += 1)
    {       
        if((data_word & 0x8000) != 0)
        {
            output_high(DIN);
        }           
        else
        {
            output_low(DIN);                       
        }
        output_low(CLK);
        delay_ms(1);
        output_high(CLK);
        data_word <<= 1;             
    }
    output_high(CS);
}
alquien me da una mano con esta libreria?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:manejo de matriz de 8x8 con pic
« Respuesta #1 en: 19 de Junio de 2017, 20:49:09 »
Como podemos hablar de una libreria o de tratar de arreglar una libreria cuando uno no sabe siquiera como es que esta construido esa matriz 8x8?

Por lo que veo que elegiste la libreria de un MAX7219/7221, voy a suponer que tenes eso. Por lo cual tu respuesta esta obviamente en como se maneja el integrado ese:

https://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf

Ahi vas a encontrar que datos vas a tener que enviar para cambiar los "catodos" que supongamos son tus columnas y los "segmentos" que seran tus filas, o viceversa.

Vas a seleccionar una fila/columna segun este conectado con la direccion del SPI y luego envias los datos para activar las filas/columnas, Asi hasta completar los 8, al Completar todos luego el integrado se encarga de multiplexar los leds, vos te encargas de "llenarle" un RAM dentro.

En la pag. 6 tenes lo que tenes que enviar. En la pagina 7 tenes lo que deberias poner en ADDRESS para saber que estas cambiando. Y finalmente DATA son los datos.

-----------

Lo peor de todo es que se puede usar el SPI, ya que veo que siempre que necesitan de un SPI proceden a hacerlo por software para que su libreria pueda ser usada en cualquier micro. Pero desaprovechando el modulo SPI
« Última modificación: 19 de Junio de 2017, 20:57:54 por KILLERJC »

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:manejo de matriz de 8x8 con pic
« Respuesta #2 en: 20 de Junio de 2017, 16:18:56 »
encontre esta libreria pero no se como formar numeros y letras:
Código: [Seleccionar]
/*
Autor: Freddy Quispe Tello
Fecha: 02/02/2015

Es una libreria que cree y comparto con ustedes
Espero que la aprovechen!

*/


/*
#define N_MAX    3
#define MAX_DIN  PIN_C0
#define MAX_CS   PIN_C1
#define MAX_CLK  PIN_C2
*/

void SPI_MAX72xx(unsigned char dato);     // Declaramos la funcion que nos permitira enviar los datos de escritura al MAX     
void Comandos_MAX72xx(unsigned char direc,unsigned char dato ); // Funcion exclusiva para enviar comandos
void Iniciar_MAX72xx(unsigned char decode);// 0xFF o 0x00 (Activar o desactivar el decodificador)
void Enviar_MAX72xx(unsigned char num,unsigned char direc,unsigned char dato );

Void SPI_MAX72xx( unsigned  char dato){
   int con;
     for(con=8;con>0;con--){
         output_low(MAX_CLK);
         if(bit_test(dato,con-1)==0)
            output_low(MAX_DIN);
           
         else
            output_high(MAX_DIN);
           
         output_high(MAX_CLK);
      }

}
void Comandos_MAX72xx(unsigned char direc,unsigned char dato ){
   unsigned char cont;
   output_low(MAX_CS); 
   for(cont=0; cont<N_MAX;cont++){
   SPI_MAX72xx(direc);
   SPI_MAX72xx(dato);
   }
   output_high(MAX_CS);

}
void Iniciar_MAX72xx(unsigned char decode){
   output_low(MAX_DIN);
   output_low(MAX_CLK);
   output_high(MAX_CS);
   Comandos_MAX72xx(0x09,decode);  // Desactivamos el modo DECODER 
   Comandos_MAX72xx(0x0A,0x0F);  // Ajustamos el PWM 21/32
   Comandos_MAX72xx(0x0c,0x00);  // Desactivamos EL MAX
   
   Comandos_MAX72xx(0x0B,0x07);  // Adtuvamos el Scaneo que serade DIG0 a DIG7
   Comandos_MAX72xx(0x0c,0x01);  // Desactivamos EL MAX
   Comandos_MAX72xx(0x0F,0x00);  // Desactivamos el TEST
   Comandos_MAX72xx(0x0C,0x01);  //Activamos el MAX
}
void Enviar_MAX72xx(unsigned char num,unsigned char direc,unsigned char dato ){
    unsigned char MAX_DATO[10]={0,0,0,0,0,0,0,0,0,0}; 
    unsigned char rep;
    unsigned char cont;
    rep = N_MAX*2;
    MAX_DATO[num*2-1]=direc;
    MAX_DATO[num*2-2]=dato;
    output_low(MAX_CS);
    for(cont=rep; cont>0;cont--){
      SPI_MAX72xx(MAX_DATO[cont-1]);
    }
    output_high(MAX_CS);
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:manejo de matriz de 8x8 con pic
« Respuesta #3 en: 20 de Junio de 2017, 17:58:44 »
Primero debes iniciar el MAX72xx

Eso lo haces con:

Código: C
  1. Iniciar_MAX72xx(0);

El 0 es necesario por que apaga la decodificacion, ya que el integrado se puede usar para display 7 segmentos, y al ponerle un 1 se puede activar un decodificador BCD a 7 segmentos. Pero como aca usamos un array, dbemos desactivarlo.

N_MAX imagino que es la cantidad de dispositivos "anidadados" que tenes, en este caso si es solo 8x8 es 1.
Este codigo que sigue deberia generar una linea continua. vertical u horizontal segun como esten conectados.
Código: C
  1. for(i=1;i<9;i++)
  2. {
  3.     Comandos_MAX72xx(i,0x4);
  4. }

Particularmente no se que quiso hacer el creador de esa libreria, hay un par de cosas raras.
En si , lo unico que hago es enviar
-  a la direccion 0x01 los bits de la fila 0 o columna 0 (segun este conectado)
-  a la direccion 0x02 los bits de la fila 1 o columna 1 (segun este conectado)
- Asi hasta las 7 columnas o filas.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:manejo de matriz de 8x8 con pic
« Respuesta #4 en: 21 de Junio de 2017, 09:15:33 »
voy a tener que estudiar como funciona el integrado, la verdad me extraña que no haya algo ya armado para poder hacer un cartel o mostrar simples letras

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re:manejo de matriz de 8x8 con pic
« Respuesta #5 en: 21 de Junio de 2017, 11:25:26 »
seguìs sin especificar cual es la matriz que queres usar y no confirmas si lo que supone KILLER es correcto. Que integrado/matriz queres usar?

esto no te sirve?
http://www.instructables.com/id/Ejemplo-b%C3%A1sico-con-IC-MAX7219-Matriz-LED-y-visuali/
-
Leonardo Garberoglio

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:manejo de matriz de 8x8 con pic
« Respuesta #6 en: 22 de Junio de 2017, 09:38:56 »
Hola, la matriz que quiero usar el la que viene con el integrado 7219 de 8x8

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:manejo de matriz de 8x8 con pic
« Respuesta #7 en: 22 de Junio de 2017, 10:59:06 »
elgarbe :El enlace que me dejaste me aclara un poco las cosas pero no es el metodo usando arduino el que yo quiero usar

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:manejo de matriz de 8x8 con pic
« Respuesta #8 en: 29 de Junio de 2017, 18:24:46 »
Bueno al parecer me las tendre que arreglar solo, jaja

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:manejo de matriz de 8x8 con pic
« Respuesta #9 en: 29 de Junio de 2017, 18:55:06 »
Bueno al parecer me las tendre que arreglar solo, jaja

Se te explico como funciona, tenes el datasheet que te dice como funciona el integrado y que debes enviar de forma sencilla.
Tenes 2 librerias las cuales podes ver lo que hacen sabiendo que son los registros que posee dentro el integrado (explicados en el datasheet ).
Hace mas de 7 años que trabajas con programacion y con C, lo cual no creo que tu problema sea leer el programa.

Yo no conocia ese integrado, nunca lo habia visto, lei el datasheet y ahi esta todo explicado y ahora se que debo enviar.

¿Que mas necesitas? Solo ponerte a realizarlo. Tenes todo, solo tenes que armar el rompecabezas.
Es como si tuvieras una lamparita, un porta lampara y unas instrucciones que dice "Para poner la lampara, introduzca la lampara y gírela hacia la derecha hasta hacer tope"
Pedís ayuda, se te da y decís "Bueno al parecer me las tendre que arreglar solo, jaja"

Por eso mismo ya no comprendo tu proceder respecto a este asunto y otros que has abierto.
« Última modificación: 29 de Junio de 2017, 19:01:37 por KILLERJC »

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:manejo de matriz de 8x8 con pic
« Respuesta #10 en: 30 de Junio de 2017, 08:25:54 »
Killer vos te calentaste conmigo el dia que dije que el foro estaba muerto y desde ahi me venis faltando el respeto y ridiculizando mis temas y yo lo soporte estoicamente, ya me canse, si te molestas mis preguntas no las conteste y listo eso es lo mas justo

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re:manejo de matriz de 8x8 con pic
« Respuesta #11 en: 30 de Junio de 2017, 11:16:52 »
Me parece que el equivocado no es KILLER y dudo mucho que se halla "calentado" con vos.
El problema acá, como con la mayoría de tus preguntas, es que buscas algo ya hecho para modificar levemente y resolver tu aplicacion.
Cualquera de nosotros, cuando tienealgo que resolver hace lo que te dijimos acá, tomamos la hoja de datos del integrado, buscamos alguna librería sin importar si es para PIC, arduino o ARM. Luego nos sentamos a estudiar el material y consultamos por dudas espesìficas de las cosas que no entendemos.
Si pedis por algo ya hecho en el foro yo te diría que uses el buscador.
S queres resolver vos el problema y aprender, entonces sentate con la hoja de datos a estudiarla y preguntá lo que no entendes.
Una vez que sabes como funciona el integrado teens que hacer el código.
Si lo que queres hacer es tomar una librerìa que estaba en internet y usarla, sentate a estudiar la librería, no debería ser dificil ya que para este entonces conocerias como funciona el integrado. Si tienes dudas puntuales sobre la librería, cosas como "por que hizo tal cosa en vez de hacer tal otra", o "que funcion tiene esta parte del código", etc, preguntá que seguro alguien (los mas probable que sea KILLER) te va a ayudar.

Excepto KILLER, no creo que halla otra persona en el foro que intente responder una pregunta tal cual la elaboraste "quiero mostrar la temperatura en una matriz de led 8x8 o en dos de 8x8, aqui una libreria pero no se como formar los  caracteres"

incluso KILLER te explicó como se usa la librería, dijiste que ibas a estudiar el integrado pero parece que no fue así.

Trabajr con PIC no es como con arduino, hay hardware y software que entender, casi nunca es copiar una librería de internet y todo sale andando. Quizás deberías considerar pasar tus aplicaciones a arduino.

Saludos
-
Leonardo Garberoglio

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re:manejo de matriz de 8x8 con pic
« Respuesta #12 en: 30 de Junio de 2017, 11:26:57 »
Killer vos te calentaste conmigo el dia que dije que el foro estaba muerto y desde ahi me venis faltando el respeto y ridiculizando mis temas y yo lo soporte estoicamente, ya me canse, si te molestas mis preguntas no las conteste y listo eso es lo mas justo

Estoy revisando tus post y en absolutamente todos ellos, KILLER es el primero en responderte y en muchos casos el unico. Definitivamente no es un problema de KILLER, el poblema es que te quejes que nadie te ayuda cuando te estan respondiendo todos los post que creas.

-
Leonardo Garberoglio

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:manejo de matriz de 8x8 con pic
« Respuesta #13 en: 30 de Junio de 2017, 14:21:21 »
Citar
Killer vos te calentaste conmigo el dia que dije que el foro estaba muerto
Eso no me molesto de vos para nada, ni siquiera lo recuerdo cuando lo escribiste

La verdad lo que me molesta no son tus preguntas, pero si tu actitud y no solo en este tema, en muchos has sido igual. Mas adelante te voy a dar un ejemplo de como son tus temas.

Yo no tengo obligacion de responderte, ni tampoco vos tenes obligación de hacerme caso, pero veo que nadie te responde, y si yo estuviera en tu lugar (preguntando) y nadie me respondiera, te diria que no es lindo, porque ya me sucedio. Entonces como no me gusta quedar ahi sin respuesta, tampoco me gusta dejar a otro sin algo con que aferrarse, prefiero tomarme el tiempo de leer el datasheet que como te dije NUNCA habia visto al igual que vos, y encuentro como se maneja. Si a mi me tomo 10min encontrar el datasheet, leerlo y entenderle, supongamos que te tome 30min como maximo a vos, aun asi tenes que entenderle si lo leiste.

Entonces utilizando este hilo nomas. Asi fue la ida y vuelta de este tema, para que comprendas porque llegamos a este punto:

Vos - quiero mostrar la temperatura en una matriz de led 8x8 o en dos de 8x8, aqui una libreria pero no se como formar los  caracteres
Yo - Despues de leerme el datasheet, Resumen: "En la pag. 6 tenes lo que tenes que enviar. En la pagina 7 tenes lo que deberias poner en ADDRESS para saber que estas cambiando (Registros). Y finalmente DATA son los datos." - Y esta respuesta no fue "ridiculizando" nada como comentas.
Vos - encontre esta libreria pero no se como formar numeros y letras

En este punto pense, ¿ En serio ?, Pasaste por encima todo lo que te dije, no leiste el datasheet, te fuiste a buscar otra libreria y volviste a poner que no sabes como formar los numeros.
Me tome una pastillita de paciencia y pense, bueno, voy a ponerme a leer la libreria que pasaste, reviso y luego te escribi como es que tenes que enviar los datos, hasta te di el codigo de ejemplo para formar una linea ( horizontal o vertical dependiendo como esta conectado ese integrado, ya que todavia no me dijiste nada de como estan conectadas ). Ya con esto deberias ser capaz de formar una imagen mental de lo que pasa y que relacion tiene con lo que se envia. Nuevamente la respuesta sin "ridiculizar". Tu respuesta y las que siguen son:

Vos - "voy a tener que estudiar como funciona el integrado, la verdad me extraña que no haya algo ya armado para poder hacer un cartel o mostrar simples letras"
elgarbe - Aporto un grafico de como es que estan conectados el array asi lo entendias mejor de forma grafica y tenes el codigo de una libreria de Arduino el cual podes estudiar que hace.
Vos - "Bueno al parecer me las tendre que arreglar solo, jaja"

Espero que entiendas, que recibiste ayuda 3 veces, se te dijo donde esta todo lo "importante" para hacer funcionar esa matriz 8x8, y terminaste diciendo "me las tendre que arreglar solo".

Como decia esto no es unicamente en este tema. Tal ves vos esperas del foro que te lo den armado, pero la idea es sacarte una duda minima de lo que vos ya investigaste al cansancio.

Hay 2 casos de los ultimos que me vienen a la memoria:

DFMiniPlayer
Es el del checksum del DFMini Player, otro integrado que jamas habia visto, tuve que buscar por internet como es que lo calculaba porque no me daban los valores. Revisando librerias encuentro como es y te lo explico como lo calcula.
Al tiempo abris OTRO mensaje con lo mismo. Exactamente el mismo problema que antes. La respuesta999 de planeta fue casi la misma que la mia, te dio directamente los codigos para que los uses, los cuales yo tambien copie y listo. Entonces, si se te dio el codigo y no lo estudiaste vos, es imposible que lo aprendas. Te dio ejemplos de codigos, realizados con Arduino, pero que podes leer y sacar como funciona o como hace para arrancar la cancion. Lo unico que necesitas hacer es buscar una libreria para lo que sea, y leer el codigo y listo. Tus respuestas fueron acordes a este tema, diciendo "No quiero hacerlo con Arduino", "como hago esto", "como hago el otro" y TODO eso lo tenes en todo lo que se te dio.
Luego al final pedis que se te de el codigo para hacer correr la primer cancion de no se donde. Si no mal recuerdo esto esta explicado en el datasheet del DFMiniPlayer. Te respondio alguien? NO, porque la idea es que vos te pongas las pilas y no que los demas hagan tus trabajos.

Robot esquiva obstaculos

Preguntas algo que en el codigo esta resuelto. La logica del codigo es correcta, no hay error alli. Y seguramente el error lo tengas en otro lado.
Se te hace una acotacion de que no uses el goto, y te doy el codigo realizado con while o do..while . Tu respuesta fue entendida como un "yo programo como quiero". Planeta999 nuevamente te lo acota luego sobre el uso de los goto. No es por capricho nuevamente, pero si tenes problemas con la programacion y con el manejo flujo del programa que preguntas por un problema tan simple. Entonces  quiere decir que no estas inmmerso en la programacion C, y que por implementar un goto podes llegar a hacer algo que llevaria problemas por desconocimientos, y por eso se te aconseja el uso de loops como while/for/etc.

Mi siguiente respuesta era una contestacion a tu respuesta sobre lo de programar como uno sabe, en la cual expongo todo esto que expuse aca, pero que luego de enviado me arrepenti, y teniendo ya este historial en varios temas, decidi darte 3 puntos para que puedas resolver cualquier problema. Que son:

- Lee
- Busca
- Buena Suerte

¿Vos crees que planeta999 o yo, ambos sacamos las respuestas para darte del infinito conocimiento almacenado en nuestras cabezas? NO, simplemente buscamos y leemos, Y lo estamos haciendo por vos, es decir ocupamos nuestro tiempo en cosas que vos deberias hacer como algo basico. Y esto suele ocurrir a gente que recien comienza, gente que ya posee años en programacion va directamente a buscar en internet y resuelve sus problemas leyendo. Cuando ya no hay mas ningun recurso donde valerse es cuando preguntamos.

Resumen de todo este mensaje:

Estoy intentando dilucidar cual es tu forma de encarar o cual es tu problema frente a cosas por ahi demasiados simples y que necesitan de que postees una pregunta, teniendo en cuenta que veo temas tuyos de hace 7 años en este foro los cuales son de ASM y C, por lo cual deberia (aunque no creo) asumir que la programacion la tenes mas que clara. Y los puntos que llego son:

- O no sabes ingles y no queres decirlo, entonces no lees los datasheets, por lo cual vas a tener que aprender ingles si o si, si queres hacer algo por tu cuenta.
- O tenes una actitud de querer tener todo armado, si es asi te recomiendo que uses Arduino y dejes PIC o cualquier otro micro, lo cual te va a solucionar la vida.
- O simplemente buscas el minimo esfuerzo.

Y sinceramente no pensaba contestar mas ninguna pregunta proveniente de vos para no generar conflicto luego de haber visto el tema del DFMiniPlayer y las cosas que pedias a pesar que planeta999 te estaba dando todo para que estudiaras. Pero ese mensaje de "me las voy a tener que arreglar solo" a pesar que se te habia dado ayuda, fue lo que hizo que hoy en dia escribiera esto.

Para cerrar, no te dejo de responder por "calentura" o "enojado" sino porque pienso que responderte es perder el tiempo, ya que como ves a pesar de haberte respondido, elgabe y yo, termino en un simple "me las voy a tener que arreglar solo", entonces pienso que no aprecias lo que la otra persona esta haciendo por vos. Y eso lleva a que no te responda, no por enojo o calentura como dije, sino porque parece que decidis pasar por alto todo lo que no funcione con un simple copy & paste.
« Última modificación: 30 de Junio de 2017, 14:59:48 por KILLERJC »

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re:manejo de matriz de 8x8 con pic
« Respuesta #14 en: 30 de Junio de 2017, 16:00:44 »
Bueno killer, es cierto que cuando se me pone algo en la cabeza es muy dificil que lo deje y no le hago mucho caso a lo demas es por eso prometo cambiar pero vos tenes que dejar de  hacer suposiciones sobre mi, es por eso te cuento que estudie ingles en la facultad pero no soy muy bueno en eso y mas con el paso del tiempo. Te propongo que empecemos de nuevo y hagamos las pases