MSP430 Assembly diliyle DS18B20 sıcaklık sensörü iletişimi


DS18B20, Dallas tarafından üretilen dijital bir sıcaklık sensörü. 3 bacaklı bir TO-92 (tipik transistör paketi) şeklinde olan sensörün tek bir bacağı üzerinden iletişim yaparak sıcaklık verisini okuyabiliyorsunuz. Bu özelliğe “One-Wire” protokolü deniyor. Bu protokol sayesinde aynı hatta bir kaç adet DS18B20 sensörü yerleştirerek hepsini aynı anda kullanmanız da mümkün.

Ben bu yazımda bir kaç sensörün aynı anda kullanılması gibi konulara değinmeyip sadece sensör üzerinden sıcaklık datasının okunması için gerekli MSP430 assembly komutlarını vereceğim. Buradan indereceğiniz programı MSP430 Launchpad kitine (g2231 işlemcisi ile) yükleyerek DS18B20’den sıcaklık verisini okuyabilirsiniz. Program çalıştırıldığında tek bir okuma yaparak, sensörden aldığı 9 baytı (sensörün “scratchpad” denilen belleği) RAM belleğe 0x200 adresinden itibaren yazıyor.

One-Wire iletişim protokolünden bahsedeyim biraz. Bu protokolde bütün iletişim tek bir kablo üzerinden sağlanıyor. Yani ayrı bir TX-RX veya data-clock hatları sözkonusu değil. Dolayısıyla bütün iletişim master tarafından kontrol ediliyor. Master veri yazarken, ilk olarak hattı 0’a çekiyor. Kısa bir süre bekledikten sonra 1 veya 0 yazmak istemesine göre hattı kaldırıyor veya 0’da tutuyor. Burada zamanlama önemli bir faktör oluyor.

Önemli bir not: İletişimin sağlandığı data hattı 4k7 gibi bir direnç değeri ile pull-up edilmeli ve master hiç bir zaman data hattına ‘1’ yazma suretiyle data hattını kaldırmamalı. Sadece data hattının bağlandığı port pinini giriş yaparak, pull-up etme suretiyle hattı kaldırmalı. Programı incelerseniz, MSP430’un data pinine hiç bir zaman ‘1’ yazmadığını göreceksiniz.

Peki okuma yaparken?? Burada da bütün kontrol masterda. Master her bir biti tek tek kendi istediği zamanda okuyabiliyor. Yani DS18B20 bitleri seri bir şekilde peşpeşe göndermiyor. Sadece master bir istek gönderdiğinde sıradaki biti gönderiyor. Master bir bit okumak istediğinde data hattını indiriyor, 1 us kadar tutarak daha sonra hattı bırakıyor. Bu ‘0’ı gören DS18B20’de sıradaki bitin 1 ya da 0 değerinde olmasına göre hattı 0’a çekiyor veya 1 yapıyor. Master da bu sırada okuma yaparak bitin değeri almış oluyor. Diyagramları incelerseniz daha açık bir şekilde anlayacaksınız. Bu arada master okuma isteklerini göndermeden önce gerekli komutları yazmış olmalı aksi taktirde DS18B20 masterın isteklerine cevap vermeyecektir.

Biraz’da programdan bahsedeyim. Program DS18B20 ile ilgili 7 adet alt program içeriyor. Bunlar;

WRITE_R: Her işlemin başında ilk olarak bir Reset darbesi gönderilerek sensörün varlığı tespit ediliyor. Eğer sensör bağlı değilse veya bir sebepten dolayı cevap vermiyorsa program burada sonsuz döngüye girip kalıyor

WRITE_0: Sensöre ‘0’ bitini yazmak için kullanılan alt program

WRITE_1: Sensöre ‘1’ bitini yazmak için kullanılan alt program

READ_x: Sensörden bir bit okumak için kullanılan alt program, cevap DR (R8 olarak tanımlanmış) saklayıcısının 7. bitine yazılıyor.

WRITE_B: Sensöre bir bayt data yazan alt program, WRITE_0 ve WRITE_1 alt programlarını kullanıyor. Yazılacak data (bu genelde bir komut olur) DR saklayıcısından okunuyor.

READ_B: Sensörden bir bayt okuyan alt program. READ_x alt programını kullanıyor. Okunan baytı DR saklayıcısına yerleştiriyor.

READ_SP: Sensörden bütün “scrathcpad”i okuyan alt program. Aslında çoğu zaman ilk 2 baytı okumak yeterli. Sadece bu ilk iki bayt sıcaklık verisi taşıyor.

MSP430 IAR ile çalıştırabileceğiniz programı buradan indirebilirsiniz. “ds18b20.h” dosyasını da projeye eklemeyi unutmayın.


Bir cevap yazın

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