LCD Göstergeli Alarmlı Dijital Saat
Her amatör elektronikçinin gönlünden bir saat yapmak geçer. İşte size bu konuda yol gösterecek güzel bir proje. Buyrun yapın arkadaşlarınıza gösterebileceğiniz bir saat devreniz olsun.
Merhaba arkadaşlar,
Antrak Gazetesi'nde ilk kez yazı yazıyorum. Bu yazıda yaptığım dijital saatin çalışmasını anlatacağım. Bu saat çok komplike bir saat olup kullanımı da çok basittir. Saatin kullanımını, günümüzde de iyice yaygınlaşan, cep telefonlarına benzetmeye çalıştım. Bu hem görselliğe hem de kullanım kolaylığına hitap ediyor. Ayrıca bu mönülerde işlemleri halledebilmek için sadece üç tane buton kullanılması da basitliğini iyice arttırıyor.
İlk önce devrenin açıklamasını yapmak istiyorum. Devrenin en önemli kısımlarından birisi saat palsini üreten kısmı. Ben bu saat palsini RTC (Real Time Clock) entegreleri yerine her yerde satılan küçük alarmlı analog saatlerin içinde bulunan elektronik devre ile sağladım. Ayrıca bunun maliyeti diğer pals üreteçlerinden daha ucuz. Piyasada özellikle seyyar satıcılarda yaklaşık olarak 1 yada 1,5 milyon arasında değişen fiyatlarla bulabilirsiniz. Bu elektronik devrenin üzerinde alarmı da bulunduğu için PIC'in bir portu ile röleyi sürerek bu alarmı kullanmam işimi kolaylaştırdı. Bu saat devresinin ürettiği palsin genliği yaklaşık olarak 0-125mV arasında değişiyor. Bunu da direkt olarak PIC'in RB0/INT ucuna bağlayamayacağım için bir adet BC237 transistor ile yükselttim. Yalnız bu elektronik devre iki saniyede bir pals ürettiği için PIC'deki saniye registerini her Interrupt palsinde iki saniye arttırdım. Devrede PIC'den LCD göstergeye veri göndermek için PIC'in sadece iki portunu (RA2 ve RA3) kullandım. Bu portlardan LCD panele paralel 8 bitlik verileri gönderebilmem için 74164 (Serial Input/Paralel Output Shift Register) ile seri bilgileri paralel 8 bit veri haline çevirdim.
Program basit. Yalnız programın boyutu çok büyük olduğu için saatin fonksiyonlarını kısıtlayıp PIC 16F84'e sığdırmak zorunda kaldım. Saatin alarm çalma, alarm çalarken bir cihazı çalıştırma, bir cihazı çalıştırıp başka bir cihazı kapatma ve bir bilgisayarı açma gibi fonksiyonları bulunmaktadır. Bu fonksiyonlardan bazılarını harici anahtarlarla, bazıları ise programın mönülerini kullanarak kontrolü yapılmaktadır. Bu devrenin yük kontrolü de yapması istenirse sadece PIC'in RB4 çıkışından bir role daha sürerek onun normalde açık ve normalde kapalı kontakları ile prizler oluşturulup istenen cihazın buralara bağlanıp zamanı geldiğinde açılıp kapanması sağlanacaktır. PIC'in RB1 girişine bağlanan anahtar kapatıldığı zaman, saatin alarmı çaldığında PIC'in çıkışları, bir butona basma süresi kadar, kısa bir müddet aktif kalır. Bu anahtar, saate bilgisayar bağlamak istendiği zaman aktif yapılır ve PIC'in RB4 çıkışındaki rölenin diğer normalde açık kontağı bilgisayarın power düğmesine paralel olarak bağlanırsa alarm kurulduğunda alarm yerine bilgisayar açılır. Tabi bunu bilgisayarınızda XP yüklü ise kullanmak daha uygun olur. Çünkü XP'nin bilgisayarı hazırda bekleterek kapatma yani bilgisayarınızı hangi durumda hazırda bekletip kapatırsanız bilgisayarınızı bıraktığınız gibi açarsınız. Örneğin saatin alarmını kurup bilgisayar moduna aldıktan sonra, XP yüklü bilgisayarınızı direkt olarak kapatmak yerine Winamp'ı açıp, bir şarkıdan başlattıktan sonra bilgisayarınızı hazırda beklet seçeneği ile kapatırsanız sabahleyin istediğiniz müzikle, istediğiniz ses yüksekliğiyle uyanma şansınız olur.
Program iki saniyede bir gelen pals ile tetiklenip interrupt alt programına dallanır ve PIC'in içinde bulunan SANIYE1 registerini INCF komutunu kullanarak iki kez arttırır ve bütün sayıcılarda olduğu gibi ulaşması gereken sayıya ulaşıp ulaşmadığını kontrol eder ve eğer ulaştıysa bir sonraki register olan SANIYE2 registerini bir arttırır ve onunda istenen sayıya ulaşıp ulaşmadığını kontrol eder. Bu şekilde iki saniyede bir pals geldikçe bütün registerler dahil olmak üzere ki bunlar içinde gün, ay, yıl, saat, dakika registerleri olmak üzere hepsini aynı mantıkla kontrol eder. Kontrollerden sonra ana programa dönerek nerde kaldıysa örneğin siz bir mönüdeyken, bir ayar yaparken veya normal konumundayken kaldığı yere döner ve ilgili registerleri değiştirerek program akışında değişikliklere yol açar. Örneğin alarm çalar veya zaman artarak göstergeyi tazeler. Alarm zamanını kontrol mantığı ise iki saniyede bir gelen zaman ile sürekli olarak ilgili registerlerin birbirine eşit olup olmadığını kontrol eder. Bu da SUBWF komutunu kullanıp STATUS registerinin ikinci bitinin bir olup olmadığının kontrolü ile yapılır. PIC'e iki saniyede bir pals gelmesi de işimi kolaylaştırdı çünkü LCD göstergeye gönderdiğim veriler arasında küçük beklemeler yapmak zorundayım. Bunun sebebi PIC16F84, LCD göstergeden daha hızlı işlem yaptığından dolayı LCD göstergenin veriyi kaydetmesi için ona zaman tanımak.
Gerekli olan dosyaları aşağıda verdim. Bu dosyalar arasında anolog saatten sökülecek olan devrenin şemasını da verdim. Sorularınız ve önerileriniz için bana yazabilirsiniz.
Kolay Gelsin!
1-HEX kodu
2-Devre şeması
3-Saat devresi