15 Haziran 2018 Cuma

PIC LM35 LCD termometre

12voltl'a çalışır ve 7805 regüle entegresiyle gerilim 5volt'a düşürülerek pıc16F877 entegresini ve lcd'yi ve LM35 sensörünü besler. 16f877 ile yapılmış termometre uygulamasıdır. PIC'in ADC uçları olan A0 pini (AN0) kullanılmıştır. C5 pini ise lcd çin kullanılmıştır. LM35 ise analog ısı ölçme sensörüdür ve transistöre benzer ortam ısısını +150°c ve -55°c ye kadar ölçerler. LM35 sensörleri her bir derecede 10mv gerilim çıkışı verir.

LM35 BAĞLANTI UÇLARI:














MALΖEME LİSTESİ:
1-7805
2-4MHz kristal
3-2adet 22pf
4-100nf
5-4k7
6-2x16 LCD
7-16F877
8-LM35
9-10K pot

DEVRE ŞEMASI:

















CCSC KODU:
#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#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
   }
}

Hiç yorum yok:

Yorum Gönder