Elektrotekno.com Ana Sayfa || Devre ve proje istekleriniz


DS18B20 ile sicaklik ölçümü

Kayıt: 09 Ksm 2007
Mesajlar: 5

Offline
beyza
Tarih: 06 08 2009 10:31

DS18B20 ve 16F84'ü kullanıp sıcaklik ölçmem ve bu ölçümü cep telefonuna iletmem lazim!!İlk önce DS18B20'nin nasıl caliştiğini çözmem gerek..Yardim edecek biri olursa cok ii olurr!!


Reklamlar
Kayıt: 14 Tem 2009
Mesajlar: 5

Offline
sabri_unal
Tarih: 06 08 2009 10:49

Öncelikle oneware protokol kullanımını bilmeniz gerekiyor çünkü Ds18b20 3 bacakli bir eleman olup sadece 1 bacağından data alış verişi yapılmaktadır. ds18b20 nin datasheet pdf dökümanını indirerek başlayabilirsiniz... dijital bir veri alışverişi olacağı için referans bir voltaj belirlersiniz bu ref. voltajı sizin ölçüm hassasiyetinizi belirler. genelle vdd voltajı yanı 5 volt kullanılır. iyi çalişmalar dilerim...
Başa dön
Kayıt: 10 Mar 2006
Mesajlar: 82

Offline
turkroniknet
Tarih: 23 12 2009 10:19

Aşağıdaki sitede ds18b20 için yazılmış CCS driver ı var. Denedim ve çalıştırdım, güvenle kullanabilirsin:)
Kolay gelsin
http://www.ccsinfo.com/forum/viewtopic.php?t=28425
Başa dön
Kayıt: 09 Arl 2009
Mesajlar: 2

Offline
valevale
Tarih: 26 12 2009 17:42

selamlar
buyrun benim de kullandığım c kodları
okumanın yapılması için biraz düzeltme yapmanız gerekecek ancak fonksiyonlar çalışıyor onları değiştirmeyin
bir de aklınızda olsun bu zamanlamalar 4MHz çalışma frekansı için başka bir frekans için zamanlamaları tekrar ayarlamanız gerekir umarım işinize yarar kolay gelsin
Kod:
/************************************************************************/
// Routines for one-wire protocol (DS18B20)
// Rel. 1.0 Nov 2006
// Eduardo Barajas P.
// TRIS_DQ --> DDRCbits.RC2 // TRIS for DQ
// DQ --> PORTCbits.RC2 // DATA pin for DQ
#define TRIS_DQ DDRCbits.RC2 // TRIS for DQ of DS18B20
#define DQ PORTCbits.RC2 // DATA pin for DQ of DS18B20
// #define TRIS_DQ DDRCbits.RC1 // TRIS for DQ of DS18B20
// #define DQ PORTCbits.RC1 // DATA pin for DQ of DS18B20

unsigned char reset_ow(void) //Reset and detect DS8B20
{
unsigned char presence;
TRIS_DQ = 1; // Start with line high
DQ = 0;
TRIS_DQ = 0; // Make DQ low
Delay100TCYx(5); // Drive low for 500us
TRIS_DQ = 1;
Delay10TCYx(7); // Release line and wait 70us
presence = DQ;
Delay10TCYx(43); // wait 430us after presence pulse
return presence; // 0=presence; 1=No Part connected
}
unsigned char read_bit_ow(void) // Read single bit of DS18B20
{
DQ = 0;
TRIS_DQ = 0; // Make DQ low
_asm NOP _endasm // Wait 1 uS
TRIS_DQ = 1; // Make DQ high
Delay10TCYx(1); // Delay 10 uS from start of timeslot
_asm NOP _endasm // Wait 1 uS
_asm NOP _endasm // Wait 1 uS
_asm NOP _endasm // Wait 1 uS
_asm NOP _endasm // Wait 1 uS
return DQ; //Return value of DQ line
}
unsigned char read_byte_ow(void) //Read one byte from the one-wire bus (18B20)
{
unsigned char i;
unsigned char value = 0;
for( i=0; i<8; i++)
{
if(read_bit_ow()) value |= (0x01<<i); // Reads byte in, one bit at time and then shifts it left
Delay10TCYx(12); // Delay 120uS for rest of timeslot
}
return value;
}
void write_bit_ow(char bitval) // Writes a bit to the one-wire bus (18B20) passed in bitval.
{
DQ = 0;
TRIS_DQ = 0; // Make DQ low to start timeslot
_asm NOP _endasm // Wait 1 uS
if(bitval == 1) TRIS_DQ = 1; // return DQ high if write 1
Delay10TCYx(10); // Delay 100uS for rest of timeslot
TRIS_DQ = 1; // return DQ high
}
void write_byte_ow(char val) // Writes a byte to the one-wire bus
{
unsigned char i;
unsigned char temp;
for( i=0; i<8; i++) // Writes byte, one bit at a time
{
temp = val>>i; // Shifts val right 'i' spaces
temp &= 0x01; // Copy that bit to temp
write_bit_ow(temp); //Write bit in temp into one-wire bus
}
Delay10TCYx(10); // Delay 100uS for rest of timeslot
}
/************************************************************************/
/************************************************************************/
// Read SCRATCHPAD and return temperature for DS18B20 ONLY!!!
unsigned int read_temperature_ow_18B20(char *ID)
{
unsigned int temperature;
unsigned char dat[9], i;
reset_ow();
write_byte_ow(0x55); //Match Rom
for(i=0; i<8; i++) write_byte_ow(ID);
write_byte_ow(0x44); // Start conversion
while(read_bit_ow()==0); // Wait for end of conversion
reset_ow();
write_byte_ow(0x55); //Match Rom
for(i=0; i<8; i++) write_byte_ow(ID);
write_byte_ow(0xBE); //Read Scratch
for(i=0; i<9; i++) dat=read_byte_ow();
temperature = dat[0] + dat[1] * 256;
return temperature;
}
/************************************************************************/



Just create a new header file named one_wire.h and copy all them to the file and include your header your program as follow:

#include <one_wire.h>

And you can use them in this way:

unsigned char DS18B20_A[]={0x28, 0x1D, 0xC6, 0x30, 0x00, 0x00, 0x00, 0xF9, NULL}; //
unsigned char DS18B20_B[]={0x28, 0xD0, 0x22, 0x31, 0x00, 0x00, 0x00, 0x66, NULL}; // With the routines you need to get the ID of your 18B20
// These two ID's are for my 18B20's.

unsigned char tmp;
int conv;

tmp = reset_ow();
if( tmp ==1){ LCD_ROM(" DS18B20 NOT detected !!!!", 0, 0); Delay10KTCYx(200);}
if( tmp ==0) {
LCD_ROM(" DS18B20 detected 24 !!!!", 0, 0);
XLCDClear();
LCD_ROM("T: ", 0, 0);
i=0;
while(1){
conv = read_temperature_ow_18B20(DS18B20_A);
watts = conv * 0.0625;
ftoa (watts, buf, 1, 'f');
LCD_ROM(" ", 10, 0);
LCD_RAM(buf, 10, 0);
conv = read_temperature_ow_18B20(DS18B20_B);
watts = conv * 0.0625;
ftoa (watts, buf, 1, 'f');
LCD_ROM(" ", 10, 1);
LCD_RAM(buf, 10, 1);
Başa dön
Kayıt: 06 Ksm 2007
Mesajlar: 33

Offline
SOVALYE
Tarih: 27 12 2009 12:36

PBP Kodları sensöre dikkat et 18B20 ile 1820 farklı çalışıyo


'ısı sensörü 18b20
'------------ısı tanımlamaları--------------------------------------------------
busy var bit ' busy status-bit
ham var word ' sensör ham okuma değeri
ısı_ds1820 var word ' hesaplanmış ısı değeri
float var word ' holds remainder for + temp c display
x var word
ısaret_bıtı var ham.bit11 ' +/- sıcaklık işaret biti, 1 = olursa eksi sıcaklık
eksı_ısı con 1 ' sıfır altında isaret biti=1 oluyor kontrol için
derece con 223 ' ° işareti
ısaret var byte ' ısı değeri için +/- işaret
temp var byte ' div32 bit hesap için geçici değişken
symbol comm_pın=portd.7 ' one-wire data-pin "dq" portd.7 de
!------------------------------------------------------------------------------------


maınloop:
gosub sensoroku 'sonsör oku ve sıcaklığı ekrana yaz
goto maınloop


'------------------------------ısı okuma alt programı--------------
sensoroku:
owout comm_pın, 1, [$cc, $44]' ısı değerini oku
bekle:
owın comm_pın, 4, [busy] ' busy değerini oku
ıf busy = 0 then bekle ' hala meşgulmü? , evet ise goto bekle..!
owout comm_pın, 1, [$cc, $be] ' scratchpad memory oku
owın comm_pın, 2, [ham.lowbyte, ham.highbyte]' iki byte oku ve okumayı bitir.
gosub hesapla
return
hesapla: ' ham değerden santigrat derece hesabı
ısaret = "+"
ıf ısaret_bıtı = eksı_ısı then
ısaret = "-"
temp=($ffff - ham+1)*625
ısı_ds1820 = div32 10
goto gec
endıf
temp = 625 * ham
ısı_ds1820 = div32 10 ' div32 hassas derece hesabı için 32 bit bölme yapıyoruz.
gec:
float = (ısı_ds1820 //1000)/100
ısı_ds1820=ısı_ds1820/1000
lcdout $fe,1 ' lcd de cls yapar
lcdout $fe,$85,ısaret,dec ısı_ds1820,".",dec1 (float),derece,"c" '1. satırda ısı
return
end
goto maınloop
Başa dön



DS18B20 ile sicaklik ölçümü


Benzer Konular
- PIC16F84 ile DS18B20 Termometre yapımı+Pcb
- Fiat Tipomuz için Yaptığım iç ve Dış sıcaklık sensörü-pic16f628a ve DS18B20
- pıc16f628 ds1302 ds18b20 690 ledli saat termometre devresi

- DS18B20 Termometre (pcb)

- DS18B20 datasheet Türkçe
- Topraklama Ölçümü İle İlgili Resimli Anlatım
- Pic16F877A 20Mhz entegre ile DS18B20 Isı sensörü uygulaması Program kodlarıdır.
- -50 ile +50 arası ortam sıcaklık ölçümü
- 16f628 ile yapılmıs ds18b20 li + ve - sıcaklık kontrollu lcdli termostat devresi

- Pic16F877 ile MCP9700 sensörü kullanarak sıcaklık ölçümü

- Topraklama ölçümü ve akaryakıt istasyonu topraklama ve paratoner projesi ihtiyac

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Turkiye | Ads by Google Adsense | Design by Crazy Bat based