اطلاعیه

Collapse
No announcement yet.

شروع برنامه نویسی در XMEGA به زبان C

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

    شروع برنامه نویسی در XMEGA به زبان C

    سلام به همگی دوستان
    برای بخش اول پروژه کارشناسی باید بوسیله یک آی سی xmega 128 یک درایور استپر موتور راه اندازی کنم..درایور چنتا ورودی فعال سازی و جهت داره و یک ورودی پالس.
    زبان C و بیسیک تا حد معمولی و کار راه بنداز! بلدم ولی با مطالبی که توی فروم های مختلف راجع به XMEGA خوندم گیج شدم :sad:
    برای شروع برنامه نویسی چکار کنم؟ از کجا شروع کنم؟ حتما باید تا قبل پایان تعطیلات انجامش بدم.
    هر دو کامپایلر codevision و IAR هم نصب دارم.
    پیشاپیش ممنونم...

    #2
    پاسخ : شروع برنامه نویسی در XMEGA به زبان C

    دوست عزیز
    1 - می تونی با یه xmega کوچکتر هم این کارو انجام بدی مثل XMEGA16a3 چون ارزونتر فکر می کنم باشه . اگر اجباری در کار نیست .
    2 - ابتدا شماتیک مدار رو مشخص کن و اون رو ترسیم کن . قطعات رو دقیق مشخص کن . اتصال پایه ها رو به پایه های میکرو دقیقا مشخص کن . و شماتیک رو اینجا بذار بعد بریم سراغ کد نویسی .
    3- در مورد زبانش با هر دو شون می تونی کار کنی هم IAR , و هم CODEVISION . فرقی نمی کنه . من که خودم با atmel studio کار می کنم ولی با هر کدومشون کار کنی توابع و هدر های مختلفی ازشون هست . خوب همشون با همون زبان c کار میکنن که اگر بخوای برنامه رو از این کامپایلر به اون کمپایلر کنی فقط باید تغییرات اندکی بدی . در کل فقط باید بگم اگر از codevision استفاده کنی می تونی با کد ویزاردش کارتو جلو بندازی . (البته میشه از کدویزارد برای کمپایلرهای دیگه هم استفاده کنی ولی همون طور که گفتم اونوقت باید تغییرات جزئی بدی )

    پیشنهاد اگر تا حالا با xmega کار نکردی . اینارو برای مدارت داشته باش . برای تغذیه یک رگلاتور LF33 بزار و کریستال 16 مگاهرتز هم برای اسیلاتور خارجی میکرو . حواست باشه پین ریست میکرو رو با خازن به زمین وصل نکنی ! . پروگرامر مخصوصی برای xmega مثل PDI) MKII) یا jtag داری ؟

    برای شروع بهتر یه led رو با xmega خاموش روشن کنی بعد بریم سراغ بقیه کار . موفق باشی . سال نوی شما هم مبارک
    - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

    دیدگاه


      #3
      پاسخ : شروع برنامه نویسی در XMEGA به زبان C

      برای برنامه نویسی IAR می تونی به این تاپیک هم سر بزنی

      http://www.eca.ir/forum2/index.php?topic=50648.0
      - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

      دیدگاه


        #4
        پاسخ : شروع برنامه نویسی در XMEGA به زبان C

        راستش یه جورایی مجبورم که با xmega128 کار کنم!
        استادم یه برد آموزشی avr بهم داده که پردازنده xmega128 روش سواره.
        توی سی دی همراهش تعدادی برنامه نمونه بود ولی زیاد واسم قابل هضم نبود! این بود که تصمیم گرفتم شروع کنم و خودم واسش برنامه بنویسم و توی تعطیلات عید یه مقدار مسلط شم بهش. خودش هم پروگرمر رو بردش داره (bootloader)
        به نظرتون همین منبعی که معرفی کردین(آموزش جناب آقای نحوی) کفایت میکنه واسه من مبتدی؟؟
        راستی کد ویژن باید ورژن چند باشه که xmega ساپورت کنه؟ مال من ورژن 2،،موقع کامپایل ارور میده "can't open include file: ioavr.h"
        با سپاس

        دیدگاه


          #5
          پاسخ : شروع برنامه نویسی در XMEGA به زبان C

          خوب کلی از مسیر رو جلو هستین !

          فقط کافی که بدونید نقشه برد چیه یعنی منظورم اینکه بدونید کدوم قطعات به کدوم پورت های میکرو متصل هستند تا بتونید براش برنامه بنویسید . برای این کار اگر اطلاعاتی ازش ندارید و برد شما دست ساز نیست مدل و نام شرکت تولید کننده رو اعلام کنید .

          بعد از حل مسئله قبلی . سوال اینکه آیا درایور موتور و موتور هم روی این برد آموزشی سوار هستند ؟

          در ضمن برنامه های نمونه که دارید تحت چه کمپایلر و زبان برنامه نویسی هستند ؟

          به نظرتون همین منبعی که معرفی کردین(آموزش جناب آقای نحوی) کفایت میکنه واسه من مبتدی
          برای IAR چون خودم کار نمی کنم دقیقا نمی دونم و نمی تونم جواب این سوالتون رو بدم و لی فکر می کنم بله چون به هر حال عنوان تاپیک که اینو میگه !

          من کد ویژن 2.5.3 دارم که مشکلی نداره . روی ویندوز xp 32 بیتی نصبش کردم .
          - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

          دیدگاه


            #6
            پاسخ : شروع برنامه نویسی در XMEGA به زبان C

            بردش واسه شرکت نو آورانه،یعنی اینه:
            http://ne-ir.com/DevelopmentBoards/NSK140.aspx?lang=Fa
            تو توضیحاتش هم کامل گفته که کدوم پورت ها به چه المان هایی وصل هستند.

            نه،درایورش واسه شرکت moon's هست،مدل SR4،موتورش هم مال همون شرکته.
            نمونه برنامه ها هم به زبان C هست و هم بیسیک(بسکام و کدویژن)
            کدویژن من ورژن 2.05 هست ولی این آی سی(Atxmega 128A3U) ساپورت میکنه و از اون نظر ها مشکلی ندارم،فقط نمیدونم استارت آموزش از ابتدای برنامه نویسی به زبان C از کجا بزنم! آموزش آقای نحوی خوبه ولی یه مقدار از سطح متوسط شروع کرده،،برای مثال نمیدونم تو دستور PORTC_DIR=0X02 اون (0X02) یعنی چی!

            دیدگاه


              #7
              پاسخ : شروع برنامه نویسی در XMEGA به زبان C

              خوب دستور portX_dir جهت پورت رو مشخص می کنه یعنی خروجی هست یا ورودی ؟
              که هر کدوم پین ها رو شما یک کنی خروجی می شن و هر کدوم رو صفر کنی ورودی میشن
              عدد هگز 0x02 که باینری اون این طوری میشه 00000010 یعنی پین شماره 2 رو خروجی کن بقیه پین ها ورودی .
              حالا فرض کن بخوای 4 تا پین اولی رو خروجی کنی جلوی دستور باید عدد 0x0F که باینری اون بصورت 00001111 هست را وارد کنی . توضیحات کافی بود ؟
              - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

              دیدگاه


                #8
                پاسخ : شروع برنامه نویسی در XMEGA به زبان C

                بله بله متوجه شدم ممنونم از راهنماییتون :smile:

                دیدگاه


                  #9
                  پاسخ : شروع برنامه نویسی در XMEGA به زبان C

                  ویدئو های آموزش xmega استاد کی نژاد رو دانلود کردم و تا قسمت 17 دیدم،ولی متاسفانه هنوز نتونستم چیز بدرد بخوری یاد بگیرم..
                  برای یادگیری xmega حتما باید روی atmega مسلط بود؟ آشناییم با atmega در حد رقص نور و اینچیزاست که اونم به زبان بیسیک تو آزمایشگاه کار میکردیم،به نظرتون چکار کنم؟میشه بدون تسلط رو xmega,atmega هارو کامل یاد گرفت با ویدئوی جناب کی نژاد؟؟

                  دیدگاه


                    #10
                    پاسخ : شروع برنامه نویسی در XMEGA به زبان C

                    بسیاری از کارکرد های xmega و mega مثل هم هستند . و برای کار با xmega نیازی نیست که شما حتما با مگا کار کرده باشید . البته خوب کسانی که کار کردند فقط موارد خاص و جدید xmega رو یاد میگیرند .
                    اگر ویدئو ها رو نگاه کردید کافی هست که اون کاری رو که می خواید انجام بشه رو خرده خرده دنبال کنید .
                    در ابتدای کار شما باید کلاک میکرو رو مشخص کنید این دستورات فعلا خوبه . شما نیاز به دستورات قالب کلی دارید که اگر با codevision ; کار میکنید فقط کافیه که تنظیمات کلاک و تنظیم خروجی پین ها انجام داده و پروژه رو ایجاد کنید . سپس کد نویسی رو در داخل برنامه شروع کنید . اگر انجام بدید ریزه ریزه می تونیم با هم پیش بریم .

                    اگر خواستی با atmel studio کار کنی می تونم کد های لازم رو برات بزارم . و یواش یواش کاملش کنیم .
                    - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

                    دیدگاه


                      #11
                      پاسخ : شروع برنامه نویسی در XMEGA به زبان C

                      نوشته اصلی توسط مرد نامرئی
                      بسیاری از کارکرد های xmega و mega مثل هم هستند . و برای کار با xmega نیازی نیست که شما حتما با مگا کار کرده باشید . البته خوب کسانی که کار کردند فقط موارد خاص و جدید xmega رو یاد میگیرند .
                      اگر ویدئو ها رو نگاه کردید کافی هست که اون کاری رو که می خواید انجام بشه رو خرده خرده دنبال کنید .
                      در ابتدای کار شما باید کلاک میکرو رو مشخص کنید این دستورات فعلا خوبه . شما نیاز به دستورات قالب کلی دارید که اگر با codevision ; کار میکنید فقط کافیه که تنظیمات کلاک و تنظیم خروجی پین ها انجام داده و پروژه رو ایجاد کنید . سپس کد نویسی رو در داخل برنامه شروع کنید . اگر انجام بدید ریزه ریزه می تونیم با هم پیش بریم .

                      اگر خواستی با atmel studio کار کنی می تونم کد های لازم رو برات بزارم . و یواش یواش کاملش کنیم .
                      ممنونم از راهنماییتون
                      اتفاقا دارم با atmel studio کار میکنم،لطف میکنین اگه کدهایی که گفتینو بدین.

                      این برنامه رو امروز نوشتم تا با زدن کلید های روی برد آموزشی led هارو روشن کنم ولی اتفاقی نمیوفته! مشکل از چیه؟ واسه استفاده از پورت به عنوان ورودی باید تنظیماتی مثل مقاومت های پایین کش و.. دستکاری شه؟


                      #include<avr/io.h>

                      int main(void)
                      {
                      PORTE_DIR=0X00;
                      PORTF_DIR=0xff;
                      //PORTF_OUTSET=0xf8;

                      while(1)
                      {

                      if(PORTE_IN==0Xfe)
                      {
                      PORTF_OUTSET=0xfe;
                      }

                      else if(PORTE_IN==0Xfd)
                      {
                      PORTF_OUTSET=0xfd;
                      }

                      else if(PORTE_IN==0Xfb)
                      {
                      PORTF_OUTSET=0xfb;
                      }

                      }
                      }

                      دیدگاه


                        #12
                        پاسخ : شروع برنامه نویسی در XMEGA به زبان C

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

                        دیدگاه


                          #13
                          پاسخ : شروع برنامه نویسی در XMEGA به زبان C

                          بله،براتون گذاشتم شماتیک اتصال کلید ها و led


                          دیدگاه


                            #14
                            پاسخ : شروع برنامه نویسی در XMEGA به زبان C

                            اینم کد کامل با توجه به نقشه هایی که گذاشتی . برای LCD کاراکتری هم اگر خواستی نقشه برای تا برات هدرش رو بزارم و روش استفاده .
                            در ضمن روش روشن خاموش نمودن led ها رو در کد های زیر ببینید . شما می تونید به همین شکل برای هر کدام از پین های مربوطه به step motor نیز یک define بنویسید .

                            کد:
                            #include <avr/io.h>
                            
                            
                            #define CPU_SPEED 16000000
                            #define BAUDRATE  100000
                            #define TWI_BAUD(F_SYS, F_TWI) ((F_SYS / (2 * F_TWI)) - 5)
                            #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)
                            
                            #define Set(a, b) ( (a).OUT = (a).OUT | (1 << b) )
                            #define Reset(a, b) ( (a).OUT = (a).OUT & ~(1 << b) )
                            #define Output(a, b) ( (a).DIR = (a).DIR | (1 << b) )
                            #define Input(a, b) ( (a).DIR = (a).DIR & ~(1 << b) )
                            
                            //-----------------delays---------------------------------------------------------
                            #define LOOP_CYCLES 8
                            #define fcpu_delay_us(num) delay_int(num/(LOOP_CYCLES*(1/(CPU_SPEED/1000000.0))))
                            #define fcpu_delay_ms(num) delay_int(num/(LOOP_CYCLES*(1/(CPU_SPEED/1000.0))))
                            
                            #define LED_1_ON Reset(PORTF,7);
                            #define LED_2_ON Reset(PORTF,6);
                            #define LED_3_ON Reset(PORTF,5);
                            #define LED_4_ON Reset(PORTF,4);
                            #define LED_5_ON Reset(PORTF,4);
                            #define LED_6_ON Reset(PORTF,4);
                            #define LED_7_ON Reset(PORTF,4);
                            #define LED_8_ON Reset(PORTF,4);
                            #define LED_1_Off Set(PORTF,7);
                            #define LED_2_Off Set(PORTF,6);
                            #define LED_3_Off Set(PORTF,5);
                            #define LED_4_Off Set(PORTF,4);
                            #define LED_5_Off Set(PORTF,4);
                            #define LED_6_Off Set(PORTF,4);
                            #define LED_7_Off Set(PORTF,4);
                            #define LED_8_Off Set(PORTF,4);
                            
                            void delay_int(unsigned long delay);
                            void system_clocks_init(void);
                            void PortSetting(void);
                            
                            
                            
                            
                            int main(void)
                            {
                            	char Vorodi = 0 ;
                            	
                            	system_clocks_init();
                            	PortSetting();
                            	
                            	
                            	
                            	// meghdare pish farz
                            	LED_1_Off;
                            	LED_2_Off;
                            	LED_3_Off;
                            	LED_4_Off;
                            	LED_5_Off;
                            	LED_6_Off;
                            	LED_7_Off;
                            	LED_8_Off;
                            	
                            	
                            	while(1)
                            	{
                            
                            		Vorodi = PORTE.IN & 0x0F ;  // Ba in dastor 4 key 0 ta 3 Barrasi mishavand
                            		
                            		switch(Vorodi)
                            		{
                            			case 1:
                            			LED_1_ON;
                            			break;
                            			
                            			case 2:
                            			LED_1_Off;
                            			break;
                            			
                            			case 4:
                            			LED_5_ON;
                            			break;
                            			
                            			case 8:
                            			LED_5_Off;
                            			break;
                            		}
                            
                            		fcpu_delay_ms(200); // baraye Gozashtane Takhir
                            	}
                            	
                            }
                            
                            
                            
                            void PortSetting(void)
                            {
                            	// Port Direction E
                            	Input(PORTE,0);
                            	Input(PORTE,1);
                            	Input(PORTE,2);
                            	Input(PORTE,3);
                            	Input(PORTE,4);
                            	Input(PORTE,5);
                            	Input(PORTE,6);
                            	Input(PORTE,7);
                            	
                            	// Port Direction F
                            	Output(PORTF,0);
                            	Output(PORTF,1);
                            	Output(PORTF,2);
                            	Output(PORTF,3);
                            	Output(PORTF,4);
                            	Output(PORTF,5);
                            	Output(PORTF,6);
                            	Output(PORTF,7);
                            
                            }
                            
                            void system_clocks_init(void)
                            {
                            	OSC.XOSCCTRL=0XCB;
                            	OSC.CTRL = 9;
                            	while(!(OSC.STATUS & 8));
                            	CCP = 0xD8;
                            	CLK.CTRL = 0x03;
                            	CLK.PSCTRL = 0x01;
                            }
                            
                            void delay_int(unsigned long delay)
                            {
                            	while(delay--) asm volatile("nop");
                            };
                            - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

                            دیدگاه


                              #15
                              پاسخ : شروع برنامه نویسی در XMEGA به زبان C

                              سلام دوستان،اگه نمونه کدی برای تولید PWM در Xmega دارین ممنون میشم توی تاپیک قرار بدین.
                              میخوام با فرکانس 2Mhz سیگنال PWM تولید کنه.مرسی :redface:
                              مدل میکرو هم 128a3u

                              دیدگاه

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