اطلاعیه

Collapse
No announcement yet.

طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

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

    طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

    سلام به همگی ....
    این برنامه تو خود codevison هست تو exampel من یه نگاه روش کردم قسمت تابع read_adc رو نفهمیدم یه جونمرد پیدا میشه منو کمک کنه :cry2:
    اگه لطف کنید از خط اولش توضیح بدین ممنون میشم

    این خود تابع هست

    unsigned read_adc(void)
    {
    unsigned result; اینجا متغیرمون از چه نوعیه؟(result )
    // start conversion in mode 1
    // (high sampling performance)
    NCONVST=0;
    NCONVST=1;
    // wait for the conversion to complete
    while (ADC_BUSY);
    // read the MSB using SPI
    result=(unsigned) spi(0)<<8; این خط رو هم نفهمیدم :angry:
    // read the LSB using SPI and combine with MSB
    result|=spi(0); اینم با msb جمع شده چرا اینجا (spi(0 ولی اون بالا 8>>(0 ) spi هست؟
    // calculate the voltage in [mV]
    result= (unsigned) (((unsigned long) result*VREF)/4096L); اینجا طریقه محاسبه ولتاژو فهمیدم ولی این (unsigned) (((unsigned long) چه نقشی داره؟
    // return the measured voltage
    return result;
    }
    خدا خیرتون بده فقط جواب بدین .... :bye
    اینم برنامه اصلی

    http://persiandrive.net/632840
    ذكات علم ياد دادنه ....

    #2
    پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

    خیلی مثال جالبیه
    انگار متغیر result که آخر سر باید 12 بیتی باشه هیچ تایپی نداره. درواقع متغیر نامعلومه.

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

    این (unsigned) (((unsigned long) رو من تابحال استفاده نکردم. اما انگار چیزای بدرد بخوریه که مانع warningآ‌ های الکی در کدویژن میشه
    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

    دیدگاه


      #3
      پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

      یه سوال این متغیره result از چه نوعیه int ؟ char ؟ ..... مگه میشه نامعلوم باشه
      unsigned) (((unsigned long) اره راست میگی وقی از اینا استفاده نمیشه warning میده...
      احمد جان میشه میشه یه متغیر مثلا از نوع int داشته باشیم و اون پرانزا رو برداریم بدون اینکه warning بده اصلا اینا واسه چیهunsigned) (((unsigned long) :angry: :angry:
      یه سوال دیگه اینجا که گفته spi(0)<<8 فرمودین یکی یکی شیفت میده به اندازه 8 تا این صفری که داخل پرانتزه یعنی از 0 شروع کن به شیفت دادن ؟؟
      پس وقتی اینو (spi(0 مینویسیم یعنی چی؟؟ یعنی اینکه 0 رو ارسال کن؟
      ببینید من اینجوری فهمیدم که وقتی دستوره مثلا (spi(0x33 رو بنویسیم در واقع اگه میکرو مستر باشه یا اسلیو فرقی نداره ox33 رو از طریق باس spi میفرسته درسته... حالا تو این برنامه میکرو ما master و وقتی بنویسیم spi(0)<<8 در واقع انگار داره data از میکرو شیفت پیدا میکنه به AD7896 یا اینطوره که وقتی 8 بیت از میکرو شیفت داده میشه به AD7896 از طرف مبدا انالوگ به دیجیتال هم 8 بیت data میرسه .......؟؟؟؟؟؟
      یه نفر پیدا بشه منو توجیح کنه :cry2:
      یا علی....
      ذكات علم ياد دادنه ....

      دیدگاه


        #4
        پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

        چون عدد 12 بیتیه باید متغیر int تعریف کنیم. برای اینکه وارنینگ نده اول باید پرش کنیم. بعد شیفتش بدیم. در واقع ما نمی تونیم عدد char رو شیفت بدیم و همزمان داخل intآ‌ بریزیم. این مشکلیه که توی این کمپایلر هست و با این مثال بطور جالبی حل شده.
        من بارها به این مشکلات برخوردم و خیلی از برنامه هام هنوز این وارنیگهای مسخره رو داره. قدیما توی پاسکال با دستورات highbyteآ‌ و lowbyteآ‌ این مشکل حل میشد اما cآ‌ کمبودهاشو با دستورات عجیب و غریب مثل این مثال شما حل کرده که اصلا user friend نیست.
        دستور (spi(0 یعنی 0 رو بفرست برای پورت spiآ‌. وقتی که ما می خواهیم از spi یک بایت بخونیم چاره ای نداریم جز اینکه یک بایت همزمان بفرستیم. پس باید یک بایت بی اثر بفرستیم. مثلا برای آی سی AD7730آ‌ باید بنویسیم (spi(255 چون این آی سی عدد 255 رو بعنوان عددی خنثی در نظر می گیره.

        بله spi یک کانال دوطرفه هست. برای خوند 8 بیت باید همزمان 8 بیت هم فرستاد. پس برای هر اسلیو باید 8 بیت ارسالی در موقع خوندن عددی باشه که خنثی حساب بشه.



        با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

        دیدگاه


          #5
          پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

          ممنون از جوابتون این نکته رو من نمیدونستم ...نکته اموزنده ایی بود
          طبق فرمایشات شما میکرو باید حتما یه چیزی بفرسته تا بتونه بگیره... پس چرا تو initialize این برنامه پایه پورت B5 که همون mosi میکرو به صورت ورودی تنظیم شده در ضمن تو دیتا شیتش هم اسمی از mosi نبرده؟



          یه سوال دیگه البته ببخشید سرتونم درد اوردم :redface:
          این NCONVST چرا 0 شده بعد 1 شده مربوط به مد کاریه AD7896 هست؟

          این شرط رو هم اگه توضیح بدین دیگه تمومه while (ADC_BUSY);
          ذكات علم ياد دادنه ....

          دیدگاه


            #6
            پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

            با لبه پایین رونده NCONVST تبدیل ADC آغاز میشه.
            تا وقتی ADC_BUSY یک باشه یعنی ADC مشغول به تبدیله و کارش تموم نشده. هروقت کارش تموم بشه ADC_BUSY رو صفر می کنه و میکرو از حلقه ی while میاد بیرون.

            منظورت از پایه B5 رو متوجه نشدم
            با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

            دیدگاه


              #7
              پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

              پایه MOSI یا همون PORTB.5 ...
              سوالم اینه برای ارتباط SPI بین دو وسیله از miso ,mosi,sck استفاده میشه درسته؟... خوب پس چرا تو این مثال فقط از sck و miso میکرو استفاده کرده و mosi رو به صورت ورودی تعریف کرده و به جاییم و صل نیست در صورتی که ما میگیم (spi(0 یعنی 0 رو از طریق mosi بفرست پس چطوری دیتای ما میره به مبدل انالوگ تا اونم دیتای خودشو شیفت بده ؟؟؟ یعنی مگه دیتا از mosi میکرو نمیره به AD7896 ؟؟؟
              در ضمن از اون جواباتونم ممنونم
              یا علی...
              ذكات علم ياد دادنه ....

              دیدگاه


                #8
                پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

                در spi پایه miso بعنوان ورودی در حالت مستر استفاده میشه. اینجا هم همین کارو کرده. ad7896 نیاز به گرفتن چیزی نداره و کافیه بهش کلاک بدی تا بهت دیتا بده. پس نیازی به استفاده از پایه mosi نداریم. پس اصلا مهم نیست که داخل پرانتز spi چه عددی بنویسیم. اینجا هم چون مهم نبوده صفر گذاشته. البته جالبه که بعضی از میکروها از پایه mosiآ‌ میشه برای کارای دیگه هم استفاده کرد، حتی اگه بخش spiآ‌ فعال باشه.
                با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                دیدگاه


                  #9
                  پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

                  ولی احمد جان ولی فکر کنم mosi در حالت مستر به حالت خروجی باشه و miso ورودی اگه اشتباه نکنم ....
                  ذكات علم ياد دادنه ....

                  دیدگاه


                    #10
                    پاسخ : طریقه اتصال مبدل انالوگ به دیجیتال با (spi (AD7896 ؟؟؟

                    بله
                    تصحیح شد. :smile:
                    با عرض پوزش خدمت دایی های عزیزم تا اطلاع ثانوی به اینترنت دسترسی ندارم.

                    دیدگاه

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