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

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

Bu kapsamlı mühendislik rehberinde, analog sıcaklık ölçümlerinde bir endüstri standardı olan LM35 Sıcaklık Sensörü kullanımını inceleyeceğiz.

PIC16F877A (veya PIC16F877), mikrodenetleyici eğitiminde ve endüstriyel gömülü kontrol projelerinde uzun yıllardır kullanılan klasik ve oldukça kararlı bir donanımdır.

Mikrodenetleyicinin dahili 10-bitlik Analog Dijital Dönüştürücü (ADC) Çalışma Prensibi donanımını, doğrudan kaydedici (register) seviyesinde ADCON0 ve ADCON1 yazmaçlarını yapılandırarak yönetecek, hassas sıcaklık dönüşüm matematiksel modelini kuracak ve hatasız bir MPLAB XC8 C programı yazacağız.

LM35 sensörünün tüm elektriksel sınır değerleri ve pin şemasına Texas Instruments LM35 Teknik Veri Sayfası (Datasheet) üzerinden ulaşabilirsiniz.

Yazı İçeriği

PIC16F877A ADC Altyapısı ve Kaydedici Seviyesinde Kontrol

PIC16F877A üzerinde, PORTA ve PORTE pinlerine paylaştırılmış 8 adet bağımsız analog giriş kanalı (AN0 – AN7) bulunur. Donanımın ADC çözünürlüğü 10-bittir. Bu çözünürlük, analog giriş geriliminin 2^{10} = 1024 ayrık adıma (0 – 1023) bölüneceğini gösterir. ADC donanımını yapılandırmak için iki ana kontrol kaydedicisi kullanılır: ADCON0 ve ADCON1.

1. ADCON0 (ADC Kontrol Kaydedicisi 0) Yapısı

ADCON0, ADC’nin çalıştırılmasını, örnekleme saatinin (clock) seçilmesini ve aktif kanal atamasını kontrol eder:

ADCON0 Kaydedici Mimarisi
ADCON0 Yazmacı Bit Dağılımı
  • ADON (Bit 0): ADC Donanımını Etkinleştirme biti. ADON = 1 ise ADC birimi çalışır, ADON = 0 ise güç tasarrufu için ADC tamamen kapatılır.
  • GO/DONE (Bit 2): Dönüşüm Durum biti. Yazılımsal olarak GO/DONE = 1 yapılarak ADC dönüşümü başlatılır. Dönüşüm bittiğinde donanım bu biti otomatik olarak 0 yapar.
  • CHS2:CHS0 (Bits 5-3): Analog Kanal Seçim bitleri:
    • 000 = Kanal 0 (AN0) – RA0
    • 001 = Kanal 1 (AN1) – RA1
    • 010 = Kanal 2 (AN2) – RA2
    • 011 = Kanal 3 (AN3) – RA3
    • 100 = Kanal 4 (AN4) – RA5
    • 101 = Kanal 5 (AN5) – RE0
    • 110 = Kanal 6 (AN6) – RE1
    • 111 = Kanal 7 (AN7) – RE2
  • ADCS1:ADCS0 (Bits 7-6): ADC Saat Frekansı Seçim bitleri. Örnekleme kapasitörünün kararlı dolabilmesi için saat hızı mikrodenetleyicinin çalışma frekansına (F_{OSC}) göre ayarlanır:

2. ADCON1 (ADC Kontrol Kaydedicisi 1) Yapısı

ADCON1, pinlerin analog/dijital davranışlarını ve dönüşüm sonucunun hizalanmasını belirler:

ADCON1 Kaydedici Mimarisi
ADCON1 Yazmacı Bit Dağılımı
  • PCFG3:PCFG0 (Bits 3-0): Port Yapılandırma bitleri. Hangi pinlerin analog giriş, hangilerinin dijital G/Ç olarak çalışacağını ve voltaj referans pinlerini (V_{REF+} ve V_{REF-}) tayin eder.
ADCON1 Port Yapılandırma Tablosu
ADCON1 Pin Konfigürasyon Tablosu (A: Analog, D: Dijital)
  • ADFM (Bit 7): ADC Sonuç Hizalama biti. ADC dönüşüm sonucu 10-bitliktir ancak mikrodenetleyici kaydedicileri 8-bitlik iki yazmaçtan (ADRESH ve ADRESL) oluşur.
    • ADFM = 1 (Sağa Hizalama): 10-bitlik sonucun en anlamlı 2 biti ADRESH yazmacının son 2 bitine, geri kalan 8 biti ise ADRESL yazmacına yazılır. C dilinde doğrudan 16-bitlik tam sayı okuması için bu mod tercih edilir.
    • ADFM = 0 (Sola Hizalama): Sonucun en anlamlı 8 biti doğrudan ADRESH yazmacına yazılır. 8-bit hassasiyetin yettiği hızlı okumalarda sadece ADRESH yazmacını okumak için kullanılır.
PIC16F877A ADC Dahili Blok Şeması

LM35 Sıcaklık Dönüşüm Matematiği

LM35 hassas bir analog sıcaklık sensörüdür ve her 1^\circ\text{C} sıcaklık artışı için çıkışında doğrusal olarak 10\text{ mV} gerilim üretir (10\text{ mV/}^\circ\text{C} duyarlılık). Örneğin, 25.0^\circ\text{C} sıcaklıkta sensör çıkışı tam olarak 250\text{ mV} (0.25\text{ V}) olacaktır.

Eğer ADC referans voltajlarımızı standart V_{REF+} = 5.0\text{ V} ve V_{REF-} = 0\text{ V} (GND) olarak seçersek, 10-bitlik (1024 adım) ADC’mizin 1 adımlık voltaj çözünürlüğü (LSB) şu şekilde hesaplanır:

    \[\text{Adım Voltajı} = \frac{5.0\text{ V}}{1023} \approx 4.8876\text{ mV / Adım}\]

ADC kanalından okunan dijital değeri (ADC_{degeri}) voltaja dönüştürdükten sonra sıcaklık değerini bulmak için sensör duyarlılığına böleriz:

    \[\text{Sıcaklık (}^\circ\text{C)} = \frac{ADC_{degeri} \times 4.8876\text{ mV}}{10\text{ mV}} = ADC_{degeri} \times 0.48876\]

PIC16F877A ve LM35 Sıcaklık Ölçüm Kodu (MPLAB XC8)

Aşağıdaki C kodu, MPLAB XC8 derleyicisi ile doğrudan kaydedici seviyesinde yazılmıştır. ADCON0 ve ADCON1 yazmaçları AN0 (RA0) kanalını okuyacak ve sonucu sağa hizalayacak şekilde yapılandırılmıştır. Okunan sıcaklık değeri, çıkıştaki 16×2 LCD ekrana gecikmesiz olarak yazdırılır:

LM35 Sıcaklık Sensörü Kullanımı: Proteus Simülasyonu ve Devre Şeması

Proteus simülasyonunda, LM35 sıcaklık sensörünün Vout pini doğrudan PIC16F877A’nın AN0 (RA0) bacağına bağlıdır. LCD ekranın 4-bitlik veri hatları ise PORTD üzerinden sürülür. Simülasyon çalıştırıldığında, LM35 üzerindeki sıcaklık değeri değiştirildikçe LCD ekrandaki verinin de mikrosaniyeler mertebesinde kararlı şekilde güncellendiğini göreceksiniz:

PIC16F877A ve LM35 Sıcaklık Ölçümü Proteus Devre Şeması
Proteus üzerinde 16×2 LCD ve LM35 eş zamanlı simülasyon çıktısı

PIC16F877A mikrodenetleyicilerinde harici voltaj referanslı yüksek hassasiyetli ADC okuma yöntemleri, çoklu sensör tarama algoritmaları veya kalibrasyon kodları hakkında sormak istediğiniz soruları alt kısımdaki yorum alanından bizimle paylaşabilirsiniz.

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.