Go Down

Topic: (Matrix7219 8x8 modelo : M0062) en cascada error de deconexion (Read 847 times) previous topic - next topic

xochiel

Muy buenas compañeros, os planteo mi problema.

Hace unas semanas adquirí unos 10 módulos (Matrix7219 8x8)  - modelo : M0062 - .
Mi pretensión es utilizarlos para hacer un proyecto de cartel luminoso el cual muestra diferentes mensajes enviados por el monitor serial en principio, y mas tarde (una vez arreglado lo diferentes o posibles errores), a través de un programa que recolecta cierta información de la red para mostrar en dichos módulos.

La conexión entre ellos es la siguiente:

- Todas las (VCC, GND, CS y CLK) de cada módulo van unidas entre si.
- De (DIN a OUT-DIN) en cascada.
Le he incorporado alimentación separada para posibles problemas de caída de tensión.

Para la programación de arduino utilizo la librería ( MaxMatrix.h ), el código del programa es una modificación ajustada de un ejemplo genérico de dicha librería.


- Adjunto al mensaje el archivo .ino . (no puedo publicarlo directamente, excede 9000 caracteres)

Mi problema es que, una vez conectado de 4 a 6 de los módulos, al cabo de un tiempo alguno de ellos dejan de funcionar, quedándose apagados.
Con 4  o menos, este error no ocurre.

He leído diferentes informaciones y tomado configuraciones varias para resolver este enigma, una de ellas, tener bien alimentado cada modulo, o reseteando el programa  en los siguientes envío de información mediante una clave programada dentro del código. También he intentando utilizar otras librerías distintas sin conseguir hacerlas funcionar correctamente.

Llevo varias semanas dándole vueltas al asunto, pero no he conseguido solucionar el problema.

También adjunto una imagen exacta de módulo y sus componentes.



Un Saldo.




xochiel

Code: [Select]


#include <MaxMatrix.h>
#include <avr/pgmspace.h>

PROGMEM const byte CH[] {
  3, 8, B00000000, B00000000, B00000000, B00000000, B00000000, // space
  1, 8, B01011111, B00000000, B00000000, B00000000, B00000000, // !
  3, 8, B00000011, B00000000, B00000011, B00000000, B00000000, // "
  5, 8, B00010100, B00111110, B00010100, B00111110, B00010100, // #
  4, 8, B00100100, B01101010, B00101011, B00010010, B00000000, // $
  5, 8, B01100011, B00010011, B00001000, B01100100, B01100011, // %
  5, 8, B00110110, B01001001, B01010110, B00100000, B01010000, // &
  1, 8, B00000011, B00000000, B00000000, B00000000, B00000000, // '
  3, 8, B00011100, B00100010, B01000001, B00000000, B00000000, // (
  3, 8, B01000001, B00100010, B00011100, B00000000, B00000000, // )
  5, 8, B00101000, B00011000, B00001110, B00011000, B00101000, // *
  5, 8, B00001000, B00001000, B00111110, B00001000, B00001000, // +
  2, 8, B10110000, B01110000, B00000000, B00000000, B00000000, // ,
  4, 8, B00001000, B00001000, B00001000, B00001000, B00000000, // -
  2, 8, B01100000, B01100000, B00000000, B00000000, B00000000, // .
  4, 8, B01100000, B00011000, B00000110, B00000001, B00000000, // /
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // 0
  3, 8, B01000010, B01111111, B01000000, B00000000, B00000000, // 1
  4, 8, B01100010, B01010001, B01001001, B01000110, B00000000, // 2
  4, 8, B00100010, B01000001, B01001001, B00110110, B00000000, // 3
  4, 8, B00011000, B00010100, B00010010, B01111111, B00000000, // 4
  4, 8, B00100111, B01000101, B01000101, B00111001, B00000000, // 5
  4, 8, B00111110, B01001001, B01001001, B00110000, B00000000, // 6
  4, 8, B01100001, B00010001, B00001001, B00000111, B00000000, // 7
  4, 8, B00110110, B01001001, B01001001, B00110110, B00000000, // 8
  4, 8, B00000110, B01001001, B01001001, B00111110, B00000000, // 9
  2, 8, B01010000, B00000000, B00000000, B00000000, B00000000, // :
  2, 8, B10000000, B01010000, B00000000, B00000000, B00000000, // ;
  3, 8, B00010000, B00101000, B01000100, B00000000, B00000000, // <
  3, 8, B00010100, B00010100, B00010100, B00000000, B00000000, // =
  3, 8, B01000100, B00101000, B00010000, B00000000, B00000000, // >
  4, 8, B00000010, B01011001, B00001001, B00000110, B00000000, // ?
  5, 8, B00111110, B01001001, B01010101, B01011101, B00001110, // @
  4, 8, B01111110, B00010001, B00010001, B01111110, B00000000, // A
  4, 8, B01111111, B01001001, B01001001, B00110110, B00000000, // B
  4, 8, B00111110, B01000001, B01000001, B00100010, B00000000, // C
  4, 8, B01111111, B01000001, B01000001, B00111110, B00000000, // D
  4, 8, B01111111, B01001001, B01001001, B01000001, B00000000, // E
  4, 8, B01111111, B00001001, B00001001, B00000001, B00000000, // F
  4, 8, B00111110, B01000001, B01001001, B01111010, B00000000, // G
  4, 8, B01111111, B00001000, B00001000, B01111111, B00000000, // H
  3, 8, B01000001, B01111111, B01000001, B00000000, B00000000, // I
  4, 8, B00110000, B01000000, B01000001, B00111111, B00000000, // J
  4, 8, B01111111, B00001000, B00010100, B01100011, B00000000, // K
  4, 8, B01111111, B01000000, B01000000, B01000000, B00000000, // L
  5, 8, B01111111, B00000010, B00001100, B00000010, B01111111, // M
  5, 8, B01111111, B00000100, B00001000, B00010000, B01111111, // N
  4, 8, B00111110, B01000001, B01000001, B00111110, B00000000, // O
  4, 8, B01111111, B00001001, B00001001, B00000110, B00000000, // P
  4, 8, B00111110, B01000001, B01000001, B10111110, B00000000, // Q
  4, 8, B01111111, B00001001, B00001001, B01110110, B00000000, // R
  4, 8, B01000110, B01001001, B01001001, B00110010, B00000000, // S
  5, 8, B00000001, B00000001, B01111111, B00000001, B00000001, // T
  4, 8, B00111111, B01000000, B01000000, B00111111, B00000000, // U
  5, 8, B00001111, B00110000, B01000000, B00110000, B00001111, // V
  5, 8, B00111111, B01000000, B00111000, B01000000, B00111111, // W
  5, 8, B01100011, B00010100, B00001000, B00010100, B01100011, // X
  5, 8, B00000111, B00001000, B01110000, B00001000, B00000111, // Y
  4, 8, B01100001, B01010001, B01001001, B01000111, B00000000, // Z
  2, 8, B01111111, B01000001, B00000000, B00000000, B00000000, // [
  4, 8, B00000001, B00000110, B00011000, B01100000, B00000000, // \ backslash
  2, 8, B01000001, B01111111, B00000000, B00000000, B00000000, // ]
  3, 8, B00000010, B00000001, B00000010, B00000000, B00000000, // hat
  4, 8, B01000000, B01000000, B01000000, B01000000, B00000000, // _
  2, 8, B00000001, B00000010, B00000000, B00000000, B00000000, // `
  4, 8, B00100000, B01010100, B01010100, B01111000, B00000000, // a
  4, 8, B01111111, B01000100, B01000100, B00111000, B00000000, // b
  4, 8, B00111000, B01000100, B01000100, B00101000, B00000000, // c
  4, 8, B00111000, B01000100, B01000100, B01111111, B00000000, // d
  4, 8, B00111000, B01010100, B01010100, B00011000, B00000000, // e
  3, 8, B00000100, B01111110, B00000101, B00000000, B00000000, // f
  4, 8, B10011000, B10100100, B10100100, B01111000, B00000000, // g
  4, 8, B01111111, B00000100, B00000100, B01111000, B00000000, // h
  3, 8, B01000100, B01111101, B01000000, B00000000, B00000000, // i
  4, 8, B01000000, B10000000, B10000100, B01111101, B00000000, // j
  4, 8, B01111111, B00010000, B00101000, B01000100, B00000000, // k
  3, 8, B01000001, B01111111, B01000000, B00000000, B00000000, // l
  5, 8, B01111100, B00000100, B01111100, B00000100, B01111000, // m
  4, 8, B01111100, B00000100, B00000100, B01111000, B00000000, // n
  4, 8, B00111000, B01000100, B01000100, B00111000, B00000000, // o
  4, 8, B11111100, B00100100, B00100100, B00011000, B00000000, // p
  4, 8, B00011000, B00100100, B00100100, B11111100, B00000000, // q
  4, 8, B01111100, B00001000, B00000100, B00000100, B00000000, // r
  4, 8, B01001000, B01010100, B01010100, B00100100, B00000000, // s
  3, 8, B00000100, B00111111, B01000100, B00000000, B00000000, // t
  4, 8, B00111100, B01000000, B01000000, B01111100, B00000000, // u
  5, 8, B00011100, B00100000, B01000000, B00100000, B00011100, // v
  5, 8, B00111100, B01000000, B00111100, B01000000, B00111100, // w
  5, 8, B01000100, B00101000, B00010000, B00101000, B01000100, // x
  4, 8, B10011100, B10100000, B10100000, B01111100, B00000000, // y
  3, 8, B01100100, B01010100, B01001100, B00000000, B00000000, // z
  3, 8, B00001000, B00110110, B01000001, B00000000, B00000000, // {
  1, 8, B01111111, B00000000, B00000000, B00000000, B00000000, // |
  3, 8, B01000001, B00110110, B00001000, B00000000, B00000000, // }
  4, 8, B00001000, B00000100, B00001000, B00000100, B00000000, // ~
};


int data = 11;    // DIN pin of MAX7219 displays
int load = 10;    // CS pin of MAX7219 displays
int clock = 13;  // CLK pin of MAX7219 displays
int scrollSpeed = 95; // speed of scrolling text, lower is faster
int maxInUse = 8;

MaxMatrix m(data, load, clock, maxInUse);

byte buffer[64];

void setup(){
  m.init();
  m.setIntensity(5);
  Serial.begin(9600);
}

String cadena = "";
boolean Bandera = false;
boolean Salida;


void loop(){
 
  while (Serial.available())
    {
      char c = Serial.read();
     
      if (c!='\0')
        { cadena+=c; }
      else
       
        {
          if (c == '\0')
            { Bandera = true; }
        }
       
    }
 
  int restart = cadena.indexOf("~");
  if ( restart>=0 )
      {
        delay(1000);
        Serial.print("#restart");
        delay(1000);
        software_Reset();
       
      }
 
  int pos = cadena.indexOf("#"); 
  if( pos>=0 )
  {
 
        char pantalla[cadena.length()];
        cadena.toCharArray(pantalla, cadena.length());
        Serial.print (pantalla);
         
        byte c;
        //delay(100);
        m.shiftLeft(false, true);
        printStringWithShift(pantalla, scrollSpeed);
        clearLCD(maxInUse, scrollSpeed);
        cadena = " ";
        memset(pantalla,0,sizeof(pantalla));
        memset(buffer,0,sizeof(buffer));
        Serial.print("#end");
  }
 
 
  Bandera = 0;
 

}



void printCharWithShift(char c, int shift_speed){

  if (c < 32) return;
  c -= 32;
  memcpy_P(buffer, CH + 7*c, 7);
  m.writeSprite(maxInUse*8, 0, buffer);
  m.setColumn(maxInUse*8 + buffer[0], 0);

  for (int i=0; i<buffer[0]+1; i++)
  {
    delay(shift_speed);
    m.shiftLeft(false, false);
  }
}

void printStringWithShift(char* s, int shift_speed){

  while (*s != 0){
    printCharWithShift(*s, shift_speed);
    s++;
  }
}

void clearLCD(int maxInUse, int shift_speed){

  for (int i=0; i<maxInUse*8; i++)
  {
    m.setColumn((maxInUse*8), 0);
    delay(shift_speed);
    m.shiftLeft(false, false);
  }
}

void software_Reset()
{
asm volatile ("  jmp 0"); 
}


xochiel

Después de  darle vueltas al asunto, el código que utilizo funciona correctamente.
Todo me indica que debe de ser problemas de corriente.
Esta alimentado con una fuente de 5v (5amp), con condensadores de 15v (470up) en la entrada de cada modulo por si hay caida de tensión.

¿Alguna idea?

surbyte

Muy pocos tienen tus módulos como para responderte.
Además funciona con 4 y cuando pasas a 6 falla aleatoriamente. Mas dificil todavía encontrar el problema.
Agrega a tu programa secucencias que te digan por donde esta, intentando localizar donde falla.
Cuando encuentres donde falla, entonces se mas detallista.. dentro de dicha rutina y busca cada vez mas profundo.



xochiel

¿Como podría implementar esas secuencias,  o ver en que momento exacto deja de funcionar los módulos haciendo una depuración del programa?

¿Puede ser por falta de memoria en algún momento?

Le he dado muchas vueltas al asunto. Pero  no hay manera de encontrar una solución  satisfactoria.

surbyte

Puede ser falta de memoria según el Arduino que uses pero de serlo al compilarlo tendrias una advertencia. No creo que sea el caso.
Ese problema ya lo he visto en otro forero. No lo resolvimos. Hace falta colaboración que no tuve de su parte.

Yo pondria simples impresiones por puerto serie que te vayan ubicando donde se cuelga. Cosas que te digan estoy en tal parte..
Tal vez el código siempre este refrezcando y eso complica mas encontrar la falla.

Con eso quiero decir que justamente los paneles de matrices son muy repetitivos y casi no hacen nada salvo refrezcar los leds.. asi que pasas a una falla de librería? Claro que es posible.

Pero tambien deberias investigar con la librería que usas si alguien ha experimentado el problema.
Asi que comienza por ahi.
Identifca con un enlace la librería que usas para seguirte. Ya tenemos tu código y con la librería exacta que tu usas tendremos lo mismo.

Y veremos que podemos implementar?


EDITO:
Viendo tu código me encuentro con esto 
Code: [Select]
cadena = " ";
que solo actúa si se cumple esto
Code: [Select]
int pos = cadena.indexOf("#"); 
  if (pos >= 0 ) {


si no se cumple cadena sigue creciendo y creciendo y BOOMMM o no?
Verifica por favor!!

Go Up