ibrahim-atiker

Mikroişlemciler 2 Dijital Saatler Nasıl Çalışır?

 

Merhaba arkadaşlar mikroişlemciler derslerimize ikincisi ile devam ediyoruz. İlk dersimizde basit led yakma devremizi kurmuştuk. Bu dersimizde rakamlar ile uğraşacağız. Birçoğumuzun kullandığı dijital saatler nasıl çalışıyor hiç düşündünüz mü ? Bu konumuzdan sonra artık dijital saatlerimiz nasıl çalışıyor öğrenmiş olacağız. Aslında çok basit fakat bir o kadar da mantıklı bir sistemi var. Hemen elektronik devremiz ve malzeme listemize geçelim.

Malzeme Listesi

  • Pic16F84A
  • 7 Segment ortak katot display
  • Direnç
  • 4 Mhz Kristal
  • 22pF Kondansatör

Elektronik Devre

 

Devremizdeki dirençler 330 Ω  koruma dirençleridir.

Programın Yazılması

Programımızı yazmadan önce 7 segment displayin özelliklerini bilmemiz ve buna göre bir tablo oluşturmamız gerekiyor.

Burda gördüğümüz 7 segmentli displayin bağlantı bacakları gözükmektedir. Sağdaki harf sırasına dikkatli bakalım. Saatimizin 0 rakamını yakacağını varsayalım.  Bunun için “g” bölgesine 0 sinyali ve a,b,c,d,e,f bölgelerine ise 1 sinyali gelmelidir. Ortak katotlu displayimiz için şu şekilde bir doğruluk tablosu oluşturmalıyız.

Binary olarak çalışmak benim tercihim arkadaşlar. Genellikle bana bu şekilde daha kolay geliyor.

0 rakamı için ele alırsak ;

  • Binary = 00111111
  • Hexadecimal = 3F
  • Decimal = 63

Şeklinde de yazılabilir.

Program Kodları

[code]
#include <16F84A.h>

#FUSES NOWDT

#use delay(crystal=4000000)

#use fast_io(b)

int rakamlar[10]={0b00111111, 0b00000110, 0b01011011, 0b01001111, 0b01100110, 0b01101101, 0b01111101, 0b00000111, 0b01111111, 0b01101111};

void main()
{
set_tris_b(0x00);
output_b(0x00);

while(TRUE)
{
for(int i=0; i<=9; i++)
{
output_low(pin_b7);
output_b(rakamlar[i]);
delay_ms(500);
output_high(pin_b7);
delay_ms(10);
}

}

}
[/code]

Şimdi kodların açıklamasına gelelim.

 

Sabit olan pic seçimi kütüphanesi, sigorta ayarları, kullanacağımız kristal seçimi ve picimizde kullanacağımız b bacakları seçimini yapıyoruz. Ayrıca ana fonkiyondaki sıfırlama işlemini yapıyoruz ve giriş çıkış bacaklarını belirliyoruz. Bunları ilk dersimizde detaylı anlattığım içn tekrarlamıyorum fakat takıldığınız yer olursa yorumda belirtmeniz yeterli olacaktır.

rakamlar dizisi = Burdaki dizi oluşturduğumuz tabloyla ilgilidir. Elde ettiğimiz binary değerlerini  0 rakamından artan şekilde dizinini sıfırıncı indisine yerleştirdik. Bunu displayde yazdırırken kullanmak için oluşturduk.

for döngüsü içi = Burada displayın özelliğine biraz değineceğim. Ortak katotlu display kullancağımızı söylemiştik. Displayın çalışması için dot bacağı yani 5 numaralı bacağına 0 sinyali gelmelidir. Eğer bu bacağa 1 sinyali gelirse display çalışmayacaktır. Devrede bu kontrolü transistör kullanmadan yaptım fakat en sağlıklısı transistör ile sürülen devredir. Bunu bir koruma yöntemi olarak düşünebilirsiniz. Öncelikle kontrol bacağı olan b7 pinine 0 sinyali göndererek displayı aktif ettim. Sonra ise oluşturduğumuz rakamlar dizisini sırayla b portuna yönlendirerek ekranda sayıları görmemizi sağlıyoruz. Bu işlem bittikten sonra tekrar displaye 1 değeri göndererek onu pasif duruma geçiriyoruz. Bu geçişler çok kısa sürelerde gerçekleştiği için gözlerimiz algılayamıyor.

Peki Displayi Neden Sürekli Aktif ve Pasif Konuma Getiriyoruz ?

Bu devremizde tek bir tane display var. Fakat dijital bir saatte bu sayı 10-15 kadar olabilir. her bir displaye aynı anda enerji yolladığımızı düşünün. Bu pilin saatinin çok kısa bir sürede tükenmesine neden olacaktır. Kullandığımız bu yöntem ile aynı anda sadece 1 displaye enerji gönderilir. Programcının ayarladığı süreye göre gözümüz saniyede 25 kereden fazla görüntü oluştuğunda bunların arasındaki süre farkını algılayamaz ve displayin sürekli yandığını zanneder. Bu süreler çok kısa olduğu için tüm displayler aynı anda yanıyor gibi gözükür. İşte aktif ve pasif durumunu bu yüzden yapıyoruz.

 

Baskı Devre ve Ares Çizimi

Not# Direnç uçlarına display girişleri bağlanacaktır.

 

 

 

 

Facebook Sayfamizdan Bizleri Takip Edebilirsiniz