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
Uygulama :
ds18b20.c // 18B20 DRİVER
main.c#define ONE_WIRE_PIN PIN_A0void onewire_reset(){output_low(ONE_WIRE_PIN);delay_us( 500 ); //1-wire resetleme için sıfıra çekiliroutput_float(ONE_WIRE_PIN); //1-wire bir yapılırdelay_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'dadelay_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);}
//==============================================================================
//==============================================================================
#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]);
}
}
0 yorum:
Yorum Gönder