MAX7219CNG con display de 4 bloques y 7 segmentos

Hola foro, que tal?, bueno estoy tratando de hacer funcionar un display de 4 bloques y de 7 segmentos con el contorlador MAX7219CNG y la verdad pues ando un poco desesperado de probar tantas formas y que no me funcione correctamente.

En concreto estoy usando el arduino Mega, el chip MAX7219 (para matrices de 8x8) y un display de 4 digitos y de 7 segmentos.

Conecto todos los cables tal y como se indica en la imagen que me adjunto, los comunes de los digitos a los DIG0 al DIG3 y luego para los segmentos SEGA hasta el G, seguido cargo el siguiente código en arduino:

#include <LedControl.h>
// inputs: DIN pin, CLK pin, LOAD pin. number of chips
LedControl mydisplay = LedControl(7, 5, 6, 1);
void setup() {
  mydisplay.shutdown(0, false);  // turns on display
  mydisplay.setIntensity(0, 15); // 15 = brightest
  mydisplay.setDigit(0, 0, 9, false);
  mydisplay.setDigit(0, 1, 8, false);
  mydisplay.setDigit(0, 2, 7, false);
  mydisplay.setDigit(0, 3, 6, false);

}

void loop() {
}

Y no funciona correctamente, aparecen todos los segmentos iluminados, cuando hago cambios para mostrar distintos números sigue igual, cambian intensidad y vuelve a iluminarse todos los segmentos.

Para salir de dudas que estuviera mal alguna cosa, conecto de forma paralela una matriz de 8x8 y resulta que si lo hace correctamente, osea, se enciende la cantidad de puntos en la matriz que corresponde con la cantidad de segmentos que se necesitan iluminar en el display digital en la columna correcta…

…entonces quería saber que hago mal, donde tengo el error.

Estaría muy agradecido alguna ayuda ya que llevo semanas buscando y no encuentro nada.

GRACIAS

no te falta un mydisplay.begin(); que inicializa el objeto?

Hola Surbyte, pues bueno he agregado esta línea como indicas para inicializar pero resulta que me devuelve un error porque la clase no contiene este método... :frowning:

estoy usando la librería correspondiente?, en concreto estoy usando la librería "LedControl-1.0.4.zip"

Display_con_MAX7219.ino: In function 'void loop()':
Display_con_MAX7219.ino:15:12: error: 'class LedControl' has no member named 'begin'
Error de compilación

Gracias

Aca tienes el ejemplo de donde yo te sugiero esto, librería con ejemplos Adáptala a tus pines y me cuentas si funciona.

hola moybm,
gracias a surbyte conoci este chip.
Me paso un problema parecido y era la resistencia iset de 10k la cambie por 47k y funciono a la perfeccion.
creo que los chips vienen con algun defecto y hay que subirles la resistencia.

Bien surbyre, me repasare lo que me has pasado.

Mirare lo de la resistencia pincho71400, la que tengo creo que es la de 10k, probare con otra mayor a ver si sea de eso.

Mañana tarde lo mirare de nuevo y seguiré probado lo que me habéis pasado. Muy agradecido por vuestra ayuda.

Saludos!!

-== Borrar, duplicado ==-

Hola de nuevo, pues la web que me ha pasado surbyte está genial, y mira que he buscado otras incluso en youtube videos que tratan el MAX7219 para mover digitos pero nada, las conexiones son las que en todos me indican pero me sigue pasando lo mismo, en el display se encienden todos los segmentos.

He probado el código que se indica en la web pero no hace nada, entiendo que los pones de arduino que usa para el MAX7219 son el 10, 11 y 13 ¿no?.. pues nada

He puesto paralelamente una matriz de 8x8 con el mismo controlador y me mandado el número 1 y correctamente me ilumina dos puntos, que son los dos segmentos del uno (Adjunto foto para que se observe), pero nada, el display sigue mostrando todos los digitos iluminados.

Para seguir probando he cambiado el controlador de uno a otro y sigo en el mismo caso, asi que el MAX7219 funciona correctamente.

He cambiar la resistencia por otra mayor, y además he agregado una que no tenía de masa al pin 12 del controlador de 10k y nada…

Disculpen si soy muy pesado, pero soy de los que no se cansan hasta que lo consigue… jejejeje, bueno a ver si observan algo raro o piensen que puede suceder.

Muchas gracias por su ayuda.

En el link que te di, estan los esquemas, si tu esquema es similar a ese, y usas esa librería debería funcionar.
Pincho tiene un equipo con al menos 4 MAX7219 comandando todo tipo de displays, y funcionan perfecto.
Préstale atención a su experiencia y su consejo.

Si surbyte, pues me pondré desde cero a hacer de nuevo el cableado y todo lo demás, la veradad que hasta a mi me parece muy raro que no funcione, pero bueno…

Por cierto una cosa, en el código que me has pasado que viene en el enlace hay una línea que me dice que la puedo quitar y es que me da error y si la dejo, pero crea una constante SS que le da un valor, si la quito entonces esa constante que usa donde adquiere el valor?

#include <SPI.h>
[u]const byte SS = 10; [/u] // omit this line for Arduino 1.0 onwards

const byte MAX7219_REG_NOOP        = 0x0;
// codes 1 to 8 are digit positions 1 to 8
const byte MAX7219_REG_.......

No puedes quitar SS porque es el CHIP SELECT o sea el elemento que le dice al MAX7219 que va a recibir datos.
Si levantaste ese pin y/o si no lo defines, entonces es por eso q no funciona tu display!!!

tal vez me apresuré en el comentario.
Porque no pones una foto o un esquema de tus conexiones. En este punto con problemas como los que mencionas hay que saber que has conectado y cómo

Hola Surbyte, pues he vuelto a cablear todo completo y me vuelve a suceder lo mismo que antes. He cambiado las resistencias y he puesto la de 10K tal y como indica el esquema, y luego otra de 27K para el pin ISET, ya no se si pueda ser eso así que cuando pueda cambiaré y pondré otra resistencia más grande ya que no dispongo de ninguna de 47k.

Mando la captura del error que me arroja arduino con esa línea que crea la constante que me da error, y una foto del cableado… sinceramente no quiero ser mas pesado de lo que soy jejeje, pero bueno sigo investigando dentro del tiempo que tengo para saber que sucede.

Foto del esquema:
Imagen desde Flickr

Error de arduino

Display_con_MAX7219.ino:2:12: error: redefinition of 'const byte SS'
In file included from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/cores/arduino/Arduino.h:247:0,
                 from /Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/libraries/SPI/SPI.h:17,
                 from Display_con_MAX7219.ino:1:
/Applications/Arduino.app/Contents/Resources/Java/hardware/arduino/avr/variants/mega/pins_arduino.h:35:22: error: 'const uint8_t SS' previously defined here
 static const uint8_t SS   = 53;
                      ^
Error de compilación

GRACIAS

Bueno vamos por el post#11 y aun no sabes postear códigos.
YO no te voy a responder mas hasta que aprendas a hacerlo
Muy facil.
Vas a las normas del foro y ves como se usan los tags.
Punto 7 es como insertar códigos.

En tu ultimo problema has definido dos veces SS
const uint8_t SS de la línea 35 previamente definida aqui y te ponde donde.. en la definición static const uint8_t
SS = 53

Porque no pones todo el código usando tags.
SI no usas tag. Yo no respondo mas.

Corregido los códigos en post anteriores, disculpa por ello surbyte.

Bueno sigo en mi investigación y creo haber descubierto cual es el problema, y es que resulta que los dígitos son de ánodo común y por lo que observé en el esquema que me ha pasado el compañero surbyte es que debe de ser de cátodo común... así que a partir de aquí creo que tendría dos opciones (y digo creo porque no se si exista solución "fácil")

Una de ellas es comprar un display de cátodo común y la otra sería cambiar la programación para convertir los SEG por los DIS... jejeje, no se que recomendación me podrían dar.

Gracias como siempre por vuestra ayuda.

lamento informarte que esta pensado para usar LEDs catodo común. Para invertirlo puedes usar transistores

la hoja de datos dice: Drive Common-Cathode LED Display asi que o usas drivers inversores, o transistores.