Kako spojiti LED matricu 8x8 sa MAX7219 pogonom sa mikrokontrolerom ATtiny85: 7 koraka
Kako spojiti LED matricu 8x8 sa MAX7219 pogonom sa mikrokontrolerom ATtiny85: 7 koraka
Anonim
Kako spojiti MAX7219 LED matricu 8x8 sa ATtiny85 mikrokontrolerom
Kako spojiti MAX7219 LED matricu 8x8 sa ATtiny85 mikrokontrolerom

Kontroler MAX7219 proizvodi Maxim Integrated, kompaktan je serijski ulazno/izlazni upravljački program za prikaz sa zajedničkom katodom koji može povezati mikrokontrolere sa 64 pojedinačne LED diode, 7-segmentne numeričke LED ekrane do 8 znamenki, ekrane sa stupčastim grafikonom itd. Uključeno na -čip su BCD kod-B dekoder, kola za multipleksno skeniranje, upravljački programi za segmente i znamenke te 8 × 8 statička RAM memorija koja pohranjuje svaku znamenku.

Moduli MAX7219 vrlo su prikladni za upotrebu s mikrokontrolerima kao što je ATtiny85 ili, u našem slučaju Tinusaur ploča.

Korak 1: Hardver

Hardver
Hardver
Hardver
Hardver

Moduli MAX7219 obično izgledaju ovako. Na jednoj strani imaju ulaznu magistralu, a na drugoj izlaznu magistralu. Ovo vam omogućuje da povežete 2 ili više modula, tj. Jedan za drugim, kako biste stvorili složenije postavke.

Moduli koje koristimo mogu se povezati u lanac pomoću 5 malih kratkospojnika. Pogledajte sliku ispod.

Korak 2: Pinout i signali

Modul MAX7219 ima 5 pinova:

  • VCC - snaga (+)
  • GND-uzemljenje (-)
  • DIN - Unos podataka
  • CS - Odabir čipa
  • CLK - Sat

To znači da su nam potrebna 3 pina na strani mikrokontrolera ATtiny85 za upravljanje modulom. To će biti:

  • PB0 - spojen na CLK
  • PB1 - spojen na CS
  • PB2 - spojen na DIN

Ovo je dovoljno za povezivanje s modulom MAX7219 i njegovo programiranje.

Korak 3: Protokol

Protokol
Protokol

Komunikacija s MAX7219 je relativno laka - koristi sinkroni protokol što znači da za svaki podatkovni bit koji šaljemo postoji ciklus takta koji označava prisutnost tog bita podataka.

Drugim riječima, šaljemo 2 paralelne sekvence u bitove - jednu za sat, a drugu za podatke. Ovo softver radi.

Korak 4: Softver

Softver
Softver

Način rada ovog MAX7219 modula je sljedeći:

  • Bajte upisujemo u njegov interni registar.
  • MAX7219 tumači podatke.
  • MAX7219 kontrolira LED diode u matrici.

To također znači da ne moramo stalno kružiti kroz niz LED dioda da bismo ih upalili - za to se brine MAX7219 kontroler. Također bi mogao upravljati intenzitetom LED dioda.

Dakle, za korištenje MAX7219 modula na prikladan način potrebna nam je biblioteka funkcija koja služi u tu svrhu.

Prvo, potrebne su nam neke osnovne funkcije za pisanje u MAX7219 registre.

  • Zapisivanje bajta u MAX7219.
  • Zapisivanje riječi (2 bajta) na MAX7219.

Funkcija koja zapisuje jedan bajt u kontroler izgleda ovako:

void max7219_byte (uint8_t podaci) {for (uint8_t i = 8; i> = 1; i--) {PORTB & = ~ (1 << MAX7219_CLK); // Postavimo CLK na LOW ako (podaci & 0x80) // Maskiramo MSB podataka PORTB | = (1 << MAX7219_DIN); // Postavite DIN na HIGH else PORTB & = ~ (1 << MAX7219_DIN); // Postavite DIN na LOW PORTB | = (1 << MAX7219_CLK); // Postavimo CLK na HIGH data << = 1; // Pomicanje ulijevo}}

Sada kada možemo poslati bajtove na MAX7219 možemo početi slati naredbe. To se postiže slanjem 2 bajva - prvi za adresu internog registra i drugi za podatke koje želimo poslati.

U kontroleru MAX7219 postoji više desetaka registriranih.

Slanje naredbe ili riječi u osnovi je slanje 2 uzastopna bajta. Implementacija funkcije je vrlo jednostavna.

void max7219_word (uint8_t adresa, uint8_t podaci) {PORTB & = ~ (1 << MAX7219_CS); // Postavite CS na LOW max7219_byte (adresa); // Slanje adrese max7219_byte (data); // Slanje podataka PORTB | = (1 << MAX7219_CS); // Postavite CS na HIGH PORTB & = ~ (1 << MAX7219_CLK); // Postavite CLK na LOW}

Ovdje je važno napomenuti red u kojem CS signal vraćamo na HIGH - to označava kraj sekvence - u ovom slučaju kraj naredbe. Slična tehnika koristi se pri kontroliranju više od jedne matrice povezane u lanac. Sljedeći korak, prije nego što počnemo uključivati i isključivati LED diode, je inicijalizacija kontrolera MAX7219. To se postiže upisivanjem određenih vrijednosti u određene registre. Radi praktičnosti, prilikom kodiranja mogli smo inicijalizacijski niz staviti u niz.

uint8_t initseq = {0x09, 0x00, // Registar načina dekodiranja, 00 = Bez dekodiranja 0x0a, 0x01, // Registar intenziteta, 0x00.. 0x0f 0x0b, 0x07, // Registar ograničenja skeniranja, 0x07 za prikaz svih linija 0x0c, 0x01, // Registar isključivanja, 0x01 = Normalni rad 0x0f, 0x00, // Registar za testiranje prikaza, 0x00 = Normalni rad};

Samo trebamo poslati 5 gore navedenih naredbi u nizu kao parove adresa/podaci. Sljedeći korak - osvjetljavanje niza LED dioda.

Ovo je vrlo jednostavno - samo pišemo jednu naredbu gdje je prvi bajt adresa (od 0 do 7), a drugi bajt 8 bitova koji predstavljaju 8 LED dioda u redu.

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

Važno je napomenuti da će ovo raditi samo za 1 matricu. Ako povežemo više matrica u lanac, sve će prikazati iste podatke. Razlog za to je što nakon slanja naredbe vraćamo CS signal na HIGH što uzrokuje da se svi kontroleri MAX7219 u lancu zaključaju i pokažu što god bila zadnja naredba.