اطلاعیه

Collapse
No announcement yet.

مشکلات ADC در XMEGA

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

    مشکلات ADC در XMEGA

    آقا از دوستانی که با adc ایکسمگا کار کردن چن تا سئوال دارم.
    من adc رو با بسکام راه انداختم و رو lcd مقدارشو دارم نمایش میدم.مقدار به اندازه 200 واحد پرش داره که به نظر من با وجود یک ولتاژ ثابت اصلا منطقی به نظر نمیرسه!
    برای اینکه از وجود ولتاژ ثابت روی پین میکرو اطمینان حاصل کنم یک خازن 100 نانو روی اون پین اضافه کردم ولی نتیجه تغییر نکرد.
    برای اینکه شرایط بهتر بشه از یک رگولاتور ولتاژ استفاده کردم ولی بازم فایده نداشت!
    در نهایت گفتم شاید اشکال از تغذیه خود میکرو باشه اومدم رفرنس adc رو گذاشتم روی 1 ولت داخلی تا اگه نویزی روی منبع تفذیه adc هست رو اندازه گیری تاثیر نداشته باشه.ولی بازم همین نوسان وجود داره!
    علت چی میتونه باشه به نظر شما؟
    برنامه رو قرار دادم.
    در ضمن یک اشکال دیگه هم هست.اونم اینکه موقعی که دستور کانفیگ lcd رو تو کد ها اضافه میکنم بهد از ریست شدن مدار 2 ثانیه طول میکشه تا میکرو شروع به کار کنه و lcd راه بیفته که واقعا به نظرم عجیبه !آخه راه اندازی lcd با کلاک 32 مگ که نباید انقد طول بکشه.اگه علتی به نظرتون میرسه و میتونید برنامه رو چک کنید واقعا ممنون میشم.
    پیشاپیش ممنون از راهنمایی اسلتید.


    کد:
    $regfile = "xm64a3def.dat"
    $crystal = 32000000                     '32MHz
    $hwstack = 64
    $swstack = 64
    $framesize = 64
    $lib "xmega.lib"
    $external _xmegafix_clear
    $external _xmegafix_rol_r1014
    Config Osc = Enabled , 32mhzosc = Enabled          'We use internal 32MHz
    Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'Internal 32MHz, no prescaler
    '-------------------------------------------------------------------------------
    Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off , Reference = Int1v , Event_mode = None , Prescaler = 32 , Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = &B000_00 _
    Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = &B1_000 , Ch2_gain = 1 , Ch2_inp = Single_ended , Mux2 = &B10_000 , Ch3_gain = 1 , Ch3_inp = Single_ended , Mux3 = &B11_000
    '-------------------------------------------------------------------------------
    Config Lcdpin = Pin , Db4 = Portf.5 , Db5 = Portf.4 , Db6 = Portf.3 , Db7 = Portf.2 , E = Portf.0 , Rs = Portf.1
    Config Lcd = 20 * 4 , Chipset = Dogm162v3
    Cursor Off
    Cursor Noblink
    Cls
    Lcd "In the name of GOD"
    '-------------------------------------------------------------------------------
    Config Porte.0 = Output                   'Porte.0 as Output
    Porte.0 = 1
    '-------------------------------------------------------------------------------
    Dim I As Word
    Dim J As Byte
    Dim W As Word
    Dim Mux As Byte
    '-------------------------------------------------------------------------------
    Do
    
    I = 1
    Mux = I * 8
    W = Getadc(adca , 0 , Mux)
    Locate 3 , 1
    Lcd W ; "   "
    
    Loop
    End                             'end program
    '-------------------------------------------------------------------------------

    #2
    پاسخ : مشکلات ADC در XMEGA

    سلام دوست من
    اگه دیتاشیت xmega مورد نظرتو دقیقا بخونی میبینی که نقطه شروع adc برای xmega از عدد 200 هست یعنی در اصل بجای اینکه از صفر تا 4095 بخونه از 200 تا 4095 میخونه
    هیچ کدوم از موارد بالا که گفتی مشکلی ندارن
    شما بیا اول ولتاژ رفرنس رو بزار رو INTVCC که نویز و نوسان کمتر بشه چون اندازه ولتاژ رفرنس هرچه کمتر باشه نویز ونوسان بیشتر ولی سنس یا بقولی خوندن adc از ولتاژهای ریز بهتر میشه
    و مسئله مهم اینه که شما ولتاژ ورودی رو صفر ولت بذار که ال سی دی عدد 200 رو نشون بده بعد بیا یه شرط بذار که اگر مثلا پین pinc.3 زده شد(منظور پین مذکور ورودی و به کلید وصله که هر موقع کلید زده شه شرط عمل کنه) اما موقعی که کلید فشرده شد بیاد یه متغیر دیگه مساوی همون adc بشه یعنی عدد200 بعد بیای این متغیر جدید رو از متغیر اول که adc رو خونده بود از هم تفریق کنه این کار رو zero کردن یا صفر کردن میگن
    امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

    دیدگاه


      #3
      پاسخ : مشکلات ADC در XMEGA

      این کد رو امتحان کن ببین چجوره فقط اول ورودی adc رو ولتاژ صفر بذار وبعد کلید zero بزن و حتما پین pine.1 رو که به کلید وصله رو با یک مقاومت pullup کن به vcc یا 3.3 ولت وگرنه یه ضرب zero عمل میکنه
      $regfile = "xm64a3def.dat"
      $crystal = 32000000 '32MHz
      $hwstack = 64
      $swstack = 64
      $framesize = 64
      $lib "xmega.lib"
      $external _xmegafix_clear
      $external _xmegafix_rol_r1014
      Config Osc = Enabled , 32mhzosc = Enabled 'We use internal 32MHz
      Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'Internal 32MHz, no prescaler
      '-------------------------------------------------------------------------------
      Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off , Reference = Intvcc , Event_mode = None , Prescaler = 32 , Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = &B000_00 _
      Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = &B1_000 , Ch2_gain = 1 , Ch2_inp = Single_ended , Mux2 = &B10_000 , Ch3_gain = 1 , Ch3_inp = Single_ended , Mux3 = &B11_000
      '-------------------------------------------------------------------------------
      Config Lcdpin = Pin , Db4 = Portf.5 , Db5 = Portf.4 , Db6 = Portf.3 , Db7 = Portf.2 , E = Portf.0 , Rs = Portf.1
      Config Lcd = 20 * 4 , Chipset = Dogm162v3
      Cursor Off
      Cursor Noblink
      Cls
      Lcd "In the name of GOD"
      '-------------------------------------------------------------------------------
      Config Porte.0 = Output 'Porte.0 as Output
      Porte.0 = 1

      'xxxxxxxxxxxxxxxxx kelid xxxxxxxxxxxxxxxxxxxxxxx'

      Config Porte.1 = Input

      '-------------------------------------------------------------------------------
      Dim I As Word
      Dim J As Byte
      Dim W As Word
      Dim Mux As Byte
      Dim Zero As Word
      '-------------------------------------------------------------------------------
      Do

      I = 1
      Mux = I * 8
      W = Getadc(adca , 0 , Mux)

      'xxxxxxxxxxxx zero xxxxxxxxxxxxxxxxxxxxx'

      If Pine.1 = 0 Then Zero = W

      W = W - Zero
      'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
      Locate 3 , 1 : Lcd "ADC:" ; W ; " "

      Loop
      End 'end program
      '----------------------------------
      امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

      دیدگاه


        #4
        پاسخ : مشکلات ADC در XMEGA

        ممنون از پاسخت مهدی جان.
        ببین مشکل من آفست ولتاژ ورودی نیس اصلا.
        میدونم که xmega آفست داره.مشکل من اینه که با وجود مرجع داخلی و اعمال ولتاژ خارجی کاملا ثابت به adc عددی که دارم میخونم داره مدام به اندازه 200 واحد تغییر میکنه.اصلا کار ندارم که چه رابطه ای بین ولتاژ اعمالی به میکرو و مقدار تناسبش با عدد خونده شده چی هست.وقتی ولتاژ ثابته عدد خونده شده از adc هم باید ثابت باشه!
        یعنی اومدم یک tl431 رو که ولتاژ خروجیش کاملا ثابت هست و حتی روش خازن 100 میکرو و 100 نانو هم قرار دادم رو به ورودی میکرو دادم و ولتاژشو تو lcd و یا تو کامپیوتر نمایش میدم.عدد مدام تغییر میکنه.رو اسکوپ ولتاژو میبینم.نویز نداره.قبول دارم که نویز در حد چند میلی ولت در هر صورت وجود داره ولی این تلورانس قابل تحمل نیس.چون اگه قرار باشه یک اندازه گیری اینقد بی دقت باشه که دیگه نمونه برداری 10 بیتی با 12 بیتی هیچ توفیقی ایجاد نمیکنه! باید یک جای کار اشتباه باشه که این تلورانسو به وجود آورده!
        میخوام بدونم اشکال کجاس!

        دیدگاه


          #5
          پاسخ : مشکلات ADC در XMEGA

          بله فهمیدم اشکال توقسمت mux در get adc هست کد زیر رو امتحان کنید
          Config Adca = Single , Convmode = Unsigned , Resolution = 12bit , Dma = Off , Reference = Arefb , Event_mode = None , Prescaler = 256 , Ch0_gain = 1 , Ch0_inp = Single_ended , Mux0 = &B000_00 _
          Ch1_gain = 1 , Ch1_inp = Single_ended , Mux1 = &B1_000 , Ch2_gain = 1 , Ch2_inp = Single_ended , Mux2 = &B10_000 , Ch3_gain = 1 , Ch3_inp = Single_ended , Mux3 = &B11_000



          و از این استفاده کنید
          Ad = Getadc(adca , 0 )
          با این خودم هم تست کردم ودیگه تغییر نداره
          امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

          دیدگاه


            #6
            پاسخ : مشکلات ADC در XMEGA

            اون متغیر ad رو w کنید من اشتباها متغیر خودم رو گذاشتم
            w=getadc(adca,0)
            امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

            دیدگاه


              #7
              پاسخ : مشکلات ADC در XMEGA

              کاری رو که گفتی انجام دادم.نتیجه با اتصال همون tl431 به صورت زیر است:

              170

              2202

              2230

              2261

              2297

              2329

              2336

              2352

              2397

              2424

              2482

              2519

              2537

              2576

              2590

              2602

              2624
              همونطور که میبینی بازم تلورانس خیلی زیاده یعنی با ولتاژ ثابت روی پین بازم نوسان اعداد رو داریم.
              تنها چیزی که شما تو کانفیگ تغییر دادی همون arefb بود که اتصال مرجع ولتاژ رو به اون هم وصل کردم و حذف mux تو برنامه که اونم انجام شد.
              تغییری حاصل نشد! چیز دیگه ای هم به نظرت میرسه که امتحان کنیم؟

              دیدگاه


                #8
                پاسخ : مشکلات ADC در XMEGA

                سلام
                arefb رو بذار رو intvcc حتما
                حواسم نبوده گذاشتم رو arefb
                ولتاژ رفرنس خود میکرو خوبه
                راستی پرسکالر adc رو تو کنفیگش بیشتر کن یعنی سرعت تبدیل پایین بیاد بهتره برای دقتش هم خوبه
                یه سئوالی دارم شما با پتانسیومتر مثلا 10 کیلو (مولتی ترن) که یه سرش به vcc و سره دیگش به gnd امتحان کردی؟ اگه امتحان نکردی این کارو بکن اگه نویز وپرش نبود مشکل ورودی انالوگی که داری میدی به adc هستش
                امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                دیدگاه


                  #9
                  پاسخ : مشکلات ADC در XMEGA

                  سلام دوستان
                  من چند وقتیه با ایکسمگا و کدویژن کار میکنم .ولی تو آنالوگش مشکل دارم.
                  مشکلم اینه که از 8 تا ورودی پورت A فقط 4 تاش رو میتونم بخونم. فقط پین 0 تا 3 رو ،و پین 4 تا 7 رو نمیتونم بخونم.
                  اصل موضوع هم اینه که نمیدونم چطوری کانفیگش کنم تا 8 تا ورودی رو به صورت مستقل از هم ، بخونه.
                  اگه کسی بلده کمک کنه ممنون میشم.

                  دیدگاه


                    #10
                    پاسخ : مشکلات ADC در XMEGA

                    کد نوشته شده برای خواندن همان 4 ورودی را قرار دهید تا برای 4 ورودی دیگر راهنمایی لازم انجام شود.
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      #11
                      پاسخ : مشکلات ADC در XMEGA

                      باسلام خدمت اساتید
                      هنگامی یه رله بدون بارراسوییچ میکنم باعث خطادرمقدارadcمیگرددچگونه میتوانم انرا رفع نماییم.
                      باتشکر

                      دیدگاه


                        #12
                        پاسخ : مشکلات ADC در XMEGA

                        باتشکرازپاسخ های فراوان شما کاملااستفاده نمودم :applause:

                        دیدگاه


                          #13
                          پاسخ : مشکلات ADC در XMEGA

                          با سلام
                          میشه شماتیک بذاری.به نظرم جالبه.
                          یعنی وقتی بار داره مشکلی نیست؟

                          دیدگاه


                            #14
                            پاسخ : مشکلات ADC در XMEGA

                            سلام
                            شماتیک اماده نیست مداررو بردبرده رله اصلا به میکرووصل نیست اماتغذیشون یکیه وقتی رله رو بصورت دستی وصل کنی به تغذیه ورله سوییچ بشه مقدارadcچندرقم تغییرمیکنه.درضمن رله بدون باره :read:

                            دیدگاه


                              #15
                              پاسخ : مشکلات ADC در XMEGA

                              سلام دوستان
                              من با کد ویژن ADCA و ADCB ایکسمگا را راه اندازی کردم
                              تو صفر ولتش حدود 170-190 می ده ؟؟!!؟؟
                              میشه حلش کرد ؟

                              ضمن اینکه ADCB خودش حدود 800 میده و البته نیم ولت روی پایه هست!! (هر 4 پایه مد نظر همینطوره)
                              مقاومت هم که میذارم بازم ولتاژ کمتری مثلا 0.35 می مونه که حدود 600 خروجی میده!!! :surprised:

                              کسی می تونه کمک کنه ؟
                              یا حد اقل حدس های مربوط به مشکلات مدارم رو بگه!!

                              راستی رفرنس هم 3.3 اکسترنال!!
                              [move] :applause:با تشکر وییییژژژژژه :wow:[/move]

                              دیدگاه

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