اطلاعیه

Collapse
No announcement yet.

مشکل در تابع تبدیلadc

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

    مشکل در تابع تبدیلadc

    سلام به همه دوستان عزیزم.

    یه برنامه ای با c نوشتم که ولتاژی رو از کانال 5 adc میکرو که mega8 هست دریافت میکنه.مقدار سیگنال ورودی بین0.102 تا0.330 ولت میباشه.
    ولتاژ مرجع هم داخلی 2.56 هست

    برنامه باید اینطور کار کنه:
    وقتی 0.102 ولت به میکرو اعمال میشه باید روی lcd یا 7سگمنت عدد0 رو نشون بده.
    وقتی 0.330 ولت به میکرو اعمال میشه باید روی lcd یا 7سگمنت عدد999 رو نشون بده.

    و مابین اعداد 0 تا999 هم هر پله نهایتا4 عدد باشه.یعنی 0-4-8-12.........999. اگه 1 یا کمتر هم بود عالی میشه.0-1-2-3-4-5-6....999.
    خیلی کلافم کرده نمیتونم بنویسم.مینویسم ها فقط11 تا11 تا میره جلو. :sad:

    #2
    پاسخ : مشکل در تابع تبدیلadc

    حتما می دونی که adc ولتاژ رو مستقیم نمی خونه بلکه عددی بین 0 تا 1023 رو به نسبت ولتاژ پایه بر می گردونه
    پس برای ولتاژت باید نسبت بگیری
    مثلا برای 0.102 باید تقسیم بر ولتاژ پایت کنی(2.56) ضربدر 1023 که حدودا میشه 40
    احتمالا اینا رو می دونستی جهت اطلاع عرض کردم

    حالا عدد برگشتی مربوط به 0.102 میشه 40
    عدد برگشتی مربوط به به 0.330 هم میشه 131
    اختلاف این دو تا میشه 91
    حالا 999 تقسیم بر 91 پله میشه 10.978021978021978021978021978022
    که 11 نشون میده.
    یعنی کمتر از این نمیتونه داشته باشه مگه اینکه راهی برای گرفتن اعشاری از adc باشه مثل 120.84.

    دیدگاه


      #3
      پاسخ : مشکل در تابع تبدیلadc

      اره میدونم.از 0 تا1023 رو به ازای ولتاژ از 0 تا 2.56ولت نشون میده.اما ولتاژ من از0.102تا0.330 ولت هست و میخام تو این بازه ولتاژ از0 تا999 رو نشون بده.

      دیدگاه


        #4
        پاسخ : مشکل در تابع تبدیلadc

        اگه با کدویژن مینویسی لطفا بگید با کدوم ورژن دارید کار میکنید ؟
        چون یه دوستام در مورد ADC مشکل پیدا کرد ه بود :read:
        ورژن کدویژنش 2.5 بود بعد چون سایت کدویزن به طور رسمی گفته بود کدهای ماشین نرم افزارهای کرکی رو عوض میکنه نسخه 1.25 رو نصب کرد و جواب گرفت.

        شاید هم در مورد شما ربطی نداشته باشد .
        الکترونیک همه کاره دنیا

        دیدگاه


          #5
          پاسخ : مشکل در تابع تبدیلadc

          شاید یه کار بتونی بکنی
          ولتاژ مرجعتو AREF تعریف کن بعد ولتاژ 0.4 رو بهش بده (با مقاومت میتونی درست کنی) ببین جواب میده
          البته کاملا تئوریه تو عمل نمی دونم شدنیه یا نه.
          کلید تشکر هم نزن نمیخواد زحمت بکشی.

          دیدگاه


            #6
            پاسخ : مشکل در تابع تبدیلadc

            با کد ویژن مینویسم و مشکل از کد ویژن نیست.
            ولتاژ مرجع باید2.56 باشه . هیچ کونه تغییری هم نمیتونم به مدار بدم مدار اماده است.و با میکروی خودش کار میکرد.

            دیدگاه


              #7
              پاسخ : مشکل در تابع تبدیلadc

              با سلام،

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

              val مقداری است که شما بعنوان ورودی متغیر تابع بهش میدید، مثلا از ADC میخونید.

              vMin حداقل مقدار ممکن برای متغیر val هستش، مثلا اگر از ADC میخونید مقدارش صفر هست.
              vMax حداکثر مقدار ممکن برای متغیر val هستش ( و بزرگتر از vMin )، مثلا اگر از ADC در مد هشت بیتی
              میخونید، میشه 255 و اگر از ADC در مد 10 بیتی میخونید میشه 1023 ...

              oMin حداقل مقدار رنج خروجی که val باید در اون مپ بشه ( از منفی 32768 تا مثبت 32768 )
              oMax حداکثر مقدار رنج خروجی که val باید در اون مپ بشه ( از منفی 32768 تا مثبت 32768 و بزرگتر از oMin )

              کد PHP:
              float Map(signed short val,
                     signed short vMin, signed short vMax,
                     signed short oMin, signed short oMax)
              {
               return ((float)(val -vMin) *(oMax -oMin) /(float)(vMax -vMin) +oMin);
              } //Map 
              


              مثلا در این مثال :
              کد PHP:
              float    result = Map(20, 0, 255, -100, 100);   // -84.3137 
              


              مقدار ورودی که 20 هست ( در رنج ورودی 0 تا 255 ) در رنج 100- تا 100 مپ میشه و مقدار خروجی 84.3137- خواهد بود.

              و این هم بر اساس توضیحات پست اول :
              کد PHP:
              float    result = Map(62, 40, 131, 0, 999);   // +241.5165 
              

              مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

              Sh_Nourbakhsh@Yahoo.com

              http://s2.picofile.com/file/7170362468/_Wall_e_.jp

              دیدگاه


                #8
                پاسخ : مشکل در تابع تبدیلadc

                با سلام مجدد!

                این یه پروژه تست در کدویژن برای همین موضوع Map کردن هستش که بر اساس پست اول آماده شده :

                http://s4.picofile.com/file/7751273331/MAPtest.rar.html

                و اما نکته : برای بالا بردن رزولوشن ( یا کم کردن استپ ها ) در مپ کردن، تنها راه حل، زیاد کردن اختلاف بین vMin و vMax و یا کم کردن اختلاف بین رنج ورودی ( vMin و vMax ) و رنج خروجی ( oMin و oMax ) هستش....

                مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

                Sh_Nourbakhsh@Yahoo.com

                http://s2.picofile.com/file/7170362468/_Wall_e_.jp

                دیدگاه

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