اطلاعیه

Collapse
No announcement yet.

راه اندازی سنسور ds18b20

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    راه اندازی سنسور ds18b20

    سلام دوستان
    توی تایپیک مربوط به pic هر چی گشتم درباره ی سنسور ds18b20 مطلبی نبود.
    من می خواستم 4 تا از این سنسورها را همزمان به یک پین میکرو متصل کنم. توی سایت های خارجی یه برنامه برای راه اندازی سنسور پیدا کردم. با کمی تغییرات تست کردم درست جواب داد. اما نمی دونم برای 4 سنسور باید چکار کنم.
    این کتابخانه سنسور برای ccs
    کد:
    #define DS1820_WIRE_PIN        PIN_A0  //ds1820 data baca?? 
    //sens?r için sabitler 
    #define DS1820_SKIP_ROM        0xCC 
    #define DS1820_READ_SCRATCHPAD     0xBE 
    #define DS1820_CONVERT_T        0x44 
    
    
    static char g_shiftBit, g_dataOut; 
    static long g_temperature, g_dataInput; 
    
    
    void resetDS1820(void) 
    { 
      output_low(DS1820_WIRE_PIN);   //1-wire resetleme için s?f?ra çekilir 
      delay_us(500);          // sens?rün haz?rlanmas? için beklenir. 
      output_float(DS1820_WIRE_PIN);  //1-wire bir yap?l?r 
      delay_us(500);          // sens?rün haz?rlanmas? için beklenir. 
    
    } 
    
    void writeDS1820(void) 
    { 
      for (g_shiftBit = 1; g_shiftBit <= 8; ++g_shiftBit) 
      { 
       output_low(DS1820_WIRE_PIN);                  // Sens?re yazma i?lemine ba?lamak için 1-wire s?f?ra çekilir. 
       delay_us(2); 
       output_bit(DS1820_WIRE_PIN, shift_right(&g_dataOut, 1, 0));  // yaz?lacak bilgi 1-wire'da 
       delay_us(60);                         // Yazma i?lemi zaman? doldurulur. 
       output_float(DS1820_WIRE_PIN);                 // 1-wire bir yap?l?r, 
       delay_us(2);                          // 1us'den fazla beklenir. 
      } 
    } 
    
    void readDS1820(void) 
    { 
      g_dataInput = 0; 
      for ( g_shiftBit = 1; g_shiftBit <= 16; ++g_shiftBit ) 
      { 
       output_low(DS1820_WIRE_PIN);                  //Sens?rden okuma i?lemi içinl 1-wire s?f?ra çekilir. 
       delay_us(2);                          
       output_float(DS1820_WIRE_PIN);                //1-wire(data) bir yap?l?r, 
       delay_us(8);                         // Sens?rün kendine gelmesi beklenir, 
       shift_right ( &g_dataInput, 2, input ( DS1820_WIRE_PIN ));  // sonuc bilgisi al?n?r 
       delay_us(120);                       //Okuma i?lemi zaman? doldurulur. 
      } 
     
    } 
    void waitForConversion (void)       
    { 
      while(TRUE) 
      { 
        output_low(DS1820_WIRE_PIN); 
        delay_us(5); 
        output_float(DS1820_WIRE_PIN); 
        delay_us(5); 
        if (input(DS1820_WIRE_PIN) == 1)  
        { 
          break; 
        } 
        delay_us(55); 
       } 
    } 
    
    
    long ds1820_read() 
    { 
      
      resetDS1820(); 
      g_dataOut = DS1820_SKIP_ROM; 
      writeDS1820(); 
      g_dataOut = DS1820_CONVERT_T; 
      writeDS1820(); 
      waitForConversion(); 
    
      resetDS1820(); 
      g_dataOut = DS1820_SKIP_ROM; 
      writeDS1820(); 
      g_dataOut = DS1820_READ_SCRATCHPAD; 
      writeDS1820(); 
      readDS1820(); 
      g_temperature = g_dataInput ; //ds18s20 için bu de?er 2 olacakt?r 
    
      
      return g_temperature; 
    }
    اینم کد برنامه اصلی:
    کد:
    #include <16F887.h> 
    #use  delay(clock=20000000) 
    #FUSES NOWDT,HS
    #define use_portD_lcd True 
    #include <lcd.c> 
    #include "ds18b20_1.c" 
    
    void main(void) 
    { 
    float temperature; 
      lcd_init(); 
       printf(lcd_putc,"start"); 
       
      while(1) 
      {  
       temperature = ds1820_read(); 
       temperature=(float)temperature/16;
      printf(lcd_putc,"\f%.4f",temperature); 
      } 
    
    }
    با تشکر

    #2
    پاسخ : راه اندازی سنسور ds18b20

    سلام
    یعنی میخواین بین سنسورها سویچ کنین یا قراره همزمان با هم برای افزایش دقت ، کار کنن؟
    :question:

    دیدگاه


      #3
      پاسخ : راه اندازی سنسور ds18b20

      این تاپیک رو بخونید وسطاش بحث شده:

      http://www.eca.ir/forum2/index.php?topic=104169.0

      دیدگاه


        #4
        پاسخ : راه اندازی سنسور ds18b20

        از اینکه جواب دادید ممنونم.
        خوشبختانه مشکلم رفع شد. انشالله وقتی کامل شد میذارم توی تایپیک پروژه های تکمیل شده.

        اضافه شده در تاریخ :
        فقط یک نکته: :read:
        یه برنامه پیدا کردم شبیه برنامه ای که لینکش را داده بودید تست کردم درست بود اما بعد از مدتی خوندن دما (حدودا یک دقیقه) ترتیب نشون دادن دمای سنسورها عوض میشه مثلا دمای سنسور چهارم را به جای سنسور اول نشون میده و همینطور جای بقیه را عوض می کنه.برنامه ای هم که لینکش را داده بودید وقتی روی lcd تست کردم همین مشکل را داشت.به نظرتون مشکل از پروتئوس هست یا برنامه؟
        اینم لینک:
        https://www.dropbox.com/s/q68hwojqg4...18b20.rar?dl=0
        تشکر

        دیدگاه


          #5
          پاسخ : راه اندازی سنسور ds18b20

          احتمال اینکه مشکل از پروتیوس باشه هست. تو عمل تست کنید.

          دیدگاه


            #6
            پاسخ : راه اندازی سنسور ds18b20

            یکم کد رت تغییر دادم مشکل رفع شد. حالا با ال سی دی گرافیکی راه اندازیش می کنم میذارم توی انجمن.
            با تشکر از دوستان

            دیدگاه

            لطفا صبر کنید...
            X