Site içi Arama

Ara

JAL ile Programlı PIC16F84 Entegreli LCD Göstergeli Ayarlanabilir Saat Devresi

Mehmet Yılmaz - 30.09.2007

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 ===
Adana'da dünyaya geldi. Televizyon tamirciliğınde çırak olarak erken dönemde iş hayatına başladı. Daha sonraları Adana ve Ankara'da imalat, bilgisayar ve danışmanlık sektöründe iş hayatına devam etti. Şu anda kendisine ait işyerinde çalışmalarına devam etmektedir.
Web adresi: www.teknimer.com
E-posta: mehmet@teknimer.com
Sayfa Etiketleri:16F84 (9) Lcd (8)
İçerik Yan Blok
Konular
Tasarım: Teknimer Teknoloji
Yukarı