Teknik Bilgiler Merkezi - www.teknomerkez.net
Mavi
Yeşil
Kırmızı
Gri
Ana Sayfa Bölümler Konular Etiketler Sorular Arama-Sözlük Arşiv İletişim
 
Mehmet Yılmaz son yazıları
1- Python ve PyQt ile Ohm Kanunu Hesaplayıcısı
2- Projem - Python ve Tkinter ile proje dosya ve klasörlerinin yönetimi
3- PIC16F628, Jal ve Ledlerle Yapılan Işık Gösteri Devresi
4- Notebook LCD Monitör İnvertörleri İçin Test Devresi
5- Fiat Albea Oto CD Çalar Ekranı Hariç Çalışmıyor
Mehmet Yılmaz Arşivi
Etiketler
 16F628   Devre   Gösterge   JAL   LCD   Saat 
Arama

Metin
Yorum
Soru
Cevap
  Ana Sayfa > Elektronik > Uygulamalar > Pic > Jal Gönderen:Mehmet Yılmaz Tarih:30.09.2007
JAL ile Programlı PIC16F84 Entegreli LCD Göstergeli Ayarlanabilir Saat Devresi

Mehmet Yılmaz
mehmet.yilmaz@teknomerkez.net

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 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 ===

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.




  Ana Sayfa > Elektronik > Uygulamalar > Pic > Jal Gönderen:Mehmet Yılmaz Tarih:30.09.2007

Bilgilerin uygulanmasından oluşabilecek hasarlardan sitemiz ve yazarlar sorumlu değildir.

Yukarı 

Kaynak ve yazar belirtilerek alıntı yapılabilir - Yazı göndermek için - Yayın politikamız, Teknomerkez hakkında - Yardım

İletişim