LAKI PINGVINI
LED drajveri
Igre LEDa i vatre
Dejan PETROVIĆ
1. oktobar 2019.

Kada smo pre nekoliko meseci pisali o Mejker Displeju iz E-Radionice, smo pisali da iza gomile LED-ica stoje IS31FL3731 drajveri (kontroleri) kojima uz pomoć biblioteke upravlja mikrokontroler. Mejker Displej, iako kompleksan i funkcionalan, svakako nije jedino parče hardvera sa LEDicama kojima upravlja neki drajver. U ovom tekstu će biti reči o nekoliko LED displeja sa različitim drajverima koji se mogu koristiti za ispisivanje podataka. Moduli dolaze u formi segmentnih LED displeja ili klasičnih LED matrixa, ali zajedničko im je da je potrebno uključiti određeni broj LED kojima ćemo ispisati određene podatke.

Prvi na redu je TM1637, drajver koji se najčešće koristi za 7-segmentne displeje. Mi smo baš jedan takav pripremili. Primerak koji ćemo koristiti dolazi sa četiri 7-segmentna polja preko kojih možemo ispisati razne podatke. Za komunikaciju sa mikrokontrolerom, u našem slučaju Uno, displej koristi samo dva digitalna izvoda, a napaja se sa pet volti. Izvodi displeja zaduženi za komunikaciju sa mikrokontrolerom su označeni sa CLK (clock) i DIO (data IO), i mogu se vezati za bilo koji digitalni GPIO Unoa. U pitanju je two-wire interfejs nalik na I2C, koji omogućava TM1637 drajveru da upravlja sa i do osam segmenata LED preko zajedničke anode.

Sam ekran je veličine 5 x 2 centimetra i ispis je savršeno vidljiv i sa veće daljine. Od nekih dodataka sem ekrana, možemo reći da je ostavljena mogućnost za lemljenje hedera za povezivanje na dve strane. Tu je još i zelena PWR LED sa donje strane. Proizvođač DIY More u ponudi ima ekrane u više boja, a naš je beo.

Probali smo nekoliko biblioteka uz ovaj ekran, a nekako nam je najbolje „legla” TM1637, biblioteka koju možete preuzeti direktno iz Arduino IDE-a. Ova biblioteka je prilično dokumentovana i u okviru samog primera, a dodatno na GitHub stranici. Naš primer ispod će ispisati neku temperaturnu vrednost.

#include <Arduino.h>

#include <TM1637Display.h>

#define CLK 2

#define DIO 3

TM1637Display ekran(CLK, DIO);

const uint8_t dot[] = {SEG_A | SEG_B | SEG_G |SEG_F};

const uint8_t c[] = {SEG_A | SEG_D | SEG_E |SEG_F};

void setup() {

ekran.clear();

ekran.setBrightness(7);

ekran.showNumberDec(35, true, 2, 0);

ekran.setSegments(dot,1,2);

ekran.setSegments(c,1,3);

}

void loop() {

}

Nakon dodavanja neophodnih biblioteka i definisanja komunikacionih pinova, pravimo objekat „ekran”. Za prikazivanje oznake stepena i C (Celzijusa) adresiramo se ka svakom segmentu ponaosob. Segmenti se slovima označavaju u smeru kazaljke na satu, gde je segment A gornji. Funkcijom clear() brišemo ekran, dok sa funkcijom setBrightness() upravljamo osvetljenjem u sedam koraka. Funkcijom showNumberDec() ispisujemo temperaturne vrednosti uz par parametara, kao što su početna nula, dužina i pozicija na ekranu. Sa setSegments() uz parametre dužine i pozicije prikazujemo oznaku stepena i Celzijus. Pored ovih korišćenih funkcija, biblioteka nudi i showNumberDecEx(), koja se koristi za decimalne brojeve i tačke iza svakog od segmentnih polja.

Ovakve ekrane možemo naći na indukcionim šporetima, mikrotalasnim pećnicama ili manjim kućnim uređajima gde su četiri polja dovoljna za prikaz podataka. U Arduino ekosistemu se ovi ekrani mogu koristiti za apsolutno bilo šta, a vrlo često su gost u projektima gde se prikazuju vreme, temperatura i vlažnost vazduha.

Vrlo zanimljivi su TM1638 drajveri koje možemo naći na modulima koji kombinuju i do dva sedmosegmentna osmocifrena ekrana. Pritom, u zavisnosti od modela, uz ekrane dolaze tasteri u kombinaciji sa dodatnim LED, ili bez LED, ali sa većim brojem tastera. Ovakvi moduli su jako zanimljivi za razvijanje projekata, nisi skupi, a za povezivanje sa mikrokontrolerom koriste samo tri digitalna GPIO. Njih nismo imali, pa nećemo dublje ulaziti u priču o njima.

Sledeći na redu je displej slične forme, ali sa MAX7219 drajverom. Sastoji se iz dva odvojena ekrana, nalik na prethodno opisane, sa decimalnim tačkama, ali bez dvotačke pa nije podesan za prikazivanje sata. Ekrani su manjih dimenzija od onog na TM1637 i ukupne dimenzije su 6 x 1,5 centimetara, a za povezivanje sa mikrokontrolerom koristi tri digitalna GPIO za serijski interfejs. U pitanju su DIN, CS i CLK i skraćenice su i više nego jasne. Za napajanje se preko GND i VCC mogu koristiti naponi od pet i 3,3 volta. Zanimljivo je da se na modulu sa suprotne strane nalazi još jedan red hedera za povezivanje još ovakvih ekrana u kaskade. I oznake na njima su malo drugačije, pa tako imamo DOUT, LODA i CLK. Ovo LODA je pogrešno napisano na modulu, jer pin vodi do LOAD izvoda na MAX7219. Mi nismo imali više ovakvih pa nismo probali kako se ekrani ponašaju u kaskadnom režimu. Sam MAX7219 je serijski input/output drajver koji je u stanju da se preko zajedničke katode izbori sa osam sedmosegmentnih ekrana, ili do 64 zasebne LED. Na čipu je integrisan BCD (B-code dekoder), što se može koristiti za custom prikaz na ekranima. Drajver ima mogućnost digitalne i analogne kontrole osvetljenja. Namenjen je za bar graph displeje, industrijske kontrolere, LED matrixe i panele.

Za naš primer smo koristili DigitLedDisplay biblioteku, koju možete preuzeti sa adrese i.sk.rs/357166. Za ovu biblioteku smo se odlučili zato što nudi sve potrebne funkcije koje su bukvalno straightforward i na kakve smo navikli. Nakon dodavanja biblioteke, pravimo objekat „ekran” i dodeljujemo digitalne pinove serijskom interfejsu. U setup funkciji imamo definisanje jačine osvetljenja u koracima do 15 funkcijom setBright(), dok sa setDigitLimit() određujemo koliko sedmosegmentnih ekrana imamo, gde je to u našem slučaju osam. Funkcijom printDigit() ispisujemo brojeve, a možemo im i zadati poziciju na ekranima. Funkcijom clear() brišemo ekrane, dok funkcijom write() ispisujemo same segmente ekrana po B kodu, gde je prvi zapravo decimalna tačka, a zatim idu segmenti u smeru kazaljke na satu.

#include „DigitLedDisplay.h”

DigitLedDisplay ekran = DigitLedDisplay(7, 6, 5); ///din, cs, clk

void setup() {

ekran.setBright(10);

ekran.setDigitLimit(8);

}

void loop() {

ekran.printDigit(88888888);

delay(1000);

ekran.clear();

ekran.printDigit(50, 3);

delay(1000);

ekran.clear();

ekran.write(8, B00001110); //L

ekran.write(7, B01110111); //A

ekran.write(6, B01111111); //B

ekran.write(5, B01011011); //S

delay(1000);

ekran.clear();

}

I ovaj ekran je jako zanimljiv za ugradnju u razne projekte. U kombinaciji više ekrana se može napraviti lep scroll efekat, a ograničenja su uslovljena samo maštom.

Dok smo kod MAX7219 drajvera, pomenuli smo da se on može koristiti za 64 zasebne LED, ili bolje rečeno za 8 x 8 matrix. Vezujući ih u kaskade možemo napraviti zaista ozbiljan ekran. Mi smo nabavili modul sa četiri kaskadno vezana 8 x 8 ekrana kojima kontrolišu MAX7219 drajveri. Modul je zanimljiv i zbog toga što se svaki LED matrix može izvaditi iz svojih hedera na modulu i zameniti sa drugim u odgovarajućoj boji.

Prilikom odabira biblioteke smo uvideli da ih ima dosta, gde se mnoge oslanjaju na varijantu sa razdvojenim ekranima gde bi pinovi za povezivanje bili sa donje i gornje strane, dok je u našem slučaju u pitanju modul sa ekranima poređanim tako da pinovi dođu sa strana. Šta ovo znači? Koristeći neke od ovih biblioteka smo dobili da se tekst postavlja popreko u odnosu na ekran bez mogućnosti rotacije za 90 stepeni preko neke od funkcija. Ovo je posebno iritantno za scroll efekat. Problem nije nerešiv, ali zahteva dodatne linije koda, a mi smo tragali za out-of-the-box rešenjem. Sasvim dobro nam se pokazala LedControl biblioteka koju možete preuzeti sa adrese i.sk.rs/357167. U primeru ispod imamo par poznatih likova koji se mogu animirati i pomoću kojih se može napraviti mini-igra.

#include „LedControl.h”

LedControl lc=LedControl(7,5,6,4);

unsigned long delaytime=500;

void setup() {

int devices=lc.getDeviceCount();

for(int address=0;address<devices;address++) {

lc.shutdown(address,false);

lc.setIntensity(address,8);

lc.clearDisplay(address);

}

}

byte pacMan[]={

B00111100,B01111110,B01111011,B00111111,

B00011111,B00111111,B01111110,B00111100

};

byte ghost[]={

B00111100,B01101010,B11001001,B11011011,

B11111111,B11111111,B10111011,B10010001

};

void showPacMan(){

for (int i=0; i<8; i++){

lc.setRow(0,i,pacMan[i]);

}

}

void showGhost(){

for (int k=0; k<8; k++){

lc.setRow(2,k,ghost[k]);

}

}

void loop() {

showPacMan();

lc.setLed(1,4,2,true);

lc.setLed(1,4,6,true);

showGhost();

lc.setLed(3,4,2,true);

lc.setLed(3,4,6,true);

}

Nakon dodavanja biblioteke pravimo objekat „ekran” sa parametrima za serijski interfejs DIN, CLK i CS, dok je poslednji četvrti zapravo broj kaskadno povezanih ekrana. U setup funkciji kroz for petlju inicijalizujemo ekrane, postavljamo jačinu osvetljenja funkcijom setIntensity() i brišemo bufer. Na redu su binarne slike Pakmana i Duha, koje nakon toga spremamo za prikazivanje parametrima vezanim za redni broj ekrana i početnu poziciju ispisivanja slike. U loop funkciji ispisujemo slike i tačke. Za uključivanje LED-ica koje reprezentuju tačke koristili smo setLed() funkciju sa parametrima vezanim za redni broj ekrana, x i y koordinate, dok sa booleanom zapravo biramo da li će LED svetleti ili ne. Biblioteka ima i setChar() funkciju za ispis teksta, ali su dostupni samo brojevi i devet slova uz par znakova. Takođe, biblioteka nema scroll efekat.

Ako će se koristiti više zasebnih 8 x 8 matrix ekrana sa MAX7219 drajverom, tada je bolje koristiti MaxMatrix biblioteku i poređati ekrane uspravno. U tom slučaju novija biblioteka dolazi do izražaja sa funkcijama koje dozvoljavaju razne animacije, a ne samo scroll teksta. LED matrix sa MAX7219 drajverom se može koristiti za razne projekte, počevši od ekrana za prikazivanje meteoroloških podataka, vremena i slično, preko raznih animacija, pa čak i mini-igara. Biblioteka dozvoljava do osam 8 x 8 matrixa pri korišćenju tri digitalna GPIO, što ne znači da se ne može dodati još nekoliko puta po toliko jedan ispod drugog, i napraviti ozbiljan LED panel. Set od dve biblioteke MD_MAX72xx i MD_Parola radi savršeno. Funkcija ima bezbroj, jako je dobro dokumentovana primerima, ali je isto tako primer Parola_Print_Test.ino „pojeo” čak 60 odsto memorije Unoa. Pritom je biblioteke potrebno malo tweak-ovati.


PRETHODNI TEKST
SLEDEĆI TEKST
Najčitanije
Igre
Telefoni
Hardver
Softver
Nauka
Aktuelno štampano izdanje
JUN 2025
Doom: The Dark Ages
Doom iz mračnog doba drugačiji je od svih drugih Doomova, jer je Slayer koncipiran kao tenk sa štitom...
Clair Obscur: Expedition 33
Estetika Belle Époquea, gameplay u skladu sa kanonima JRPG-a, vrhunsko pripovedanje i ljubav prema igrama...
Computex 2025, Tajpej, Tajvan
AI NEXT
Ovaj, nekada ultra-PC-specifični sajam, odavno se proširio na srodne tehnologije, biznis rešenja i digitalne usluge, postavši varijanta azijskog C...
Gigabyte GeForce RTX 5070 Gaming OC 12G
Višak samopouzdanja
Kartica je sa hardverske strane vrlo kvalitetna, ali ništa ne može da nadomesti nedostatak snage „pod haubom”...
Asus ProArt P16 (H7606WP)
Pronalazak neverovatnog
Novi ProArt P16 donosi moderna rešenja, u dobro usaglašenom odnosu gabarita i performansi – alatka koju ćete sa ponosom nosati sa sobom...
Logitech ProX Superlight 2
Sve udvostručeno
Ovaj miš predstavlja jasnu indikaciju da najveći proizvođač ne želi da napusti nijedan segment tržišta...
Winhance 25.05
Popravka Prozora
U pitanju je alatka koja omogućava da se brzo rešite (većine) bloatwarea, ali i da obavite optimizaciju rada Windowsa...
TCL NXTPAPER 11 Plus
Momak za sve
Ovo bi bio najbolji tablet „za te pare” i da košta 100 evra više...
.rs: Beogradski prevoz na Yandexu • Srbija u SEPA • Loši primeri digitalizacije
Unapređeno e Zakazivanje
Beogradski prevoz na Yandexu • Srbija u SEPA • Loši primeri digitalizacije
Google Mariner, Google Astra i AI autonomni agenti
Uspon tihog softvera
Umesto kliktanja stručnog lica, softver će, već ove godine, u tihom, gotovo nečujnom načinu rada - završavati posao...
Fatal Fury: City of the Wolves
Fatal Fury je oduvek bio čudna cvećka u svetu borilačkih igara; takav je i ostao...
Arc Raiders
Novi extraction shooter iz pera autora dobrih delova franšize Battlefield (i potcenjenog The Finals)...
© 2025 Svet kompjutera. Sva prava zadrzana.
Novi broj - Arhiva - Forum - O nama