DS18B20. İsmail VarıĢlı 16.05.2010



Benzer belgeler
Mifare Kart Yazıcı/Okuyucu Modül (MFM-200)

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

CUMHURİYET MESLEKİ VE TEKNİK ANADOLU LİSESİ BİLİŞİM TEKNOLOJİLERİNİN TEMELLERİ DERSİ DERS NOTLARI BELLEKLER

BÖLÜM Mikrodenetleyicisine Giriş

DERS 5 PIC 16F84 PROGRAMLAMA İÇERİK. PIC 16F84 bacak bağlantıları PIC 16F84 bellek yapısı Program belleği RAM bellek Değişken kullanımı Komutlar

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

RF İLE ÇOK NOKTADAN KABLOSUZ SICAKLIK ÖLÇÜMÜ

BÖLÜM 6 RS232 SERİ İLETİŞİM İŞLEMLERİ

KONTROL VE OTOMASYON KULÜBÜ

Arduino nedir? Arduino donanım ve yazılımın kolayca kullanılmasına dayalı bir açık kaynak elektronik platformdur.

Mikroişlemcili Sistemler ve Laboratuvarı 6.Hafta

9. MERKEZİ İŞLEM BİRİM MODÜLÜ TASARIMI

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

MEB YÖK MESLEK YÜKSEKOKULLARI PROGRAM GELİŞTİRME PROJESİ. 1. Tipik bir mikrobilgisayar sistemin yapısı ve çalışması hakkında bilgi sahibi olabilme

Erzurum Teknik Üniversitesi RobETÜ Kulübü Robot Eğitimleri. ARDUİNO EĞİTİMLERİ I Arş. Gör. Nurullah Gülmüş

TUŞ TAKIMI (KEYPAD) UYGULAMALARI

DENEY 9-A : PIC 16F877 ve LM-35 ile SICAKLIK ÖLÇÜM UYGULAMASI

PİC HAKKINDA KISA KISA BİLGİLER GİRİŞ/ÇIKIŞ PORTLARI

IFD8520 ADRESLENEBİLİR RS-485/RS-422 İZOLELİ ÇEVİRİCİ KULLANIM KILAVUZU

Mikroişlemcili Sistemler ve Laboratuvarı

BÖLÜM in Bellek Organizasyonu

B.Ç. / E.B. MİKROİŞLEMCİLER

BİLİŞİM TEKNOLOJİSİNİN TEMELLERİ DERSİ

Yrd. Doç. Dr. Caner ÖZCAN

PROJE RAPORU. Proje adı: Pedalmatik 1 Giriş 2 Yöntem 3 Bulgular 6 Sonuç ve tartışma 7 Öneriler 7 Kaynakça 7

BÖLÜM 4 KAREKTER LCD ve ADC İŞLEMLERİ

İçİndekİler. 1. Bölüm - Mİkro Denetleyİcİ Nedİr? 2. Bölüm - MİkroDenetleyİcİlerİ Anlamak

William Stallings Computer Organization and Architecture 9 th Edition

İLERI MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

Mikroişlemcili Sistemler ve Laboratuvarı

Birol Çapa Özen Özkaya Güz Dönemi Eğitimleri

Deney 2: Flip-Floplar

Deney 6: Ring (Halka) ve Johnson Sayıcılar

BM-311 Bilgisayar Mimarisi

Hacettepe Robot Topluluğu

Mikrobilgisayarlar ve Assembler. Bahar Dönemi. Vedat Marttin

Donanımlar Hafta 1 Donanım

MIKRODENETLEYICILER. Ege Üniversitesi Ege MYO Mekatronik Programı

8 li Çıkış Modülü Kullanım Kılavuzu

LCD (Liquid Crystal Display)

BM-311 Bilgisayar Mimarisi. Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

Alıcı Devresi; Sinyali şu şekilde modüle ediyoruz;

Haftalık Ders Saati Okul Eğitimi Süresi

MODBUS MODÜL. Mekanik sayaçların tüketimlerinin sayılıp kaydedilmesi.

Programlamada Kullanılan Temel Parametreler

DONANIM KURULUMU. Öğr. Gör. Murat YAZICI. 1. Hafta.

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

İçindekiler FPGA GELİŞTİRME KARTI ENERJİ BESLEMESİ:... 5 ENERJİ SİSTEMİ ŞEMASI:... 5 FPGA GELİŞTİRME KARTINA PROGRAM YÜKLEME:... 6

8051 Ailesi MCS51 ailesinin orijinal bir üyesidir ve bu ailenin çekirdeğini oluşturur çekirdeğinin temel özellikkleri aşağıda verilmiştir:

PRONEM-midi MODBUS RTU İÇİN REGISTER ADRESLERİ

LPC2104 Mikro Denetleyicisini KEIL İle Programlamak

BESLEME KARTI RF ALICI KARTI

BQ Modbus Analog Giriş Kartı 6 Kanal 4 20mA. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

8051 Ailesi MCS51 ailesinin orijinal bir üyesidir ve bu ailenin çekirdeğini oluşturur çekirdeğinin temel özellikkleri aşağıda verilmiştir:

Excel Nedir? Microsoft Excell. Excel de Çalışma sayfası-tablo

Sequential (SEQ, Ardışıl) Y86 İşlemci Uygulaması (Devamı)

HAFTA 1 KALICI OLMAYAN HAFIZA RAM SRAM DRAM DDRAM KALICI HAFIZA ROM PROM EPROM EEPROM FLASH HARDDISK

PORTLAR Bilgisayar: VERİ:

Bölüm 18 FBs-6AD Analog Giriş Modülü

Prof. Dr. Doğan İbrahim Yakın Doğu Üniversitesi, Mühendislik Fakültesi, Biyomedikal Mühendisliği, Bölümü Tel:

Paralel ve Seri İletişim. Asenkron/Senkron İletişim. Şekil 2: İletişim Modları

5. HAFTA KBT104 BİLGİSAYAR DONANIMI. KBUZEM Karabük Üniversitesi Uzaktan Eğitim Uygulama ve Araştırma Merkezi

F159 Kalibrasyon Ayarlarının Yapılması. Neden Kalibrasyon Yapılmalı? Kalibrasyon Nasıl Yapılır?

DENEY-1. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

BQ353 Modbus 8x D.Input 8x Röle Cihazı Kullanım Kılavuzu

BLGM423 Gömülü Sistem Tasarımı

MODBUS MODÜL. Mekanik sayaçların tüketimlerinin sayılıp kaydedilmesi.

EasyPic 6 Deney Seti Tanıtımı

DelcomRF DRF 12 UR (UART RECEIVER) Ürün Kılavuzu

7. Port Programlama. mikroc Dili ile Mikrodenetleyici Programlama Ders Notları -42- Şekil 2.1. Atmega16 mikrodenetleyici pin şeması

SICAK VE SOĞUK ETĐKET VE BOY KESME MAKĐNASI KULLANIM KILAVUZU

MCR02/04/05/08 Serileri Temassız Kart Okuyucular

Deney No Deney Adı Tarih. 3 Mikrodenetleyici Portlarının Giriş Olarak Kullanılması / /201...

İÇİNDEKİLER 1. KLAVYE KLAVYE RB KLAVYE RBHIGH DİSPLAY... 31

BİLGİSAYAR MİMARİSİ. << Bus Yapısı >> Özer Çelik Matematik-Bilgisayar Bölümü

BQ101 GSM Access Kontrol Ünitesi Windows Programı. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

Deney 5: Shift Register(Kaydırmalı Kaydedici)

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ MİKROİŞLEMCİLİ SİSTEM LABORATUVARI KESMELİ GİRİŞ/ÇIKIŞ

DelcomRF. Uart Alıcı-Verici(Transceiver) DRF - 22 UTR. Ürün Kılavuzu

ARIZA AKIMI GÖSTERGE DÜZENEĞİ MODBUS KULLANMA KILAVUZU

8086 nın Bacak Bağlantısı ve İşlevleri. 8086, 16-bit veri yoluna (data bus) 8088 ise 8- bit veri yoluna sahip16-bit mikroişlemcilerdir.

BÖLÜM 10 KAYDEDİCİLER (REGİSTERS) SAYISAL TASARIM. Bu bölümde aşağıdaki konular anlatılacaktır

PIC16F877A nın Genel Özellikleri

Şekil. 64 Kelimelik Yığıtın Blok Şeması

C Dersleri Bölüm 3 : Program akışı

2. SAYI SİSTEMLERİ. M.İLKUÇAR - imuammer@yahoo.com

User [Şirket adını. LTr Kullanım Kılavuzu. yazın]

8 li Röle Çıkış Modülü Kullanım Kılavuzu

x86 Ailesi Mikroişlemciler ve Mikrobilgisayarlar

ENDA MODBUS PROTOKOLÜ

TIMER. SABANCI ATL ÖĞRETMENLERİNDEN YAVUZ AYDIN ve UMUT MAYETİN'E VERDİKLERİ DESTEK İÇİN TEŞEKKÜR EDİYORUZ

6. Osiloskop. Periyodik ve periyodik olmayan elektriksel işaretlerin gözlenmesi ve ölçülmesini sağlayan elektronik bir cihazdır.

idea rsbasic KOMUTLARI

Dr. Fatih AY Tel: fatihay@fatihay.net

Bilgisayar Sistemlerine Genel Bakış

Yarım toplayıcının fonksiyonelliği ile 4 x 2 bit ROM hafıza(çok küçük bir hafıza) programlandığının bir örneğini düşünelim:

V1000-CP1E MODBUS HABERLEŞMESİ

TURGUT ÖZAL ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ ELEKTRİK ELEKTRONİK MÜHENDİSLİĞİ MANTIK DEVRELERİ LABORATUARI. Deney 5 Flip Flop Devreleri

SAYISAL MANTIK LAB. PROJELERİ

Bellekler. Mikroişlemciler ve Mikrobilgisayarlar

Transkript:

2010 DS18B20 İsmail VarıĢlı 16.05.2010

Sizlerle bu yazımda çok kullanıģlı ve pek çok özelliği içerisinde barındıran maalesef yeterli Türkçe kaynak bulunmayan DS18B20 sıcaklık sensörü hakkında bilgi vermeye çalıģacağım. Katalog bilgilerini diğer kaynaklar ve örnek kodlar ile birleģtirerek anlaģılmasını kolaylıģtırmayı hedefledim. Gerekli mikrodenetleyici kod ve rutinlerini de ekledim. Buradaki bilgiler ve kodlarla gerekli geliģtirmeleri yapabileceğinizi umuyorum. Herkese faydalı olmasını dilerim. Ġsmail VarıĢlı İSMAİL VARIŞLI Sayfa 2

DS18B20-PROGRAMLANABĠLEN 1 WIRE DĠJĠTAL TERMOMETRE ÖZELLĠKLERĠ: Mikrodenetleyici ile 1Wire arayüzünü kullanarak tek hat üzerinden haberleşme. Her aygıt ROM hafızasında üretim esnasında belirlenen ve tek olan 64 bitlik seri koda sahiptir. Bu kod sayesinde aynı hat üzerinden birden fazla aygıt ile haberleşme. Harici bir donanım gerektirmeme. Besleme voltajı veri hattı üzerinden sağlanabilme (voltaj değeri 3.0V ile 5.5V arasındadır) -55 C den +125 C ye kadar olan sıcaklık derecelerini ölçebilme. -10 C den +85 C ye kadar hassasiyeti ±0.5 C dir. 9-12 bit arası kullanıcı tanımlı hassasiyet. Sıcaklık değerinin 12 bitlik koda dönüştürülmesi maksimum 750ms dir. Kullanıcı tanımlı ve kalıcı (NV) alarm ayarı. Şekilde görülen 8-pin SO (150mil), 8-pin _SOP, and 3-pin TO-92 paket tiplerine sahip olma. DS18B20 1wire protokolünü kullanan,12bit çözünürlüğe sahip sıcaklık sensörüdür. İletişim için sadece tek port gerektirmesi, düşük enerji gereksinimi ve yüksek çözünürlüğü ile pek çok uygulamada kullanılabilecek gelişmiş bir sıcaklık sensörüdür. Her DS18B20 entegresi yalnızca kendisine has,üretim esnasında belirlenen ve ROM belleğinde saklı olan 48bitlik(8 bit CRC kodu+48 bit seri no+8 bit aile kodu) seri koda sahiptir. Bu sayede aynı hat üzerinden birden fazla DS18B20 entegresi ile haberleşmeyi mümkün kılmaktadır.ds18b20 entegresinden sıcaklık değerlerini okumak için sadece 1WIRE protokolünü bilmek yetmez bunun yanında sensörün anlayacağı kendine özel kodlarında bilinmesi gerekir. Bu komutlar ileriki bölümlerde ROM ve fonksiyon komutları başlıkları altında açıklanacaktır. İSMAİL VARIŞLI Sayfa 3

BAĞLANTI ġekġllerġ DS18B20 nin iki adet bağlantı şekli vardır. Bazı uygulamalarda sensörün bağlantı şekli birincil aygıt tarafından tanımlanması gerekir. Read Power Supply [B4h] komutu ile bunu öğrenebiliriz. Bu komutun ardından eğer sensör hattı 0 yaparsa parazit güç bağlantısı, 1 yaparsa harici kaynak bağlantısı yapılmış demektir. Read Power Supply [B4h] komutunun kullanımı ilerde fonksiyon komutları bölümünde daha ayrıntılı açıklanacaktır. 1. PARAZĠT GÜÇ BAĞLANTISI ġekil 1:Parazit-Güç Bağlantısı Bu bağlantı mikrodenetleyiciden uzaktaki sıcaklık ölçümü uygulamalarında oldukça kullanışlıdır. DQ pini 1 konumunda iken sensör gerekli olan gücünü bu pinden alır ve kendi içindeki Cpp kondansatörü şarj eder. DQ pini 0 konumunda iken şarj kondansatörü (Cpp) gerekli enerjiyi sağlar. DS18B20 sıcaklık iletişimini yaparken ve EEPROM kopyalama işlemlerinde maksimum 1.5mA akım çeker. +100 C üzeri sıcaklıklarda bu bağlantı tipini kullanmak tavsiye edilmez. Yüksek sıcaklıklarda meydana gelen daha yüksek sızıntı akımları sıcaklık ölçümlerinde yanlışlıklara neden olabilir. Bu nedenle bu tip uygulamalarda harici güç kaynağı bağlantısını kullanmak daha doğru olacaktır. 2. HARĠCĠ GÜÇ KAYNAĞI BAĞLANTISI ġekil 2:Harici Güç Kaynağı Bağlantısı Bu bağlantının avantajı pull up mosfetinin kullanılmasının gerekmemesi ve +100 C üzeri sıcaklıklardaki kararlı ölçümleridir. Not:Eğer mikrodenetleyici ile sensör arasındaki mesafe uzun veya hatta çok fazla sensör var ise ve iletişimde sorun yaşıyorsanız pull up direncini küçültmeyi deneyin. İSMAİL VARIŞLI Sayfa 4

HAFIZA ġekil 3:DS18B20 Hafıza Haritası DS18B20 şekil3 de ayrıntıları ile görülen 8 byte lık bir belleğe sahiptir.bu bellek bloklarının her biri farklı işlevler için kullanılır.sıcaklık değeri ölçülüp dönüşüm tamamlandıktan sonra belleğin byte 0-1 bölümünde saklanır. Sıcaklık değeri bu iki hafıza bloğundan alınarak mikrodenetleyici tarafından çevrimi yapılır. Sıcaklık değerinin belirli noktaları aşmaması gereken uygulamalarda sensörün alarm özelliğini kullanabiliriz. Sensörün alarm özelliği bir çeşit kesme gibidir.böylece yazılımsal olarak sıcaklık değerini sürekli kontrol etmemiz gerekmez. Byte 2 alarm derecesinin üst sınırını ve byte 3 ise alarm derecesinin alt sınırını tutan EEPROM hafıza bloklarıdır. Yani sıcaklık byte 2 de tanımlı değere eşit yada üstüne çıkmışsa veya byte 3 de tanımlı olan değere eşit yada altına inmişse alarm bayrağı set edilir. Konfigürasyon kaydedicisi bazı ayarlamaları yapacağımız bitlere sahip bir kaydedicidir ve ilerde daha açık bir şekilde bahsedilecektir. EEPROM bellekler elektriksel olarak yazılıp silinebilen ve flash belleklere nazaran bilgileri bloklar halinde değil byte lar şeklinde yazıp okunan bellek türüdür. DS18B20 nin hem okunup hem yazılabilen tek kaydedicileri bu 3 kaydedicidir. Diğerleri sadece okunabilir.5,6,7 nci byte lar sadece dahili işlemler için kullanılan üzerinde yazma yada okuma yapılamayan kaydedicilerdir. Sekizinci byte sadece okunabilen ve sensörün CRC jeneratörü tarafından üretilen kodu saklayan kaydedicidir. KONFĠGÜRASYON KAYDEDĠCĠSĠ Konfigürasyon kaydedicisi sıcaklık ölçümünün çözünürlük ayarlarını yapabileceğimiz kaydedicidir. Şekil4 de kaydedicinin içeriği verilmiştir. Sıcaklık çözünürlüğünü ayarlamak için konfigürasyon kaydedicisinin bit 5 ve bit 6 değerleri olan R1-R2 ye gerekli değerleri vermemiz gerekir. Her bir çözünürlük değeri için R1 ve R2 nin değerinin ne olması gerektiği, her bir çözünürlükte sıcaklık ölçümünün süresi aşağıdaki Tablo1 de verilmiştir. DS18B20 4 farklı çözünürlükte ölçüm yapabilir. Bunlar 9,10,11 ve 12 bit çözünürlüklerdir. Sıcaklık ölçümündeki çözünürlüğe göre artış miktarı değişikliği sıcaklığın ondalık değerinde olmaktadır. Yani 12 bit çözünürlükte sıcaklık değeri 0,0625 C, 11 bit çözünürlükte 0,125 C, İSMAİL VARIŞLI Sayfa 5

10 bit çözünürlükte 0,25 C ve 9 bit çözünürlükte 0,5 C artar.yada diğer bir deyişle bu kadar duyarlılıkta diyebiliriz. Sıcaklık hassasiyeti azaldıkça sıcaklık ölçüm süresi de azalmaktadır. Hafıza haritasında byte 0 değeri olan LS kaydedicisini tekrar inceleyecek olursanız eksilen bitlerin LS byte ının sırasıyla 0,1 ve 2. Bitleri olduğu açıkça görülecek ve çözünürlük konusu daha iyi anlaşılacaktır. Bit 5 ve 6 haricindeki diğer bitler dahili işlemler için kullanılan bitlerdir. Yazılamazlar ve okunduklarında ise sadece 1 değerini gösterirler. ġekil 4:Konfigürasyon Kaydedicisi R1 R0 Çözünürlük Maksimum DönüĢüm Süresi Sıcaklık ArtıĢı 0 0 9-bit 93,75ms 0,5 C 0 1 10-bit 187,5ms 0,25 C 1 0 11-bit 375ms 0,125 C 1 1 12-bit 750ms 0,0625 C ALARM KURULUMU Tablo 1: Sıcaklık Çözünürlük Konfigürasyonu DS18B20 sıcaklık ölçüp, dönüşümü tamamladıktan sonra sıcaklık değeri TH ve TL kaydedicisindeki değerler ile karşılaştırılır. TH ve TL kaydedicisinin yapısı şekil5 de verilmişti. 6 bitlik sayısal bir değer ve sıcaklığın işareti içinde bir bit ayrılmıştır. S olarak gösterilen bit7 eğer 0 ise sıcaklık negatif,1 ise sıcaklık pozitif anlamına gelir. TH ve TL kaydedicisi kalıcı EEPROM bellek olduğundan enerji kesildiğinde silinmezler. ġekil 5 :TH-TL Kaydedicileri Ölçülen sıcaklık değeri TH kaydedicisindeki sıcaklık değerine eşit yada yüksek veya TL kaydedicisindeki değere eşit yada yüksek ise DS18B20 içerisindeki alarm bayrağı set edilir. Alarm bayrağı her sıcaklık ölçümünden sonra güncellenir. Eğer set edilen bir bayraktan sonra tekrar sıcaklık değeri ölçüldüğünde sıcaklık değeri alarm seviyesinin üzerinde değilse bayrak yeniden 0 yapılır. İSMAİL VARIŞLI Sayfa 6

Alarmı kurmak için Write Scratchpad[4Eh] komutu kullanılır. Bu komuttan sonra TH,TL ve konfigürasyon byte ları sırası ile yollanır. Bu yollanan veriler sırası DS18B20 nin TH,TL ve konfigürasyon kaydedicilerine kaydedilir. Alarm durumu Alarm Search [ECh] komutu ile kontrol edilir. Alarm Search [ECh] komutunun kullanımı ilerde fonksiyon komutları bölümünde daha ayrıntılı açıklanacaktır. CRC(Cyclic Redundancy Check) KODUNUN OLUġTURULMASI CRC, verilerin doğruluğunu kontrol eden bir sistemdir. Gelen veriler ile alınan verilerin aynı olup olmadığı kontrol edilir. Böylece iletişimin sağlaması yapılarak daha güvenli bir iletişim sağlanır. CRC byte ı DS18B20 nin 64bitlik ROM kodunun bir parçasıdır ve daha önce bahsedilen hafızanın dokuzuncu byte ında bulunmaktadır. CRC kodu ROM kodun diğer 56 bitinden hesaplanır. Birincil aygıt sensörden aldığı verileri kullanarak CRC kodunu tekrar hesaplar ve sensörden gelen CRC kod ile karşılaştırır. Eğer kodlar aynı ise veri doğru bir şekilde alınmış demektir. Aksi takdirde alınan veri hatalıdır ve iletişim tekrarlanır. ġekil 6: CRC Kod Üretici Devresi A B Q 0 0 0 0 1 1 1 0 1 1 1 0 Tablo 2: XOR Doğruluk Tablosu Aşağıda Hitech C ile yazılmış kod ile DS18B20 nin hafızası okunmakta ve LCD de gösterilmektedir. Şekil 7 de proteus ile simülasyonu yapılan kod çalıştırıldıktan sonraki görüntü verilmiştir. Kırmızı içerisindeki kod sensörden okunan CRC kodudur. Ve bu CRC kodu LCD de görünen diğer 8 byte dan üretilmiştir. İSMAİL VARIŞLI Sayfa 7

void bloknot_okuma(void) unsigned char i,seri_no; DisplayClear(); while(hat_reset()); hat_byte_yaz(0xcc); hat_byte_yaz(0x44); while(hat_reset()); hat_byte_yaz(0xcc); hat_byte_yaz(0xbe); for(i=0;i<9;i++) seri_no=hat_byte_oku(); if(i==0) DisplayInt(0,0,seri_no); if(i==1) DisplayInt(0,5,seri_no); if(i==2) DisplayInt(0,10,seri_no); if(i==3) DisplayInt(0,15,seri_no); if(i==4) DisplayInt(1,0,seri_no); if(i==5) DisplayInt(1,5,seri_no); if(i==6) DisplayInt(1,10,seri_no); if(i==7) DisplayInt(1,15,seri_no); if(i==8) DisplayInt(2,0,seri_no); ġekil 7:CRC Kodu-Proteus Simülasyon İSMAİL VARIŞLI Sayfa 8

CRC hesaplama modülü içerisinde olan mikrodenetleyiciler mevcuttur. Fakat bu modül bulunmayan mikdenetleyicilerde bunu yazılım ile yapmamız gerekmektedir. Şekil 6 da crc kod üretici devresi görülmektedir. Bu devreyi açıklayacak olursak. İlk olarak kaymalı kaydedicimizin içeriğinin; D7 D5 D4 D3 D2 D1 D0 şeklinde 1 byte lık bir veri olduğunu ele alalım. FB= D0 (XOR) veri_biti. Yeni değerimiz; FB -- D7-- D6-- D5-- D4(XOR)FB D3(XOR) FB D2 D1 dir. Buradaki veri_biti sensörden okunan 64 bitlik kodun bitleridir. Ve her bit için bu işlem tekrarlanır. İşleme başlamadan önce kaymalı kaydedicinin içeriği sıfırlanmalıdır. Aşağıda crc hesaplaması yapılan altprogram verilmiştir.bu program sadece tek bit içindir. 64 bitlik kodun her bir biti için en az değerlikli bitten başlamak üzere çağrılması gerekir. unsigned char crc8 (unsigned char kaydedici, unsigned char veri_biti) Unsigned char FB; FB = (kaydedici & 0x01) ^= veri_biti; kaydedici = kaydedici >> 1; if (FB) kaydedici = kaydedici ^ 8C; return(kaydedici); İSMAİL VARIŞLI Sayfa 9

ROM KOMUTLARI : Birincil aygıt ilk olarak hatta hazırlık palsi yollar ve hattı kontrol eder. Hatta bağlı diğer aygıtlardan cevap aldıktan sonra gerekli ROM komutlarını yollamaya başlar. Eğer cevap gelmez ise iletişim kesilir. Hatta bağlı ne kadar aygıt olduğu, adresleri ya da alarm durumunda bulunan bir aygıt olup olmadığı bu komutlar ile algılanır. Bu komutlar sonunda alınan sonuçlara göre fonksiyon komutları yollanır. Beş adet 8bitlik ROM komutu vardır. ROM komutları şunlardır; SEARCH ROM [F0h] READ ROM [33h] MATCH ROM [55h] SKIP ROM [CCh] ALARM SEARCH [ECh] Sisteme enerji verildiğinde birincil aygıt hat üzerindeki ikincil cihazların hepsinin kimliklerini tanımlamalıdır. Birincil aygıt bu komut ile her cihazın kendine özel olan kimlik kodunu öğrenir. Bu komut hat üzerinde yalnızca tek bir ikincil aygıt varken kullanılır. Böylece search rom kodunu kullanmadan hızlı bir şekilde hat üzerinde ikincil aygıttan okuma yapılır. Bu komutu 64bitlik ROM kodu takip eder. Bu komuttan sonra sadece yazılacak olan kimlik numarasına sahip aygıt komutlara cevap verir. Birincil aygıtın hat üzerindeki tüm cihazları ROM kodlarını göndermeden önce adreslemesi için kullanılır. ROM kodu göndermeden fonksiyon kodu gönderileceğini sensöre bildirir. Bu komut tıpkı search rom kodu gibi çalışır. Fakat bu koda yalnızca alarm bayrağı kurulmuş olan sensörler cevap verir. FONKSĠYON KOMUTLARI: Fonksiyon komutları ROM komutlarından sonra gönderilir. Sensörün hafızasından okuma ve yazma işlemleri için gerekli komutları içerir.fonksiyon komutları şunlardır; CONVERT T [44h] WRITE SCRATCHPAD [4Eh] READ SCRATCHPAD [BEh] COPY SCRATCHPAD [48h] Bu komut sıcaklık iletişimini başlatır. Bu iletişimden sonra sıcaklık bilgisi bloknot hafıza üzerindeki 2-byte lık sıcaklık kaydedicisinde saklanır ve DS18B20 düşük güçlü boş durumuna döner. Bu komut sensörün TH,TL ve Konfigürasyon kaydedicilerinin değerlerini değiştirmek ve yeni verilerin yazılması için kullanılır.bu komuttan sonra gönderilen 3byte lık veri sırası ile TH,TL ve konfigürasyon kaydedicilerine yazılır. Bu komut sensörün hafıza içeriğinin okumasını sağlar. Bu komut TH,TL ve konfigürasyon kaydedicilerinin içeriğini EEPROM a kaydetmemizi sağlar. RECALL E2 [B8h] READ POWER SUPPLY [B4h] Bu komut alarm tetikleme değerleri olan TH,TL ve konfigürasyon verilerini EEPROM hafızasından çağırır ve bloknot hafızasına sırasıyla 2,3,4 üncü byte lara yerleştirir. DS18B20 nin güç bağlantısının ne olduğunu öğrenmek için kullanılır. DS18B20 birincil aygıta bağlantı türünü iletir. İSMAİL VARIŞLI Sayfa 10

ĠLETĠġĠM ZAMANLAMASI DS18B20 ile senkron seri iletişim yapıldığı için veri gönderme, alma zamanlamaları ve sırası çok önemlidir. Eğer göndereceğimiz komutların iletişim hızı düşük yada yüksek olursa ve istenilen sırada gönderilmez ise sensör göndereceğimiz komutları algılayamayacak ve cevap vermeyecektir.ds18b20 ile iletişim sıralaması şu şekildedir. 1. Bu hazırlık evresidir. Birincil aygıt ilk olarak hattı 0 a çeker. Eğer hattaki ikincil aygıttan cevap gelirse ikinci adıma geçilir. 2. İkinci adımda ROM komutları gönderilir. Bu komutu gerekli veri bilgileri takip eder. Örneğin hatta eğer ikincil aygıt eşleştirme ROM komutu yollanmış ise bu kodu sıcaklık değeri okunacak ikincil aygıtın seri numarası takip eder. Ya da direk fonksiyon komutu yollanır. 3. Son olarak ROM komutuda yollandıktan sonra fonksiyon komutları yollanır. Yine bu fonksiyon komutlarını eğer gerekli ise veriler takip eder. Eğer bu adımlarda herhangi bir aksama olursa iletişim kesilir. İletişim kesildikten sonra devam edilmesi için tekrar birinci adımdan başlanması gerekir. ĠletiĢimi baģlatma: 1Wire iletişim yönteminde hazır olma haricindeki tüm haberleşmeyi mikrodenetleyici başlatır. DS18B20 sadece hazır olduğunu bildiren sinyali alıcı tarafa göndererek işlemi başlatır.iletişim için ilk olarak birincil aygıt hattı 0 durumuna çeker ve en az 480uS bu durumda tutar.bu süre sonunda pull up direnci hattı tekrar 1 durumuna getirir.bunun için yaklaşık 15-60µS kadar beklenir.ardından DS18B20 hattı yaklaşık olarak 60-240µs 0 konumuna çeker. Bu sensörün iletişim için hazır olduğunu gösterir. Sensörden hazır sinyali alındıktan sonra artık sıcaklık sensörümüz komutları almaya hazırdır. Eğer 480µS sonunda hattan cevap alınmaz ise iletişim kesilir. Çizgi Tiplerinin Anlamları Birincil aygıt hattı sıfır yapıyor Ds18B20 hattı sıfır yapıyor Pull up direnci hattı bir yapıyor ġekil 8:DS18B20 ĠletiĢim Hazırlık Sinyalleri Aşağıda hattı hazır konuma getiren Hitech C ile yazılmış kod parçası verilmektedir. Altprogram 0 değeri döndürürse hattan cevap gelmiyor demektir ve iletişim kesilir. Eğer 1 değeri döndürülürse hattaki aygıt hazır demektir ve iletişime devam edilir. İSMAİL VARIŞLI Sayfa 11

#define TRIS_W TRISD0 #define hat RD0 //Hat birincil aygıtın RD0 portuna tanımlanıyor. unsigned char hat_reset (void) unsigned char sonuc; hat=0; // Hat sıfıra çekiliyor TRIS_W=0; // Hat çıkıs yapılıyor DelayUs(250);DelayUs(250); // 640us>x>480us arasında bekleniyor TRIS_W=1; // Pull-up yükseltmesi bekleniyor DelayUs(70); // 70us bekleniyor sonuc=wire; // 0 Hazır, 1 Hazır değil DelayUs(250);DelayUs(250); // 640us>x>480us arasında bekleniyor return sonuc; İSMAİL VARIŞLI Sayfa 12

SICAKLIK DEĞERĠNĠN OKUNMASI VE HESAPLANMASI İletişim tam ve hatasız bir şekilde gerçekleştikten sonra sensörden okuyacağımız 2 adet 8 bitlik veridir. Bu ikilik verinin ondalık sıcaklık değerine dönüştürülmesi gerekir. Aşağıdaki şekilde yüksek ve düşük değerlikli iki byte ın değer katsayıları verilmiştir. Bu katsayılara göre ikilik ondalık dönüşüm yapılır. LS byte ın ilk 4 biti sıcaklık değerinin ondalıklı kısmını verir. Bit 10-4 sıcaklık değerinin tam kısmını verir.12.bit işaret bitidir.1 ise sıcaklık değeri negatif, 0 ise pozitiftir. Sıcaklık değeri negatif olduğunda sıcaklık değerini hesaplama için ondalık dönüşüm yapmadan önce tümleyenini almak gerekir. ġekil 9:DS18B20 Sıcaklık Değerini Saklayan Hafıza Blokları Örnek: Sıcaklık Ġkilik ÇıkıĢ +25.0625 C 0000 0001 1001 0001-25.0625 C 1111 1110 0110 1111 Yukarıdaki değerler aynı sıcaklığın negatif ve pozitif değerlerini göstermektedir. Böylece aralarındaki farkı görebiliriz.16 bitlik ikilik çıkışın ilk 4 bitinin ondalık kısmın değerini verdiğini söylemiştik. Yani 0001 değeri ondalık değerimizdir.ikilik ondalık dönüşümü yapılırsa bu değer 0.0625 ( ) eder.sayının tam kısmı için ise 10-4 arasındaki bitler dikkate alınır.pozitif sıcaklık için 001 1001 değeridir. Bu sayıyı ondalık sayı sistemine çevirdiğimizde 25 eder. Negatif sıcaklık değeri için ikilik çıkış 110 0110.Dikkat ederseniz bu değer pozitif sıcaklık değerinin terslenmiş halidir. Yani birler sıfır, sıfırlarda bir yapılmış halidir.bu nedenle eğer 12.bit değeri 1 ise ikilik çıkışın tam sayı kısmını ilk olarak tersler daha sonra ondalık sayı sistemine çeviririz. 12.bitin negatif sıcaklık değeri için 1 pozitif sıcaklık değeri için ise 0 olduğuna dikkat edin. Aşağıdaki bu örnekle anlattıklarımızı yapan Hitech C kodu bulunuyor. Bu kodu inceleyerek konuyu daha iyi anlayabiliriz. lsb = hat_byte_oku(); //sıcaklık değerinin ilk byte ı lsb değişkenine atanıyor msb = hat_byte_oku(); //sıcaklık değerinin ikinci byte ı msb değişkenine atanıyor while (hat_reset()); //Hatta iletişimi bitiren reset sinyali gönderiliyor ondalik=0; sicak=(msb<<4)+(lsb>>4); //Bit 10-4 deki ondalık değer sicak değişkenine atanıyor if(sicak & 0x80) //msb nin 11.biti 1 ise sıcaklık negatif 0 ise pozitif değer sicak=~sicak; //sıcaklık negatif ise okunan ters çevriliyor. lsb=~lsb & 0x0F; if(lsb & 0x08) onda =0.500; if(lsb & 0x04) onda+=0.250; if(lsb & 0x02) onda+=0.125; if(lsb & 0x01) onda+=0.0625; İSMAİL VARIŞLI Sayfa 13

DS18B20 ÇALIġMASI ÖRNEK 1 Aşağıdaki örnekte birden fazla DS18B20 ile aynı hatta bağlı ve parazit güç bağlantısı kullanılmıştır. Birincil aygıt sıcaklık iletişimine belirli bir DS18B20 ile başlar. Daha sonra DS18B20 nin bloknot hafızası okunur ve alınan verinin kontrolü için CRC kodu hesaplanır. MOD VERĠ AÇIKLAMA RESET Birincil aygıt reset palsi gönderir RX Hazır Bulunma DS118B20 hazır olduğunu bildiren palsi göndererek cevap verir. 55h Birincil aygıt Eşleştirme ROM komutunu gönderir. Bu komuttan sonra gönderilecek seri numarasına sahip aygıt ile haberleşme yapılacağını bildirir. 64-bit ROM kod Birincil aygıt DS18B20 hatta iletişim kurulacak sensörün ROM kodunu gönderir. 44h Birincil aygıt sıcaklık dönüşüm komutunu gönderir. DQ hattı 1 de Birincil aygıt sensörün dönüşüm yapmasını tutuluyor. beklemesi süresince hattı 1 seviyesinde tutar. Reset Birincil aygıt reset palsi gönderir. RX Hazır Bulunma. DS118B20 hazır olduğunu bildiren palsi göndererek cevap verir. 55h Birincil aygıt Eşleştirme ROM komutunu gönderir.bu komuttan sonra gönderilecek seri numarasına sahip aygıt ile haberleşme yapılacağını bildirir. 66-bit ROM kod Birincil aygıt DS18B20 hatta iletişim kurulacak sensörün ROM kodunu gönderir. BEh Birincil aygıt Read Scratcpad komutunu,yani hafızanın okunacağını bildiren komutu gönderir. RX 9 byte veri Birincil aygıt içinde CRC kodu ile beraber hafızanın tamamını okur. Birincil aygıt gelen ilk 8 byte ı kullanarak(ds18b20 hafıza bloğunun ilk 8 byte ı) CRC kodunu tekrar hesap eder.ve DS18B20 tarafından yollanan 9.byte olan CRC kodu ile karşılaştırır.eğer eşleşiyorsa işleme devam edilir.aksi takdirde iletişim tekrarlanır. İSMAİL VARIŞLI Sayfa 14

ÖRNEK 2 Bu örnekte parazit güç bağlantısı yapılmış bir adet DS18B20 ile iletişim anlatılacaktır. Birincil aygıt TH,TL ve konfigürasyon kaydedicilerini ilk olarak yazar,sonra hafızayı okur ve CRC kodunu yeniden hesaplayarak gelen verinin doğruluğunu kontrol eder. Birincil aygıt hafıza içeriğini EEPROM una kopyalar. MOD VERĠ AÇIKLAMA RESET Birincil aygıt reset palsi gönderir RX Hazır Bulunma DS118B20 hazır olduğunu bildiren palsi göndererek cevap verir. CCh Birincil aygıt Skip ROM komutu gönderir.bu herhangi bir ROM işlemi yapılmayacağı sadece fonksiyon komutu gönderilecek demektir. 4Eh Birincil aygıt Hafızaya yazı yazma komutunu gönderir. Birincil aygıt sırası ile TH,TL ve 3 byte lık veri konfigürasyon kaydedicilerinin değerinin gönderir. RESET Birincil aygıt reset palsi gönderir RX Hazır Bulunma DS118B20 hazır olduğunu bildiren palsi göndererek cevap verir. CCh Birincil aygıt Skip ROM komutu gönderir.bu herhangi bir ROM işlemi yapılmayacağı sadece fonksiyon komutu gönderilecek demektir. BEh Birincil aygıt Hafıza okuma komutunu gönderir. RX 9 byte veri Birincil aygıt içinde CRC kodu ile beraber hafızanın tamamını okur. Birincil aygıt gelen ilk 8 byte ı kullanarak (DS18B20 hafıza bloğunun ilk 8 byte ı) CRC kodunu tekrar hesap eder.ve DS18B20 tarafından yollanan 9.byte olan CRC kodu ile karşılaştırır.eğer eşleşiyorsa işleme devam edilir.aksi takdirde okuma işlemi tekrarlanır. RESET Birincil aygıt reset palsi gönderir RX Hazır Bulunma DS118B20 hazır olduğunu bildiren palsi göndererek cevap verir. CCh Birincil aygıt Skip ROM komutu gönderir.bu herhangi bir ROM işlemi yapılmayacağı sadece fonksiyon komutu gönderilecek demektir. 48h Birincil aygıt Hafıza kopyalama komutunu gönderir. Birincil aygıt sensörün kopyalama işlemi DQ hattı 1 de yaptığı süre boyunca en az 10ms hattı 1 tutuluyor. seviyesinde tutar. * verinin birincil aygıt tarafından gönderildiğini, RX ise verinin birincil aygıt tarafından alındığını göstermektedir. *Veri gönderilirken yada alınırken en düģük bitten baģlanır.yani alınan yada gönderilen ilk bit sıfırıncı bittir. İSMAİL VARIŞLI Sayfa 15

Bu örnekler ile iletişimin sıralaması ve zamanlaması ile ilgili gerekli mantık sanırım anlaşılmıştır. Tek bir hat üzerinden birden fazla sensör ile iletişim kurmamız gereken uygulamalarda her bir sensörün seri numarasını tek tek almamız ve enerji kesildiğinde seri numaraların kaybolmaması için mikrodenetleyicinin epromuna kaydetmemiz gerekir. Daha sonra hangi noktadaki sıcaklık değerini ölçmek istiyorsak eproma kaydettiğimiz o sensöre ait kimlik kodunu kullanırız. Şimdi bu kodları sensörden nasıl okuyacağımızla ilgili gerekli kodları görelim. Hitech C ile hazırlanmış bu alt program sensörden okumuş olduğu seri kodu LCD ye yazdırıyor. Böylece proteusta DS18B20 nin seri kodunu değiştirerek çıkan sonuçları gözlemleyebilirsiniz. Şekil10 proteusta DS18B20 sensörünün özellikler penceresini gösteriyor. Resim şekil11 daki devrede ilk sensöre sağ tıklayıp edit properties menüsüne girildikten sonra alındı. Kırmızı ile daire içerisine alınan kutu sensörün seri numarasını göstermektedir. Şekildeki değer proteusun vermiş olduğu varsayılan değer olup her eklediğiniz sensörünkü aynıdır. Bu nedenle eğer proteusta tek hatta birden fazla sensör simülasyonu yapacaksanız eklediğiniz her sensörün bu kodunu değiştirmeniz gerekir. İkinci önemli nokta mikrodenetleyiciye sensörü tanıtmanız ve seri kodunu okumanız gerektiğinde hatta başka aygıtın olmaması gerektiğidir. Eğer hatta birden fazla aygıt var ve biz read rom komutunu yollarsak hattaki tüm aygıtlar buna cevap vereceği için alınan değerler yanlış olacaktır. Aşağıdaki bu kodu kullanarak yapacağınız değişikliklerin sonuçlarını takip edebilirsiniz. void sensor_ekle(void) unsigned char i,seri_no; while(hat_reset()); hat_byte_yaz(0x33); for(i=0; i<8; i++) seri_no=hat_byte_oku(); if(i==0) DisplayInt(0,0,seri_no); if(i==1) DisplayInt(0,5,seri_no); if(i==2) DisplayInt(0,10,seri_no); if(i==3) DisplayInt(0,15,seri_no); if(i==4) DisplayInt(1,0,seri_no); if(i==5) DisplayInt(1,5,seri_no); if(i==6) DisplayInt(1,10,seri_no); if(i==7) DisplayInt(1,15,seri_no); ġekil 10:DS18B20-ROM Seri No İSMAİL VARIŞLI Sayfa 16

ġekil 11:DS18B20 Seri No-Proteus İSMAİL VARIŞLI Sayfa 17

EK 1:Hitec Pic C için 1Wire iletiģim kütüphane dosyası.(20mhz de çalıģan mikrodenetleyici için.farklı frekanslar için DelayUs() komutlarını değiģtirmeniz gerekir.örneğin 4MHz için yazılan DelayUs adedini 5 e bölün) #define TRIS_W TRISD0 //Bağlantılar #define WIRE RD0 unsigned char hat_reset(void) unsigned char sonuc; WIRE=0; // Hat sıfıra çekiliyor TRIS_W=0; // Hat çıkıs yapılıyor DelayUs(250);DelayUs(250); // 640us>x>480us arasında bekleniyor DelayUs(250);DelayUs(250); DelayUs(250);DelayUs(250); DelayUs(250);DelayUs(250); DelayUs(250);DelayUs(250); TRIS_W=1; // Pull-up yükseltmesi bekleniyor DelayUs(70); DelayUs(70);DelayUs(70);DelayUs(70);DelayUs(70);// 70us bekleniyor sonuc=wire; // 0 Hazır, 1 Hazır değil DelayUs(250);DelayUs(250); // 640us>x>480us arasında bekleniyor DelayUs(250);DelayUs(250); DelayUs(250);DelayUs(250); DelayUs(250);DelayUs(250); DelayUs(250);DelayUs(250); return sonuc; unsigned char hat_bit_oku(void) unsigned char veri; WIRE=0; // Hat sıfıra çekiliyor TRIS_W=0; DelayUs(5);DelayUs(5);DelayUs(5);DelayUs(5);DelayUs(5);// 5 mikrosaniye bekleniyor TRIS_W=1; // Pull-Up'ın hattı yükseltmesi bekleniyor DelayUs(10);DelayUs(10);DelayUs(10);DelayUs(10);DelayUs(10); // 10 mikrosaniye bekleniyor if(wire) // Hat okunuyor veri=1; // Okunan veri 1 else veri=0; // Okunan veri 0 DelayUs(60);DelayUs(60);DelayUs(60);DelayUs(60);DelayUs(60); return veri; void hat_bit_yaz(unsigned char veri) if(veri) // 1 gönderiliyor İSMAİL VARIŞLI Sayfa 18

TRIS_W=0; // Hat sıfırlanıyor WIRE=0; DelayUs(5);DelayUs(5);DelayUs(5);DelayUs(5);DelayUs(5);// 5 mikrosaniye bekleniyor TRIS_W=1; // Pull-Up'ın hattı yükseltmesi bekleniyor DelayUs(60);DelayUs(60);DelayUs(60);DelayUs(60);DelayUs(60);// 60 mikrosaniye bekleniyor else // 0 gönderiliyor TRIS_W=0; // Hat sıfırlanıyor WIRE= 0; DelayUs(60);DelayUs(60);DelayUs(60);DelayUs(60);DelayUs(60); // 60 mikrosaniye bekleniyor TRIS_W=1; // Pull-Up'ın hattı yükseltmesi bekleniyor unsigned int hat_byte_oku(void) unsigned char i,veri=0, bitler=1; for(i=0;i<8;i++) if ( hat_bit_oku() == 1 ) veri = bitler; bitler=bitler<<=1; return veri; void hat_byte_yaz(unsigned char veri) unsigned char bitler=1, i; for (i=0;i<8;i++) if (veri&bitler) hat_bit_yaz(1); else hat_bit_yaz(0); bitler=bitler<<=1; Yazan ve Hazırlayan :Ġsmail VARIġLI İSMAİL VARIŞLI Sayfa 19