اطلاعیه

Collapse
No announcement yet.

خواندن بایتهای کالیبریشن

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

    خواندن بایتهای کالیبریشن

    اینجا رو ببینید(از دیتاشیت مگا32) :

    The ATmega32 stores four different calibration values for the internal RC Oscillator.
    These bytes resides in the signature row High Byte of the addresses 0x000, 0x0001,
    0x0002, and 0x0003 for 1, 2, 4, and 8 Mhz respectively. During Reset, the 1 MHz value
    is automatically loaded into the OSCCAL Register. If other frequencies are used, the
    calibration value has to be loaded manually, see “Oscillator Calibration Register – OSC-CAL” on page 28 for details

    مسلما پروگرامر کالیبریشن بایتها رو میخونه و مثلا در بسکام در محل فیوز بیتها نشون میده

    حالا می خوام ببینم میشه این کالیبریشن بایتها که به گفته دیتاشیت در signature row قرار دارن رو از داخل برنامه میکرو خوند ؟
    دوستان تجربه ای در این زمینه دارین؟

    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    #2
    پاسخ : خواندن بایتهای کالیبریشن

    بر طبق چیزی که اینجا گفته باید اینکار شدنی باشه :

    Production Signature Row
    The production signature row is a separate memory section for factory programmed data. It contains calibration data for
    functions such as oscillators and analog modules. Some of the calibration values will be automatically loaded to the
    corresponding module or peripheral unit during reset. Other values must be loaded from the signature row and written to
    the corresponding peripheral registers from software. For details on calibration conditions such as temperature, voltage
    references, etc., refer to the device datasheet.
    The production signature row also contains an ID that identifies each microcontroller device type and a serial number for
    each manufactured device. The serial number consists of the production lot number, wafer number, and wafer
    coordinates for the device.
    The production signature row cannot be written or erased, but it can be read from application software and external
    programmers
    من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
    آلبرت اینشتین
    منبع: http://fa.wikiquote.org

    دیدگاه


      #3
      پاسخ : خواندن بایتهای کالیبریشن

      در GCC در فایل avr/boot.h چیز های جالبی وجود داره :biggrin:
      به این ماکرو دقت کنید:
      کد:
      #define boot_signature_byte_get(addr) \
      (__extension__({           \
         uint8_t __result;             \
         __asm__ __volatile__           \
         (                     \
          "sts %1, %2\n\t"            \
          "lpm %0, Z" "\n\t"           \
          : "=r" (__result)            \
          : "i" (_SFR_MEM_ADDR(__SPM_REG)),    \
           "r" ((uint8_t)(__BOOT_SIGROW_READ)), \
           "z" ((uint16_t)(addr))        \
         );                    \
         __result;                 \
      }))
      توسط این ماکرو میتونی Signature Row را بخونی
      اگه فرصت کردید کل فایل را بخونید جالبه

      موفق باشید
      امام علی (علیه السلام) : الزکات العلم نشرهُ/ زکات علم نشر آن است

      دیدگاه


        #4
        پاسخ : خواندن بایتهای کالیبریشن

        نوشته اصلی توسط Abbas Sarami
        در GCC در فایل avr/boot.h چیز های جالبی وجود داره :biggrin:
        به این ماکرو دقت کنید:
        کد:
        #define boot_signature_byte_get(addr) \
        (__extension__({           \
           uint8_t __result;             \
           __asm__ __volatile__           \
           (                     \
            "sts %1, %2\n\t"            \
            "lpm %0, Z" "\n\t"           \
            : "=r" (__result)            \
            : "i" (_SFR_MEM_ADDR(__SPM_REG)),    \
             "r" ((uint8_t)(__BOOT_SIGROW_READ)), \
             "z" ((uint16_t)(addr))        \
           );                    \
           __result;                 \
        }))
        توسط این ماکرو میتونی Signature Row را بخونی
        اگه فرصت کردید کل فایل را بخونید جالبه

        موفق باشید
        این زبون اسمبلیه یا c ؟ چرا سیمیکالن آخر دستورا داره ؟
        من غیر از lpm هیچ کدوم از این دستورا رو نفهمیدم
        من c بلد نیستم اگه ممکنه با بیسیک یا اسمبلی توضیح بدین :mrgreen:
        من نمىآ‌توانم فرضیه «بىآ‌اخلاقى انسان» را بپذیرم، و من اخلاق را منحصرا امرى انسانى و متعلق به انسان مىآ‌دانم که هیچ نوع قدرت مافوق انسانى در پشت آن وجود ندارد
        آلبرت اینشتین
        منبع: http://fa.wikiquote.org

        دیدگاه


          #5
          پاسخ : خواندن بایتهای کالیبریشن

          در بعضی از شماره های AVR امکان خواندن مقادیر signature row در برنامه وجود دارد. به عنوان مثال برای mega2560 در بخش Reading the Signature Row from Software نحوه خواندن ناحیه مورد نظر توضیح داده شده است.اما برای شماره به خصوص mega32 که مورد سوال است، مطابق اطلاعات datasheet امکانی برای خواندن مقادیر calibration value اسیلاتورها توسط برنامه ذکر نشده است و بیت مورد استفاده برای این عملیات در mega2560 در رجیستر SPMCSR برای خانواده mega32 در رجیستر SPMCR رزرو شده است و نقشی ندارد.
          ضمنا در پست دوم مطلبی را از Manual خانواده XMEGA نقل قول کرده اید که ارتباطی به موضوع سوال شما ندارد.

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

          دیدگاه

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