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.

Pic16f877 ile termometre devresi 1

16f877 Lm35

#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"]

Read More