Jal ile Programlı Pic 16F628`li LCD Göstergeli 0-999999 İleri Sayıcı
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
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
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
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>