اطلاعیه

Collapse
No announcement yet.

کامپایلر IAR

Collapse
این موضوع برجسته شده است.
X
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : کامپایلر IAR

    نوشته اصلی توسط امیر . م
    دوست عزیز تو این کامپایلر جایی برای تنظیم فرکانس وجود نداره و نباید اون رو با کدویژن مقایسه کنی.
    تو کدویزن تنظیم فرکانس داشت چون تابع delay رو خودش داشت. اما اینجا از تابع delay خبری نیست و باید خودت بنویسی ، پس تنظیم فرکانس معنی خاصی تو کامپایلر نداره. فقط تو باید عددی رو برای حلقه تاخیرت بر اساس تعداد ماشین سیکل های لازم بر حسب زمانبندی با فرکانس کاریت قرار بدی.
    مثلا اگر فرکانس کاریت 32 مگا هرتز هست ، باید تابع __delay_cycles(32) , و برای میلی ثانیه __delay_cycles(32000) رو قرار بدی.
    پس میبینی که تنظیم فرکانس معناش این میشه.
    امیر جان ممنونم از توضیحاتت
    ولی یه سوال؟؟؟ فرکانس کاری xmega به صورت پیش فرض 2 مگاهرتز هست ، درست؟
    حالا چطور باید تغییرش بدم؟؟مثلا بذارم روی 11.0592 مگاهرتز؟
    مشکل من کار با delay نیست
    ممنون میشم اگه بیشتر توضیح بدی ، چون من اول راه برنامه نویسی هستم و از همین اول اومدم سراغ IAR :mrgreen: :mrgreen:
    خدایا چنان کن سرانجام کار *** که تو خشنود باشی و ما رستگار

    دیدگاه


      پاسخ : کامپایلر IAR

      فرکانس کاری پیش فرض 2 مگ هست، اما شما میتونید با PLL داخلی میکرو ، فرکانس رو چند برابر کنید مثلا 32 مگاهرتز.
      اگر میخواین فرکانس خاصی داشته باشید مثلا 11.0592 یا 3.5674 باید از کریستال خارجی استفاده کنید.
      اگر هدفتون از استفاده از این کریستالهای خورده دار ، کار با پورت سریال باشه ، نیازی به اونها نیست. میتونید از فرکانس 32 مگ داخلی استفاده کنید با نرخ ارسال سریال برابر 115200 با خطای تقریبا صفر.

      دیدگاه


        پاسخ : کامپایلر IAR

        نوشته اصلی توسط امیر . م
        فرکانس کاری پیش فرض 2 مگ هست، اما شما میتونید با PLL داخلی میکرو ، فرکانس رو چند برابر کنید مثلا 32 مگاهرتز.
        اگر میخواین فرکانس خاصی داشته باشید مثلا 11.0592 یا 3.5674 باید از کریستال خارجی استفاده کنید.
        اگر هدفتون از استفاده از این کریستالهای خورده دار ، کار با پورت سریال باشه ، نیازی به اونها نیست. میتونید از فرکانس 32 مگ داخلی استفاده کنید با نرخ ارسال سریال برابر 115200 با خطای تقریبا صفر.
        با سلام
        من روی یه مداری دارم کار میکنم که کریستال 11.0592 روش نصب شده ، تازه همینطور که گفتم من اول راهم و سطح اطلاعاتم خیلی پایینه :cry2: :cry2:
        در هرصورت خواستم بدونم که فرکانس رو چجوری (چه با PLL و چه با RC داخلی) باید تنظیم کنم؟ از اینکه با سوالاتم شما رو خسته می کنم عذر می خوام ولی اگه امکانش هست در این زمینه من رو راهنمایی کنین :redface:
        باز هم ممنونم
        خدایا چنان کن سرانجام کار *** که تو خشنود باشی و ما رستگار

        دیدگاه


          پاسخ : کامپایلر IAR

          این تابع میاد PLL داخلی رو برای 32 مگ که با اسیلاتور داخلی 32.768 کیلو کالیبره شده، تنظیم میکنه. میتونی ببینی از چه رجیسترهایی استفاده شده و تو دیتاشیت اونها رو دنبال کنی.


          کد:
          void System_Clocks_Init_32MHz(void)
          {
            unsigned char n,s;
            s=SREG;
            cli();
            OSC.CTRL|=OSC_RC32KEN_bm;
            while ((OSC.STATUS & OSC_RC32KRDY_bm)==0);
            OSC.CTRL|=OSC_RC32MEN_bm;
            n=(CLK.PSCTRL & (~(CLK_PSADIV_gm | CLK_PSBCDIV1_bm | CLK_PSBCDIV0_bm))) | CLK_PSADIV_1_gc | CLK_PSBCDIV_1_1_gc;
            CCP=CCP_IOREG_gc;
            CLK.PSCTRL=n;
            OSC.DFLLCTRL&= ~(OSC_RC32MCREF_bm | OSC_RC2MCREF_bm);
            DFLLRC32M.CTRL|=DFLL_ENABLE_bm;
            while ((OSC.STATUS & OSC_RC32MRDY_bm)==0);
            n=(CLK.CTRL & (~CLK_SCLKSEL_gm)) | CLK_SCLKSEL_RC32M_gc;
            CCP=CCP_IOREG_gc;
            CLK.CTRL=n;
            OSC.CTRL&= ~(OSC_RC2MEN_bm | OSC_XOSCEN_bm | OSC_PLLEN_bm);
            PORTCFG.CLKEVOUT=(PORTCFG.CLKEVOUT & (~PORTCFG_CLKOUT_gm)) | PORTCFG_CLKOUT_OFF_gc;
            SREG=s;
          }

          موفق باشی.

          دیدگاه


            پاسخ : کامپایلر IAR

            سلام
            آقا دستت درد نکنه!! استفاده کردم ، جواب داد! !! تمامی رجیسترهای این تابع درون هدر ATxmega128A1.h بود.تقریبا فهمیدم چیکار میکنه :wow:
            منظورت از دیتاشیت چیه؟دیتاشیت میکرو؟؟!! اون رو مطالعه کردم ولی زیاد چیزی نفهمیدم :redface:آیا منبعی هست که با مطالعه اون بتونم؟؟
            الان من نمیدونم چجوری باید اسیلاتور خارجی رو باید فعال کرد :angry: راسش یکم واسم گنگه و هر چی جلوتر می رم می فهمم کی بیشتر نمیدونم!!! :cry2: ولی از شما وتمامی دوستانی که علمشون رو در اختیار دیگران قرار می دهند ممنونم.
            راستی جایی هست که برنامه نویسی رو به صورت حرفه ای آموزش بده؟؟هزینش مهم نیست
            خدایا چنان کن سرانجام کار *** که تو خشنود باشی و ما رستگار

            دیدگاه


              پاسخ : کامپایلر IAR

              سلام.
              آقا من یه به یه مشکل برنامه نویسی تو IAR برخوردم که بدجوری لازمش دارم.
              ببیبنید یه کلاس تایمر تعریف کردم که توش بعد از اینکه مقدار شمارندش به بالاترین حدی که براش تعریف کردیم رسید یه تابع رو فرا میخونه.
              کد:
              //----------------------------------------------------------------------
              class Timer
              {
              private:
              	ulong Counter;
              	ulong Top;
              	bool Enable;
              	bool Repeat;
              	void (*Timer_Tick)();
              public:
              	//---------------------------
              	Timer()
              	{
              		Counter = 0;
              		Top = 0;
              		Enable = false;
              	}
              	//---------------------------
              	void Init(ulong top,void (*timer_tick)(),bool rep)
              	{
              		Counter = 0;
              		Top = top;
              		Repeat = rep;
              		Timer_Tick = timer_tick;
              	}
              	//---------------------------	
              	void Stop()
              	{
              		Enable = false;
              	}
              	//---------------------------	
              	void Start()
              	{
              		Enable = true;
              		Counter = 0;
              	}
              	//---------------------------	
              	bool Control()
              	{
              		if (Enable == true)
              		{
              			Counter++;
              			if (Counter >= Top)
              			{
              				Enable = Repeat;
              				Counter = 0;
              				Timer_Tick();
              				return true;
              			}
              		}
              		return false;
              	}
              	//---------------------------
              };

              حالا تو یه کلاس دیگه از این تایمر یه Object گرفتم و میخوام که یکی از توابع همون کلاس رو به تابع Init تایمر پاس بدم. اما قبول نمیکنه و حطای زیر رو میده
              Error[Pe167]: argument of type "void (TextBox::*)()" is incompatible with parameter of type "void (*)()" clsTextBox.cpp 98
              حالا نمیدونم چکار کنم. با اینکه این مشکل هیچ ارتباطی به نوع چیپم نداره ولی چیپم هم ATXmega128A1 هست.

              دیدگاه


                پاسخ : کامپایلر IAR

                سلام دوستان
                مدتی است که با IAR شروع به کد نویسی کردم. و با یه مشکل عجیب مواجه شدم که می خواستم بدونم که آیا کسی میدونه دلیلش چیه؟؟
                وقتی که یک تابع برای انجام کاری فراخوانی می شود ، وقفه ها در ابتدای تابع غیر فعال می شوند. یعنی زمانی که برنامه داخل یک تابع می رود ، وقفه غیر فعال شده و ISR وقفه ی ما دیگر اجرا نمی شود. و زمانی که در ابتدای تابع با استفاده از دستور اسمبلی (sei) ، وقفه فعال می شود ، مشکل حل می شود.
                آیا به طور پیشفرض در IAR ، در ابتدای توابع ، وقفه غیر فعال می شود و یا به نظر شما مشکل از برنامه ی اینجانب است.

                دیدگاه


                  پاسخ : کامپایلر IAR

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

                  دیدگاه


                    پاسخ : کامپایلر IAR

                    در میکروی AVR در ابتدای روتین وقفه (هر وقفه ای) اینتراپت عمومی غیر فعال و در اخر آن تابع مجددا فعال میشود. برای برقراری و استفاده از اینتراپت های دیگر ابتدای روتین باید بیت عمومی را فعال کنید. در کدویژن و هر کامپایلر دیگری هم به این گونه میباشد.
                    بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
                    موفقیت پیش رفتن است نه به نقطه ی پایان رسیدن
                    نلسون ماندلا

                    دیدگاه


                      پاسخ : کامپایلر IAR

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

                      دیدگاه


                        پاسخ : کامپایلر IAR

                        سلام
                        علت خطای
                        Error[Pe020]: identifier "uint8_t" is undefined C:\Users\aaa\Desktop\final\main.cpp 3
                        کامپایلر نسبت به دستور
                        uint8_t a;
                        چی میتونه باشه؟
                        با تشکر

                        دیدگاه


                          پاسخ : کامپایلر IAR

                          اینطور که از خطا مشخصه uint8_t تعریف نشده.
                          شما میتونید به یکی از دو صورت زیر تعریف کنید
                          کد:
                          #define uint8_t unsigned char
                          یا
                          typedef unsigned char	uint8_t;

                          تفاوت این دو رو هم که حتما میدونید.
                          موفق باشید.

                          دیدگاه


                            پاسخ : کامپایلر IAR

                            نوشته اصلی توسط طراح
                            avr_compilerدر اکثر Application Note های مربوط به XMEGA وجود دارد. مثلا:

                            http://www.atmel.com/dyn/resources/p...ts/AVR1300.zip
                            سلام :nerd:
                            مدتی هستش که دلم می خواد از این برنامه IAR واسه کارهام استفاده کنم. ولی توی هلپ هم نمیشه زیاد چرخید. چون مثلا واسه کتابخونه هاش فقط توابع و دستورات رو نوشته و توضیحات مربوطه رو داده. ولی مثلا حرفی راجب به کار با وقفه ها و تایمر کانتر ها و یا ایجاد تاخیر و... نزده. من واسه سری AVR می خواستم. حالا این کتابخونه رو بگیرم میشه هم واسه سری AVR و هم Xmega استفاده کرد؟
                            در ضمن آقای کی نژاد میشه یه قسمت FAQ مثل همینجا واسه بخش AVR هم بسازید تا بتونیم اونجا سوالامون رو بپرسیم. اگه از همین موقع که AVR هستم کار کردن با این کامپایلر رو یاد بگیریم خیلی سوالات توی سطوح بالاتر مثل همین Xmega بوجود نمی یاد.
                            ببخشید که اینجا پست گذاشتم.

                            دیدگاه


                              پاسخ : کامپایلر IAR

                              البته من درخواستم رو اینجا مطرح کردم:

                              http://www.avrfreaks.net/index.php?n...amp;highlight=

                              ولی هنوز جواب نگرفتم.

                              دیدگاه


                                پاسخ : کامپایلر IAR

                                نوشته اصلی توسط rozeh
                                سلام :nerd:
                                مدتی هستش که دلم می خواد از این برنامه IAR واسه کارهام استفاده کنم. ولی توی هلپ هم نمیشه زیاد چرخید. چون مثلا واسه کتابخونه هاش فقط توابع و دستورات رو نوشته و توضیحات مربوطه رو داده. ولی مثلا حرفی راجب به کار با وقفه ها و تایمر کانتر ها و یا ایجاد تاخیر و... نزده. من واسه سری AVR می خواستم. حالا این کتابخونه رو بگیرم میشه هم واسه سری AVR و هم Xmega استفاده کرد؟
                                در ضمن آقای کی نژاد میشه یه قسمت FAQ مثل همینجا واسه بخش AVR هم بسازید تا بتونیم اونجا سوالامون رو بپرسیم. اگه از همین موقع که AVR هستم کار کردن با این کامپایلر رو یاد بگیریم خیلی سوالات توی سطوح بالاتر مثل همین Xmega بوجود نمی یاد.
                                ببخشید که اینجا پست گذاشتم.
                                کتابخانه های زیادی به زبان c برای ارتباط سخت افزار های مختلف با avr وجود دارد که با تغییرات جزئی می توانید از آن در IAR استفاده کنید (با شرط تسلط بر IAR ).
                                اوژن: به معنای افکننده و شکست دهنده است
                                دانایی، توانایی است-Knowledge is POWER
                                برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                                وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                                قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                                اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                                ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                                دیدگاه

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