Daha önce DS18B20 için sitemizde verdiğimiz sürücü ve örnek uygulama programına ek olarak DS1302 gerçek zaman saati entegresi eklenerek lcd ekranlı saat, termometre devresi proteus programında gerçekleştirilmiştir. Verilen programa saat ayarlama butonları ekleyerek kendi çalışmalarınızda kullanabilirsiniz.
Programı aşağıda inceleyebilirsiniz.
/////////////////////////////////
// www.ccspic.com
/////////////////////////////////
#include <16f873.h> //Kullanılacak pic
#use delay(CLOCK=4000000) //Fosc=4Mhz
#fuses XT,NOPUT,NOPROTECT,NOBROWNOUT,NOLVP,NOWDT // Denetleyici konfigürasyon ayarları
#define use_portb_lcd TRUE //B portu lcd için ayrılıyor
#define RTC_SCLK PIN_c6 //DS1302 için pin tanımlamaları
#define RTC_IO PIN_c7
#define RTC_RST PIN_c5 //
#include “ds1302.c” //ds1302 ait fonksiyonlar programa eklenir
#include “lcd.c” //lcd ait fonksiyonlar programa eklenir
#include “ds18b20.c” //ds18b20 ait fonksiyonlar programa eklenir
//Global deÄŸiÅŸkenler
int saniye,dakika,saat,gun,ay,yil,haftanin_gunu; //ds1302 deÄŸiÅŸkenleri
///PROGRAM
void main(void){
float temp;
lcd_init(); // LCD başlangıç ayarları yapılıyor
rtc_init(); // DS1302 başlangıç ayarları yapılıyor
rtc_set_datetime(6,5,8,2,22,52); // Tarih ve Saat ayarları yapılıyor
while(1)
{ //Sıcaklık bilgisi okunuyor ve çevriliyor
temp = ds1820_read();
// DS1302′den saat,dakika,saniye bilgileri alınıyor
rtc_get_time(saat,dakika,saniye);
// DS1302′den gün,ay,yil ve günün isim bilgisi alınıyor
rtc_get_date(gun,ay,yil,haftanin_gunu);
//LCD’ye sıcaklık,gün,ay,yıl bilgileri yazdırılıyor
printf(lcd_putc,”\f%3.1f%cC %02d/%02d/%02d\n”,temp,223,gun,ay,yil);
switch(haftanin_gunu) // DS1302′den sayısal olarak alınan haftanın günü bilgisine
{ // metin olarak karşılık atanıyor
case 1: printf(lcd_putc,”PAZ”); break; // EÄŸer “1″ ise LCD’ye PAZ yaz
case 2: printf(lcd_putc,”PZT”); break; // EÄŸer “2″ ise LCD’ye PZT yaz
case 3: printf(lcd_putc,”SAL”); break; // EÄŸer “3″ ise LCD’ye SAL yaz
case 4: printf(lcd_putc,”CRS”); break; // EÄŸer “4″ ise LCD’ye CRS yaz
case 5: printf(lcd_putc,”PER”); break; // EÄŸer “5″ ise LCD’ye PER yaz
case 6: printf(lcd_putc,”CUM”); break; // EÄŸer “6″ ise LCD’ye CUM yaz
case 7: printf(lcd_putc,”CTS”); break; // EÄŸer “7″ ise LCD’ye CTS yaz
}
// LCD’ye saat,dakika ve saniye deÄŸerlerini yaz
printf(lcd_putc,” %02d:%02d:%02d”,saat,dakika,saniye);
delay_ms(1000); // 1 sn gecikme veriliyor
}
}
Devreye ait tüm dosyalar burada.

Erhan Kas 11, 2008
Merhaba aynı devreyi kurdum yalnız sıcaklık hem 180 derece gibi birşey gösteriyor. Sonra elimi ds18b20 ye koyunca 240 lara felan çıkıyor
Sebebi ne olabilir sizce ?
admin Kas 22, 2008
bulduğunuz 180 ve 240 değerleri aslında 18.0 ve 24.0 dır. program içerisinde
temp = ds1820_read(); satırını
temp = ds1820_read()/10,0; yapınız
Erhan Ara 2, 2008
TeÅŸekkür ederim admin çalıştı. Yalnız Proteus simulasyonunda neden bu sefer 1.8 derece gibi görünüyor. Bir yerde problem var gibi ama hala…
(devrele proteusta başka gerçekte başka çalışabilir -admin)
elohab Ara 17, 2008
proteusta saniye 2şer 2şer atlıyo ve yavaş ilerliyor.boarda kursam aynı hatayla karşılaşır mıyım acaba??
serkan Nis 12, 2009
SLM BEN BU DEVREYİ YAPTIM BİR TEK PİC LERİ PROGLAMLAMASI KALDI BU DECREYE ENERJİ NERDEN VERİYORUZ.ayrıca bu devreye buton gerekiyormu yani koymazsak olmazmı?
admin Nis 12, 2009
devreyi proteustamı breadboard üzerindemi yaptınız? proteusta ise simülasyon programı olduÄŸu için beslemeye gerek yok gerçekte kurduysanız entegrelerin sensörün ve lcd’nin besleme uçlarına uygun gerilimi vermelisiniz.
devrede saat ayarlaması yapılmadığı için buton kullanılmamıştır.
murat May 6, 2009
Arkadaşlar temp = ds1820_read()/8,0; yapınca oluyor.
gökhan Haz 28, 2009
ArkadaÅŸlar burdaki sistemi 7 segmentte yapmak istiyorum.Sistem DS18B20 den veri okuması yaklÅŸaık 1 sn yi buluyor bu sırada segmenti taratamıyorum.Yardımcı olun…
admin Haz 29, 2009
tarama işlemini zaman kesmeleriyle yapmalısın