Cuprins:

Cum să interfațați o matrice cu LED-uri conduse MAX7219 8x8 cu microcontrolerul ATtiny85: 7 pași
Cum să interfațați o matrice cu LED-uri conduse MAX7219 8x8 cu microcontrolerul ATtiny85: 7 pași

Video: Cum să interfațați o matrice cu LED-uri conduse MAX7219 8x8 cu microcontrolerul ATtiny85: 7 pași

Video: Cum să interfațați o matrice cu LED-uri conduse MAX7219 8x8 cu microcontrolerul ATtiny85: 7 pași
Video: Memory Bear || Patchwork Bear || FREE PATTERN! || Full step by step Tutorial with Lisa Pay 2024, Iulie
Anonim
Cum să interfațați o matrice cu LED-uri conduse MAX7219 8x8 cu microcontroler ATtiny85
Cum să interfațați o matrice cu LED-uri conduse MAX7219 8x8 cu microcontroler ATtiny85

Controlerul MAX7219 este fabricat de Maxim Integrated, este un driver de afișaj cu catod comun de intrare / ieșire serial, care ar putea interfața microcontrolerele cu 64 de LED-uri individuale, afișaje numerice cu 7 segmente cu până la 8 cifre, afișaje cu grafice cu bare etc. -chip sunt un decodor BCD cod-B, circuite de scanare multiplex, drivere de segmente și cifre și un RAM static de 8 × 8 care stochează fiecare cifră.

Modulele MAX7219 sunt foarte convenabile de utilizat cu microcontrolere precum ATtiny85 sau, în cazul nostru, cu placa Tinusaur.

Pasul 1: Hardware-ul

Hardware-ul
Hardware-ul
Hardware-ul
Hardware-ul

Modulele MAX7219 arată de obicei așa. Au o magistrală de intrare pe o parte și magistrală de ieșire pe de altă parte. Acest lucru vă permite să lanțați 2 sau mai multe module, adică unul după altul, pentru a crea configurări mai complicate.

Modulele pe care le folosim sunt capabile să se conecteze într-un lanț folosind 5 jumperi mici. Vezi poza de mai jos.

Pasul 2: Afișare și semnale

Modulul MAX7219 are 5 pini:

  • VCC - putere (+)
  • GND - sol (-)
  • DIN - Introducere date
  • CS - Selectarea cipului
  • CLK - Ceas

Asta înseamnă că avem nevoie de 3 pini pe partea microcontrolerului ATtiny85 pentru a controla modulul. Acestea vor fi:

  • PB0 - conectat la CLK
  • PB1 - conectat la CS
  • PB2 - conectat la DIN

Acest lucru este suficient pentru conectarea la modulul MAX7219 și programarea acestuia.

Pasul 3: Protocolul

Protocolul
Protocolul

Comunicarea cu MAX7219 este relativ ușoară - folosește un protocol sincron ceea ce înseamnă că pentru fiecare bit de date pe care îl trimitem există un ciclu de ceas care semnifică prezența acelui bit de date.

Cu alte cuvinte, trimitem 2 secvențe paralele către biți - unul pentru ceas și altul pentru date. Asta face software-ul.

Pasul 4: Software-ul

Software-ul
Software-ul

Modul în care funcționează acest modul MAX7219 este următorul:

  • Scriem octeți în registrul său intern.
  • MAX7219 interpretează datele.
  • MAX7219 controlează LED-urile din matrice.

Asta înseamnă, de asemenea, că nu trebuie să circulăm tot timpul prin gama de LED-uri pentru a le aprinde - controlerul MAX7219 se ocupă de asta. De asemenea, ar putea gestiona intensitatea LED-urilor.

Deci, pentru a utiliza modulele MAX7219 într-un mod convenabil, avem nevoie de o bibliotecă de funcții pentru a îndeplini acest scop.

În primul rând, avem nevoie de câteva funcții de bază pentru a scrie în registrele MAX7219.

  • Scrierea unui octet pe MAX7219.
  • Scrierea unui cuvânt (2 octeți) pe MAX7219.

Funcția care scrie un octet la controler arată astfel:

void max7219_byte (uint8_t data) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Setați CLK la LOW dacă (date & 0x80) // Mascați MSB-ul datelor PORTB | = (1 << MAX7219_DIN); // Setați DIN la HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Setați DIN la LOW PORTB | = (1 << MAX7219_CLK); // Setați CLK la datele HIGH << = 1; // Shift la stânga}}

Acum că putem trimite octeți către MAX7219 putem începe să trimitem comenzi. Acest lucru se face prin trimiterea a 2 byes - primul pentru adresa registrului intern și al doilea pentru datele pe care am dori să le trimitem.

Există mai mult de o duzină de registre în controlerul MAX7219.

Trimiterea unei comenzi sau a unui cuvânt înseamnă, practic, trimiterea a 2 octeți consecutivi. Funcția de implementare care este foarte simplă.

nul max7219_word (adresa uint8_t, date uint8_t) {PORTB & = ~ (1 << MAX7219_CS); // Setați CS la LOW max7219_byte (adresa); // Trimiterea adresei max7219_byte (date); // Trimiterea datelor PORTB | = (1 << MAX7219_CS); // Setați CS la HIGH PORTB & = ~ (1 << MAX7219_CLK); // Setați CLK la LOW}

Este important de notat aici linia în care readucem semnalul CS la HIGH - aceasta marchează sfârșitul secvenței - în acest caz, sfârșitul comenzii. O tehnică similară este utilizată atunci când se controlează mai mult de o matrice conectată într-un lanț. Pasul următor, înainte de a începe aprinderea și oprirea LED-urilor, este inițializarea controlerului MAX7219. Acest lucru se face scriind anumite valori în anumite registre. Pentru comoditate, în timp ce o codăm, am putea pune secvența de inițializare într-o matrice.

uint8_t initseq = {0x09, 0x00, // Decode-Mode Register, 00 = Fără decodare 0x0a, 0x01, // Intensity Register, 0x00.. 0x0f 0x0b, 0x07, // Scan-Limit Register, 0x07 pentru a afișa toate liniile 0x0c, 0x01, // Registre de închidere, 0x01 = Funcționare normală 0x0f, 0x00, // Afișare-registru de testare, 0x00 = Funcționare normală};

Trebuie doar să trimitem cele 5 comenzi de mai sus într-o secvență ca perechi de adrese / date. Pasul următor - aprinderea unui rând de LED-uri.

Acest lucru este foarte simplu - scriem doar o comandă în care primul octet este adresa (de la 0 la 7), iar al doilea octet reprezintă cei 8 biți care reprezintă cei 8 LED-uri din rând.

void max7219_row (uint8_t address, uint8_t data) {if (address> = 1 && address <= 8) max7219_word (adresa, date); }

Este important să rețineți că acest lucru va funcționa numai pentru o matrice. Dacă conectăm mai multe matrice într-un lanț, toate vor arăta aceleași date. Motivul pentru aceasta este că, după trimiterea comenzii, readucem semnalul CS înapoi la HIGH, ceea ce face ca toate controlerele MAX7219 din lanț să se blocheze și să afișeze orice a fost ultima comandă.

Recomandat: