PIC16F877 ile LM35 Negatif Sıcaklık Ölçümü

Daha önce PIC16F877 mikrodenetleyicisi ile LM35 sıcaklık sensörünün kullanımını anlatmıştık. Bu yazımızda ise LM35 negatif sıcaklık ölçümü yapıyoruz. Bu içeriğe geçmeden önce mutlaka önceki yazımıza göz atmanızı öneririz.

LM35 sıcaklık sensörü, veri sayfası bilgilerine göre -50 ile +150 derece arasında sıcaklık ölçebiliyor. Sensör, temel bağlantı durumunda (pozitif sıcaklık ölçme) +2 ile +150 derece arasında  her 1 derece artışa karşılıkta 10mV gerilim üretiyor. Yani sensör 1 derecelik sıcaklık artışı için için 10mV gerilim üretiyor.

Sensörü 4-30V gerilim ile besleyebilmek mümkün. Sensör hiç ek eleman gerektirmeden, besleme gerilimi verildiginde çıkışından direk pozitif sıcaklık değeri ile orantılı gerilim bilgisi alınabiliyor. Fakat bu bağlantı ile negatif sıcaklıkları ölçmek mümkün değil.

Negatif sıcaklık ölçümü için datasheet’te farklı alternatifler mevcut. Yazıda en kolay yol olan iki diyot ve bir direnç ile yapılan uygulamayı işleyeceğiz.

PIC16F877 ile LM35 Negatif Sıcaklık Ölçümü lm35 negatif sıcaklık,lm35 negatif,pic16f877 ile lm35 negatif,negatif sıcaklık ölçümü,negatif sıcaklık
LM35 Sıcaklık Sensörü

Bağlantı şekli görüldügü gibi oldukça sade. Şimdi bu şemadan nasıl sıcaklık okuyacagımıza gelelim. Şemada “+” ve “-” ile gösterilen uçlar birer analog girişe bağlanır, analog girişler okunur. “+” uçtan okunan değere ilk_deger, “-” uçtan okunan değerede son_deger diyelim. ilk_deger-son_deger işleminin sonucunun pozitif veya negatif olma durumu sıcaklığın negatif veya pozitif olmasına karşılık gelecektir.

İşlem sonucunun sayısal değeride bize sıcaklık değerini verecek. Tabi bu veri ham gerilim bilgisi oldugundan bunu önce gerilime, sonrada sıcaklıga çevirmemiz gerekiyor.

Proje Kodu

#include <xc.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include "usart.h"

 #define _XTAL_FREQ 4000000
void main() {
 TRISA = 0xFF;
 PORTA = 0x00;
 usart_init();
 ADCON1 = 0x80; 
 ADCON0 = 0x41; // ADC Clock, ADC aktifleştirme
 const float adc = 500.0 / 1023;
 int ilk_deger, son_deger;
 float  sicaklik;
 printf("LM35 Negatif Olcum\n\r");
 for (;;) {
 ADCON0bits.CHS=0x00; //AN0 seçimi
 __delay_us(25);
 ADCON0bits.GO_DONE = 1; // Çeviri başlatma
 while (ADCON0bits.GO_DONE); // Çeviri bitmesini bekleme
 ilk_deger = (ADRESH << 8) + ADRESL;
 ADCON0bits.CHS=0x01; //AN1 seçimi
 __delay_us(25);
 ADCON0bits.GO_DONE = 1; // Çeviri başlatma
 while (ADCON0bits.GO_DONE); // Çeviri bitmesini bekleme
 son_deger = (ADRESH << 8) + ADRESL;
 sicaklik =(ilk_deger - son_deger)*adc;
 printf("ham1:%d    ham2:%d   sicaklik:%f\n\r", ilk_deger, son_deger, sicaklik);
 __delay_ms(1000);
 }
 }

Devre Simülasyonu

PIC16F877 ile LM35 Negatif Sıcaklık Ölçümü lm35 negatif sıcaklık,lm35 negatif,pic16f877 ile lm35 negatif,negatif sıcaklık ölçümü,negatif sıcaklık