Arduino 7 Segment Display kullanımı

7 segment display, genellikle rakamsal bilgilerin görsel olarak temsil edilmesi için kullanılan bir tür elektronik gösterge veya ekran sistemidir. Bu tür bir ekran, yedi ayrı segmentten oluşan bir düzenlemeye sahiptir.

Bir 7 segment display, genellikle LED’lerden (ışık yayan diyotlar) veya yedi segmentli LCD’lerden oluşur. LED tabanlı 7 segment displayler en yaygın kullanılan türdür. Her bir segment, rakamların veya harflerin farklı parçalarını temsil eder. Bu parçalar, 0’dan 9’a kadar olan rakamların veya bazı harflerin oluşturulmasında birleştirilir.

Ekran içerisindeki ledlerin; katot ucu ortak ise ortak katot display, anot ucu ortak ise ortak anot display olarak adlandırılır.

7segment_uc

Arduino 7 segment display bağlantısı

Arduino kart ile 7 segment display arasında bağlantı yapmak için iki adet 74HC595 entegresinden faydalanacağız.

7 segment display şema

Yukarıdaki şemada bütün ekranlara ait a,b,c,d,e,f ve g uçlarının birbirine paralel bağlandığı görülecektir. Bu tür bağlantılardaki amaç entegre pinlerinden tasarruf sağlamaktır. Bu bağlantı şeklini daha iyi anlamak için devrenin çalışma mantığına geçelim.

Örneğin yukarıdaki ekrana 5298 sayısını yazdıralım;

Birbirine paralel bağlı a,b,c,d,e,f ve g uçlarına sırayla 5,2,9,8 ledlerini yakacak gerilimi uygularken ilgili displayin ortak katot ucunu şaseye çekersek aynı anda sadece bir display aktif olur. Bu döngü şeklinde ve hızlı olursa göz yanılmasından dolayı bütün ekranların ışık verdiği görülür. Yani ekran üzerinde yanıp sönen rakamlar değil sabit 5298 sayısı okunur.

Aşağıdaki kodları incelemek bu bağlantı şeklini daha iyi anlamanızı sağlayacaktır.


int latchPin = 5;                                                              
int clockPin = 6;                                                               
int dataPin = 4;                                                                 

int sayi = 5298;                                                                 // Ekrana aktarılacak sayı
int basamak[4];                                                                 
int sayac = 0;

byte ArraySegment[] = {                                                         
B11111100, B01100000, B11011010, B11110010, B01100110, B10110110,                // 0,1,2,3,4,5,6,7,8,9 sayıları 7 segment kodlama
B10111110, B11100000, B11111110, B11110110                                           
};

byte ArrayBasamak[] = {
B11101111, B11011111, B10111111, B01111111                                       // 7 segment digit kodlama
};

void setup() {

pinMode(latchPin, OUTPUT);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);

}

void loop() {
  

  basamak[2] = sayi % 1000;                                                       // Sayının 1000'e bölümünden kalan ( Örnek; 1298 --> 298 )
  basamak[3] = (sayi - basamak[2]) / 1000;                                        // Binler basamağındaki rakam ( Örnek; 1298 --> 1 ) 
  basamak[1] = basamak[2] % 100;                                                  // Onlar basamağından itibaren sayı ( Örnek; 298 --> 98 ) 
  basamak[2] = (basamak[2] - basamak[1]) / 100;                                   // Yüzler basamağındaki rakam ( Örnek; 298 --> 2 ) 
  basamak[0] = basamak[1] % 10;                                                   // Birler basamağındaki sayi ( Örnek; 98 --> 8 )
  basamak[1] = (basamak[1] - basamak[0]) / 10;                                    // Onlar basamağındaki sayı ( Örnek 98 --> 9 )

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, LSBFIRST, ArrayBasamak[sayac]);                     // Digit için veri gönder.
  shiftOut(dataPin, clockPin, LSBFIRST, ArraySegment[basamak[sayac]]);            // Segment için veri gönder.
  digitalWrite(latchPin, HIGH);
  delay(10);
  
  sayac++;
  if (sayac == 4) {
  sayac = 0;
  }
  
}

Rakamları ekrana yazarken hangi ledlerin yanacağı ArraySegment veri dizininde kodlanmıştır. Seçilen basamak değerine göre hangi ortak katot ucunun aktif olacağı ise ArrayBasamak veri dizininde kodlanmıştır.

Sayının içindeki rakamları teker teker ekrana yazdıracağımızdan sayıyı basamaklarına ayırmak gerekir. Mod işlemi (%) kullanarak elde ettiğimiz basamak[0] değişkeni birler basamağındaki rakamı, basamak[1] değişkeni onlar basamağındaki rakamı, basamak[2] değişkeni yüzler basamağındaki rakamı, basamak[3] değişkeni binler basamağındaki rakamı bize verir.

Sayac değişkeni rakamların sırayla ekrana basılmasını sağlar.

Erdoğan Demirtaş
Erdoğan Demirtaş
Cumhuriyet Üniversitesi, Sivas Meslek Yüksekokulu, Endüstriyel Elektronik bölümü mezunuyum. Özel bir şirkette, endüstriyel alanda kullanılan (medikal, telekomünikasyon, savunma sanayi, tekstil, cnc, rafineri, matbaa vb.) elektronik kartların/cihazların bakım ve onarımını yapmaktayım.
ilgili yazılar

Yorum Bırak

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz

son eklenenler