اطلاعیه

Collapse
No announcement yet.

راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

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

    راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

    با درود بر دوستان :smile:

    هدف از ایجاد این تاپیک راه اندازی و حل مشکلات نرم افزاری و سخت افزاری مربوط به AD7715 میباشد ، که یک مبدل آنالوگ به دیجیتال 16 بیتیه قوی مربوط به شرکت
    آنالوگ دیوایس آمریکاست. این IC پروتوکل SPI رو پشتیبانی میکنه و میتونه از این طریق با انواع میکروکنترلر ها ارتباط برقرار کنه
    خودم با توجه به دیتاشیت برنامه های زیادی نوشتم و تغییر دادم ولی تا این لحظه جوابی نگرفتم :redface: و توی انجمن و اینترنت هم زیاد گشتم که دیدم اغلب مشکلات زیادی داشتند. که در کار خودم این مشکلات میتونه دلایل زبادی اعم از ارتباط برقرار کردن نادرست با SPI ، اشکالات سخت افزاری و ... داشته باشه.

    در انجمن به کتابخانه نوشته شده توسط آقای محمد نحوی برخوردم ، یه کتابخانه کامل و قوی که به زبان C نوشته شده :smile: :

    http://wdl.persiangig.com/pages/down...7715%20Lib.rar

    این هم راه اندازی AD7715 به زبان Basic که آقای حمید رضا رضایی نوشتند : http://www.eca.ir/forum2/index.php?topic=52669.0

    حالا تو این تاپیک قراره با کمک و یاری جناب محمد نحوی و همه دوستانی که میتونن کمک کنند مشکلات راه اندازی این قطعه پرکاربرد رو تا حد امکان برطرف کنیم.
    البته کتابخانه خودش توضیحات مفصل و خوبی داره ولی کسانی مثل من که باز سوال داشتند ، میتونن سوالشون رو اینجا مطرح کنند تا تاپیک مفیدی باشه
    به رویاهات فکر کن!!

    #2
    پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )


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

    1- در حالت بدون علامت ( unipolar ) فقط ولتاژهای 0 تا 20 میلی ولت تبدیل میشن ؟ :surprised:

    2- تغذیه آنالوگ و دیجیتال باید جدا باشند ؟

    3- در این کتابخانه از وقفه تایمر استفاده شده ؟ که هر 10 میلی ثانیه یه روتین وقفه رو اجرا میکنه ، درسته ؟ oo:

    4- درباره ثابت AD7715_AnswerTimeout که برابر 4 در نظر گرفته شده.. در توضیحات کتابخانه اومده که این ثابت هر 10 میلی ثانیه فراخوانی میشه و اگه در مجموع 40 میلی ثانیه از ADC پاسخی دریافت نشه ، دستور reset به تراشه ارسال میشه ولی من نتونستم این رو تو برنامه تشخیص بدم :sad: (ظاهرا فقط برای تراشه دوم این اتفاق میفته.. )

    5- به چه منظور برای نگه داری داده های حاصل از ADC ساختار ADCVal_t رو درست کردیم؟؟ و چرا اون رو تو هدر فایل جداگانه قرار دادیم؟ نقش متغیرهایی مثل ADC1_on تو برنامه و کارکرد تراشه چیه ؟

    و اما در بخش سخت افزار، مدار پیشنهادی من اینه.. آیا نکته خاصی درباره این مدار هست که باعث بشه نتیجه نده ؟؟



    فعلا همین سوالا به ذهنم رسید... ببخشید یکم زیاد بود :redface:
    به رویاهات فکر کن!!

    دیدگاه


      #3
      پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

      سلام.
      1- خیر بستگی به ولتاژ مرجعتون داره. این قدرت ADCآ‌ هست که میتونه حتی یه ولتاژ مرجع مثلا 20 میلی ولتی رو به 65536 قسمت تقسیم کنه. این ولتاژ میتونه بالاتر هم بره که اطلاعاتش در دیتاشیت هست.
      2- توی بستگی به کار شما داره میتونید مجزا کنید. ولی یه نکاتی در خصوص اتصال زمین آنالوگ و دیجیتال هست که باید رعایت کنید. تا جایی که خاطرم هست یکی این بود که زمین آنالوگ و دیجیتال فقط از یک نقطه باید به هم متصل بشن.
      3- کدوم روتین رو می فرمایید؟ وقفه داره ولی وقفه پایه DRYآ‌هست. وقفه تایمر نیست. اگه هم جایی متغییر هست اونها برای تاخیره که در وقفه تایمر یه سری نکات رو بررسی می کنه. مثل اینکه اگه با سرعت مشخصی وقفه DRY نیاد به این معنی که تراشه هنگ کرده یا یه ایرادی پیدا کرده برای همین فرمان ریستش داده میشه.

      4- فعلا به اون کاری نداشته باشید تراشه رو که راه بندازید اگه احساس نیاز کردید متوجه این متغیر میشید. فکر کنم کدش رو در اینجا نیاوردم چون توی وقفه تایمر اصلی بوده که در اینجا نیومده.

      5- برای مرتب شدن برنامه اینکار رو کردم در هر صورت باید داده ADC یه جایی ذخیره بشه. برای اینکه تمام متغیر های وابسته به اون یک جا باشن یه نوع جدید تعریف کردم که همه موارد مورد نیاز درش لحاظ شده. کار اون متغیر هم یک بیت هست که نشون میده ADC روشنه یا نه. اینو در برنامه جاهایی نیاز میشده که استفاده کردم.

      شماتیک: نت هایی که فقط اسمشون هست به همین صورت و بدون هیچ تغییری به میکرو متصل شدن. تا جایی هم که خاطرم هست خازن های متصل به ورودی ADC ، دو تا 100 نانو فاراد رو استفاده نکردم.

      موفق باشید
      شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
      هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
      چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

      دیدگاه


        #4
        پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

        البته انشالله قراره این کتابخونه به یه قالب استاندارد در بیاد و وقتی آماده بشه نکاتی که در خصوص برنامه نویسی و توضیحات کتابخونه هست باید در بخش "کتابخانه های کاربردی" مطرح بشن.
        این بحث موقت اینجا پیگیری میشه تا کتابخونه آماده بشه.
        موفق باشید
        شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
        هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
        چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

        دیدگاه


          #5
          پاسخ : پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )


          سلام و ممنون از پاسخ های کامل :smile:

          نوشته اصلی توسط محمد نحوی

          3- کدوم روتین رو می فرمایید؟ وقفه داره ولی وقفه پایه DRYآ‌هست. وقفه تایمر نیست. اگه هم جایی متغییر هست اونها برای تاخیره که در وقفه تایمر یه سری نکات رو بررسی می کنه. مثل اینکه اگه با سرعت مشخصی وقفه DRY نیاد به این معنی که تراشه هنگ کرده یا یه ایرادی پیدا کرده برای همین فرمان ریستش داده میشه.
          روتین اصلی که مقدار ADC رو میخونیم. یعنی یک وقفه خارجی از میکرو که حساس به لبه پایین رونده است رو فعال کردیم و وصل کردیم به پایه DRDY/ ؟
          من تا اونجایی که فهمیدم هربار که adc دیتایی اماده ارسال داره پایه DRDY/ رو به سطح low میبره ، ولی تو برنامه ما این رو در تابع AD7715_Read(AD7715_Numbers_t Number) لحاظ میکنیم و صفر بودن پایه DRDY/ رو با تابع مربوطه چی میکنیم، اینطور نیست ؟ یعنی باید دوبار این پایه صفر بشه تا adc رو بخونیم.. ؟
          به رویاهات فکر کن!!

          دیدگاه


            #6
            پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دی&#1

            دوستان عزیز ارزان ترین راه حل رسیدن به دقت 16 بیت در ADC استفاده از میکرو کنترولر MKL25Z128VLK4 از Freescale هست،دارای هسته Cortex M0+ هست و تولید 2012 هست، من یک تعداد از اونو وارد کردم و موجود دارم، قیمت هرکدام هم 35000 تومان هست.
            توجه داشته باشید که ADC های 16 بیت رایج بازار قیمتی توی رنج همین میکرو کنترولر دارند و متاسفانه Sample Rate خیلی پایینی دارند، Sample Rate این میکرو 461Ksps هست ، که اگر یک ADC خارجی با این دقت و نرخ نمونه برداری بخواهید خریداری کنید باید روی 100 تومان به بالا حساب کنید! تازه باید یک میکرو برای درایو اون هم بگذارید... :cry2:
            توی محیط های IAR و Keil می تویند براش برنامه بنویسید، از J-link می تونید برای پروگرامش استفاده کنید، برای شروع هم پیشنهاد میکنم که مثال Blinky مربوط به این میکرو توی محیط Keil رو بررسی کنید،

            آدرس پروژه keil
            C:\Keil\ARM\Boards\Freescale\FRDM-KL25Z\Blinky
            لینک دیتا شیت،
            http://cache.freescale.com/files/32bit/doc/data_sheet/KL25P80M48SF0.pdf?fpsp=1
            لینک Reference Manual
            http://cache.freescale.com/files/32bit/doc/ref_manual/KL25P80M48SF0RM.pdf?fpsp=1

            پکیج آماده شامل مثال کاربردی با همه peripheral های میکرو رو هم میتونید از اینجا بگیرید

            http://cache.freescale.com/files/32bit/software/board_support_packages/FRDM-KL25Z_QSP.zip

            دیدگاه


              #7
              پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

              من یه مدت با این ADC ها کار کردم برای راه اندازیشم به مشکل خاصی برنخوردم .اما شما این آی سی رو می خواهید به چه منظوری استفاده کنید منظورم اینه که چه پروژه ای مد نظر شماست این رو بگو ببینیم اصلا این آی سی به کار شما میاد یا نه آخه هر ADC به یه کاری میاد مثلا همین 7715 اصلا به درد راه اندازی لودسل نمی خوره!!!!

              دیدگاه


                #8
                پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                نوشته اصلی توسط hassan1366
                من یه مدت با این ADC ها کار کردم برای راه اندازیشم به مشکل خاصی برنخوردم .اما شما این آی سی رو می خواهید به چه منظوری استفاده کنید منظورم اینه که چه پروژه ای مد نظر شماست این رو بگو ببینیم اصلا این آی سی به کار شما میاد یا نه آخه هر ADC به یه کاری میاد مثلا همین 7715 اصلا به درد راه اندازی لودسل نمی خوره!!!!
                سلام ممنونم ، منم میخوام با AD7715 سنسور دمای pt100 رو راه بندازم :smile: به درد میخوره ؟
                به رویاهات فکر کن!!

                دیدگاه


                  #9
                  پاسخ : پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                  نوشته اصلی توسط اریک ماطوسیان
                  سلام و ممنون از پاسخ های کامل :smile:

                  روتین اصلی که مقدار ADC رو میخونیم. یعنی یک وقفه خارجی از میکرو که حساس به لبه پایین رونده است رو فعال کردیم و وصل کردیم به پایه DRDY/ ؟
                  من تا اونجایی که فهمیدم هربار که adc دیتایی اماده ارسال داره پایه DRDY/ رو به سطح low میبره ، ولی تو برنامه ما این رو در تابع AD7715_Read(AD7715_Numbers_t Number) لحاظ میکنیم و صفر بودن پایه DRDY/ رو با تابع مربوطه چی میکنیم، اینطور نیست ؟ یعنی باید دوبار این پایه صفر بشه تا adc رو بخونیم.. ؟
                  سلام.
                  بله اگه وقفه دریافت فعال باشه، زمانی که وقفه لبه پایین رونده بیاد وارد اون زیر روال میشه و داده آماده رو میخونه.
                  شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                  هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                  چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                  دیدگاه


                    #10
                    پاسخ : پاسخ : پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                    نوشته اصلی توسط محمد نحوی
                    سلام.
                    بله اگه وقفه دریافت فعال باشه، زمانی که وقفه لبه پایین رونده بیاد وارد اون زیر روال میشه و داده آماده رو میخونه.

                    و وقتی که داده خونده شد دوباره پایه DRDY ،یک میشه.. ممنون

                    درضمن برای مد کاری spi چه نوعی باید انتخاب بشه ؟ منظورم پلاریته و فاز کلاک هستش

                    ممنون از شماتیکی که گذاشتید.. در حالت unipolar ، میشه یکی از پایه های ورودی سیگنال رو زمین کرد دیگه ؟؟ منظور AIN-

                    ممنون
                    به رویاهات فکر کن!!

                    دیدگاه


                      #11
                      پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                      من مدار رو روی پروجکت برد بستم و تست کردم ولی جواب نداد ...

                      میکروکنترلر : ATmega8 //// فرکانس کلاک میکرو : 8MHz //// فرکانس واحد SPI : با تقسیم 16 : 500KHz //// پلاریتی کلاک : high //// فاز کلاک : cycle start

                      کامپایلر : Codevision

                      وقتی که میکرو 200 بار نمونه برداری انجام داد ، مقدار آماده ADC رو ( ADCVal.AD7715_Res1 ) با استفاده از پورت سریال به کامپیوتر میفرستم ، ولی داده ها یا صفر هستند یا اعدادی مثل 327 ، 100 و ... برای تبدیل ADCVal.AD7715_Res1 به رشته هم از itoa استفاده میکنم.. :angry:

                      نظری دارید ؟ :sad:
                      به رویاهات فکر کن!!

                      دیدگاه


                        #12
                        پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                        :angry: :angry: :angry:

                        دیگه کلافم کرده.. :sad:

                        پایه DRDY/ رو به وقفه خارجی INT0 وصل کردک تا هرموقع دیتا آماده بود به روتبن وقفه بره.. مواردی که خودم به شخصه حس میکنم شاید ایراد از اونا باشه :

                        1 - میکرو و یا تراشه ad7715 خراب باشه ( احتمال کم )

                        2- شماتیک رو اشتباه بسته باشم ، اعم از وروددی سیگنال AIN- و ...

                        3 - مشکل از واحد SPI و برقرار نشدن ارتلاط صحیح آن ( احتمال بیشتر ) ..

                        منتظر نظرتون هستم :redface:
                        به رویاهات فکر کن!!

                        دیدگاه


                          #13
                          پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                          نوشته اصلی توسط اریک ماطوسیان
                          من مدار رو روی پروجکت برد بستم و تست کردم ولی جواب نداد ...

                          میکروکنترلر : ATmega8 //// فرکانس کلاک میکرو : 8MHz //// فرکانس واحد SPI : با تقسیم 16 : 500KHz //// پلاریتی کلاک : high //// فاز کلاک : cycle start

                          کامپایلر : Codevision

                          وقتی که میکرو 200 بار نمونه برداری انجام داد ، مقدار آماده ADC رو ( ADCVal.AD7715_Res1 ) با استفاده از پورت سریال به کامپیوتر میفرستم ، ولی داده ها یا صفر هستند یا اعدادی مثل 327 ، 100 و ... برای تبدیل ADCVal.AD7715_Res1 به رشته هم از itoa استفاده میکنم.. :angry:

                          نظری دارید ؟ :sad:
                          تنظیمات SPIآ‌ رو از روی دیتاشیت نگاه کنید. دقیقش خاطرم نیست.
                          فقط سرعت کلاک SPI را روی حداقل تنظیم کنید.
                          شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                          هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                          چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                          دیدگاه


                            #14
                            پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                            نوشته اصلی توسط اریک ماطوسیان
                            :angry: :angry: :angry:

                            دیگه کلافم کرده.. :sad:

                            پایه DRDY/ رو به وقفه خارجی INT0 وصل کردک تا هرموقع دیتا آماده بود به روتبن وقفه بره.. مواردی که خودم به شخصه حس میکنم شاید ایراد از اونا باشه :

                            1 - میکرو و یا تراشه ad7715 خراب باشه ( احتمال کم )

                            2- شماتیک رو اشتباه بسته باشم ، اعم از وروددی سیگنال AIN- و ...

                            3 - مشکل از واحد SPI و برقرار نشدن ارتلاط صحیح آن ( احتمال بیشتر ) ..

                            منتظر نظرتون هستم :redface:
                            دقت کنید اگه جریان ورودی پایه های آنالوگ محدود نباشه ممکنه به این پایه ها آسیب برسه تحت شرایطی که بعدا توضیح میدم.
                            ولی در خصوص ایراد یابی باید دقت کنید اولین قدم این هست که شما بتونید به درستی تراشه رو پیکر بندی کنید. اگه درست پیکربندی کردید بدون اینکه داده ای بخونید پایه DRYآ‌ مداوم یه خروجی پالس مانند داره. اگه این رو دید یعنی تراشه تونسته درست پیکر بندی بشه.
                            این رو بررسی کنید. بهم بگید نتیجه رو. اگه این درست بود ولی عددی که ازش میخونید اشتباه هست ممکنه علل دیگری داشته باشه که بهتون خواهم گفت.
                            موفق باشید
                            شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                            هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                            چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                            دیدگاه


                              #15
                              پاسخ : راه اندازی AD7715 به زبان C ( مبدل آنالوگ به دیجیتال 16 بیتی )

                              سلام.
                              اریک جان نتیجه چی شد؟ یه خبری بهمون بده.
                              موفق باشید
                              شأن انسان در ايمان و هجرت و جهاد است و هجرت، مقدمهآ‌ي جهاد فيآ‌سبيلآ‌الله.
                              هجرت، هجرت از سنگينيآ‌هاست و جاذبهآ‌هايي كه تو را به خاك ميآ‌چسباند.
                              چكمهآ‌هايت را بپوش، رهآ‌توشهآ‌ات را بردار و هجرت كن.

                              دیدگاه

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