اطلاعیه

Collapse
No announcement yet.

اتصال 4 سنسور ds18b20 به باس 1wire

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

    اتصال 4 سنسور ds18b20 به باس 1wire

    در یک مدار از 4 سنسور دیجیتال ds18b20 به پروتوکل 1wire استفاده شده اما تنها یکی از سنسورها شناخته می شود.
    برنامه با بیسکام نوشته شده است.
    از برنامه لینک زیر که با دو سنسور نوشته شده است نیز استفاده شد ولی id های سنسورها باز هم یکسان بودند!!!!!!!!!!! :angry: :angry:
    اگر کسی راه حلی دارد خوشحال می شویم استفاده کنیم.
    http://www.mcselec.com/index.php?opt...&Itemid=57
    مردود شدن بهتر از با تقلب قبول شدن است

    #2
    پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire



    64-BIT LASERED ROM CODE
    Each DS18B20 contains a unique 64–bit code (see Figure 6) stored in ROM. The least significant 8 bits
    of the ROM code contain the DS18B20’s 1-Wire family code: 28h. The next 48 bits contain a unique
    serial number. The most significant 8 bits contain a cyclic redundancy check (CRC) byte that is
    calculated from the first 56 bits of the ROM code. A detailed explanation of the CRC bits is provided in
    the CRC Generation section. The 64-bit ROM code and associated ROM function control logic allow the
    DS18B20 to operate as a 1-Wire device using the protocol detailed in the 1-Wire Bus System section.

    تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
    داشتن عقله زيادتر از دیگر آدم ها است

    دیدگاه


      #3
      پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

      نوشته اصلی توسط aliila


      64-BIT LASERED ROM CODE
      Each DS18B20 contains a unique 64–bit code (see Figure 6) stored in ROM. The least significant 8 bits
      of the ROM code contain the DS18B20’s 1-Wire family code: 28h. The next 48 bits contain a unique
      serial number. The most significant 8 bits contain a cyclic redundancy check (CRC) byte that is
      calculated from the first 56 bits of the ROM code. A detailed explanation of the CRC bits is provided in
      the CRC Generation section. The 64-bit ROM code and associated ROM function control logic allow the
      DS18B20 to operate as a 1-Wire device using the protocol detailed in the 1-Wire Bus System section.

      اگه امکان داره کمی بیشتر توضیح بدید ؟ :angry:
      مردود شدن بهتر از با تقلب قبول شدن است

      دیدگاه


        #4
        پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

        همچنان منتظر هستیم
        مردود شدن بهتر از با تقلب قبول شدن است

        دیدگاه


          #5
          پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

          واقعاً کسی نیست چندتا سنسور یکسان با این پروتکل راه انداخته باشه ؟ :angry: :angry: :angry:
          مردود شدن بهتر از با تقلب قبول شدن است

          دیدگاه


            #6
            پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

            به نظرم رو برد ببند و به هر کدوم یک ای دی بده .بهتره.

            دیدگاه


              #7
              پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

              نوشته اصلی توسط sohei34000
              به نظرم رو برد ببند و به هر کدوم یک ای دی بده .بهتره.
              خداروشکر
              بالاخره یکی به داده ما رسید
              امکانش هست بگید چطور میشه به سنسورها ID داد ؟ :question:
              مردود شدن بهتر از با تقلب قبول شدن است

              دیدگاه


                #8
                پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                آقا مساله رو چرا پیچیده میکنی
                تو این پروتکل هر هر دیوایس یک Id داره .


                اول آدرس هر دیواس که میتونه تا 128 تا باشه رو پیدا میکنی


                بعد با دستورات زیر با دیوایس ها با توجه به بافر های داخلی شون کار میکنی


                1WRESET , 1WREAD , 1WWRITE , 1WIRECOUNT , 1WRESET , 1WSEARCHFIRST , 1WSEARCHNEXT



                این هم یک مثال


                اول آی دی 4 تا سنسور را پیدا میکنی
                کد:
                Dim Dsid1(8) As Byte 
                Dim DsId2(8) As Byte
                .
                .
                .
                
                DsId1(1) = 1wsearchfirst()
                 DsId2(1) = 1wsearchnext()
                 DsId3(1) = 1wsearchnext()
                 DsId4(1) = 1wsearchnext()
                
                if dsid1(8) = crc8(DsId1(1), 7) then ' Control that the received CRC match the calculated  کنترل درستی آیدی
                
                حالا خواندن از سنسور یک 
                
                 1wverify DsId1(1) 'Issues the "Match ROM "
                 locate 1,1
                 if err = 1 then
                 lcd "Err " 'Err = 1 if something is wrong
                 elseif err = 0 then 'lcd " Sensor found"
                 1wwrite &HBE
                 Sc(1) = 1wread(9) 'read bytes into array
                 if sc(9) = crc8(sc(1),8) then
                 DG = DeciGrades(sc(9))
                 if min1 > dg then min1 = dg
                 if max1 < dg then max1 = dg
                 lcd dg : locate 1,7 : lcd min1 : locate 1,14 : lcd max1
                 end if
                 end if



                تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                داشتن عقله زيادتر از دیگر آدم ها است

                دیدگاه


                  #9
                  پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                  این هم ساختار دیتای خوانده شده است


                  کد:
                  Dim Sc(9) as byte 'Scratchpad 0-8 72 bits incl CRC, explanations for DS18b20
                  'Sc(1) 'Temperature LSB
                  'Sc(2) 'Temperature MSB
                  'Sc(3) 'TH/user byte 1 also SRAM
                  'Sc(4) 'TL/user byte 2 also SRAM
                  'Sc(5) 'config also SRAM x R1 R0 1 1 1 1 1 - the r1 r0 are config for resolution - write FF to byte for 12 bit - others dont care
                  'Sc(6) 'res
                  'Sc(7) 'res
                  'Sc(8) 'res
                  'Sc(9) '8 CRC
                  تنها موردي كه همه آدما يقين دارن خدا در حقش زیاد لطف کرده
                  داشتن عقله زيادتر از دیگر آدم ها است

                  دیدگاه


                    #10
                    پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                    نوشته اصلی توسط aliila
                    آقا مساله رو چرا پیچیده میکنی
                    تو این پروتکل هر هر دیوایس یک Id داره .


                    اول آدرس هر دیواس که میتونه تا 128 تا باشه رو پیدا میکنی


                    بعد با دستورات زیر با دیوایس ها با توجه به بافر های داخلی شون کار میکنی


                    1WRESET , 1WREAD , 1WWRITE , 1WIRECOUNT , 1WRESET , 1WSEARCHFIRST , 1WSEARCHNEXT



                    این هم یک مثال


                    اول آی دی 4 تا سنسور را پیدا میکنی
                    کد:
                    Dim Dsid1(8) As Byte 
                    Dim DsId2(8) As Byte
                    .
                    .
                    .
                    
                    DsId1(1) = 1wsearchfirst()
                     DsId2(1) = 1wsearchnext()
                     DsId3(1) = 1wsearchnext()
                     DsId4(1) = 1wsearchnext()
                    
                    if dsid1(8) = crc8(DsId1(1), 7) then ' Control that the received CRC match the calculated  کنترل درستی آیدی
                    
                    حالا خواندن از سنسور یک 
                    
                     1wverify DsId1(1) 'Issues the "Match ROM "
                     locate 1,1
                     if err = 1 then
                     lcd "Err " 'Err = 1 if something is wrong
                     elseif err = 0 then 'lcd " Sensor found"
                     1wwrite &HBE
                     Sc(1) = 1wread(9) 'read bytes into array
                     if sc(9) = crc8(sc(1),8) then
                     DG = DeciGrades(sc(9))
                     if min1 > dg then min1 = dg
                     if max1 < dg then max1 = dg
                     lcd dg : locate 1,7 : lcd min1 : locate 1,14 : lcd max1
                     end if
                     end if
                    با تشکر از پاسخ شما
                    والا سوالهای ما کمی مبتدیانس ( مساله پیچیده نیس )
                    می خواستم بدونم این دو دستور کارش چیه ؟
                    if sc(9) = crc8(sc(1),8) then
                    DG = DeciGrades(sc(9))
                    مردود شدن بهتر از با تقلب قبول شدن است

                    دیدگاه


                      #11
                      پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                      http://www.eca.ir/forum2/index.php?topic=43172.msg543277#msg543277
                      www.Askdin.com
                      www.BEKco.ir

                      دیدگاه


                        #12
                        پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                        سلام
                        در ابتدای پست اون لینکی که برای کد بسکام گذاشتی بودی داره کاملا درست جواب می ده . فقط باید برای شبیه سازی در پروتیوس فرکانس کلاک میکرو رو 1
                        مگا بزاری (به خاطر اینکه در پروتکل 1wire بیشترین فرکانس میکرو باید 2 مگا باشد) و اینکه زمانی که دو سنسور از کتابخانه پروتیوس میاری باید ROM serial number سنسور را عوض کنی که به صورتپیش فرض برابر B8C531 است . شما یکی رو مثلا بزار B8C531 و دیگری رو بزار B8C530 . مطمئن باش جواب می ده . من خودت الان تست کردم . مشکلی بود در خدمتم (البته اگه سوادم قد بده
                        :wow

                        دیدگاه


                          #13
                          پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                          نوشته اصلی توسط l90mehdi
                          سلام
                          در ابتدای پست اون لینکی که برای کد بسکام گذاشتی بودی داره کاملا درست جواب می ده . فقط باید برای شبیه سازی در پروتیوس فرکانس کلاک میکرو رو 1
                          مگا بزاری (به خاطر اینکه در پروتکل 1wire بیشترین فرکانس میکرو باید 2 مگا باشد) و اینکه زمانی که دو سنسور از کتابخانه پروتیوس میاری باید ROM serial number سنسور را عوض کنی که به صورتپیش فرض برابر B8C531 است . شما یکی رو مثلا بزار B8C531 و دیگری رو بزار B8C530 . مطمئن باش جواب می ده . من خودت الان تست کردم . مشکلی بود در خدمتم (البته اگه سوادم قد بده
                          :wow
                          میشه توضیح بدین چرا نمی توانیم بیشتر از 2 مگا هرتز واسه میکرو قرار دهیم
                          زندگی با الکترونیک زیباست

                          دیدگاه


                            #14
                            پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                            دقیقا نمی دونم . اما فکر می کنم که پروتکل 1wire به خاطر اینکه روی 1 لینک داره با چند دیوایس کار میکنه برای فرکانس کاری محدودیت داره . یعنی چون روی 1 لینک
                            ارتباطی ، چند کاربر وجود داره احتمال بروز کالیژن یا همون تصادم داده ها زیاد میشه . واسه همین یه محدودیت هایی مثل ماکزیمم داده بر ثانیه که ارتباط مستقیم با
                            فرکانس کاری میکرو خاهد داشت وجود داره . و البته یه چیز جالب تر من در حال حاضر یه پروژه دارم که به خاطر اسکن صفحه تاچ باید از ماکزیمم فرکانس میکرو استفاده کنم یعنی 8مگاهرتز .(البته بهتره بگم چون صفحه تاچ توسط مبدل انالوگ به دیجیتال میکرو اسکن میشه و زیر برنامه های زیادی دارم باید فرکانس میکرو بالا باشه.) و از دو سنسور ds18b20 هم دارم دما رو می خونم. هیچ میشکلی پیش نیومد . اما تو پروتیوس وقتی فرکانس از 2 مگا بیشتر میشه به خطا میوفته در صورتی که در عمل خودم
                            مدار رو بستم و با فرکانس 8 مگا هرتز هیچ مشکلی پیش نیومد . البته بگم اگه از فرکانس بیش از 2 مگا هرتز استفاده می کنید حتما کد CRC به دست آمده از خط باس رو چک کنید تا مطمئن باشید که مقدار خونده شده از سنسور صحیح باشه .
                            فقط میمونه یک سوال :
                            اگه ممکنه یه نمونه کد برای تغییر مقدار رجیستر ها داخلی سنسور بزارید . صفحه 11 دیتا شیت کامندهای لازم رو گذاشته اما برای استفاده از اون
                            یه کد خودم نوشتم که یه موقه هایی کار میکنه و یه موقه هایی نه . اگه کسی کار کرده خواهشا کدش رو بزاره .ممنون

                            دیدگاه


                              #15
                              پاسخ : اتصال 4 سنسور ds18b20 به باس 1wire

                              اتفاقا برعکس، برای اینکه میکرو بتونه تاخیر های لازم رو ایجاد کنه باید فرکانس کار از یه حدی (2.17 مگا هرتز) بیشتر باشه. تصادم، زمانی پیش میاد که چند تا اسلیو بخوان همزمان داده بفرستن رو باس در صورتی که زمانی که مستر بعد از ارسال ریست و دریافت دیتکت و ارسال id دیوایس مورد نظر اگه اون دیوایس روی خط باشه از اون به بعد تنها اون دیوایسی خواهد بود که روی خط داده میفرسته و بقیه تا زمانی که مجددا ریست از طرف مستر بیاد خط رو رها میکنن.
                              اونچه که نرخ ارسال داده رو محدود میکنه و بدتر از اون اگه به صورت نرم افزاری باشه باعث افزایش اینتراپت لیتنسی میشه، پریود بالای کامند Reset/Presence و همینطور ریکاوری تایم ( تاثیرش تو تعداد زیاد دیوایس بیشتر نمایان میشه چون باید مقدار بزرگی براش اختیار بشه) هست.
                              برای نوشتن در رجیسترها اول Reset/Presence بعد کامند match rom بعد کامند write ram و بعد به ترتیب مقدار رجیسترهای th و tl و config رو ارسال کنید. اگه با c کار میکنید و به این توابع سطح پایین دسترسی دارید اینا رو بزارید تا من براتون بنویسم. برای اطلاعات بیشتر به avr318 مراجعه کنید. البته اگه با کدویژن کار میکنید اون تابعی برای این کار فکر میکنم داره.

                              دیدگاه

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