4 Haneli 7 Segment Led Display

0
2406
4 Haneli 7 Segment Led Display
4 Haneli 7 Segment Led Display

4 Haneli 7 Segment Led Display

Arduino ile yapılan projeler arttıkça tek haneli 7 segment display modülleri yetmez hale geldi. 4 haneli 7 segment display, projelerde daha çok işlev kazanarak en basitten en kompleks devrelerde yerini aldı. Projemizde, ortak katotlu, 4 haneli 7 segment display ile çeşitli sayısal çıkışlar alarak modülün kullanımını görmüş olacağız.

Kullanılan Malzemeler

  • Bir adet Arduino Uno kartı,
  • Bir adet 4 haneli 7 segment display,
  • Bir adet 10 kiloohm potansiyometre,
  • Dört adet BC547 npn transistor,
  • Dört adet 390 ohm direnç.

Tasarım

Modüldeki her bir segment multipleks yapıdadır. Yani bunun anlamı segmentlerin aynı anot bağlantısını paylaşması demektir. Katotların hepsi ise tek bir bağlantı noktasındadır. 4 haneli 7 segment display ile birçok sayıda led kullanmaktan ve onları kontrol etmekten kurtulmuş bulunuyoruz.

Display’in girişlerine 5 volt gerilim uygulanacağı zaman akım sınırlayıcı olarak dirençler kullanmak devre mantığı için daha uygun olur. Direnç değerleri 330 ile 470 ohm arasında olabilir. Mikrodenetleyici pinlerinden en fazla 40 mA akım çekebildiğimiz için bu akımları daha da yükseltmek adına transistörler kullanılır. Örneğin 8 rakamını display üzerinde görmek istesek, gerekli akım 40 mA‘yı geçecektir.

Arduino kartın analog 0 girişine bağlı 10 kiloohm değerindeki bir potansiyometreyi sağa sola çevirdiğimizde display üzerinde 0 ile 1023 arasındaki sayıları görebiliriz. Display’in 12 adet ucu bulunmaktadır. Bunlardan biri ortak katot için (DP), dördü hangi display hanesini seçmek gerektiğini belli etmek için (DO, D1, D2, D3), yedi tanesi de hanelerdeki hangi led çubuğunun yanacağını saptamak içindir (A, B, C, D, E, F, G). Hane seçim işini yapacak dört girişe NPN tipine BC547 transistörleri bağlanmıştır. Transistörler ile uçlar arasında 390 ohm dirençler vardır. Transistöre gelecek akımı sınırlamak içinde 1 kiloohm dirençler kullanılır.

Kodlar

Kodların gerekli görünen açıklamaları yanlarında yazmaktadır.

// A-G segmentlerinin seçimi 0-9 rakamları için

const int rakamlar[10] = {

   //sayıların desimal karşılıkları

   B11111100, // 0

   B01100000, // 1

   B11011010, // 2

   B11110010, // 3

   B01100110, // 4

   B10110110, // 5

   B00111110, // 6

   B11100000, // 7

   B11111110, // 8

   B11100110, // 9

};

// herbir segment için pin tanımlamaları

// DP,G,F,E,D,C,B,A

const int segment_pinleri[] = { 13,8,7,6,5,4,3,2 };

const int haneler= 4; // displayin haneleri



const int hane_pinleri[haneler] = { 9,10,11,12 };

void setup()

{

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

      pinMode(segment_pinleri[i], OUTPUT); // segment pinleri çıkış yapılır

   }

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

      pinMode(hane_pinleri[i], OUTPUT);

   }

} 

 

void loop()

{

   int value = analogRead(0);

   rakam_goster(value);

} 

 

void rakam_goster( int rakam)

{

   if(rakam == 0) {

      hane_sec( 0, haneler-1) ; // sağdaki haneyi görüntüleme

   } else {

      // her haneye karşılık gelen değerler

      // soldaki hane 0 ise sağdaki haneden eksilt

      for( int hane = haneler-1; hane >= 0; hane--)  {

         if(rakam > 0)  {

            hane_sec( rakam % 10, hane) ;

            rakam = rakam / 10;

         }

      }

   }

} 

 

// hane_sec,hane durumuna göre rakam gösterme fonskiyonu

void hane_sec( int rakam, int hane)

{

   digitalWrite( hane_pinleri[hane], HIGH );

   for(int segment = 1; segment < 8; segment++)  {

      boolean isBitSet = bitRead(rakamlar[rakam], segment);

      // isBitSet fonksiyonu sorgulanan bit 1 ise true değerini döndürür

      

      digitalWrite( segment_pinleri[segment], isBitSet);

   }

   delay(5);

   digitalWrite( hane_pinleri[hane], LOW );

}

 

CEVAP VER

Please enter your comment!
Please enter your name here