اطلاعیه

Collapse
No announcement yet.

تفاوت adc در atmega32 و atmega2561

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

    تفاوت adc در atmega32 و atmega2561

    با سلام
    من یک برنامه برای یکسری کارها داشتم که روی یکبرد با میکروی 32 بود .
    حالا می خوام با یکبرد دیگه که میکروی آن 2561 هست برخی توابع نرم افزاری همین برد قبلی رو استفاده کنم و از آن جمله adc هست .

    از نظر سخت افزاری که می دونم پورت a و f رو.
    از نطر نرم افزاری وقتی که ADCSRA.4 که همون پبتی ADIF هست رو میخوام بخونم و یا بیت 6 آنرا ، ایراد می گیره.
    البته در ویزارد کدویژن هم که نگاه کردم دیدم که کمی فرق داره ولی اصل قضیه رو نفهمیدم که واقعا تفاوت کجاست .

    #2
    پاسخ : تفاوت adc در atmega32 و atmega2561

    سلام
    اگه به صورت بیتی دارید می خونید، یک بار به صورت بایتی رجیستر مورد نظر رو بخونید و سپس با یک مقدار AND کنید و وضعیت بیت مورد نظر رو بررسی کنید. آخه من یادمه یه جایی خونده بودم که بعضی از رجیستر ها دسترسی بیتی ندارند و دستورات بیتی (اسمبلی) روی اونها کار نمیکنه.

    دیدگاه


      #3
      پاسخ : تفاوت adc در atmega32 و atmega2561

      با تشکر از شما
      آخه من همین رو به همین صورت بیتی برای atmega32 امتحان می کنم و جواب میده
      2561 که نباید کمتر از 32 باشه
      تو دیتا شیت هم چیزی ندیم

      دیدگاه


        #4
        پاسخ : تفاوت adc در atmega32 و atmega2561

        کسی کمکم نمی کنه ! چرا؟

        دیدگاه


          #5
          پاسخ : تفاوت adc در atmega32 و atmega2561

          نوشته اصلی توسط داریوش عباسی
          با تشکر از شما
          آخه من همین رو به همین صورت بیتی برای atmega32 امتحان می کنم و جواب میده
          2561 که نباید کمتر از 32 باشه
          تو دیتا شیت هم چیزی ندیم
          شاید آدرس رجیسترهای ADC این دو تا میکرو با هم فرق داشته باشند.
          mega2561 از آن دسته میکروهایی است که به دلیل امکانات اضافه تر، دارای رجیسترهای I/O توسعه یافته است و آدرس این رجیسترها با آدرس رجیسترهای mega32 (که رجیسترهای I/O توسعه یافته ندارند) متفاوت است [مرجع کامل میکروکنترلرهای AVR انتشارات نص ص 46].

          دیدگاه


            #6
            پاسخ : تفاوت adc در atmega32 و atmega2561

            من اسم خود رجیستر رو می دم نه آدرسشو .
            و البته اگر اسم رو بدون .4 بدم مشکلی نداره ولی وقتی بیت چهارم رو می خوام مشکل داره

            دیدگاه


              #7
              پاسخ : تفاوت adc در atmega32 و atmega2561

              کسی نیست به من کمک کنه هن همچنان سردر گم هستم کسی هم اصلا تحویل نمی گیره :angry: :cry2:

              دیدگاه


                #8
                پاسخ : تفاوت adc در atmega32 و atmega2561

                با سلام

                ببخشید سوالتون یخورده گنگ هست . منظورتون اینه که موقع کامپایل ارور میده ؟ شاید اروری که میده صرفا مربوط به سینتکس باشه .
                چیزی که من از پست اول فهمیدم اینه که شما دارید بیت 4 ام رجیستر ADCSRA رو به صورت : ADCSRA.4 میخونید ، درسته ؟

                اگه اینطور باشه ، مشکل همونی هست که جناب aed عرض کردند .
                این کد غلطه چون کدویژن از این شکل کد نویسی فقط تا آدرس x5F حافظه SRAM یعنی رجیستر SREG ساپورت میکنه این درحالی که آدرس این رجیستر ADCSRA برابر هست با 0x7A (توی ATMEGA2561) و چون احتمالا این شکل کدنویسی معادل دستورات اسمبلی SBI , CBI و کلا دستورات بیتی میشه و جون این دستورات تنها تا این آدرس قابل استفاده هستن پس به خاطر همین کدویژن موقع کامپایل ارور میده .

                راه حل هم همونی هست جناب aed گفتن. یا به عبارت دیگه مثلا برای خوندن بیت 4 ام یا ADIF و احتمالا استفاده از اون به عنوان شرط مثلا ساختار if میتونبد به شکل زیر عمل کنید :

                کد:
                if(ADCSRA&(1<<ADIF)) //run if ADIF bit of ADCSRA set.
                    {
                    // Place your code here   
                    }

                دیدگاه


                  #9
                  پاسخ : تفاوت adc در atmega32 و atmega2561

                  با تشکر
                  من همین کار رو با atmega32 انجام میدم و بیت 4 ام رجیستر ADCSRA رو به صورت ADCSRA.4 می خونم و هیچ مشکلی نداره ولی برای 2561 مشکل داره .
                  منظور من هم تفاوت بین 32 و 2561 است آیا از این نظر فرقی بین این دو وجود دارد ؟
                  البته با atmega16 , atmega8 هم همین کار رو انجام داده ام و برنامه بدون مشکل کمپایل شده و پرگرام کردم و داره به راحتی کار می کنه ولی برای 2561 اصلا کمپایل نمیشه .
                  توی دیتا شیتش هم چیزی ندیدم که از این نظر فرقی داشته باشه!

                  دیدگاه


                    #10
                    پاسخ : تفاوت adc در atmega32 و atmega2561

                    خوب برای اینکه بهتر متوجه اشکال کار بشید ، تو دیتا شیت این میکرو ها به قسمت Register Summary برید و از اونجا آدرس این رجیستر (ADCSRA) رو تو این میکرو ها رو بررسی کنید . اگه تو قسمت آدرس فقط یه آدرس نوشته شده باشه یعنی این رجیستر تو ناحیه ای از SRAM هست که نمیشه با استفاده از دستورات بیتی اسمبلی به اونها دسترسی داشت اما اگر تو قسمت آدرس دو تا آدرس کنار هم دات یکی تو پرانرتز که آدرس واقعی SRAM هست و دیگری که کنارش هست ، این یعنی که این رجیستر تو محدوده ای از SRAM هست که دستورات بیتی اسمبلی رو میشه برای دسترسی به اون استفاده کرد .

                    دیدگاه

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