اطلاعیه

Collapse
No announcement yet.

سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

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

    سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

    با سلام، خدمت دوستان.
    بنده چند سوال ساده دارم که خودم میتونم یه حدسهایی راجبشون بزنم اما واقعا به جوابهای کامل و دقیق نیاز دارم.
    سوال اولم: دستور round دقیقا چطوری رند میکنه؟ منطورم اینه که مثلا عدد 1.68 رو به چه عددی رند میکنه؟ به 1.7 رند میکنه یا به 2 رند میکنه؟ منظورم اینه که آیا حاصل همیشه عددی صحیح میشه؟
    سوال دوم: آیا میشه متغیری single رو در متغیری از نوع byte ذخیره کرد البته با این هدف که اعداد بعد از ممیز متغیر single حذف شود؟ منطورم اینه که مثلا اگه عدد 1.68 را که در متغیر single ذخیره شده را در متغیری که از نوع byte انتقال دهیم، عدد 1 در این متغیر ذخیره میشه؟
    سوال آخرم: برای کار با lm35 تابعی که باید برای تبدیل ولتاژ به دما استفاده کرد چطور است؟ آیا همینقدر کافیست که ورودی ولتاژی که از واحد adc میگریم رو تقسیم بر 2 کنیم؟ آیا نباید علاوه بر اینکار با عددی جمع کرد؟ آیا رابطه ولتاژ با دما در این سنسور در محدوده ی دمایی 10 تا 50 درجه به صورت خطی است؟

    تشکر از اینکه راهنماییم میکنید

    #2
    پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

    اگر منظور شما دستور
    کد:
    rand()
    هست این تابع عدی بین 0 تا 32767 تولید می کند
    شما وقتی به عنوا ن مثال عدد 1.68 را یک بایت یا همان Char تعریف کنید فقط عدد یک ذخیره می شود و اگر بخواهید عدد 1.68 را ذخیره کنید باید از تابع تبدیل ()ftoa که عدد اعشاری را به رشته تبدیل می کند انجام دهید .یا از عمل تقسیم کردن در کل بیشتر توضیخ دهید
    سومین سوال کلا خطی هست و به ازای هر درجه 10 میلی ولت تغییر می کند ؛ شما کافی است adc میکرو را فعال کنید بعد رفرنس میکرو روی 5 ولت باشه و چون دقت میکرو اگر 10 بیت باشد هر تغییر ولتاژ مقدار 0.0048 است یعنی مقدار خوانده شده در 0.0048 ضرب شود.
    برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
    یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

    دیدگاه


      #3
      پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

      نوشته اصلی توسط amir1371
      بنده چند سوال ساده دارم که خودم میتونم یه حدسهایی راجبشون بزنم اما واقعا به جوابهای کامل و دقیق نیاز دارم.
      سوال اولم: دستور round دقیقا چطوری رند میکنه؟ منطورم اینه که مثلا عدد 1.68 رو به چه عددی رند میکنه؟ به 1.7 رند میکنه یا به 2 رند میکنه؟ منظورم اینه که آیا حاصل همیشه عددی صحیح میشه؟
      سلام
      تو help بسکام نگاه کنید متوجه میشوید
      Round(2.3) = 2 , Round(2.8) = 3
      Round(-2.3) = -2 , Round(-2.8) = -3
      تو ریاضی هم به همین روال هست ...
      اگر عدد بزرگتر مساوی از 2.0 تا کوچکتر از 2.5 باشه عدد رو مساوی با 2 میگیریم
      اگر عدد بزرگتر مساوی از 2.5 تا 3 باشه عدد رو مساوی با 3 میگیریم
      نوشته اصلی توسط amir1371
      سوال دوم: آیا میشه متغیری single رو در متغیری از نوع byte ذخیره کرد البته با این هدف که اعداد بعد از ممیز متغیر single حذف شود؟ منطورم اینه که مثلا اگه عدد 1.68 را که در متغیر single ذخیره شده را در متغیری که از نوع byte انتقال دهیم، عدد 1 در این متغیر ذخیره میشه؟
      بله میشه ...
      به شرطی عدد صحیحش از 0 تا 255 باشه
      نوشته اصلی توسط amir1371
      سوال آخرم: برای کار با lm35 تابعی که باید برای تبدیل ولتاژ به دما استفاده کرد چطور است؟ آیا همینقدر کافیست که ورودی ولتاژی که از واحد adc میگریم رو تقسیم بر 2 کنیم؟ آیا نباید علاوه بر اینکار با عددی جمع کرد؟ آیا رابطه ولتاژ با دما در این سنسور در محدوده ی دمایی 10 تا 50 درجه به صورت خطی است؟
      این رو تو انجمن بگردید پیدا میشه ...
      با این وجود یه توضیحی میدم ...
      ولتاژی که سنسور دمای LM35 درست میکنه بسته به دماست ... این سنسور به ازای هر یک درجه 10 میلی ولت تغییر پیدا میکند
      برای به کار گیری این سنسور باید آن را به مبدل ADC (آنالوگ به دیجیتال) متصل کرد تا عدد مورد نظر به دست آید ...
      در ADC ها یک پایه به عنوان ولتاژ مرجع استفاده میشه ... این ولتاژ تعیین میکنه که محدوده ولتاژی که میتوانیم به ADC بدهیم چه مقدار است ...
      به خاطر دقیق تر بودن باید در میکرو AVR ولتاژ مرجع را روی مرجع داخلی که مساوی با 2.56 است تنظیم کرد ...
      از آنجایی که دقت ADC میکروی AVR ده بیت است بنابراین 2.56 تقسیم بر 1024 میشه 2.5 میلی ولت ...
      حالا چون در سنسور LM35 هر درجه برابر با 10 میلی ولت است بنابراین باید عددی که از ADC به دست می آید را تقسیم بر 4 کنیم...
      موفق باشید
      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
      معرفی نرم افزار Codewizard PWM
      با من بیشتر آشنا شوید

      دیدگاه


        #4
        پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

        لاقل میگفتید تو بسکام کلا من با بسکام حال نمیکنم این دستوراتی هم که گفتم تو کد ویژن هست بدون مقدمه سوال میکنید
        برای تغییر دادن در زندگی اول باید خودم تغییر کنم نه دیگران!
        یک اشتباه جدید در زندگی بهتر از تکرار اشتباه قبلی است .

        دیدگاه


          #5
          پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

          نوشته اصلی توسط Fanoudi
          لاقل میگفتید تو بسکام کلا من با بسکام حال نمیکنم این دستوراتی هم که گفتم تو کد ویژن هست بدون مقدمه سوال میکنید
          منم اول مثل شما فکر کردم که کدویژنه بعد دیدم نوشته Byte و Single ... دیگه فهمیدم منظورشون بسکام هست :biggrin:
          [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
          معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
          معرفی نرم افزار Codewizard PWM
          با من بیشتر آشنا شوید

          دیدگاه


            #6
            پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

            به هر حال کار ما که راه افتاد
            ممنون استاد
            تخیل مهمتر از دانش است
            علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
            آلبرت انیشتین

            دیدگاه


              #7
              پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

              نوشته اصلی توسط Saman.Asadi
              سلام
              تو help بسکام نگاه کنید متوجه میشوید
              Round(2.3) = 2 , Round(2.8) = 3
              Round(-2.3) = -2 , Round(-2.8) = -3
              تو ریاضی هم به همین روال هست ...
              اگر عدد بزرگتر مساوی از 2.0 تا کوچکتر از 2.5 باشه عدد رو مساوی با 2 میگیریم
              اگر عدد بزرگتر مساوی از 2.5 تا 3 باشه عدد رو مساوی با 3 میگیریم
              استاد من این دستور رو به این شکل مینویسم :
              temp = دمای میانگین گیری شده
              Lcd Round(temp)

              اما نتیجه با خروجی temp هیچ فرقی نداره
              هر دو برابرن

              چطور میتونم یه دستور کلی داشته باشم که هر 0.6 و 0.7 و 0.8 و 0.9 رو 0 و هر 0.1 و 0.2 و 0.3 و 0.4 رو 0.5 نشون بده

              اگه طبق دستور شما عمل کنم باید برای تمام اعداد در رنج دماسنجم اعداد رو تو برنامه قرار بدم که کارش خیلی طول میکشه!

              ممنون میشم اگه راهنمایی کنید

              بدرود
              تخیل مهمتر از دانش است
              علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
              آلبرت انیشتین

              دیدگاه


                #8
                پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                ---
                اگر روزی بفهمی همه چیزایی که از بچگی تا حالا بهت گفتن بی اساس یا دروغه چه حالی میشی؟
                کارمندان نابکار، از دزدان و آشوبگران بیشتر به کشور آسیب ميآ‌رسانند

                دیدگاه


                  #9
                  پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                  نوشته اصلی توسط داود رهایی
                  منظورتون (برای اعداد 0.6 تا 0.9) از صفر باید یک باشه
                  بگذریم
                  اگر دستور رند کردن رو ندارید از روش زیر میشه استفاده کرد که خود کامپایلر هم همین کار رو میکنه
                  روش اینجوریه که اول نیم واحد به عدد اضافه میشه و سپس فلور اون عدد رو حساب میکنیم
                  یعنی اگر عدد 0.8 باشه 0.5 به اون اضافه میکنیم که نتیجه میشه 1.3 و بخش
                  بعد از ممیز رو دور میندازیم.
                  برای اعداد منفی باید نیم واحد کم کنیم سپس بخش بعد از ممیز رو دور بندازیم
                  فلور ؟؟؟
                  میشه یه نمونه بزارین؟
                  دستور فلور بسکام رو پیدا نمیکنم !!!

                  اصلا" بزارین مشکلم رو بگم تا شاید کمتر مزاحم شما عزیزان بشم!!
                  من یه دماسنج دیجیتال (ترموستات دیجیتال) ساختم که از LM35 استفاده کردم و با هزار مکافات درصد نویزگیری ADC رو به حداقل کاهش دادم !
                  حدود 0/1 تلورانس داره و بالا پایین میشه
                  مشکل اینجاست وقتی دما به مرز فعال شدن رله خروجی که میرسه به دلیل بالا پایین شدن یک دهمی دما رله هی قطع و وصل میشه و این برام یه اشکال بزرگه
                  چطور میتونم این مشکل رو حلش کنم؟؟

                  فک کنم اگه بتونم اعداد اعشاری دما رو حذف کنم مشکل حله :
                  مثال :
                  11.6 و 11.7 و 11.8 و 11.9 و 12.1 و 12.2 و 12.3 و 12.4 رو 12 نشون بدم!!
                  چطور میتونم این کار رو انجام بدم

                  با سپاس
                  تخیل مهمتر از دانش است
                  علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
                  آلبرت انیشتین

                  دیدگاه


                    #10
                    پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                    ---
                    اگر روزی بفهمی همه چیزایی که از بچگی تا حالا بهت گفتن بی اساس یا دروغه چه حالی میشی؟
                    کارمندان نابکار، از دزدان و آشوبگران بیشتر به کشور آسیب ميآ‌رسانند

                    دیدگاه


                      #11
                      پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                      نوشته اصلی توسط داود رهایی
                      شما از هیسترزیس استفاده کن
                      مثال:
                      دما باید روی 50 درجه تنظیم بشه
                      پس اگر دما به 51 رسید رله باید روشن بشه و اگر به 49 رسید خاموش
                      یعنی دو درجه سانتیگراد هیسترزیس

                      هیسترزیس رو کوچکتر هم میتونی بگیری اگر دقتت 0.1 هست
                      استاد برا بیسوادا نمونه باید بزارین اینطور که نمیشه
                      هر کدوم از دستوراتی که شما فرمودین نه تو Help نه تو نت پیدا نمیکنم.
                      بازم میگردم اما بعید میدونم باشن
                      من بسکام کار میکنم

                      متشکرم
                      تخیل مهمتر از دانش است
                      علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
                      آلبرت انیشتین

                      دیدگاه


                        #12
                        پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                        منظورتون فلور چیه
                        باد می وزد ...
                        میتوانی در مقابلش هم دیوار بسازی ، هم آسیاب بادی
                        تصمیم با تو است ...

                        دیدگاه


                          #13
                          پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                          نوشته اصلی توسط atrobot
                          منظورتون فلور چیه
                          هیسترزیس رو هم نگفتین ؟؟
                          لغات مبهم و سختی گفتن استاد!
                          تخیل مهمتر از دانش است
                          علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
                          آلبرت انیشتین

                          دیدگاه


                            #14
                            پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                            ---
                            اگر روزی بفهمی همه چیزایی که از بچگی تا حالا بهت گفتن بی اساس یا دروغه چه حالی میشی؟
                            کارمندان نابکار، از دزدان و آشوبگران بیشتر به کشور آسیب ميآ‌رسانند

                            دیدگاه


                              #15
                              پاسخ : سوالاتی راجبه دستور رند کردن و نحوه تعریف کردن متغیرها و lm35

                              نوشته اصلی توسط داود رهایی
                              ببخشید من باید بیشتر توضیح میدادم
                              در گرد کردن اعداد از سه فانکشن استفاده میشه که شاید در بسکام و کدویژن اینها رو نداشته باشیم
                              یکی همون روند هست که به روشی که گفتم عدد رو روند میکنه یکی فلور floor هست که کف عدد رو بر میداره و بخش اعشار رو دور میریزه یکی هم ceil یا سقف هست که به عدد بالایی گرد میکنه
                              مثال:
                              ceil(3.7) = 4
                              floor(3.7) = 3
                              round(3.7) = 4
                              round(3.2) = 3
                              hystersis یا پسماند در خیلی جاها استفاده میشه
                              مثلن در یخچال وقتی دمای داخل از مقدار مثلن 5 درجه گرمتر بشه کمپرسور روشن میشه و دما رو میاره پایین
                              اما وقتی به 4.9 رسید موتور خاموش نمیشه بلکه بخاطر وجود هیسترزیس به مقدار خیلی پایین تر میاد تا موتور خاموش بشه مثلن 2 درجه. که در اینجا هیسترزیس میشه 3 درجه یعنی 5 منهای 3
                              حالا اگر هیسترزیس نباشه موتور تند و تند روشن خاموش میشه و مشکلی مثل مشکل شما پیش میاد
                              مثال دیگر اون فن خنک کننده ی رادیاتور خودرو هست و مثال برای این پدیده خیلی زیاد هست

                              متشکرم
                              اما باز همچنان تو کف hystersis پر پر میزنم
                              آقا یه مثال میزدین لااقل!!
                              تو Help بسکامم hystersis نیست!!

                              ^^ای خدا ...بیسواتی... ^^
                              تخیل مهمتر از دانش است
                              علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
                              آلبرت انیشتین

                              دیدگاه

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