TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: soymoe 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:
#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);
#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?
-
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
-
encontre esta libreria pero no se como formar numeros y letras:
/*
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);
}
-
Primero debes iniciar el MAX72xx
Eso lo haces con:
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.
for(i=1;i<9;i++)
{
Comandos_MAX72xx(i,0x4);
}
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.
-
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
-
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/
-
Hola, la matriz que quiero usar el la que viene con el integrado 7219 de 8x8
-
elgarbe :El enlace que me dejaste me aclara un poco las cosas pero no es el metodo usando arduino el que yo quiero usar
-
Bueno al parecer me las tendre que arreglar solo, jaja
-
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.
-
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
-
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
-
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.
-
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.
-
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
-
No tengo ningun problema personal con vos, y si tenes alguna duda y veo que soy de utilidad la pienso responder. Si me hubieras dicho que por ejemplo no estas comodo leyendo el ingles o que no logras entenderle lo que te dice el datasheet en cierto punto, yo intentaba tratar de descifrarlo por vos y explicarte esas partes y que intenta decir. Tal ves especificar mas tus dudas.
Para mi la idea es que logres poco a poco, con lo que se te da, por vos mismo llegar al resultado.
La parte digital no es ninguna ciencia, a no ser extremos en frecuencia u otros casos, sino que como supe decir en otros post, la mayoria de los problemas presentados en el foro se encuentran buscando en google. Por ejemplo de los usuarios mas avanzados del foro yo espero que sus post sean:
- Para aportar
- Para hacer una pregunta luego de haber agotado recursos ( busqueda, estudio, etc )
- O para recurrir a una tormenta de ideas, la cual le presenta a la persona mas opciones en la baraja al enfrentar un problema planteado.
Por supuesto que empecemos de nuevo y hagamos las paces. Y logremos sacarte las dudas que posiblemente tengas.
-
Hola Killer, hoy lei el datasheet del el max7221 y el del dfplayer mini, en realidad lo relei porque ya los habia leido y si bien no entendi mucho en el caso del dfplayer estuve haciendo algunas puebas, gracias por tu atencion