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 :
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 :
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 :
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 :
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);
}
}
imi place lucrarea Ma apuc de lucru .Bun ar fi si un video daca le-ai realizat practic