PIC16F877 ile LM35 Sıcaklık Sensörü Kullanımı

Bu içeriğimizde, PIC16F ile LM35 sıcaklık sensörü kullanımını işliyoruz. Bu içeriği uyguladığınızda temel olarak ADC yani analog, dijital dönüşümünü öğrenmiş olacaksınız. Koda kısmında ADC ile işlenen veriler 10 bit çözünürlüğe sahiptir yani girişe uygulanan veriyi (0,1023) olarak işler. Giriş verilerini LM35’ten alacağımız için gelen veriler voltaj bilgisi olacaktır bu veriyi işleyerek sıcaklık bilgisine çevireceğiz.

PIC16F877 mikrodenetleyicisinde ADC işlemleri için 8 farklı kanal bulunmakta, bu kanallar PORTA ve PORTE‘ye bağlıdırlar. Ayrıca ADC işlemleri için kullanabileceğimiz register’lar yani kaydediciler ADCON0 ve ADCON1‘dir. Bu kaydedicileri kullanmak için dönüşümün kaynak frekansı, başlama bitleri gibi ayaları vardır, projeyi gerçekleştirmeden önce bu kaydedicileri inceleyelim.

Ayrıca LM35 sensörünün veri sayfasına buradan bakabilirsiniz.

ADCON0 Kaydedicisi

Bu kaydedicinin genel mimarisi aşağıdaki gibidir:

PIC16F877 ile LM35 Sıcaklık Sensörü Kullanımı lm35 sıcaklık sensörü kullanımı,lm35 sıcaklık sensörü,lm35 sıcaklık sensörü nasıl kullanımı,lm35 sıcaklık sensörü uygulaması,lm35 sıcaklık sensörü nedir
ADCON0 Kaydedicisi

ADCON BIT0(ADON)

Analog, dijital çeviriyici yetkilendirme bitidir. ADON=1 ise A-D çevirici açıktır ve işlem yapılabilir. ADON=0 ise A-D çevirici kapalıdır.

ADCON BIT2(GO/DONE)

 Eğer ADON değeri 1 ise A-D çevirici statü biti görevini üstlenir. GO/DONE=1 ise A-D çevirici işlem yapıyor demektir. GO/DONE=0 ise A-D çevirici üzerinde herhangi bir işlem yapılmıyordur.

ADCON BIT3-4-5(CHS0-CH1-CHS2)

A-D çevirici için kanal seçim bitlerini oluşturur. Bu bitlere verilecek değerlerle A-D çevirme için hangi kanalın seçileceği belirlenir. Daha önceden de belirttiğimiz gibi PIC 16F877’de A-D çevirici için 8 kanal mevcuttur. Aşağıda sağdan sola CHO-CH1-CH2’nin bit durumlarına göre seçilen kanallar gösterilmiştir.

000 = kanal 0, (RA0/AN0)
001 = kanal 1, (RA1/AN1)
010 = kanal 2, (RA2/AN2)
011 = kanal 3, (RA3/AN3)
100 = kanal 4, (RA5/AN4)
101 = kanal 5, (RE0/AN5)
110 = kanal 6, (RE1/AN6)
111 = kanal 7, (RE2/AN7)

ADCON BIT6-7(ADCS0-ADCS01)

Analog dijital çevirici için saat(clock) frekansı seçim bitleridir. Bu bitlere verilecek değerler ile A-D çevirme işlemi esnasında kullanılacak frekans değeri bize sunulan değerler içerisinden seçilir.

00 = FOSC/2

01 = FOSC/8

10 = FOSC/32

11 = FRC (Dahili RC osilasyon kaynağından gelen saat darbeleri kullanılır.)

ADCON1 Kaydedicisi

Bu kaydedicinin genel mimarisi aşağıdaki gibidir:

PIC16F877 ile LM35 Sıcaklık Sensörü Kullanımı lm35 sıcaklık sensörü kullanımı,lm35 sıcaklık sensörü,lm35 sıcaklık sensörü nasıl kullanımı,lm35 sıcaklık sensörü uygulaması,lm35 sıcaklık sensörü nedir
ADCON1 Kaydedicisi

ADCON1,0:3(PCFG0:PCFG3)

Analog dijital çevirici portunun biçimini düzenlemeyi sağlayan bitlerdir. Yani A-D çevirme işleminde kullanılacak pinlerin nasıl davranacağını belirlememize olanak sağlarlar. Bu bitlerle PORTA ye bağlı kanalların analog veya dijital olma durumları ayarlanır.

Tabloda PCFG3-PCFG2-PCFG1-PCFG0 bitlerinin aldığı değere göre yaptığı işlemler gösterilmiştir.

PIC16F877 ile LM35 Sıcaklık Sensörü Kullanımı lm35 sıcaklık sensörü kullanımı,lm35 sıcaklık sensörü,lm35 sıcaklık sensörü nasıl kullanımı,lm35 sıcaklık sensörü uygulaması,lm35 sıcaklık sensörü nedir
A=Analog giriş D=Dijital giriş/çıkış

ADCON1,7(ADFM)

 Analog dijital çevirme işlemi esnasında meydana gelen verinin biçimini belirlemeye yarayan bittir. ADFM=1 ise ADRESH kaydedicisinin MSB kısmındaki altı biti 0 kabul edilir ve A-D çevirme sonucunda elde edilen veri ADRESH’ın 2 bitlik LSB kısmına ve ADRESL’ye yazılır.

ADFM=0 ise ADRESL’nin LSB kısmındaki 6 biti 0 kabul edilir ve A-D çevirme sonucu elde edilen veri ADRESL’nin son iki bitine ve ADRESH’a yazılır.

ADRESH: ADRESL kaydedicileri A-D dönüşümün 10 bit sonucunu kapsar. A-D dönüşümü bittiği zaman, sonuç A-D sonuç kaydedicisinin içine yüklenir.

A-D modülü şeması:

PIC16F877 ile LM35 Sıcaklık Sensörü Kullanımı lm35 sıcaklık sensörü kullanımı,lm35 sıcaklık sensörü,lm35 sıcaklık sensörü nasıl kullanımı,lm35 sıcaklık sensörü uygulaması,lm35 sıcaklık sensörü nedir

Ayrıca picte referans gerilimimiz 5V oldugundan dolayı ADC kanalından maksimum 5V okuyabiliriz.Pic bu bilgiyi 10 bitlik bilgiye çevireceğinden dolayı 5V 1023 tam sayısına karşılık gelmektedir(0 da dahil).Buna göre 5/1023=0,0048=4,88mV hassasiyetinden ölçüm yapabileceğimiz anlamına gelir.

Genel olarak PİC16F877 mikrodenetleyicisinde ADC için kullanılan kaydedicileri inceledikten sonra PİC C dilinde ADC kullanımı gösteren basit bir uygulama yapalım.Uygulamadan önce daha ayrıntılı bilgi için ekte bulunan PİC16F87X datasheetine bakmanızı öneririm.

LM35 Uygulaması:Analog dijital dönüşüm için temel detaylara baktıktan sonra ADCyi kullanarak sıcaklık ölçelim.Sıcaklık bilgisi için LM35DZ sensörünü kullanacağız.Bu sensörün çıkışı 10mv/C(derece) olarak verilmiş.(Ayrıntılı bilgi için datasheetine bakabilirsiniz.)Bu da demek oluyor ki 10 derece için sensörden 100mV okumalıyız.LM35 sensörü ANO kanalında iken sıcaklık ölçümü için gerekli kod aşağıdaki gibi olacaktır.

Proje Kodu

#include<htc.h>
#include "delay.h"
#include "lcd.h"

__CONFIG(0x3B31); //Fuse(sigorta) ayarları

void main(void){

const float a=5000.0/1024.0; //Kalibrasyon

float mV,derece; //Değişkenler
unsigned int sicaklik; //Değişkenler

TRISB=0x00; //PORTB çıkış olarak ayarlanıyor
TRISA=0xFF; //PORTA giriş olarak ayarlanıyor
ADCON1=0x8E; // 8E=10001110 ADFM=1 PCFG3=1 PCFG2=1 PCFG1=1 PCFG0=0

//AN0 analog olarak seçildi

ADCON0=0x41; // 41 hex=01000001 binaryFosc/8 ADON=1

lcd_init(); //LCD Ekranı Başlatma
lcd_clear(); //LCD Ekranı temizleme

lcd_goto(S1_3); //1 satır 3.sütun

lcd_puts("devreyakan.com");

lcd_goto(S2_1); //2.satır 1.sütun

lcd_puts("LM35 Uygulamasi");

lcd_clear();//LCD Ekranı temizleme

DelayMs(250); //250ms bekle

for(;;){ //Sonsuz döngü başlatılıyor

ADCON0=0x45;45 hex =01000101 binary //ADC işlemi

while((ADCON0&4)!=0);  //ADC çevirmesi bekleniyor

sicaklik=ADRESH;     //Yüksek değerlikle bitlerin alınması

sicaklik=256*sicaklik+ADRESL;     //Ham bilgi elde ediliyor

mV=sicaklik*a;     //Ham bilgi mV ye çevriliyor

derece=mV/10.0;      //mV dereceye çevriliyor. Her 10mv = 1 santigrat derece

lcd_puts("Sicaklik=");

lcd_goto(S1_10);

lcd_write_int(derece);     //Derece değişkenin içeriği yazdırılıyor.

lcd_goto(S1_1);

}}

Devre Şeması/Simülasyon

PIC16F877 ile LM35 Sıcaklık Sensörü Kullanımı lm35 sıcaklık sensörü kullanımı,lm35 sıcaklık sensörü,lm35 sıcaklık sensörü nasıl kullanımı,lm35 sıcaklık sensörü uygulaması,lm35 sıcaklık sensörü nedir

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.