7 segmentni display

Što su?

 
Sedam segmentni display ili sedam segmentni indikator je popularno rečeno old-school način prikaza arapskih brojeva. Više znakova mogu prikazivati 9, 14 ili 16 segmentni displayi. Alternativno, postoje slični ekrani koji prikazuju i druge simbole, npr. LED matrice.
 
7 segmentni display u akciji
Ime su dobili po tome što se sastoje od 7 segmenata, vidljivo na slici iznad. Tri segmenta su vodoravna i četiri okomita. Svaki segment svijetli pomoću LCD ili LED tehnologije. Zapravo, mnoštvo je načina na koji se osjetljavaju segmentni, npr. vrlo popularne nixie lampe.

Kako rade?

 
Zadržimo se na modernim LED 7 segmentnim displayima. Za početak odjelimo ih na one sa zajedničkom katodom(-) i zajedničkom anodom(+). Jednostavno je, displaye sa zajedničkom katodom spojiti ćemo na gnd pin, a zatim s digitalWrite(pin, HIGH); trigati segment displaya i obratno. Ubrzo detaljnije.
 
7 segmentni nožice
Slika iznad prikazuje nam nožice displaya, ukupno 10. Srednja nožica gore i dolje odnosi se na zajedničku katodu, odnosno anodu ovisno o modelu. Ostalih 8 otpada na 7 segmenata displaza plus točka koja se nalazi u donjem desnom uglu. Pogledajmo pinout.
 
7pins
Pinout se odnosi na display sa zajedničkom katodom i prikazuje koja nožica triga koji segment. Npr. spojim (-) nožicu s (-) polom baterije, a pin8 preko otpornika s plus polom i zasvjetliti će nam točka.
 
zajednička katoda
Ako koristima display sa zajedničkom anodom, zamjenimo polove i dobijemo istu stvar.
 
zajednička anoda
Naravno da nećemo premještati kabliće za svaki znak koji želimo prikazati pa idemo spojiti sve na Croduino.

Kontroliranje s Croduinom

 
Pa za početak spojimo pinove na Croduino kako prikazuju slike. NAPOMENA: ovdje koristimo display sa zajedničkom katodom, ako imate zajedničku anodu za sada samo spojite +5V s Croduina na pinove koji su povezani crnim kablićem (gnd).
 
Croduino i 7 segmentni
Evo i mala tablica spajanja:
 
7pins na Croduinu
Nama posebnom razloga zašto smo odabrali ove pinove, slobodno birajte koje želite. Ako vam display zauzima previše pinova razmislite o korištenju shift registra.
 
Što i kako prikazati?
 
Izvor: wikipedia
Slika iznad prikazuje neke od simbola koje možemo "aktivirati" na displayu. Ponovimo još jednom logiku uz pomoć tablice:
 
croduino logika
Brojevi 0 i 1 označavaju upaljeno i ugašeno, odnosno 0-LOW i 1-HIGH. Ponovno, ovo se odnosi na displaye sa zajedničkom katodom. Ako koristite zajedničku anodu jednostavno zamjenite nule i jedinice.
 
Zapišimo i jedan konkretan Arduino kod. Upalimo broj 1, a nakon pola sekunde broj 2.

void setup()
{
// napraviti cemo mali loop koji pretvara pinove od 2 do 9 u izlazne
for(int i=2; i<=9; i++)
{
pinMode(i, OUTPUT);
}
}
void loop()
{
// palimo broj jedan
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
// pauza 500ms = 0.5s
delay(500);
// gasimo znakove koji su preostali na ekranu
// kako se ne bi pomješali sa znamenkom dva
digitalWrite(5, LOW);
digitalWrite(8, LOW);
// palimo broj dva
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
// još jedna pauza kako bi stigli oko registrirati
// promjenu prije nego se loop krene ispocetka
delay(500);
// gasimo segmente broja dva
digitalWrite(2, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
}

I tako dalje za svaku znamenku. Jako puno koda. Jedan od načina da si olakšamo je da napravimo funkciju za svaki znak koji koristimo zatim ju pozovemo kada želimo:

// funkcija za znak 1
void Jedan()
{
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
}
// funkcija za znak 2
void Dva()
{
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
}
// fukkcija za brisanje preostalih segmenata
void Ocisti()
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}

Kod iz prvog primjera sada bi izgledao ovako:

void setup()
{
// napraviti cemo mali loop koji pretvara pinove od 2 do 9 u izlazne
for(int i=2; i<=9; i++)
{
pinMode(i, OUTPUT);
}
}
void loop()
{
Jedan(); //palimo broj jedan
delay(500); //pauza
Ocisti(); //brisemo preostale segmente
Dva(); //palimo broj dva
delay(500); //pauza
Ocisti(); //brisemo preostale segmente
}
void Jedan()
{
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
}
// funkcija za znak 2
void Dva()
{
digitalWrite(2, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
}
// fukkcija za brisanje preostalih segmenata
void Ocisti()
{
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}

Ovo, naravno, ima smisla kada češće koristimo isti znak nego što je korišten u ovom primjeru. Iste te funkcije možemo staviti u library te ih pozivati po želji. Pogledajte naš tutorial o tome kako napraviti vlastiti Arduino library koji upravo kontrolira ove displaye.

Leave a Reply