16f628a denetleyici kullanıldı
4mhz osilatör ayarlandı
float tipinde değişken
ds18b20.c içinde data ucu rb3 ayarlandı
#include<16f628a.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT
#use delay(clock=4m)
#include<lcd.c>
#include "dss18b20.c"
void main()
{
float sicaklik;
lcd_init();
while(true)
{
sicaklik = ds1820_read();
printf(lcd_putc,"\fsicaklik:%1.1f %cC",sicaklik,223);
delay_ms(300);
}
}
Aşağıdaki kodları dss18b20.c dosyası olarak kaydedelim.
#define ONE_WIRE_PIN PIN_b3
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;//18b20 icin
//result = (float) temp3 / 2.0;//18s20 icin
delay_ms(200);
return(result);
}
hazır kütüphaneye nasıl erişeceğiz kodun tamamı bu mu
YanıtlaSilhocam banada atma şansınız var mıdır bende hata alıyorum.
Silprojeyi beyazgul2001@gmail.com a yollayabilir misiniz?
Kodun tamami bu hazir kutuphaneler programin klasörunde programfiles/picc/include icinde
YanıtlaSililginiz için teşekkür eder , bu kodu yazdıktan sonra extra bir işlem gerekiyor mu ben compile ettikten sonra hata alıyorum
Sil#define ONE_WIRE_PIN PIN_b3
Silvoid 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;//18b20 icin
//result = (float) temp3 / 2.0;//18s20 icin
delay_ms(200);
return(result);
}
dsb1820.c olarak kaydedermisin programdaki uzantıyla aynı olmasına dikkat edelim.
mail adresini yazarsan bitmiş halini paylaşırım
Bitmiş halini şu maile gönderebilir misiniz? Halen hata alıyorum.
Silprototprotot2@gmail.com
bu dosyanın linki nerde acaba göremedim de
YanıtlaSilMail atarsaniz siz gonderebilirim. sifirrzero@gmail.com
Silyolladım aciliyeti var bekliyorum geri döünşünüzü
SilDosyanın link var mı acaba?
YanıtlaSilmail atarsanız dosyayi gönderebilirim. sifirrzero@gmail.com
Sil