13 Haziran 2020 Cumartesi

ccs c ds18b20 sıcaklık ölçme

Pic Programlama ccs c ds18b20 sıcaklık ölçme
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);
}




11 yorum:

  1. hazır kütüphaneye nasıl erişeceğiz kodun tamamı bu mu

    YanıtlaSil
    Yanıtlar
    1. hocam banada atma şansınız var mıdır bende hata alıyorum.
      projeyi beyazgul2001@gmail.com a yollayabilir misiniz?

      Sil
  2. Kodun tamami bu hazir kutuphaneler programin klasörunde programfiles/picc/include icinde

    YanıtlaSil
    Yanıtlar
    1. ilginiz 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
    2. #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);
      }

      dsb1820.c olarak kaydedermisin programdaki uzantıyla aynı olmasına dikkat edelim.

      mail adresini yazarsan bitmiş halini paylaşırım

      Sil
    3. Bitmiş halini şu maile gönderebilir misiniz? Halen hata alıyorum.
      prototprotot2@gmail.com

      Sil
  3. bu dosyanın linki nerde acaba göremedim de

    YanıtlaSil
    Yanıtlar
    1. Mail atarsaniz siz gonderebilirim. sifirrzero@gmail.com

      Sil
    2. yolladım aciliyeti var bekliyorum geri döünşünüzü

      Sil
  4. Dosyanın link var mı acaba?

    YanıtlaSil
    Yanıtlar
    1. mail atarsanız dosyayi gönderebilirim. sifirrzero@gmail.com

      Sil

Her yorum bilgidir. Araştırmaya devam...