sábado, 11 de outubro de 2014

Simulação no Proteus - Arduino controlando Modulo Matriz Leds 8x8 e CI Max7219

Exemplo prático de como simular um Painel de Leds usando 3 Módulos de Matriz 8x8 e 3 CIs Max7219. Neste exemplo utilizei a biblioteca MD_MAX72xx feita para o CI Max7229. A simulação foi realizada no Proteus 7.10 - SP0.

Módulo Matriz 8x8 - CI MAX7219
Podemos ligar 8 CI's em série, ou seja, podemos utilizar o Arduino para controlar até 8 Matriz de 64 Leds



Diagrama com as ligações interna s de uma Matrix 8x8



Diagrama da simulação usando apenas 3 portas do Arduino.
 

Porta 10 do Arduino ligada ao pino LOAD
Porta 11 do Arduino ligada ao pino DIN
Porta 13 do Arduino ligada ao pino CLK


Demonstração






Sketch

/*
  Painel de leds com modulo de Matriz Max7219 

  Zedequias Fonseca
  http://vfeletronica.blogspot.com.br/
               10/10/2014
*/

// Carrega a biblioteca MD_MAX72xx 
#include <MD_MAX72xx.h> 
 
// Numero de modulos suportados de 1 a 8 Devices
#define     MAX_DEVICES   3 // Usaremos 3 Modulos
 
// Portas do Arduino
#define     CLK_PIN       13 
#define     DATA_PIN     11 
#define     CS_PIN          10 

// Cria matriz ( mx )
MD_MAX72XX mx = MD_MAX72XX(DATA_PIN,  CLK_PIN,  CS_PIN,  MAX_DEVICES); 
 
#define SCROLL_DELAY     200 // Velocidade do scroll 


#define CHAR_SPACING     1  // Colunas entre cada caracter 
#define BUF_SIZE     75

char curMessage[BUF_SIZE]; 
char newMessage[BUF_SIZE]; 
 

uint8_t scrollDataSource(uint8_t dev,  MD_MAX72XX::transformType_t t) 

   static char        *p      = curMessage; 
   static uint8_t     state = 0; 
   static uint8_t     curLen, showLen; 
   static uint8_t     cBuf[8]; 
   uint8_t colData; 
 
  switch(state) 
  { 
     case 0: 
     showLen = mx.getChar(*p++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf); 
     curLen = 0; 
     state++; 
   
     if (*p == '\0') 
     { 
        p = curMessage; 
     }

    case 1:      
    colData = cBuf[curLen++]; 
   
    if (curLen == showLen) 
    { 
       showLen = CHAR_SPACING; 
       curLen = 0; 
       state = 2; 
    }  
   
    break; 
    case 2: 
    colData = 0; 
    curLen++; 

    if (curLen == showLen) 
      state = 0; 
   
    break; 
    default: 
    state = 0; 
  } 
  return(colData); 

 
void scrollText(void) 

  static uint32_t     prevTime = 0; 
  if (millis()-prevTime >= SCROLL_DELAY) 
  { 
    mx.transform(MD_MAX72XX::TSR);      
    prevTime = millis(); 
  } 

 
void setup() 

   mx.begin();                                                         // inicia a matriz
   mx.setShiftDataInCallback(scrollDataSource); 
   mx.control(MD_MAX72XX::INTENSITY, 4); // Define o nivel de luminosidade 

   // Mensagem a ser exibida  
   strcpy(curMessage, "Zedequias Fonseca - 1 2 3 4 5 6 7 8 9 0 - A B C D E F .    ");
   newMessage[0] = '\0'; 

  
void loop()  

   scrollText();