PIC|ULAK PIC|ULAK ile Saatli Masa Termometresi By Sinan Sözügüzel Posted on 4 Mart 2016 8 min read 0 1 4,551 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Merhaba arkadaşlar, Bu yazımızda, MekatronikLAB firmasının üretmiş olduğu PIC mikrodenetleyiciler ile proje geliştirme kiti PIC|ULAK ile rtc(real time clock) ve lm35 sensörünü kullanarak saatli masa termometresi adını verdiğim uygulamyı gerçekleştirdik. 🙂 Öncelikle rtc(real time clock) modülü ve lm35 sıcaklık sensörüyle ilgili bikaç bilgi verelim. RTC(Real Time Clock) modülü, DS1302 entegresi gerçek-zaman saati (RTC) olarak çalışır. Saniyeyi, dakikayı, saati, günü, ayı, yılı, haftanın gününü sayar. 2100 yılına kadarki tarih bilgileri entegrenin içinde kayıtlıdır. Her ayın sonunda otomatik olarak ay ve gün bilgisini ayarlar. Örneğin 29 Şubat 2008 tarihinden sonra 1 Mart 2008 tarihine geçer. 2 V ile 5 V arasındaki gerilimlerde çalışan entegrede, 31 baytlık RAM bölgesi vardır. 2 V besleme geriliminde çalışırken 300 nA’den daha az akım çeker. LM35 sıcaklık sensörü, analog tipte olup santigrad derece başlına 10 milivolt gerilim üretir. Yani, sıcaklığın her 1°C artışına karşlılık, çıkış gerilimi 10mV artar. Örneğin, 20°C için çıkış gerilimi 200mV iken, 100°C için çıkış gerilimi 1V’dur. Malzemeler pic|ulak rtc modülü lm35 4*20 lcd Bağlantı Şeması CCS C Kodları [php] #include <18f2550.h> // kullanılan denetleyici #device ADC=10 //10 bitlik adc kullanıyor. #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // Denetleyici konfigürasyon ayarları #use delay (clock=4M) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor. #define use_portb_lcd TRUE // LCD B portuna bağlı #include <lcd420.c> // LCD.c dosyası programa ekleniyor #include <ds1302.c>// ds1302.c dosyası programa ekleniyor unsigned long int bilgi; // bilgi değişkeni tanımlanıyor. float sicaklik, volt; // sıcaklık ve volt değişkeni tanımlanıyor. byte saniye,dakika,saat,gun,ay,yil,haftanin_gunu; // byte türünde değişkenler tanımlanıyor //******************* ANA PROGRAM FONKSİYONU ******************* void main () { setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı setup_adc_ports(NO_ANALOGS); // ANALOG giriş yok setup_adc(ADC_OFF); // ADC birimi devre dışı setup_CCP1(CCP_OFF); // CCP1 birimi devre dışı setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı set_tris_a(0x01); // RA0 ucu giriş setup_adc(adc_clock_div_32); // adc frekansı. setup_adc_ports(AN0); // RA0 pini analog giriş set_adc_channel(0); // ADC işlemi uyulanıyor delay_us(20); // gecikme. lcd_init(); // LCD başlangıç ayarları yapılıyor rtc_init(); // DS1302 başlangıç ayarları yapılıyor rtc_set_datetime(02,03,16,4,22,44,); // Tarih ve Saat ayarları yapılıyor while(1) { bilgi=read_adc(); // okunan adc bilgi değişkenine aktarılıyor. volt= (0.0048828125*bilgi)*1000; // volt mV cinsinden ayarlanıyor. sicaklik=(volt/10)+2; // 1mViçin 1C ayarlanıyor. rtc_get_time(saat,dakika,saniye); // DS1302’den saat,dakika,saniye bilgileri alınıyor rtc_get_date(gun,ay,yil,haftanin_gunu); // DS1302’den gün,ay,yil ve günün isim bilgisi alınıyor lcd_gotoxy(1,1); printf(lcd_putc,"TARIH:%02d/%02d/20%02d ",gun,ay,yil,); //LCD’ye gün,ay,yıl bilgileri yazdırılıyor lcd_gotoxy(1,3); 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,"PAZAR"); break; // Eğer "1" ise LCD’ye PAZ yaz case 2: printf(lcd_putc,"PAZARTESI"); break; // Eğer "2" ise LCD’ye PZT yaz case 3: printf(lcd_putc,"SALI"); break; // Eğer "3" ise LCD’ye SAL yaz case 4: printf(lcd_putc,"CARSAMBA"); break; // Eğer "4" ise LCD’ye CRS yaz case 5: printf(lcd_putc,"PERSEMBE"); break; // Eğer "5" ise LCD’ye PER yaz case 6: printf(lcd_putc,"CUMA"); break; // Eğer "6" ise LCD’ye CUM yaz case 7: printf(lcd_putc,"CUMARTESI"); break; // Eğer "7" ise LCD’ye CTS yaz } lcd_gotoxy(1,2); printf(lcd_putc,"SAAT:%02d:%02d:%02d",saat,dakika,saniye); // LCD’ye saat,dakika ve saniye değerlerini yaz lcd_gotoxy(1,4); printf(lcd_putc,"SICAKLIK:%5.1f%cC",sicaklik,223); //lcd ye sıcaklık değeri yazdırılıyor. } } [/php] Devrenin Çalışma Videosu