DS18B20 ile ilgili sorun yardıma ihtiyaç var

Başlatan serhat_selo, 18 Mayıs 2008, 14:31:10

serhat_selo

İlk defa bu sensör ile uygulama yapıyorum. Ve genelde karşılaşılan bi sorunu çözemedim. Yardımcı olursanız çok sevinirim.Kod aşağıdaki gibi:

#include <16F877.h>
#use delay(clock=4000000)
#use fast_io(b)
#use fast_io(c)
#use fast_io(d)
#define ow_data_pin  pin_c0
#define use_portb_lcd TRUE 
#include <lcd.c>
int A,B,C,D,E,F,G,H,I,J,SONUC;
//*****************************************************************************
void ow_hiz(int hiz)
{
if(hiz==1)
{
A=6; B=64; C=60; D=10; E=9; F=55; G=0; H=480; I=70; J=410;
}
if(hiz==0)
{
A=1; B=7; C=7; D=2; E=1; F=7; G=2; H=70; I=8; J=40;
}
}
//*****************************************************************************
int ow_reset(void)
{
int1 sonuc;

delay_us(G);
output_low(ow_data_pin);
delay_us(H);
output_float(ow_data_pin);

delay_us(I);
sonuc=input(ow_data_pin);
delay_us(J);

return sonuc;
}
//*****************************************************************************
void ow_yaz_bit(int bit)
{
if(bit==1)
 {
   output_low(ow_data_pin);
   delay_us(A);
   output_float(ow_data_pin);
   
   delay_us(B);
 }
else
 {
   output_low(ow_data_pin);
   delay_us(C);
   output_float(ow_data_pin);
   
   delay_us(D);
 }
}
//*****************************************************************************
int1 ow_oku_bit(void)
{
int1 bit;

   output_low(ow_data_pin);
   delay_us(A);
   output_float(ow_data_pin);
   
   delay_us(E);
   bit=input(ow_data_pin);
   delay_us(F);
   
   return bit;
}
//*****************************************************************************
void ow_yaz_byte(int data)
{
int i;

 for(i=0;i<8;i++)
 {
 ow_yaz_bit(bit_test(data,i));
 }
}
//*****************************************************************************
int ow_oku_byte(void)
{
int i,sonuc=0;

for(i=0;i<8;i++)
{
sonuc=sonuc>>1;
  if(ow_oku_bit())
    sonuc=(sonuc | 0x80);
}
return sonuc;
}
//*****************************************************************************
void main()
{
int buff[9],n,temp,temp_dec;

lcd_init();
ow_hiz(1);
ow_reset();

ow_yaz_byte(0xCC);
ow_yaz_byte(0x44);

while (ow_oku_byte()==0xff);

  ow_yaz_byte(0xCC); 
  ow_yaz_byte(0xBE); 
  ow_reset();
  
      for (n=0; n<9; n++)     // read 9 bytes but, use only one byte
      {
         buff[n]=ow_oku_byte();  // read DS1820
      }
      temp=buff[0]>>1;

      if ((buff[0] & 0x1)==1)
         temp_dec=5;
      else
         temp_dec=0;

      lcd_putc("\f");
      
      printf(lcd_putc,"Temp   :\n");
      lcd_gotoxy(1,2);
      printf(lcd_putc," %d.%d'C",temp,temp_dec);
      delay_ms(1000);
   }


Sorun ise while (ow_oku_byte()==0xff); burada kalıyo program. Süreki FF okuyo.

code tagı unutmayalım

mucitotomasyon


iyonosfer

@serhat_selo

#use fast_io(b)
#use fast_io(c)
#use fast_io(d)


Bu direktifleri verdiğinde Portlarin tris ayarlarını, set_tris_a(), set_tris_b(),set_tris_c() fonksiyonlarıyla yapmalısın. Bu modda derleyici otomatik trisleme yapmaz.
Blog Sayfam: www.teknobakis.com