Bolg -Arduino – Controlul unei matrice led ( 64 leduri )

Arduino – Controlul unei matrice led ( 64 leduri )

Postat de pe data de 13 aprilie 2021 in categoria Arduino

image_pdfimage_print

Matrice de leduri = un ecran format din leduri aranjate pe rânduri a câte 8 leduri fiecare rând. În figura de mai jos aveți schema electronică a acestei matrice :

sau

Conform figurii, acest ecran are forma unei matrice formată din 8 linii și 8 coloane. Se observă că numărul de fire ce trebuie conectate la uC este de 16 ceea ce este foarte mult de aceea vom utiliza un circuit integrat driver MAX7219. Acest circuit utilizează o intefață SPI pentru a comunica cu uC sau placa arduino, în cazul nostru.

SPI = Serial Peripheral Interface = un protocol serial sincron ce este folosit pentru comunicare pe distanțe mici și utilizează doar 4 pini ( 4 fire ). Denumirea de Sincron înseamnă că datele sunt trimise și recepționate la un anumit timp iar Serial = datele sunt trimise bit cu bit sau bit după bit.

Comunicația SPI este de tip master-slave adică dispozitivul master este cel ce controlează datele ( schimbă datele ) iar celălalt dispozitiv este slave. În cazul nostru, placa Arduino este master iar dispozitivul conectat la placa Arduino ( matricea de leduri cu circuit driver ) este slave.

Dispozitivele slave conectate la Arduino folosesc următorii pini :

  • M.I.S.O ( Master In Slave Out ) = prin acest pin dispozitivul slave trimite date către master.
  • M.O.S.I ( Master Out Slave In ) = prin acest pin dispozitivul master trimite date către slave.
  • S.C.K sau S.C.L.K ( Serial Clock ) = linia care trimite impulsurile de sincronizare a transmisiei de date, generate de master.

Fiecare dispozitiv Slave mai are un pin SS ( Slave Select ) prin care dispozitivul Master ( Arduino ) selectează dispozitivul Slave cu care vrea să comunice.

Când pinul SS este în 0 logic ( LOW ) dispozitivul Slave poate comunica cu dispozitivul Master, dacă pinul SS este 1 logic ( HIGH ) dispozitivul Slave nu comunică cu dispozitivul Master.

În cazul în care avem mai multe dispozitive SPI și vrem să utilizăm același canal SPI trebuie ca la un moment dat in pin SS de la un dispozitiv Slave ( și numai unul ) să fie în starea 0 logic (LOW ), acesta fiind pinul asociat dispozitivului cu care vrem să comunicăm, iar ceilalți pini SS de la celelalte dispozitive Slave să fie în 1 logic ( HIGH ).

Matricea noastră de leduri cu care vom lucra este următoarea :

Specificații tehnice :

  • Tensiune = 3,3V – 5V DC
  • Culoare led = roșu
  • Control luminozitate = digital și analogic
  • Dimensiuni= 32x50x15mm
  • Interfață comunicare = SPI 10MHz
  • Tip = catod comun.

Matricea noastră are 5 pini de intrare și 5 pini de ieșire, vezi figura următoare :

Circuitul integrat MAX7219 utilizează interfața SPI pentru comunicare, unde :

  • pinul DIN = SPI MOSI = Master Out Slave In
  • pinul CS = SPI SS = Slave Select
  • pinul CLK = SPI Clock = semnalul de ceas

OBS!!!! Putem înseria mai multe module de acest tip ( 8×8 Matrice leduri ) iar conexiunea se face în felul următor: pinii de ieșire de la un modul se conectează la pinii de intrare al celuilalt modul.

OBS!!! Citiți foaia de catalog al circuitului MAX7219 pentru a vă da seama cum se conectează matricea de leduri cu acest integrat și următoarea figură :

Schema pe care o vom utiliza noi :

Pentru a afișa figuri va trebui să folosiți un generator de cod binar sau hex . Găsiți la o simplă căutare pe google.

După cu se observă, am folosit o alimentare separată pentru modulul matrice. Atenție sa conectați masa sursei și la plăcuța Arduino.

Cod sursă :

unsigned char i;
unsigned char j; 

int Max7219_pinCLK = 13;
int Max7219_pinCS = 10;
int Max7219_pinDIN = 11;

unsigned char disp1[19][8]={
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Șablon imagine
  0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x40, 0x40, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 
  0x00, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 
  0x40, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 
  0x60, 0x80, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 
  0x60, 0x90, 0x80, 0x40, 0x40, 0x00, 0x00, 0x00, 
  0x60, 0x90, 0x88, 0x40, 0x40, 0x00, 0x00, 0x00, 
  0x60, 0x90, 0x88, 0x44, 0x40, 0x00, 0x00, 0x00, 
  0x60, 0x90, 0x88, 0x44, 0x44, 0x00, 0x00, 0x00, 
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x00, 0x00, 
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x00, 
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x20, 
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x10, 0x60, 
  0x60, 0x90, 0x88, 0x44, 0x44, 0x08, 0x90, 0x60, 
  0x60, 0x90, 0x88, 0x44, 0x44, 0x88, 0x90, 0x60, // Șablon imagine

};

void Write_Max7219_byte(unsigned char DATA) 
{   
  // studiați foaia de catalog MAX7219 ( Figure 1. Timing Diagram) 
  unsigned char i;
  digitalWrite(Max7219_pinCS,LOW);  
  for(i=8;i>=1;i--)
  {    
    digitalWrite(Max7219_pinCLK,LOW);
    digitalWrite(Max7219_pinDIN,DATA&0x80);
    DATA = DATA<<1;
    digitalWrite(Max7219_pinCLK,HIGH);
  }                                 
}

void Write_Max7219(unsigned char address,unsigned char dat)
{

 digitalWrite(Max7219_pinCS,LOW);
  Write_Max7219_byte(address);          
  Write_Max7219_byte(dat);               
  digitalWrite(Max7219_pinCS,HIGH);
}

void Init_MAX7219(void) // studiați foaia de catalog MAX7219 ( secțiunea Register Address Map)
{
  Write_Max7219(0x09, 0x00); //mod de decodare     
  Write_Max7219(0x0a, 0x03); // intensitate luminoasă     
  Write_Max7219(0x0b, 0x07); // scan      
  Write_Max7219(0x0c, 0x01); //shutdown     
  Write_Max7219(0x0f, 0x00); // display test     
}

void setup()
{

  pinMode(Max7219_pinCLK,OUTPUT);
  pinMode(Max7219_pinCS,OUTPUT);
  pinMode(Max7219_pinDIN,OUTPUT);
  delay(50);
  Init_MAX7219();
}

void loop()
{ 
  for(j=0;j<19;j++)
  {
    for(i=1;i<9;i++)
      Write_Max7219(i,disp1[j][i-1]);
    delay(500);
  }   
}

Un răspuns la “Arduino – Controlul unei matrice led ( 64 leduri )”

  1. mirceacluj spune:

    imi place lucrarea Ma apuc de lucru .Bun ar fi si un video daca le-ai realizat practic

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.



Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert