Haideţi să discutăm în continuare despre matricea de leduri 8×8, modul de formare a imaginilor pe această matrice şi posibilităţile de conectare la placa de dezvoltare Arduino. Acest tutorial se va axa pe metoda directă de legare a matricei 8×8, iar ulterior, în partea a 3-a a tutorialuluil o să interfaţăm matricea cu ajutorul regiştrilor de deplasare.

Matricea 8×8

Atunci când vorbim despre o matrice de leduri 8×8 ne referim la numărul de rânduri X coloane pe care aceasta le deţine. Astfel o matrice led 8×8 va avea 8 rânduri cu câte 8 leduri sau 8 coloane cu câte 8 leduri. În total o matrice 8×8 are 64 de leduri. Putem spune că pe o matrice de leduri de 8×8 există 64 de pixeli, fiecare pixel formându-se la intersecţia unui rând cu o coloană. Pentru a ştii cum putem aprinde sau stinge unul din cei 64 de pixeli este foarte important să urmărim specificaţiile producătorului (schema electrica). Diagrama electrica pentru matricea inclusa în kitul ROROID o găseşti în imaginea de mai jos.

matrix_disp

Formarea unei imagini pe matricea de leduri

În limita celor 64 de pixeli pe care îi avem la dispoziție putem afişa diverse simboluri grafice, mesaje text, imagini etc. Modalitatea de afişare a acestor elemente este exemplificată în animaţia de mai jos (litera W pe o matrice 7×5).

Dot_matrix
Algoritmul de formare a imaginii, pe o matrice cu catod comun, ar fi următorul:

1.Punem rândul 1 la plus şi coloanele 2…4 la plus
2.Deconectam rândul 1 de la plus şi coloanele 2…4 de la plus
3.Punem rândul 2 la plus şi coloanele 2…4 la plus
4.Deconectam rândul 2 de la plus şi coloanele 2…4 de la plus
……………………………………………………………………………………………….

Realizând aceste operaţii foarte repede (depășind bariera de 30 frame-uri (operaţii) pe secunda) micul nostru ecran va afişa litera W. După cum se observă şi în animaţia de mai sus, datorita faptului ca ledurile se sting şi se aprind foarte repede, intensitatea acestora scade în momentul afişării simbolului.

Interfaţarea matricei cu placa de dezvoltare Arduino

Am stabilit ca o să discutăm despre două tipuri de interfaţare a matricei cu placa de dezvoltare Arduino. Legarea directă, discutată în această parte a tutorialului, şi interfaţarea cu ajutorul regiştrilor de deplasare pe care o vom discuta în cadrul parţii a 3-a a acestui tutorial.

Pentru legarea directă a matricei de leduri avem nevoie de următoarele componente:

-Placa de dezvoltare Arduino Uno
-Breadboard
-matricee 8×8
-16 rezistenţe de 220Ω.
-fire pentru conexiuni
Conectarea se face conform cu imaginea de mai jos.

matrix1_bb.s

Şi acum programul

O să realizăm 2 programe. Primul te va ajuta să înţelegi mai bine modul de formare a imaginilor, iar în al doilea o să realizam o mica animaţie.

Te invit să te uiţi puţin peste tutorialul de la Kit LCD (http://roroid.ro/#wiki/pmwiki.php/Main/KitLCDUtilizare) pentru a vedea modul în care realizăm o imagine în sistemul binar. Diferenţa este că de data aceasta vom lua o foaie de hârtie cu 8×8 pătrăţele şi desenăm imaginea de mai jos.

g3054
Cum spuneam, pătrăţelul plin în binar înseamna 1 iar cel gol înseamna 0. Astfel imaginea noastră transpusă în secvenţa de cod va arata aşa:

 

Tot în tutorialul Kit LCD (http://roroid.ro/#wiki/pmwiki.php/Main/KitLCDUtilizare) ai învăţat cum să instalezi o nouă librărie în interfaţa de dezvoltare Arduino. Pentru funcţionarea următoarelor aplicaţii este necesar să instalezi librăria Timer (http://code.google.com/p/arduino-timerone/downloads/list)

Aplicaţia listata în continuare funcţionează în felul următor: apăsând tasta „0” creştem viteza cu care ledurile sunt stinse şi aprinse. În momentul când depăşim 30 de aprinderi/stingeri pe secunda PACKMAN va fi afişat pe matrice.

 

În continuare modificăm puţin programul anterior astfel încât să-l facem pe PACKMAN să se deplaseze. Sursa o găseşti mai jos.

Un alt exemplu software îl gaseşti mai jos. Aici am realizat o mică animaţie cu ledurile din matrice.

 

Aşa cum te_ai obişnuit, în continuare am pus câteva poze cu rezultatul aplicaţiilor.

2012-03-15_23-25-08_321

2012-03-15_23-23-34_162
Spor la treaba!

Matrice 8×8
Etichetat pe:            

10 gânduri despre „Matrice 8×8

  • 05/01/2014 la 10:46
    Legătură permanentă

    daca am schimbat matricea in 6×6 si pini si restul programului de la 8-6 … de ce nu merge ? sta aprins doar o linie

    Răspunde
  • 05/01/2014 la 10:47
    Legătură permanentă

    Codul cu imaginea lui packman nu functioneaza. imi da eroare la compilare. Face highlight pe : int packman[8][8] { \ si ca eroare imi scrie : function definition does not declare parameters . Ce e de facut ? Multumesc

    Răspunde
  • 03/03/2015 la 12:11
    Legătură permanentă

    Poti sa-mi explici putin programul?

    Nu inteleg ce fac aceste 2 linii.
    Timer1.initialize(1000000);
    Timer1.attachInterrupt(plot);

    Nu inteleg cum functioneaza functia plot.
    digitalWrite(rind[x], LOW); //de ce trebuie sa stingem fiecare rand?

    if (packman[x][y] == 1) {
    digitalWrite(coloana[y], LOW);
    }
    //Daca packman va fi egal cu 1, nu trebuie sa se aprinda ledul?

    Vad ca intrebarile mele sunt mai mult despre C si nu despre arduino.

    Răspunde
    • 03/03/2015 la 12:18
      Legătură permanentă

      Primele doua linii atasaja funcția plot la o întrerupere a micro controlerului. La fiecare secunda lansează funcția respectiva.

      Pe scurt e ca la televizor. Daca mărești delay la funcția plot ai sa vezi cum e generata imaginea(pixel cu pixel)

      Răspunde
      • 03/03/2015 la 12:40
        Legătură permanentă

        Imi poti explica functia plot? Ai uitat cateva randuri din postul meu.

        Packman nu se putea afisa fara animatie la exemplul 1? Sau vroiai sa ne inveti cum functioneaza animatiile pe baza de leduri?. Nu se putea face ceva de genul?

        void loop(){
        for(int i=0;i<16;i++){
        for(int j=0;j<16;j++)
        if(packman[i][j]==1){
        digitalWrite(pin[i][j], HIGH);
        }
        }
        delay(1)
        }

        Răspunde
  • 03/03/2015 la 15:33
    Legătură permanentă

    Mi-am dat seama ce greseam. Am fost fraier ca n-am citit mai bine tutorialul.
    Credeam ca folosesti acelasi principiu ca la led-rile conectate la masa. Toate tutorialele de pe site-ul arduino erau cu ledurile legate la masa fizica a placutei si nu stiam, ca poti sa-ti faci dintr-un pin o masa.

    Nu intelegeam de ce linia digitalWrite(rind[x], HIGH); nu ar trebui sa aprinda toate ledurile de pe randul x. Explicatia era ca se aprind toate ledurile care sunt legate la masa(LOW).

    Merci pentru ajutor.

    Răspunde

Lasă un răspuns

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

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