JAL ile Programlı PIC16F84 Entegreli LCD Göstergeli Ayarlanabilir Saat Devresi
Bu devre, saat olarak kullanılmak amacıyla tasarlanmıştır. Bu devre ile saati istediğimiz değere ayarlayabiliriz. Kristal osilatör referaslı olarak çalıştığı için bir kez ayarlandıktan sonra geri kalma veya ileri gitme gibi sorunlar ortaya çıkmaz. Ayarlaması çok basit ve pratiktir. Saat devresi olarak sunulan pek çok devrenin aksine bu devre eksiksiz saat özelliklerinin hepsini üzerinde taşımaktadır.
Devrenin Çalışması ve Yapısı:
Devrede PIC 16F84 mikrokontrolör entegresi kullanılmıştır. Programı ise JAL ile hazırlanmıştır. Devreyi ve aynı zamanda saati sıfırlamak amacıyla bir adet buton kullanılmıştır. PIC16F84 entegresinin 4 nolu RESET ucuna bağlı olan bu butona basılıp bırakıldığı anda devre ve saat değerleri sıfırlanır yani resetlenmiş olur. Saati ve dakikayı ayarlamak amacıyla iki adet buton kullanılmıştır. Saati ayarlamak için PIC16F84 entegresinin 18 nolu RA1 ucuna bağlı olan B2 butonuna basılınca o anda göstergede bulunan saat değeri bir artırılır. Sürekli basılı tutulursa yarım saniye aralıklarla saat değeri birer birer artar. Bu artırma sırasında saniyenin değeri ise sıfırlanır. Saat için her yapılan ayarlamadan sonra saniye değeri sıfırdan saymaya başlar. Dakikayı ayarlamak için, aynı saati ayarladığımız yöntemi kullanırız. Dakikayı ayarlamak için PIC16F84 entegresinin 17 nolu RA0 ucuna bağlı olan B1 butonuna basılınca o anda göstergede bulunan dakika değeri bir atırılır. Sürekli basılı tutulursa yarım saniye aralıklarla dakika değeri birer birer artar. Bu artırma sırasında saniyenin değeri ise sıfırlanır. Dakika için her yapılan ayarlamadan sonra saniye değeri sıfırdan saymaya başlar.
Devrede 2 satırlı 16 karakterli LCD ekran kullanılmıştır. Göstergenin birinci satırında “Saat” ibaresi yazılıdır. İkinci satırda ise saat bulunmaktadır. LCD ekranın kontrast ayarını yapmak için RV1 10K ayarlı direnci kullanılmıştır. Devrenin mikrokontrolör yazılımında sayıcı olarak Timer0 zamanlayıcı/sayıcı'sı kullanılmıştır. Timer0'ın zaman aşımı kesmesi özelliğinden yararlanılarak zaman ve saydırma işlemi gerçekleştirilmiştir. Devrede kullanılan osilatörün frekansı 4.194304 Mhz olarak seçilmiştir. Programda kullanılan işlemler açık olarak yazıldığından ve bölümler halinde düzenlendiğinden yeterince bilgiyi içermektedir.
Devrenin Şeması:
Şekil 1: LCD göstergeli ayarlı saat devresi şeması.
Devrenin resmi:
Resim 1: Tamamlanmış devrenin çalışır şekildeki görünümü.
Devrenin Malzeme Listesi:
U1: PIC 16F84
LCD1: İki satır LCD
R1, R2: 470
R3: 1K
RV1: 1K trimpot
XTAL: 4.194304MHz
C1, C2: 22pF
B1-B3: Buton
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ı sıkıştırılmış zip dosya olarak indirmek için tıklayınız.
Devrenin JAL ile hazırlanan programı:
-- ==================================== -- mehmet.yilmaz@teknomerkez.net -- 29.09.2007 -- LCD ayarli saat uygulamasi -- ==================================== include 16f84_4 -- 4.194304 Mhz'lik osilator kullanilacak include jlib include hd447804 -- LCD ekran icin kullanilacak -- === PORTLARIN YONLENDIRILMESI === pin_a0_direction = input pin_a1_direction = input -- === DEGISKENLER === var byte saat = 0 var byte dakika = 0 var byte saniye = 0 var byte clock = 0 -- === AYARLAMALAR === hd44780_clear -- === ALT PROGRAMLAR === procedure saat_yazisi is hd44780 = "S" hd44780 = "a" hd44780 = "a" hd44780 = "t" end procedure procedure saat_ayarla is if pin_a1 == high then delay_500ms saat = ( saat 1 ) % 24 saniye = 0 end if if pin_a0 == high then delay_500ms dakika = ( dakika 1 ) % 60 saniye = 0 end if end procedure procedure saat_sayaci is pragma interrupt clock = ( clock 1 ) % 32 if clock == 0 then saniye = ( saniye 1 ) % 60 if saniye == 0 then dakika = dakika 1 if dakika == 60 then dakika = 0 saat = saat 1 if saat == 24 then saat = 0 end if end if end if end if intcon_t0if = low end procedure option = 0b10000110 -- 1/128 tmr0 = 0 intcon_t0if = low intcon_t0ie = true intcon_gie = true -- === PROGRAM BASI === forever loop saat_ayarla hd44780_line1 saat_yazisi hd44780_line2 print_decimal_2 ( hd44780, saat, "0" ) hd44780 = ":" print_decimal_2 ( hd44780, dakika, "0" ) hd44780 = ":" print_decimal_2 ( hd44780, saniye, "0" ) end loop -- === PROGRAM SONU ===
Yorumlarınız
bana yardımcı olursanız swvınırım.bırde birde lcd ekranı nasıl bulabılırım
JAL, PICBASIC gibi PIC programlamada kullanılan bir programdır. http://www.projearsivim.com/ sitesinde türkçe bilgiler bulabilirsin.
option = 0b10000110 -- 1/128
satırında tanımlanan option değeri ile elde edilen bölüm saniyeyi tam zamanlı olarak veriyor. Sizin yaptığınız gibi dahili osilatör kullanırsanız bölüm küsüratlı çıkar.
Option değeri açıklamaları için http://www.teknomerkez.net/makale.asp?konu=333 adresine bakınız.
Bir yorum ekleyin
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>