ds18b20 hata

Başlatan styx75, 19 Mart 2018, 00:11:24

styx75

selam arkadaşlar.acemi sayılırım
ds18b20 ile yaşadıgım bir sorunu paylaşacağım yardımcı olursanız sevirim kodlar
fuses H4, HS,WDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD 
#use delay (clock=40000000)

#priority ext, ext1,ext2, timer1,timer0
#define FAST_GLCD
#include <HIZLI.c>
#include <graphics.c>
#include <DS1307.c>
#include <askim.c>
#include "ds18b20.c"   
#use fast_io(b) 
#use fast_io(e)
// degişken tanım kısmı
float sicaklik=0;
disable_interrupts(INT_timer0);  
enable_interrupts(INT_timer1);  
enable_interrupts(GLOBAL); 
output_high(pin_e0);
delay_ms(100);
output_low(pin_e0);

eprom=read_eeprom(240);
glcd_init(on);
glcd_image(0);
glcd_update();
delay_ms(1000);
glcd_init(on);
while(1){



if(tmr1mekik){

sicaklik= ds1820_read();
delay_ms(500);
output_toggle(pin_e2);
zaman();

}

   
}
}

sorun şu sicaklik= ds1820_read(); komutundan program dönmüyor acaba hata nerde.ayrıca okuma komutunu silince programda hiç sorun yok.
define ONE_WIRE_PIN PIN_A1// sensörün DQ bacağının bağlanacağı pin
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);
}

RaMu

DS18B20 DQ pinini 1k ile + ya bağla.
Şemanı eklemelisin.

Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

styx75

cevabınız için teşekkür ederim.
ds18b20 nin bacak bağlantılarında sorun yok çünkü ds18b20 yok :) :) ;D.çok özür dilerim,saçma bir nedenden meşgul ettim.

pax

denemeyi proteusta mı? yapıyorsunuz. 

styx75

evet.ama ds18b20 yi çizmeyi untmuşum  :D sorun yok yani.

pax

2 gündür proteusta ds18b20 ile uğraşıyorum. ds18b20 den okuduğum değeri lcd de göstermeye çalışıyorum. ancak lcd ekranda 000.0000 biilgisini gördüm. en son dayanamadım gerçekte denemeye kalkıştım. proteusta çalışmayan program gerçekte çalıştı. o yüzden sordum. hala proteustaçaışmıyor. hangi verisyonu kullanıyorsunuz. özel bir işlem yapmak gerekiyor mu proteusta. ben pic16f877a , proteus 7.7 ve micro C kullanıyorum.   

styx75

benim kullandığım 8,4 versiyonu.ama o kadar detaylı bilgiye sahip değilim.umarım deneyimli arkadaşlar cevap verebilirler.