AVR Dâhili Sıcaklık Algılayıcısı Kullanımı

Atmega328P mikrodenetleyicisinin teknik veri sayfasına baktığımızda ADC bölümünde sıcaklık algılayıcısından bahsedildiğini görürüz. AVR hakkında pek bilinmeyen ayrıntılardan biri olarak bu dahili sıcaklık algılayıcısını zikredebiliriz. Bunu konu edinmemizin sebebi de mikrodenetleyiciye dijital giriş ve çıkış sağlamaktan ibaret bir aygıt olarak değil koca bir sistemin tek bir çipe sığdırılmış hali olarak bakmamız gerektiğini gösterebilmektir. Mikrodenetleyiciler adeta koca bir anakartın bir çipe sığdırılmış halidir. Bu çipin içerisinde görüntü ve ses çıkış birimini veya klavye ve fare portlarını görmemek bunu değiştirmez. Çünkü anakartlar da bir amaca yönelik üretilmiş olup bilgisayarların uygulama alanlarına göre çeşitlilik gösterir. Mikrodenetleyicinin de uygulama alanları gömülü sistemler ve elektronik içerisinde olunca görüntü, ses, bios gibi çevre birimleri yerine ADC, Giriş ve Çıkış, Analog karşılaştırıcı gibi çevre birimlerini görürüz. Bu çevre birimleri arasındaki bağlantı entegre çekirdeği seviyesinde olduğu için hem performanslı hem de düşük maliyetli olmaktadır. Önceki yazılarımızda normal bilgisayarlarda neden Harvard mimarisinin kullanılamadığını anlatmıştık. Mikrodenetleyicinin tek çip içinde bir sistem olması diğer bilgisayar sistemlerine göre büyük avantaj sağlamaktadır. O yüzden üreticiler işlemci, bellek ve ROM’dan ibaret bir sistem üretmek yerine pek çok çevre birimini entegrelerin içerisine eklemektedir. Biz de mikrodenetleyicileri tercih ederken genellikle işlemci gücünden veya belleğinden çok çevre birimlerinin özelliklerine bakarız.

AVR’nin içerisinde bulunan bu sıcaklık algılayıcısı teknik veri kitapçığında bütün ayrıntısıyla anlatılmaktadır. Kitapçığa göre sıcaklık algılayıcısı çip içinde bulunup ADC biriminin bir kanalına bağlanmakta ve bu kanaldan yapılan okuma ile bu sıcaklık verisi elde edilmekte. Bunun için ADMUX yazmacının MUX bitleri “1000” şeklinde ayarlanmalı ve dahili 1.1V referans gerilimi etkinleştirilmelidir. Bundan sonrası bildiğimiz ADC çeviriminden başka bir şey değildir. Aynı LM35 gibi çalışan bu sıcaklık algılayıcısı derece başına 1mV değişime uğrar. Bu sıcaklık algılayıcısının isabetliliği oldukça düşük olup +-10 derecedir. Bu isabetlilik ortam sıcaklığı ölçümünde oldukça yetersiz olduğu için sıcaklık algılayıcısı çip üzerinde olduğu için de çipin ısınmasını hesaba katmamız gerekir. Yine de denetleyiciyi uyku moduna sokarak soğutup offset değerleri ile oynayarak bunu 2 derecelere kadar düşürerek bir nebze isabetli bir ölçüm yapmak mümkündür.

Şimdi sıcaklık algılayıcısının verdiği tipik gerilim değerlerine bakalım.

Bu değerler her çipte aynı olmamaktadır. Örnekte gördüğümüz değer gibi bir değer alsak da her çipin kalibrasyonu yazılım tarafından yapılmak zorundadır. Yine de kabaca bir sonucu kalibrasyon yapmadan elde etmemiz mümkündür. Aşağıdaki kalibrasyon formülüne göre kalibrasyon yapılmaktadır.

T = { [(ADCH << 8) | ADCL] – TOS} / k

Burada ADCH ve ADCL ADC’nin veri yazmaçları, k katsayı ve Tos sıcaklık algılayıcısının offset değeridir. Bu değerler EEPROM’a kaydedilebilir.

Şimdi örnek bir Arduino programını inceleyelim ve çalıştıralım. AVR üzerine de aynı programı yazabilirdik fakat işimizi kolaylaştırması açısından Arduino kullanmayı tercih ediyoruz. Sıcaklık algılama konusunda aynı kodu AVR’ye de uygulamak mümkün olduğundan bir sıkıntı olmayacaktır.

 

ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));  AVR derslerimizin ADC bölümlerinde anlattığımız gibi burada ADMUX yazmacının MUX biti ile ADC kanal seçimi yapılmaktadır. Sıcaklık algılayıcısı kanalını seçmek içinse 3 numaralı bitin bir (1) yapılması gerekir. Yani burada MUX bitleri “1000” yapılmış oluyor. REFS0 ve REFS1 bitleri ise referans gerilimini ayarlamak içindir. İkisi bir yapılarak 1.1V dahili referans gerilimi ADC’ye bağlanmış oluyor.

Geri kalan kodlar normal bir ADC okuması olduğu için bunu AVR derslerini takip edenler kolaylıkla anlayacaktır. Şimdi ise hesaplamaya bakalım.

t = (wADC – 324.31 ) / 1.22;  Burada 324.31 offset değeridir. Bu değeri değiştirerek kalibrasyonu yapmamız mümkün. Kalibrasyon için de ayrı bir hassas ve isabetli sıcaklık algılayıcımızın olması gereklidir.

Kalibrasyon için üretici firma bir uygulama notu yayınlamıştır. Bu notu inceleyerek kalibrasyonun nasıl yapılacağını daha iyi öğrenebiliriz.

http://ww1.microchip.com/downloads/en/AppNotes/Atmel-8108-Calibration-of-the-AVRs-Internal-Temperature-Reference_ApplicationNote_AVR122.pdf

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.