Fikir iyi mi ?

Başlatan baran123, 17 Kasım 2014, 01:02:47

baran123

USB le uğraşırken oluşan hız sorununu (dll den kısıtlı) çözmek için bir şey düşündüm c# tarafından 18f4550 ile veri alıp gönderiyorum c# da otomatik veri alailmek icin timer kullanıyorum 1 saniyeye kurulu.ds18b20 den sıcaklık okumak ıstesem (ototmatık olarak) halıyle tımer ıcıne gırıyor ve ds nin 750 ms süresini bekliyor programda güme gidiyor.Bosuna 4550 yormayıp angarya kıvır zıvır işleri diğer düşük seviyede (16f628a gibi) mcu lara yaptırsam veri hazzır olunca spı yada seri şeklinde 4550 ye gelse veri oyle gondersem yanı ekmegın pısmesını beklemesek pısıne kadar takısak pısınce alıp yesek:)

bu ıs ıcın 628A kullanayım dedım 4550 ile bunu nasıl baglasam daha ıyı olur tx rx mi sda scl mı ?

sadogan

Fikir iyi deyil,
ds18b20 nin kütüphanesini düzenleyerek halledebilirsin.

baran123

#2
hocam nasıl bir düzenleme yapmak lazım ki ? galiba @meftun böyle bir şeyden bahsetmişti bir bakalım

mesaj birleştirme:: 17 Kasım 2014, 02:09:20

Edit : sitede ufak bir gezinti yaparak buldum

Düzgün DS18B20 kütüphanesi
Bekleme problemı olmuyor bu kütüphanede

#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()
{
   static int1 ds_flag=0;
   int8 busy=0, temp1, temp2; 
   signed int16 temp3; 
   static float result; 
   
   if(ds_flag==0)
   {
      onewire_reset(); 
      onewire_write(0xCC); 
      onewire_write(0x44); 
      ds_flag=1;
   }
   
   else
   {
      busy = onewire_read(); 
      if(busy==0)return result;
   }
   
   ds_flag=0;
   onewire_reset(); 
   onewire_write(0xCC); 
   onewire_write(0xBE); 
   temp1 = onewire_read(); 
   temp2 = onewire_read(); 
   temp3 = make16(temp2, temp1); 
   
   result = (float) temp3 / 16.0;  //Calculation for DS18B20 with 0.1 deg C resolution 
   
   return(result); 
}