اطلاعیه

Collapse
No announcement yet.

راههای جلوگیری از نویز ADC

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

    راههای جلوگیری از نویز ADC

    سلام
    من در چندیم جا از ADC خود میکرو استفاده کردم ولی اعصابمو خورد کرده وقتی مثلا یکی از ADCها را راه می اندازم و مستقیما متغیر مربوط به ADC را روی LCD نمایش می دهم در حالت عادی 0 رو نشون نمیده و همش اعداد قاتی پاتی نشون میده زمانی که به 5ولت وصلش می کنم 1023 رو نشون میده ولی باز هم یکمی ریپل میزنه حتی به زمین هم وصلش می کنم بازم اعداد قاطی پاتی نشون میده از سلف و خازن هم استفاده کردم ولی باز هم قاطی می کنه
    آیا کسی میدونه مشکله من از کجاست؟از کجا اینقدر نویز میگیره؟

    #2
    پاسخ : راههای جلوگیری از نویز ADC

    adc میکرو انقد ها هم که میگی نویزی نمیشه مگر اینکه ...!
    برنامتو بذار بچه ها ببینیم چی کارمیشه کرد.

    دیدگاه


      #3
      پاسخ : راههای جلوگیری از نویز ADC

      $regfile = "m8def.dat"
      $crystal = 1000000
      Config Adc = Single , Prescaler = Auto , Reference = Off
      Start Adc
      Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.2 , Db6 = Portb.1 , _
      Db7 = Portb.0 , E = Portb.4 , Rs = Portb.5
      Dim A As Word
      Enable Interrupts
      Enable Adc
      Cursor Off
      Cls
      Do
      A = Getadc(0)
      Locate 1 , 1
      Lcd A
      Loop
      End
      برامش اینه خیلی ساده است

      دیدگاه


        #4
        پاسخ : راههای جلوگیری از نویز ADC

        راه های نویز گیری زیاده
        مهمتر از همه استفاده از همون سلف و خازنه
        من خودم بصورت نرم افزاری یکمی نویز رو کم می کنم و بقیه اش سخت افزاریه
        برنامه زیر رو یک نیگا بنداز

        $regfile = "M8def.dat"
        $crystal = 8000000
        Config Lcd = 16 * 2
        Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.4 , Rs = Portb.5
        Config Adc = Single , Prescaler = Auto
        Start Adc



        Declare Sub Temp

        Const Scale =(200 / 1023)
        Const Numberofsample = 1000

        Dim A As Word , B As Word , C As Single
        Dim I As Word
        Dim Sum0 As Long
        Dim Sum1 As Long
        Dim Sum As Long
        Dim Strtemp As String * 16
        Deflcdchar 0 , 32 , 4 , 10 , 4 , 32 , 32 , 32 , 32 ' replace ? with number (0-7)
        Cursor Off
        Cls
        Locate 1 , 1
        Lcd "Temp By LM35"
        Locate 2 , 1
        Lcd "88/10/20"
        Wait 1
        Cls

        Do

        Call Temp
        Home : Lcd "Temp:" ; Strtemp ; " c" : Lcd Chr(0) ; Spc(5)

        Loop

        End



        Sub Temp

        Sum0 = 0 : Sum1 = 0
        For I = 1 To Numberofsample
        A = Getadc(0)
        B = Getadc(1)
        Sum0 = Sum0 + A
        Sum1 = Sum1 + B
        Next I
        Sum = Sum0 - Sum1
        C = Sum / Numberofsample
        C = C * Scale
        Strtemp = Fusing(c , "#.##" )
        End Sub


        این برنامه 1000 تا نمونه می گیره و میانگین اونا رو نشون میده البته می تونی کم و زیادش کنی

        البته دما های منفی رو هم م یگیره ولی توی برنامه هدف همون حلقه for next که اون کار رو انجام میده
        :nice: :nice: :nice:
        اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

        دیدگاه


          #5
          پاسخ : راههای جلوگیری از نویز ADC

          من میخوام بدون نمونه گیری این کار رو انجام بدم یعنی نمیشه؟ این برنامه ای که براتون گذاشتم،آیا مشکلی داره؟

          دیدگاه


            #6
            پاسخ : راههای جلوگیری از نویز ADC


            برنامه رو این طوری تغییر بده

            Config Adc = Single , Prescaler = Auto , Reference = Off
            Config Adc = Single , Prescaler = Auto

            در برنامه شما اون قسمت وقفه عملا کاری انجام نمیده اونو حذف کن

            نویز چیز خاصی نیست بالاخره اینم یک روشه
            مثل این میمونه که منم بگم بدون خازن و سلف می خوام این کار رو انجام بدم
            شاید شدنی باشه ولی محیط ایده آل هیچ زمان وجود نداره

            دستور idle رو توی برنامت جای بده

            اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

            دیدگاه


              #7
              پاسخ : راههای جلوگیری از نویز ADC

              ببخشید من از کدوم یک از دستوراتی که گفتین استفاده کنم؟اولی یا دومی؟
              نوشته اصلی توسط saeed bagherani



              Config Adc = Single , Prescaler = Auto , Reference = Off
              Config Adc = Single , Prescaler = Auto



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

              دیدگاه


                #8
                پاسخ : راههای جلوگیری از نویز ADC

                رفرنس داخلی 5 ولته
                اگه از خارجی استفاد کنی می تونی هر مقداری دوست داری انو تغییر بدی
                مثلا دامنه ولتاژ ورودی بین 0 تا 1 ولت باشه بهتره مه ولتاژ رفرنس رو هم همون 1 ولت بزاری تا حداکثر دقت رو داشته باشی
                البته روی 5 ولت هم جواب میده ولی دقتت 5 برابر کاهش داره
                اگه مردم می دونستن زمان چقدر با ارزشه دیگه هیچ وقت کفش بند دار نمی خریدن البرت انیشتن

                دیدگاه


                  #9
                  پاسخ : راههای جلوگیری از نویز ADC

                  سلام
                  استاد واقعا" سپاسگذارم مشکلی که با ADC داشتم به کمک شما حل شد.
                  حالا یه نکته جالب که برام سوال شده اینه که :
                  چرا برنامه ای که من نوشتم آمپر بیشتری میکشه اما برنامه شما عالیه
                  من اینطور نوشتم:
                  یعنی چون دستورات رو توی Do-Loop گذاشتم این مورد پیش اومده؟؟

                  در ضمن چطور میتونم دمای واقعی ( کالیبره شده ) رو رو lcd داشته باشم.
                  از سنسور LM35dz استفاده میکنم
                  با تشکر


                  Start Adc


                  Cls
                  Lcd "M.A.P"
                  Waitms 50
                  Cls


                  G:
                  A = 0
                  E = 0
                  Do
                  Incr B
                  A = Getadc(0)
                  C = A
                  E = E + C
                  If B = 1000 Then Gosub N
                  If B = 1000 Then Goto R
                  Loop
                  End

                  N:
                  Locate 1 , 1 : Lcd Fusing(e , "#.#&quot ; " Sum "
                  Return


                  R:
                  B = 0
                  D = E / 1000
                  Locate 2 , 1 : Lcd Fusing(d , "#.#&quot ; " Miyangin"
                  Waitms 100
                  Goto G
                  تخیل مهمتر از دانش است
                  علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
                  آلبرت انیشتین

                  دیدگاه


                    #10
                    پاسخ : راههای جلوگیری از نویز ADC

                    یک سوال خدمت عزیزان داشتم.
                    مثل اینکه باقی قسمتهای میکرو مثل cpu یا بخش های جانبی روی عملکرد adc تاثیر دارن و باعث ایجاد نویز روی اون میشن.درسته؟؟؟؟
                    اگر درست باشه تاثیرش چقدر میتونه باشه؟؟؟؟ :smile:
                    ... و (بدانيد) گرفتن تصميمهاى محكم (براى رسيدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگين سازگار نيست و چه بسيار كه خواب شبانه تصميمهاى محكم روز را از ميان برده و تاريكيآ‌ها، خاطره همتآ‌هاى بلند را از يادها محو كرده است. (نهجآ‌البلاغه، خطبه211)

                    امام علي (ع):کسي که به وقت ياري رهبرش در خواب باشد، با لگد دشمنش بيدار مي شود (غررالحکم،ص 422)

                    دیدگاه


                      #11
                      پاسخ : راههای جلوگیری از نویز ADC

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

                      دیدگاه


                        #12
                        پاسخ : راههای جلوگیری از نویز ADC

                        یه راه نرم افزاری دیگه هم هست (خودتون میدونید که این یارو CPUرو ADCبیچاره نویز میندازه)
                        راه حل اینه که شما بعد از کانفیگ ها دستور Enable Interupts و دستور Enable ADC اضافه کنید
                        بعدش که رسیدید به دستورGETADC بیاید بعدش دستور on adc lable اضافه کنید (lable یعنی اسم زیر برنامه) و بعد که اضافه کردید دستور idleبزارید و بعد یدونه لیبل بزارید(مثلا لیبل X)
                        در زیر برنامه هم دستور goto X بزارید
                        حالا وقتی که برنامه بیاد adcرو بخونه cpu خوابش میبره و وقتی که کار adc تموم شد با یه وقفه cpuبیدار میشه و به کارش ادامه میده
                        :bye
                        1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                        من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                        !Electronic On! Programming On
                        هوشمندانه سوال بپرسیم!
                        http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                        دیدگاه


                          #13
                          پاسخ : راههای جلوگیری از نویز ADC

                          نوشته اصلی توسط mahan.rafiee
                          یه راه نرم افزاری دیگه هم هست (خودتون میدونید که این یارو CPUرو ADCبیچاره نویز میندازه)
                          راه حل اینه که شما بعد از کانفیگ ها دستور Enable Interupts و دستور Enable ADC اضافه کنید
                          بعدش که رسیدید به دستورGETADC بیاید بعدش دستور on adc lable اضافه کنید (lable یعنی اسم زیر برنامه) و بعد که اضافه کردید دستور idleبزارید و بعد یدونه لیبل بزارید(مثلا لیبل X)
                          در زیر برنامه هم دستور goto X بزارید
                          حالا وقتی که برنامه بیاد adcرو بخونه cpu خوابش میبره و وقتی که کار adc تموم شد با یه وقفه cpuبیدار میشه و به کارش ادامه میده
                          :bye
                          کاش یه نمونه میذاشتین
                          آخه من همین مراحل رو که طی میکنم دگه دستور Getadc عملا" کار نمیکنه و احتمالا" توی Idle خوابش میبره
                          با تشکر از زحماتتون
                          تخیل مهمتر از دانش است
                          علم محدود است اما تخیل دنیا را دربر میآ‌گیرد
                          آلبرت انیشتین

                          دیدگاه


                            #14
                            پاسخ : راههای جلوگیری از نویز ADC

                            نوشته اصلی توسط سیـــــــــم
                            کاش یه نمونه میذاشتین
                            آخه من همین مراحل رو که طی میکنم دگه دستور Getadc عملا" کار نمیکنه و احتمالا" توی Idle خوابش میبره
                            با تشکر از زحماتتون
                            برنامه تون رو بگذارید
                            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                            معرفی نرم افزار Codewizard PWM
                            با من بیشتر آشنا شوید

                            دیدگاه


                              #15
                              پاسخ : راههای جلوگیری از نویز ADC

                              نوشته اصلی توسط Saman.Asadi
                              برنامه تون رو بگذارید
                              استاد متشکرم
                              اون مشکل حل شد.
                              اگه اشتباه نکنم مشکل از نذاشتن Return بود.
                              حالا به این شکل Idle رو میذارم مشکلی نداره؟؟


                              O:
                              M=0
                              temp=0
                              Do
                              M = M + 1
                              W = Getadc(0)
                              Input_a = W * 4.8828125
                              Temp = Input_a / 10
                              If M = 1000 Then
                              Goto O
                              Idle
                              Loop
                              End If
                              Return
                              و اما کدوم روش از این دو روش نویز کمتری میگیره و بهتره :
                              1000 تا نمونه از ADC بگیرم و اونو تقسیم بر 1000 کنم ؟؟
                              یا
                              هر 1000 سیکل یه نمونه از ADC بگیرم؟؟

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

                              دیدگاه

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