Pic16f877 ile termometre devresi
Ccs C ile termometre uygulamasına bakacağız birlikte. Proje için Lm35 sıcaklık sensörü kullanılmıştır.
National şirması taraşından üretilen 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. LM35 sıcaklık sensörünün pek çok tipi vardır. Her bir modelin sıcaklık ölçüm aralığı ve doğruluğu farklıdır. Örneğin, LM35DZ adlı sensör, 0°C ile 100°C arasındaki sıcaklıkları ölçer ve son derece doğrusal bir karakteristiğe sahiptir.
Devre ve Çalışması : A/D dönüştürücü için gerekli analog giriş için LM 35 ısı sensörü kullanılmıştır.LM 35 ısı sensöründen gelen analog sinyaller A/D dönüştürücü tarafından dijital sinyallere dönüştürülerek mikrodenetleyici tarafından işlene bilecek hale getirilir. İşlenen bu sinyaller çıkış birimi olan LCD ye sıcaklık değeri olarak yazdırılır.
#include <16f877.h> #device ADC=10 // 10 bitlik ADC kullanılacağı belirtiliyor. // Denetleyici konfigürasyon ayarları #fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD #use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor. #use fast_io(a) //Port yönlendirme komutları A portu için geçerli #define use_portb_lcd TRUE // LCD B portuna bağlı #include <lcd.c> // lcd.c dosyası tanıtılıyor unsigned long int bilgi; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor float voltaj,sicaklik; // ondalıklı tipte değişkenler tanıtılıyor //********** ANA PROGRAM FONKSİYONU******* void main ( ) { setup_psp(PSP_DISABLED); // PSP birimi devre dışı 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_CCP1(CCP_OFF); // CCP1 birimi devre dışı setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı set_tris_a(0x01); // RA0 Giriş olarak yönlendiriliyor setup_adc(adc_clock_div_32); // ADC clock frekansı fosc/32 setup_adc_ports(AN0); //RA0/AN0 girişi analog lcd_init(); // LCD hazır hale getiriliyor set_adc_channel(0); // RA0/AN0 ucundaki sinyal A/D işlemine tabi tutulacak delay_us(20); // Kanal seçiminde sonra bu bekleme süresi verilmelidir printf(lcd_putc,"\fSicaklik="); // LCD'ye yazı yazdırılıyor while(1) // sonsuz döngü { bilgi=read_adc(); // ADC sonucu okunuyor ve bilgi değişkenine aktarılıyor voltaj=(0.0048828125*bilgi)*1000; // Dijitale çevirme işlemine uğrayan sinyalin mV olarak gerilimi hesaplanıyor sicaklik=(voltaj/10)+2; // Her 10mV'ta 1 derece artma lcd_gotoxy(10,1); // İmleç 1. satır 10.sütunda printf(lcd_putc,"%5.1f'C",sicaklik); // LCD'ye sıcaklık değeri yazdırılıyor // Gösterilecek ondalıklı değerin toplam basamak sayısı 5 olacak. // Gösterilecek değerin ondalıklı kısmı ise 1 basamak olacak. %5.1f // komutu ile bu işlemler yaptırılmıştır. delay_ms(100); // 100 msn gecikme } }
Proteus ve Ccsc dosyalarını indirmek için : [ddownload id="3142"]