Bu kütüphane - değer okurmu

Başlatan baran123, 10 Mart 2014, 15:21:54

baran123

Merhaba ben ds18b20 ile sıcaklık göstergesi yaptım isisde 0'ın altına inemediğim için bilemiyorum paylaştığım kod ve kütüphaneye göre bu devre - değer gösterir mi ?

İyi çalışmalar

pıc kodu
while(TRUE)
         {
            if(input(btn2)==1)
            {delay_ms(50);
            
               output_high(pin_b0);
               delay_ms(300);
               rtc_set_datetime(sday,smounth,syear,sdow,shour,sminute);
               output_low(pin_b0);
            }

            temp = ds1820_read();
            rtc_get_time(hour,minute,second);
            rtc_get_date(day,mounth,year,dow);
            printf(lcd_putc,"\f%02d:%02d:%02d  ",hour,minute,second);

            switch(dow)
            {
               case 1: printf(lcd_putc,"P.TESI");  break;
               case 2: printf(lcd_putc,"SALI");    break;
               case 3: printf(lcd_putc,"CARSA.");  break;
               case 4: printf(lcd_putc,"PERSE.");  break;
               case 5: printf(lcd_putc,"CUMA");    break;
               case 6: printf(lcd_putc,"C.TESI");  break;
               case 7: printf(lcd_putc,"PAZAR");   break;
            }
            
            printf(lcd_putc,"\n%02d:%02d:%02d  %1.1F%cC",day,mounth,year,temp,223);


ds18b20 kütüphanesi

#define ONE_WIRE_PIN PIN_C0

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);
}

baran123

Yardım edebilecek bir arkadaş yok mu ?

xoom

Alıntı YapMerhaba ben ds18b20 ile sıcaklık göstergesi yaptım isisde 0'ın altına inemediğim için bilemiyorum paylaştığım kod ve kütüphaneye göre bu devre - değer gösterir mi ?
-İsiste neden - sıcaklığa inemediğinizi anlamadım.. ds18b20'nin üzerine gelip sıcaklığı eksi değerlere indirip lcd yi gözlemledin mi?
-Paylaştığın kod eksi sıcaklığı ölçer fakat onu lcd de göstermek senin kodlarına bağlı..kodlarında - sıcaklık ölçer fakat ekrana yansıtmak senin işin.

baran123

İsisde - ye bastıgım zaman en düşü 0 da kalıyor - ye inmiyor peki ekrana - yi nasıl yazdırabilirim ?

xoom

- yi yazdırmanız için - bir sıcaklığa isiste sensörü ayarlamalısınız tabiki.. Kodlarınızla oynamanıza gerek yok.
Not: Şimdi denedim ds18b20 - tuşuna sıfırdan sonra basmaya devam ederseniz - sıcaklıklara geçiyor ( İsis sürüm : 7.10)

baran123

Şimdi düzeldi isisde fakat - ye getirdiğim zaman sıcaklık kayıyor 'C' işareti kayboluyor  - işaretini belirlediğim yere koyabilir miyim veya başka bir çözümü var mı ? yoksa pek önemli değil - dereceyi göremeyiz kış geçti zaten :D
teşekkür ederim.

xoom

- işaretini tabiki başka yerde çıkarabilirsin fakat LCD'deki gün isimlerini 1-2 karakter kısaltmak daha kolay bir çözüm olacaktır.
PERSE yerine PRŞ gibi..

baran123

Tamam teşekkürler kolay gelsin.