Teknomerkez
TR EN ES
Konular

Jal ile Programlı Pic 16F628`li LCD Göstergeli 0-999999 İleri Sayıcı

Yazar: Mehmet Yılmaz
Tarih: 25.09.2007
Türkçe

Bu devre LCD ekranlı 0-999999 tur sayma işlemlerinde kullanılmak üzere tasarlanmıştır. İleri doğru sayma işlemini gerçekleştirir. Sayım aralığı yeterince geniştir. 0'dan başlayarak 999999'a kadar yani 1 milyona kadar sayıma ihtiyaç duyulan yerlerde kullanılabilir. Devrenin JAL ile yapılan programında gerekli düzenlemeler yapılarak bu aralık daha da arttırılabileceği gibi azaltılabilir de. Devre donanımsal olarak PIC 16F628 kullanılarak tasarlandığından dahili kristal kullanılmış ve malzeme sayısı olabilecek en az seviyede tutulmuştur.

Devrenin çalışması ve yapısı:

Devre temel olarak 1 adet PIC16F628, 1 adet LCD ekran ve sayımı (aynı zamanda PIC16F628'i) resetlemek amacıyla RESET butonundan oluşmaktadır. Bu minimum donanım yapısıyla devre girişine bağlanan lojik palsları sorunsuz olarak saymaktadır. Girişe uyguladığımız palsların frekans değerleri itibariyle 75 Hz frekansa kadar sorunsuz sayma işlemini gerçekleştirmiştir. 100Hz vaya daha yukarısındaki frekansta, saymada hatalar meydana gelmiş ve yanlış değerleri göstermeye başlamıştır. Ama yine de bizim tavsiyemiz uygulanacak frekansın 50 Hz'i geçmemesidir. Sayıcı devrenin girişine buton veya anahtar gibi kontak yapma özellikleri olan malzemeler kullanılırsa, bu malzemelerin çalışması esnasında oluşacak arkları söndürmeye yönelik herhangi bir yazılımsal veya donanımsal çalışma yapılmamıştır. Ark yapan malzemeler kullanılacaksa, girişe teknomerkez.com/index.php?git=1194 adresinde bulunan sayıcı devresinin CMOS 4093 NAND kapılarıyla gerçekleştirilen bölümü kullanılabilir. Yapılan testlerde kullanılan buton ve direncin kondansatörlerle desteklenmesi büyük ölçüde yeterli olmuştur fakat sorunu çözmekte yetersizlikleri görülmüştür. Devrede kullanılan LCD gösterge, iki yollu 32 karakter olarak kullanılmıştır. 16X2 LCD ekranlarda kullanılabilir. RESET butonu ise PIC16F628 mikroişlemcilsini ve sayılan değerleri sıfırlamak amacıyla kullanılmaktadır.

Devredenin PIC16F628 mikrokontrolör yazılımında sayıcı olarak TIMER-0 zamanlayıcı/sayıcı'sı kullanılmıştır. Bu zamanlayıcı/sayıcı özelliklerine kısaca bakacak olursak;

  • 8 bitlik bir zamanlayıcı/sayıcıdır. 0-255 arası sayabilir.
  • TMR0 özel amaçlı saklayıcısı ile bu zamanlayıcının değeri okunabilir veya bu saklayıcıya veri yazılabilir.
  • 8 bitlik ön bölücü kullanılarak zamanlama süresi/sayma miktarı ayarlanabilir.
  • Dahili komut çevrimi veya harici saat işareti ile çalışabilir.
  • TMR0 saklayıcısının değeri 255'ten 0'a geçtiğinde kesme üretir.
  • Harici saat işareti için kenar seçimi yapılabilir.


TMR0'ın bu özelliklerini kontrol ederek düzenlemek için OPTION saklayıcısı kullanılır. Gerekli bilgiler için PIC16F628 katalog bilgilerinden faydalanılabilir. Programda kullanılan OPTION değeri programın çalışmasını düzenlemek amacıyla 10111000 olarak seçilmiştir. Bit7'den itibaren bit1'e doğru tanımlayacak olursak,

  • 1 = Port B'deki pull-up dirençleri iptal.
  • 0 = kesme inen kenarda oluşsun.
  • 1 = RA4/T0CKI ucundan girilen saat işareti.
  • 1 = RA4/T0CKI işaretin düşen kenarından sayma değeri arttırılır.
  • 1 = Ön bölücü WDT için çalışır.
  • 000 = TMR0 oranı 1:2


özelliklerini seçmiş olduk. Burada kullanımda faydalı olacağını düşündüğümüz bir noktayı da izah etmekte yarar var. Bu devremizde, giren palsın inen kenarından sayma işlemi yapılmaktadır. Yani butonun bırakma anında sayım yapılmaktadır. Sayma işlemini yükselen kenardan yapmak gerektiğinde OPTION değerindeki bit4'ün 1 olarak atanan değerini 0 olarak atamak gerekmektedir. Bu durumda OPTION değeri 10101000 olacaktır. Böylece butona basıldığı anda sayma işlemi gerçekleşir.

Devrede kullanılan yazılım JAL ile hazırlanmıştır. JAL için gerekli kaynaklar jal.sourceforge.net web sitesinde geliştirilmektedir. 

Devrenin Şeması:

Şekil 1: Sayıcı devrenin temel devre şeması.

Şekil 2: Sayıcı devrenin buton ile saydırıldığı devre şeması.

Resim 1: Tamamlanmış devrenin, çalışır vaziyetteki görünümü.

Ekler:

JAL Devreye ait programın Jal ile hazırlanmış dosyasına bakmak için tıklayınız.
Devreye ait programın Jal ile hazırlanmış dosyasını sıkıştırılmış zip dosya olarak indirmek için tıklayınız.
Devreye ait programın HEX yazılım dosyasını indirmek için tıklayınız.
JAL programı için ek olarak verilen .lib kütüphane dosyalarını indirmek için tıklayınız.

Notlar:

  • Yazılımın PIC16F628'e programlanması için kullandığımız IC-PROG programlayıcısı için osilatör ve sigorta bilgileri resimdeki gibi seçilmiştir.


Resim 2: Progrmalama için IC-PROG programlayıcı konfigürasyon bilgileri.

  • Ekte verilen kütüphane dosyaları sisteminizde mevcut değilse JAL programının lib klasörüne kopyalayınız.

Devrenin JAL ile hazırlanan programı:

-- ===============================================
-- mehmet.yilmaz@teknomerkez.net
-- 20070924
-- 0-999999 ileri LCD sayici
-- ===============================================
include 16f628_4i -- 4MHz dahili osilator
include jlib
include hd447804  -- hd447804 kütüphanesi kullanılacak
include comp      -- 16f628 icin analog
                  -- karsilastiricilerin kapatilmasi
-- === PORTLARIN YONLENDIRILMESI ===
disable_comp      -- analog karsilastiricilar kapatildi
-- === DEGISKENLER ===
var byte saymaya1 = 0
var byte saymaya2 = 0
var byte saymaya3 = 0
var byte saymaya4 = 0
var byte saymaya5 = 0
var byte saymaya6 = 0
-- === AYARLAMALAR ===
option = 0b10111000
tmr0 = 0
hd44780_clear
-- === ALT PROGRAMLAR ===
procedure sayici is
hd44780 = "S"
hd44780 = "A"
hd44780 = "Y"
hd44780 = "I"
hd44780 = "C"
hd44780 = "I"
end procedure
-- === PROGRAM BASLANGICI ===
forever loop
 if tmr0 > 9 then  -- eger tmr0 9'dan buyukse
    saymaya2 = saymaya2 + 1
    if saymaya2 == 10 then
     saymaya2 = 0
     saymaya3 = saymaya3 + 1
     if saymaya3 == 10 then
      saymaya3 = 0
      saymaya4 = saymaya4 + 1
      if saymaya4 == 10 then
       saymaya4 = 0
       saymaya5 = saymaya5 + 1
       if saymaya5 == 10 then
        saymaya5 = 0
        saymaya6 = saymaya6 + 1
        if saymaya6 == 10 then
         saymaya6 = 0
        end if
       end if
      end if
     end if
    end if
 tmr0 = 0 -- 0 yap seklinde tmr0 sayıcısı kosullandi
 end if
 saymaya1 = tmr0
   hd44780_line1
   sayici -- sayici alt programi cagrildi
   hd44780_line2
   print_decimal_1 ( hd44780, saymaya6, "0" )
   print_decimal_1 ( hd44780, saymaya5, "0" )
   print_decimal_1 ( hd44780, saymaya4, "0" )
   print_decimal_1 ( hd44780, saymaya3, "0" )
   print_decimal_1 ( hd44780, saymaya2, "0" )
   print_decimal_1 ( hd44780, saymaya1, "0" )
end loop
-- === PROGRAM SONU ===

Yorumlarınız

ismail - 08.10.2007
hocam ben jal programlamada lcd 2 satırlı kullanılmış
ben 4 satırlı lcd kullanabilirmiyim bana bunun yazılımı hakkında bilgi gönderirseniz sevenirim
ayrıca güzel bir çalışma
kutlarım
Mehmet Yılmaz - 10.10.2007
Sayın İsmail, Benim elimde olmadığından 4 satırlı LCD ekranlı deneme fırsatım bulunmamaktadır. Bunu siz de deneyebilirsiniz. hd44780_line3 ve hd44780_line4 komutlarıyla deneyip sonucunu burada açıklarsan sevinirim. Gerekli kodlar yazıda var.
Agah Gökdağ - 26.03.2008
Sayın hocam , aktardığınız bilgiler ışığında bu sayıcı devresini yapmayı planlıyorum.Çok kompact olmasına rağmen led displaylisini yapmak için gerekli modifikasyonları nasıl edinebilirim. Saygılarımla
idris - 14.03.2009
syn hocam bu programı ns pıc'e aktarıyoruz pc var herhangi bi donanım gerektiriyormu.
Erkan HAcısalihoğlu - 26.11.2010
Web sitenizde yayınlanan 628 A ile yapılmış sayıcı devresini yapmaya çalışıyoruz. Fakat ekranda sadece siyah kutucuklar çıkıyor. Nerede hata yapmış olabiliriz. YArdımcı olursanız seviniriz.
makinist - 23.03.2014
ekranda sadece siyah kutucuk cıkıyorsa siz ekranin vc vd vo uclarına bot bağlamamışsınız demektir
Benimde başıma geldi konsrat ayarı için


Bende 16F877a ile serve motor sürücü devresi yaptım maxsimum 255 e kadar yükseldiği için motor yavaş dönüyor daha üretilen osilator kare dalga daha fazla olması gerek en az 1000
bunun sizin verdiğiniz bu kod ile yapabilirmiyim

Bir yorum ekleyin

İsim:
E-posta:
Yorumunuz:
Güvenlik Kodu:
 
Tüm alanları doldurmak zorunludur. Yorumunuz kontrol edilince yayınlanacaktır. E-posta adresi yayınlanmaz.
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>