CCS ds18b20 ile sıcaklık ölçüm devresinde isisde sadece 0 derece gösteriy

Başlatan furkan055, 21 Kasım 2016, 22:07:26

furkan055

Öncelikle herkse kolay gelsin sıcaklık zman devresini yaptık ama sadece 0 derece gösteriyor kodlar ve resim şekildeki gibidir yardımlarınızı bekliyorum
//Bu kodu ds18b20.c olarak kaydediniz
// (C) copyright 2003 j.d.sandoz / jds-pic !at! losdos.dyndns.org 
 
#define ONE_WIRE_PIN PIN_C7 // 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);
}



#include <16f877A.h>
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay(clock=4000000)
#define use_portb_lcd TRUE
#define RTC_SCLK  PIN_c2
#define RTC_IO    PIN_c3
#define RTC_RST   PIN_c1
#include "ds1302.c"
#include "lcd.c"
#include "ds18b20.c"

int saniye,dakika,saat,gun,ay,yil,haftanin_gunu;


void main(void){
    float temp;
    lcd_init();
    rtc_init();
    rtc_set_datetime(6,5,8,2,22,52);

    while(1)
    {    


       temp = ds1820_read();

       rtc_get_time(saat,dakika,saniye);
  
       rtc_get_date(gun,ay,yil,haftanin_gunu);


       printf(lcd_putc,"\f%3.1f%cC  %02d/%02d/%02d\n",temp,223,gun,ay,yil);

       switch(haftanin_gunu)
       {
         
         case 1: printf(lcd_putc,"PAZ"); break;
         case 2: printf(lcd_putc,"PZT"); break;      
         case 3: printf(lcd_putc,"SAL"); break;
         case 4: printf(lcd_putc,"CRS"); break;
         case 5: printf(lcd_putc,"PER"); break;
         case 6: printf(lcd_putc,"CUM"); break; 
         case 7: printf(lcd_putc,"CTS"); break;
       }
    
       printf(lcd_putc,"   %02d:%02d:%02d",saat,dakika,saniye);

       delay_ms(0);
     
       }
}



deblekeli

@by_deblekeli

deblekeli

Sorunu az önce çözdüm. ISIS den entegrenin üzerine çift tıklayıp frekansı 4mhz yaparsanız sorun çözülüyor.
@by_deblekeli