7 segmentni displej
Sedam-segmentni displej je uređaj gde formu celog ili decimalnog broja
sa sve zarezom (tačkom) obično čine LED u obliku crta. Ovakvi displeji
se najčešće koriste za prikazivanje vremena u digitalni časovnicima.
Razlikujemo displeje sa zajedničkom anodom i displeje sa zajedničkom
katodom. Suština je ista, razlika je samo da li ćemo digitalno na
izlaznom pinu ispisati HIGH ili LOW. Ovakvi displeji su u stanju da
prikažu brojeve od 0 do 9 sa decimalnom tačkom, ali i slova od A do F u
kombinaciji malih i velikih slova. Ovo je bitno iz razloga što, recimo B
se na displeju može pročitati kao 8. Iz tog razloga će slovo b biti
ispisano malim slovom.
Displej koji će biti prikazan je
varijanta sa zajedničkom anodom. S obzirom da je u pitanju ipak LED
potrebno je dodati još 8 otpornika. Da bi znali koji otpornik da
upotrebimo koristimo Omov zakon i formulu:
R=(Ui-Urn)/I
Gde
je R otpor, to jest vrednost koja nama treba. Ui je izvorni napon i u
slučaju Arduina može biti 5V ili 3,3V. Urn je radni napon LED dok je I
jačina struje izražena u A. Ako znamo da je za crvenu LED potrebna
jačina struje od 15-20mA ostaje još samo da vidimo koliki je radni napon
LED. Tu informaciju možemo dobiti od prodavca a za LED na mom displeju
potrebno je 1,8V. Sve ovo kroz formulu daje da za displej trebaju
otpornici od 220R (220oma). S obzirom da displej ima 10 pinova, prema
šemi središnji sa gornje i donje strane su zapravo zajedničke anode.
Ostalih osam pinova su za 7 segmenata displeja i tačku. Isto tako
postoji razlika u položaju pinova u zavisnosti od veličine. Moj displej
je varijanta od 18mm i pinovi su sa gornje i donje strane. Kod manjih
modela obično pinovi budu sa strana ali koji god da je u pitanju,
princip povezivanja i rada je isti.
Povezivanje prema Fritzing šemi:
/*-----------------------------------------------------------------*
* Skeč za potrebe članka na www.itstreet.org
* Parts from: www.hacktronics.com/tutorials/arduino-and-7-segment-led.html
* Author: Petrović Dejan
* Date: 12/11/2017
* Arduino MEGA, 7 segment display, resistor 220R
*-----------------------------------------------------------------*/
byte brojke_i_slova[16][7]= {{0,0,0,0,0,0,1},//0
{1,0,0,1,1,1,1},//1
{0,0,1,0,0,1,0},//2
{0,0,0,0,1,1,0},//3
{1,0,0,1,1,0,0},//4
{0,1,0,0,1,0,0},//5
{0,1,0,0,0,0,0},//6
{0,0,0,1,1,1,1},//7
{0,0,0,0,0,0,0},//8
{0,0,0,1,1,0,0},//9
{0,0,0,1,0,0,0},//a
{1,1,0,0,0,0,0},//b
{0,1,1,0,0,0,1},//c
{1,0,0,0,0,1,0},//d
{0,1,1,0,0,0,0},//e
{0,1,1,1,0,0,0} //f
}; // pravimo niz brojeva i slova gde za zajednicku anodu 0 znaci upaljena LED
void setup() {
// sledeci pinovi se koriste za povezivanje za displejem
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
dotWrite(1); // tacku gasimo, s tim da moze i da se upali sa 0 umesto 1
}
// funkcija koja poziva ispisivanje logicke 0 ili 1 na pinu 9 za tacku
void dotWrite(byte dot) {
digitalWrite(9, dot);
}
// funkcija kojom u for petlji ispisujemo logicku 0 ili 1 na segmentima LED
// krecemo od pina 2 do pina 8 (brojimo od 0 do 7)
void displejWrite(byte digit) {
byte pin = 2;
for (byte segBroj = 0; segBroj < 7; ++segBroj) {
digitalWrite(pin, brojke_i_slova[digit][segBroj]);
++pin;
}
}
// u for petlji od znaka 16 a u ovom slucaju slovo F ispisujemo u nazad do 0
// nakon 4 sekunde idemo ponovo
void loop() {
for (byte broj = 16; broj > 0; --broj) {
delay(1000);
displejWrite(broj-1);
}
delay(4000);
}
Nakon
povezivanja ide skeč. Prvo pravimo niz gde će u zavisnosti koji broj
ili slovo treba da bude prikazano, postaviti određene pinove na HIGH ili
LOW. Na slici iznad imate primer koji pin pali određenu LED. Na ovaj
način se može što-šta i promeniti ili dodati. Zatim dodeljujemo pinovima
OUTPUT mod a tačku za sada gasimo. Funkcijom writeDot(0) je palimo.
Ispod setup funkcije ide pomenuta writeDot funkcija za tačku a koja je
vezana na pin 9, a naravno da može biti bilo koji drugi digitalni pin.
Dalje ide sevenSegWrite() funkcija koja u for petlji postavlja na HIGH
pinove koji treba da upale određene LED a koje uvozi iz niza na početku
skeča. U loop funkciji parametrom count ispisujemo oznake iz niza u krug
od poslednjeg ka prvom. Moj displej je sa zajedničkom anodom a za
zajedničku katodu je potrebno promeniti mesta svim 0 i 1 u okviru skeča.