1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...
Nis
22nd

DS18B20 Sürücü Programı

ds18b20.jpg

Maxim/Dallas firması tarafından üretilen DS18B20 sıcaklık algılayıcısı en fazla 0.5 derecelik hata ile -55 ile +125 dereceler arası ölçüm yapabilmekte ve sıcaklık bilgisini sayısal olarak vermektedir. DS18B20 gibi sayısal çıkış veren sıcaklık algılayıcılarının kullanımı ile analog/sayısal dönüştürücü kullanımına gerek kalmamaktadır.

ds18b20bag.jpg

Ayrıca parazit besleme özelliÄŸi sayesinde harici besleme kaynağına gerek almadan sıcaklık bilgisi okunabilmektedir. Sensörün Pic’e baÄŸlantısı apılırken yapılacak tek ÅŸey DQ data hattına 4.7 k’lık bir pull up direnciyle +5 volta baÄŸlanması olacaktır. AÅŸağıda verilen sürücü programı devrede sadece bir Ds18B20 varken çalışacaktır. Ayrıca buradan kablosuz sıcaklık ölçümünün nasıl yapılacağına dair bilgi edinebileceÄŸiniz dökümana ulaÅŸabilirsiniz.

//Bu kodu ds18b20.c olarak kaydediniz

// (C) copyright 2003 j.d.sandoz / jds-pic !at! losdos.dyndns.org #define ONE_WIRE_PIN PIN_C7 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 / 2.0; delay_ms(200); return(result); }

Örnek uygulama Progamı:


#include <16F877A.h>
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000) 

#include
#include 

void main()
{
float temperature; 

setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC); 

lcd_init();
lcd_putc(”\f”); 

while (1)
{
  temperature = ds1820_read(); 

   printf(lcd_putc,”Sicaklik:\n %3.1f derece”, temperature);
   delay_ms(250;)
 } 

}


Share and Enjoy:
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google

Benzer Yazılar


One Response to “DS18B20 Sürücü Programı”

  1. By Erhan on Kas 11, 2008 | Reply

    Merhaba ben aynı uygulamayı yaptım. Yalnız şöyle bir problem var

    Simulasyonda çalışıyor ama derece olarak 187 derece gibi gösteriyor. Sebebi ne olabilir.

Post a Comment