CCS C - 18B20 Kullanımı
UstaDerslik Soru-Cevap Yararlı Araçlar
arama ikon

bilgi UstaDerslik
Bu uyari kutusudur.
Tamam
Anasayfa
İletişim
Üyeler

CCS C - 18B20 Kullanımı

profil
aboo67
BEĞEN(1)
BEĞENME(0)
GÖRÜNTÜLENME(12454)
RAPOR ET
18B20 Sıcaklık Sensörü Kullanımı

http://www.ledgrafikpanel.net/images/DS18B20.gif

DS18B20 algılayıcısı (Tek Hat Sayısal Termometre) yüksek doğrusallığa sahip sayısal çıkış üreten bir sıcaklık algılayıcısıdır. Dallas/Maxim tarafından geliştirilen tek hat haberleşme protokolü ile haberleşilen bu algılayıcıların her birinin özel ve 64 bitten oluşan

tek bir seri numarası bulunmaktadır (8 bit CRC kodu + 48 bit seri no +8 bit aile kodu ). Böylece tek bir seri hatta bağlanan birden fazla DS18B20algılayıcılarından istenileni ile haberleşilerek ilgili noktadaki sıcaklık ölçülebilir. Bu sıcaklık algılayıcısı 100 metreye kadar herhangi bir ek devre elemanına gerek kalmadan kullanılabilmektedir. DS18B20, -55°C ile +125°C arasında 9, 10, 11 veya 12 bitlik çözünürlükte ölçüm yapabilmektedir. 12 bitlik çözünürlükteki hassasiyeti 0,0625’°C dir. Çözünürlük değeri yapılandırma kaydedicisinin 5. ve 6. bitleri değiştirilerek belirlenmektedir.(320volt.com)

DS18B20 Block Diagram

http://www.maximintegrated.com/images/qv/2812.gif

http://img.weiku.com/waterpicture/2011/10/18/21/DS18B20_TO92_1_Wire_Digital_Thermometer_634545994058976675_1.jpg

Uygulama :

http://o1308.hizliresim.com/1d/y/s31tr.jpg

ds18b20.c // 18B20 DRİVER

#define ONE_WIRE_PIN PIN_A0
void onewire_reset()

{
output_low(ONE_WIRE_PIN);
delay_us( 500 ); //1-wire resetleme için sıfıra çekilir
output_float(ONE_WIRE_PIN); //1-wire bir yapılır
delay_us( 500 ); // sensörün hazırlanması için beklenir.
output_float(ONE_WIRE_PIN);
}
void onewire_write(int data)
{
int count;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); // Sensöre yazma işlemine başlamak için 1-wire sıfıra çekilir.
output_bit(ONE_WIRE_PIN, shift_right(&data,1,0)); // yazılacak bilgi 1-wire'da
delay_us( 60 ); // Yazma işlemi zamanı doldurulur.
output_float(ONE_WIRE_PIN); // 1-wire bir yapılır,
delay_us( 2 ); // 1us'den fazla beklenir.
}
}
int onewire_read()
{
int count, data;
for (count=0; count<8; ++count)
{
output_low(ONE_WIRE_PIN);
delay_us( 2 ); //Sensördem okuma işlemi içinl 1-wire sıfıra çekilir.
output_float(ONE_WIRE_PIN); //1-wire bir yapılır,
delay_us( 8 ); // Sensörün kendine gelmesi beklenir,
shift_right(&data,1,input(ONE_WIRE_PIN)); // sonuc bilgisi alınır.
delay_us( 120 ); //Okuma işlemi zamanı doldurulur.
}
return( data );
}
float ds1820_read()
{
int8 busy=0, temp1, temp2;
signed int16 temp3;
float result;
onewire_reset();
onewire_write(0xCC);
onewire_write(0x44);
while (busy == 0)
busy = onewire_read();
onewire_reset();
onewire_write(0xCC);
onewire_write(0xBE);
temp1 = onewire_read();
temp2 = onewire_read();
temp3 = make16(temp2, temp1);
result = (float) temp3 / 16.0;
delay_ms(200);
return(result);
}


main.c

//==============================================================================
//==============================================================================
#include <16F876.h>
#include <stdio.h>
#fuses HS,NOWDT,PROTECT
#use delay (clock=20000000)
#include "ds18b20.c"
//==============================================================================
//==============================================================================
const int digit[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
int i=0;
int sicaklik=0;
int sicaklik1=0;
int sicaklik2=0;
//==============================================================================
//==============================================================================
void main () {
output_b(digit[0]);
output_c(digit[0]);
while(1){
sicaklik=ds1820_read();
delay_ms(500);
sicaklik1=sicaklik%10;
sicaklik2=sicaklik/10;
output_b(digit[sicaklik1]);
output_c(digit[sicaklik2]);
}
}



Kod
Kalın
Vurgu
Resim
Video
Url
CEVAPLA
Tüm Hakları Saklıdır. ©Arleone 2013-2014 UstaDerslik






Giriş
Şifremi Unuttum...
Şifre Talep
  Kuralları Kabul Ediyorum.
Kaydol