• Sonuç bulunamadı

MSP430 Uyg.34 DS18B20 Sıcaklık Sensörü Uygulaması

N/A
N/A
Protected

Academic year: 2022

Share "MSP430 Uyg.34 DS18B20 Sıcaklık Sensörü Uygulaması"

Copied!
11
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

MSP430 Uyg.34 – DS18B20 Sıcaklık Sensörü Uygulaması

Ferudun GÖKCEGÖZ, 02 Eylül 2011, Cuma

Merhaba arkadaşlar. Yeni bir uygulamamızda yine sizlerle birlikteyiz.

Geçenki uygulamada söylediğimiz gibi bu dersimizde OneWire protokolü ile haberleşen Maxim – Dallas firmasına ait DS18B20 sıcaklık sensörü ve termostat entegresi ile bir uygulama yapacağız. Bir önceki yazımda OneWire protokolünden bahsetmiştim. Bu nedenle bu yazıda OneWire protokolünden bahsetmeyip, sadece aynı C kütüphanesini kullanarak, DS18B20 ile nasıl haberleşeceğimizi anlatacağım. İlk olarak devre şemasını vererek uygulamamıza başlayabiliriz.

(2)

Devre şemasında görüldüğü gibi bir adet MSP430, bir adet LCD ekran ve DS18B20 entegremiz bulunmaktadır. İlk olarak DS18B20 entegresinden bahsedelim isterseniz.

DS18B20 OneWire protokolüyle haberleşebilen dolayısıyla mikrodenetleyici ile haberleşmek için sadece tek bir hattın yeterli olduğu bir entegredir. Ekstradan besleme gerektirmez fakat harici olarak besleme girişide bulunmaktadır.

OneWire cihazlarına özgü olan 64 bit lik Rom Code bulundurmaktadır. Önceki yazımızda bahsettiğimiz gibi, bu 64 bitin ilk 8 biti Aile Kodu, Sonraki 48 biti seri numarası, son 8 biti ise CRC kodudur.

Harici besleme kullanılacaksa 3V ~5.5V arasında bir besleme aralığına sahiptir.

Maksimum 750 msn de 12 bitlik çözünürlüğe sahip (8bit tam kısım + 4 bit ondalık kısım olmak üzere) sıcaklık verisi elde edilebilir.

(3)

Standart olarak 12 bitlik çözünürlüğe sahip olmasına rağmen 9,10 ve 11 bit çözünürlükte çalışmak üzerede ayarlanabilir. Çözünürlük sayısı azaldıkça, sıcaklık verisinin 8 biti sabit kalmakta sadece 4 bitlik ondalık kısmın bit sayısı azalmaktadır.

-55 C ~ +125 C(-67 F ~ +257 F) arasında ölçüm aralığına sahip olup -10 C ~+85 C arasında 0.5 C hassasiyetle ölçüm yapılabilmektedir.

Termostat olarak kullanmak için kullanıcının tanımlayabileceği alarm kaydedicileri barındırmaktadır. Entegrenin ölçtüğü sıcaklık ile alarm kaydedicilerine kaydedilen sıcaklık otomatik olarak karşılaştırılıp alarm durumu oluşup oluşmadığı entegreye alarm sorgulama komutu gönderilerek tespit edilebilir.

TO92, SO8, uSOP kılıflarında üretilebilmektedir. Aşağıda entegrenin kılıflarına ait görüntüleri görebiliriz.

(4)

Aşağıda bunlard

TEMPE

Yukarıd Byte ol Örneğin olduğu ağırlıkla görmek son 4 b verisinin edilirke değer(sı sıcaklık

a DS18B20 dan önemli o

ERATURE

daki tabloda lmak üzere n ilk 4 bit

için, sıcakl arı 0.0625, k istiyorsak biti ise sıca

n yüksek dö n, Low Byt ıcaklık veris k negatif ise

içerisinde b olanlarına k

E KAYDED

anda görüld iki byte tır

“1000″ ise lık veriside

0.125, 0.25 bu bitleri k aklık verisi ört biti ise H te ın son dö sinin tam kı e bu dört b

bulunan kay kısaca değin

DİCİLERİ

düğü gibi sı r. Low Byt

bu şu anla

“XX.5″ şek 5, 0.5 olmak kontrol edip

inin tam kı High Byte ı ört biti ile H ısmı) elde e bit 1 olmakt

ydedicilere elim.

caklık veris te ın ilk 4 ama gelmek klinde olac ktadır. Yazı düzgün bir ısmının low ın ilk dört b High Byte ın edilir. High

tadır. Ve sı

ait RAM H

sini tutan k biti ondalık ktedir. BIT

aktır. Sırası ılım içerisin r şekilde lcd w nibble ı

bitidir. Yaz n ilk dört bi

Byte ın son ıcaklık veri

aritası görü

aydedicilerd k kısma ait T3 ün byte ıyla BIT0,B ndeki sıcakl

d ekrana ba yani düşük ılım içerisin iti bir araya n dört biti is

isi ise 2 ye

ülmektedir. Ş

dir. Low By t datayı tuta üzerindeki BIT1,BIT2 lığın ondalı asmalıyız. L k dört bitid nde sıcaklık a getirilerek e işaret biti tümleyen

Şimdi

yte ve High an bitlerdir

ağırlığı 0.5 ve BIT3 ün k kısmınıda Low Byte ın dir. Sıcaklık k verisi elde k 8 bitlik bir dir. Ölçülen formatta bu h r.

5 n a n k e r n u

(5)

kaydedi edilmeli TH ve T

Bu kayd bu kayd olmadığ değerler deki ka kullanıl CONFI

ScratchP çözünür default yukarıd

icilerden ok idir.

TL KAYDE

dediciler 8 b dedicilere y ğı tespit edi

ri aynı isim arşılıklarının

mayacak is IGURATIO

Pad in 4.

rlüğü ayarl olarak 12 b da görüldüğ

kunmaktadır

EDİCİLER

bitlik iki ad yüklenen d ilebilir. Bu mde EEPRO n değeri E e bu kayded ON KAYDE

byte ı ise lanmaktadır bit olmasın ğü gibi kon

r. Bu neden

det register değerlerle ö kaydedicile OM hafızada

EEPROM diciler kulla EDİCİSİ

e Configura r. Yazının na rağmen 9

nfigürasyon

nle negatif sı

dır. Ve ente ölçülen sıca erin son bit a tutulmakt daki değer anıcı tarafın

ation Regis başında b 9,10 ve 11 kaydedicis

ıcaklık ölçü

egre termos aklık değer ti ise yine i tadır. Powe rlerdir. Eğ ndan genel k

ster ı dır.

belirttiğimiz bit olarakta sinin R0 v

ümü yapılac

stat olarak k ri kıyaslanıp

şaret bitidir r On durum er entegren kullanım am

Bu kayded z gibi ente

a kullanılab e R1 bitler

caksa bu dur

kullanılmak p alarm du r. Ve bu ka munda ise S

nin termos macı ile kulla

dici ile de egremizin ç

bilmektedir.

ri ile ayarl

ruma dikka

k isteniyorsa urumu olup ydedicilerin ScratchPAD stat özelliğ

anılabilir.

entegrenin çözünürlüğü . Bu ayarda lanmaktadır

at

a p n D i

n ü a r.

(6)

Tablodan görüldüğü gibi çözünürlük düştükçe sıcaklık verisini elde etmek için geçen çevrim süreside düşmektedir. Ayrıca bu kısımda belirtilmesi gereken birşey varki, çözünürlük düşürüldüğünde eksilen bitler sıcaklık verisinin tam kısmından değil ondalık kısmındaki bitlerden düşürülmektedir. Buda kullanıcı için gayet güzel bir özelliktir.

ScratchPad in 5, 6 ve 7. byte ı reserve edilmiştir. Bu bitler kullanılmamaktadır. 8. byte ı ise CRC kodudur. Bir önceki yazımızda belirttiğimiz gibi CRC kodu bir hata kontrol algoritmasından geçirildikten sonra elde edilen bir veridir. Ve okunan verinin doğruluğunu test etmek için oldukça iyi bir yöntemdir. Birkaç byte veri iletiminde çok önemli olmasada onlarca bytelık veri paketlerinin iletildiği bir haberleşme protokolünde hata kontrol algoritmaları (CRC, LRC vb.) oldukça önem taşımaktadır.

Bir önceki yazımızda belirtiğimiz gibi OneWire cihazlarla haberleşebilmek için fonksiyon kodları bulunmaktadır. Ve yapılan işlem bu fonksiyon kodları ile belirlenmektedir. DS18B20 entegresi için rom code için ve scratchpad için birtakım fonksiyon kodları bulunmaktadır.

Bunlardan da bahsedecek olursak, ROM Komutları

1. Search ROM (0xF0) 2. Read ROM (0×33) 3. Match ROM (0×55) 4. Skip ROM (0xCC) 5. Alarm Search (0xEC) DS18B20 Fonksiyon Komutları

1. Convert T (0×44)

2. Write ScratchPad (0x4E) 3. Read ScratchPad (0xBE) 4. Copy ScratchPad (0×48) 5. Recall E2 (0xB8)

6. Read Power Supply (0xB4)

DS18B20 ile haberleşebilmek için datalara ait bir veri sekansı bulunmaktadır. İlk olarak hat resetlenip presence pulse beklenir. Ve hatta bir cihaz bulunduğu ve hattaki cihazın haberleşmeye uygun olduğu anlaşılır. Daha sonra ROM komutu gönderilir. Bu aşamada match rom(0×55) komutu kullanılarak cihazın seri numarasının okunması suretiyle hatta birden fazla cihaz varsa tanımlama işi gerçekleştirilebilir. Rom komutu gönderilmeyecek ise skip rom(0xCC) komutu gönderilerek bu ikinci aşama geçilir. Üçüncü aşama olarakta fonksiyon kodlarından biri gönderilerek yapılacak işlem ne ise o yapılır. Örneğin sıcaklık verisinin okunması için bir çevrim başlatılmasını istiyorsak convert t (0×44) komutu göndererek sıcaklık verisini okuyabiliriz.

Daha detaylı bilgi almak isteyenler DS18B20 ye ait datasheet i buradan inceleyebilirler. Birde şunu söylemeliyimki yine bu ürüne çok benzer bir şekilde, DS18S20 entegresi bulunmaktadır. O entegrede aynen DS18B20 gibidir. Farklılık olarak örneğin çözünürlüğü ayarlanamakta ve

(7)

standart için DS Gelelim main.c

#includ

#includ

#includ

#includ

#includ bool ne bool l void LC { char int unsig for(

{s for(

} void Re {

t olarak 9 b 18S20 ye ai m uygulamay

de "io430 de "in430 de "stdbo de "lcd_4b de "OneWi egative=f imited=fa CD_Write_

j;

temp=1;

gned char j=0;j<mul tr[j] = ( j=0;j<mul lcd_putc

ead_DS18B unsigned

*tam_adr

*ondalik

ittir.. O ent it datasheet ya ait yazılı

.h"

.h"

ol.h"

bit.h"

re.h"

alse;

lse;

Int (unsi

str[4];

;j++) (val/temp

;j++) ch(str[mul

20 (unsig d char msb r = 0;

k_adr = 0;

while(Ow_

Ow_WriteB Ow_WriteB __delay_c while(Ow_

Ow_WriteB Ow_WriteB __delay_c lsb = Ow_

msb = Ow_

if(msb &

*tam_adr=

if(*tam_a temp = ls if(temp &

if(temp &

if(temp &

if(temp &

tegre kullan buradan in ımımıza…

gned int

)%10+48);

l-1-j]);

ned char b,lsb,temp

;

_Reset());

Byte(0xCC) Byte(0x44) cycles(120 _Reset());

Byte(0xCC) Byte(0xBE) cycles(800 _ReadByte(

_ReadByte(

0xF0) neg

=(msb<<4)+

adr>99) li sb & 0x0F;

& 0x01) *o

& 0x02) *o

& 0x04) *o

& 0x08) *o

nılarakta 9 b ncelenebilir.

val,char

temp*=10

*tam_adr, p;

;

; 0);

;

; 0000);

();

();

gative = t +(lsb>>4);

imited = t

ondalik_ad ondalik_ad ondalik_ad ondalik_ad

bit sıcaklık

mul)

;}

unsigned

true;

true;

dr += 625;

dr += 1250 dr += 2500 dr += 5000

verisi elde

d int *ond

0;

0;

0;

edilebilir. D

dalik_adr)

Detaylı bilg

i

(8)

}

void main (void) {

unsigned char TAM_KISIM = 0;

unsigned int ONDALIK_KISIM = 0;

WDTCTL = WDTPW + WDTHOLD;

DCOCTL=CALDCO_1MHZ;

BCSCTL1=CALBC1_1MHZ;

P1SEL = 0x00;

P1OUT = 0x00;

P1DIR = 0xFF;

P2SEL = 0x00;

P2OUT = 0x00;

P2DIR = 0xFF;

lcd_init();

lcd_goto(1,1);

lcd_puts(" DS18B20 TERMOMETRE ");

lcd_goto(2,1);

lcd_puts(" UYGULAMASI ");

__delay_cycles(1000000);

lcd_puts("");

for(;;) {

Read_DS18B20(&TAM_KISIM,&ONDALIK_KISIM);

if(limited==false && negative==false) {

lcd_clear();

lcd_goto(1,1);

lcd_puts(" SICAKLIK ");

lcd_goto(2,6);

LCD_Write_Int(TAM_KISIM,2);

lcd_putch('.');

LCD_Write_Int(ONDALIK_KISIM,4);

lcd_putch(' ');

lcd_putch(223);

lcd_putch('C');

} else {

lcd_clear();

lcd_goto(1,1);

lcd_puts(" OLCULEN SICAKLIK ");

lcd_goto(2,1);

lcd_puts(" ARALIK DISI ");

negative = false;

limited = false;

}

__delay_cycles(100000);

}

(9)

}

Yazılımda kullanılan OneWire.c ve OneWire.h kütüphane dosyaları aynı. O yüzden tekrar vermek istemedim. Uygulamayı proteus üzerinde kurmak isteyen arkadaşlar bir önceki yazıya bakabilirler…

Yazılımdan kısaca bahsedecek olursak, ilk olarak lcd ekranda “DS18B20 TERMOMETRE UYGULAMASI” string i yazdırılmaktadır. Daha sonra sonsuz döngü içerisinde sensör den sıcaklık verisi tam kısım ve ondalık kısım olarak okunup lcd ekrana yazdırılmaktadır. Okunan sıcaklık 0~99 C arasında değilse lcd ekranda “OLCULEN SICAKLIK ARALIK DISI” yazısı yazdırılmaktadır. Ardından da 100 ms gecikme verilip aynı işlemler sürekli olarak tekrarlanmaktadır. Uygulamaya ait ekran görüntüsünüde verelim.

isterseniz entegrenin ayarlarından ondalık sıcaklık belirleyip o şekilde de ölçüm yapabilirsiniz.

(10)
(11)

Görüldüğü gibi başarılı bir şekilde sıcaklık ölçümü gerçekleştirilmiştir. Ben bu uygulamayı PIC üzerinde de gerçekleştirdim. Bu tür uygulamalarda en çok dikkat edilmesi gereken mesele gecikme üreten fonksiyonların doğruluğu. O yüzden bu uygulamayı launchpad üzerinde denerken, dahili RC osilatörün stabil clock darbeleri üretememesi nedeniyle problem çıkabilir.

Bu nedenle sinyaller dikkatlice osiloskopta incelenip, msp430 üzerinde o şekilde uygulama yapılması tavsiye edilir.

Geldik bir yazımızın daha sonuna. Bir sonraki yazımda LaunchPad üzerinde RC Servo Motor uygulaması yapacağız. Uygulama hazır. Muhtemelen birkaç gün içerisinde siteye eklerim. Bir sonraki yazımda görüşmek dileğiyle.

Hadi bakalım kalın sağlıcakla…

Ferudun GÖKCEGÖZ fgokcegoz@yahoo.com  

Referanslar

Benzer Belgeler

Ø En az iki çeşit termokupl seçiniz. Ø Multimetre ile sağlamlık kontrolü yapınız. Ø Multimetre ile buzda ve kaynar suda ölçüm yapınız. Ø Cinsine göre

 Bitki büyümesinde sera sıcaklığı, kök bölgesi sıcaklığından daha önemli olmasına rağmen, kök bölgesi sıcaklığı sürgün oluşumu ve çiçeklenme

■ İR ışınları absorbe edildikleri dokuda moleküler ve anatomik hareketlerin artışı ile ısı oluştururlarve yüzeyel sıcak.. uygulamada tedavi edici ajan

■ Bu paketler değişik çaplarda elde edilir ve tipik olarak silikat jeli doldurulmuş plastik veya sızdırmaz kumaş torbalardır.. ■ Kumaş torbalar içindeki silikat jeli

Yetiştiricilik sırasında özellikle çiçeklenme dönemindeki düşük sıcaklıklar (10 oC’ nin altında) meyve ve sebzelerde meyve tutumu sorunlarının ortaya

Meromiktik göllerde göl suyunu karıştığı yüzeydeki bölgeye MİXOLİMNİON, göl suyunun daimi olarak durgun olduğu, karışmadığı alt bölgeye de..

Aşırı yüksek veya düşük değerlerin daha sık görülmesi, sıcak ve soğuk hava dalgalarının içinde bulundukları mevsimde etkili olmaları, sayılarının artması, hem

Bir yerde o güne kadar görülmeyen veya çok seyrek olarak görülen sýcak ve soðuklarýn belli bir süre yaþanmasý, baþta insanlar olmak üzere bütün canlýlar ile