اطلاعیه

Collapse
No announcement yet.

نمونه کدهایی برای XMEGA

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

    پاسخ : نمونه کدهایی برای XMEGA

    نوشته اصلی توسط NAO_ROBOT
    chip = ATxmega64a3
    ADC = ADCA
    clkper = 2MHz
    clkADC = 15.625KHz
    Temp sensor calibration value = 0xACC = 2764
    Convertion mode = Unsigned single ended
    Resolution = 12bit
    Reference = internal 1.00v
    Result(64 point average) = 2355
    Temp=358*(2355 - 200) / (2764 - 200) - 273 = 27.89'C
    من و یکی از دوستان اون -200 بغل کالیبر رو حذف کردیم تا درست جواب داد
    پس چجوری شما جواب گرفتید

    دیدگاه


      پاسخ : نمونه کدهایی برای XMEGA

      نوشته اصلی توسط طراح
      تعیین تاریخ و ساعت در تابع disk_timerproc انجام نمی شود. بلکه در تابع get_fattime انجام می شود که در سورس اصلی پروزه از طریق rtc دریافت می شود و در نمونه کد قرار داده شده برای سادگی بصورت دستی عدد دهی می شود و مقدار آن ثابت است.
      خیلی ممنون ولی میخواستم بدونم تابع disk_timerproc در کدام کتابخانه قرار داره؟
      و یک سوال دیگه میشه در مورد راه اندازی واحد AWEX یک مقدار راهنمایی کنید. برای راه اندازی دوتا سوئیچ IRF و یک IR2110 میخوام استفاده کنم.
      بعد دیدم که xmega واحد Awexش این قابلیت رو داره. مثال 1311 از A.N های اتمل رو پیدا کردم، میشه در مورد bit_generation , fault_detection یک مقدار راهنمایی کنید؟
      ممنون.
      بگذارعشق خاصیت تو باشد نه رابطه خاص تو باکسی
      موفقیت پیش رفتن است نه به نقطه ی پایان رسیدن
      نلسون ماندلا

      دیدگاه


        پاسخ : نمونه کدهایی برای XMEGA

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

        دیدگاه


          پاسخ : نمونه کدهایی برای XMEGA

          از دوستان کسی با twi کار کرده
          یک نمونه کد لازم دارم
          من میخوام از توابع خود اتمل استفاده کنم ولی تابع TWI_MasterRead (&twiMaster,0xC0,1); چیزی رو برنمی گردونه؟
          هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
          بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
          میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

          تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

          دیدگاه


            پاسخ : نمونه کدهایی برای XMEGA

            برای نمونه کد به پست زیر مراجعه کنید:

            http://www.eca.ir/forum2/index.php?t...5446#msg325446

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

            دیدگاه


              پاسخ : نمونه کدهایی برای XMEGA

              با تشکر از جناب طراح
              من در واقع میخوام ماژول CMP03 رو راهندازی کنم،در سری مگا با کد زیر مازول راهندازی میشده
              کد:
              i2c_start(); 
              i2c_write(0xC0); 
              i2c_write(0x01); 
              
              i2c_write(0xC1); 
              deg=i2c_read(0); 
              i2c_stop();


              اما با xmega نتونستم بطور درست راهندازی کنم
              کد که استفاده کردم بصورت زیر بود
              کد:
              #define CPU_SPEED    32000000
              #define BAUDRATE    400000
              uint8_t twitest1[1]={0xC0},twitest2[1]={0x01},twitest3[1]={0xC1};
              TWI_Master_t twiMaster; 
              #define SLAVE_ADDRESS  0xC0
              #define TWI_BAUD(F_SYS, F_TWI) ((F_SYS / (2 * F_TWI)) - 5)
              #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)


              و کد mian
              کد:
               GLCD_GoTo(0,0);
               GLCD_WriteString(buf);
              TWI_MasterInit(&twiMaster,&TWIE,TWI_MASTER_INTLVL_LO_gc,TWI_BAUDSETTING);
               TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,twitest1,1,0);
               while (twiMaster.status != TWIM_STATUS_READY);
               TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,twitest2,1,0);
               while (twiMaster.status != TWIM_STATUS_READY);
               TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,twitest3,1,1);
               while (twiMaster.status != TWIM_STATUS_READY);
              for(unsigned char i=0;i<8;i++)buf[i]=('0'+twiMaster.readData[i]);
               GLCD_GoTo(0,1);
               GLCD_WriteString(buf);

              ولی نتیجه خالی است
              از پورت E استفاده شده پولاپ 2.2 بسته شده و از لحاظ سخت افزاری موردی نداره
              چون با یک کد دیگه که داخل avrfreak پیدا کردم کار میکنه ولی باردوم که بخواد بخونه توی while گیر میکنه
              هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
              بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
              میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

              تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

              دیدگاه


                پاسخ : نمونه کدهایی برای XMEGA

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

                دیدگاه


                  پاسخ : نمونه کدهایی برای XMEGA

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

                  تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                  دیدگاه


                    پاسخ : نمونه کدهایی برای XMEGA

                    نوشته اصلی توسط n340
                    سوال برام پیش امد که چرا یک بیت باید شیفت داد
                    یا دلیل تنظیم ادرس به این نحوه در این کتابخانه چیست؟
                    با مراجعه به پروتکل twi مشاهده می شود که آدرس 7 بیتی در بیت های 1 تا 7 ارسال می شود و بیت شماره 0 مختص تعیین وضعیت read یا write است. به همین دلیل آدرس مورد نظر یک بیت به چپ شیفت داده می شود تا در بیت های 1 تا 7 قرار بگیرد.
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


                      پاسخ : نمونه کدهایی برای XMEGA

                      با درود پیروی راهندازی است موتور با xmega
                      نهایتا به full استپ قناعت کردیم
                      و با یک تایمر زمان عوض شدن استپ ها را برنامه ریزی کردیم
                      حال سوال داشتم برای اینکه در اینتراپت تایمری که موتور هارو کنترل میکنه برای به حداقل رساندن طول این وقفه
                      کد:
                      ISR(TCD1_OVF_vect) :redface:
                      {
                      
                      if(step_r==0)
                      {
                        if(mm1)
                        { 
                        m10on;
                        m11on;
                        m12off;
                        m13off;
                        }
                        if(mm2)
                        {
                        m20on;
                        m21on;
                        m22off;
                        m23off;}
                        step_r=1;
                        goto a;
                        
                      }
                      if(step_r==1)
                      {
                       if(mm1=)
                        {  
                       m10off;
                        m11on;
                        m12on;
                        m13off;
                        
                        }
                       if(mm2)
                       { m20off;
                        m21on;
                        m22on;
                        m23off;
                       }
                        step_r=2;
                        goto a;
                        
                      }
                      if(step_r==2)
                      {
                        if(mm1)
                        {m10off;
                        m11off;
                        m12on;
                        m13on;}
                        if(mm2)
                        {
                        m20off;
                        m21off;
                        m22on;
                        m23on;
                        }
                        step_r=3;
                        goto a;
                      }
                      if(step_r==3)
                      {
                        if(mm1)
                        {m10on;
                        m11off;
                        m12off;
                        m13on;
                        }
                        if(mm2)
                        {
                        m20on;
                        m21off;
                        m22off;
                        m23on;
                        }
                        step_r=0;
                        goto a;
                      }
                      a:
                      }


                      خب راه هایی که به نظرم میرسه اینه که پورت مجازی رو نسبت به موتور ها فعال کنیم که چند سیکل کمتری طول خواهد کشید
                      راه بعد نوشتن کد های بالا به زبان اسمبلی هست

                      راه اول:پورت مجازی قابلیت کار برروی 4 پین اول یک پورت دارا می باشد
                      راه دوم:از دوستان کسی میتونه نسخه اسمبلی در اختیار ما بزاره که من مپ رو بدم

                      و در نهایت راه بهتری کسی سراغ داره
                      هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
                      بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
                      میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

                      تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

                      دیدگاه


                        پاسخ : نمونه کدهایی برای XMEGA

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

                        دیدگاه


                          پاسخ : نمونه کدهایی برای XMEGA

                          سلام ، پروژه ای با xmega iar دارم که بخشی از آن یک lcd گرافیکی میباشد که با یک ولوم هرزگرد (انکودر) 3 منو ( بصورت متن ) را با هر بار چرخش به چپ یا راست هر خط منو هر بار highlight میشود ضمنا display 1&2 محتوای متغییر ها را جهت تست خودم روی lcd نشان میدهند ولی نمیدانم چرا پس از چرخش ولوم منو از خط 1 به3 یا 3 به 1 پرش میکند وهیچ وقت خط 2 اجرا نمی شود چند روز است چند خط ساده وقت من را گرفته و هنوز حل نشده ضمنا یک مشکل عجیب دیگر اینکه اگر diplay 1&2 را قبل از( if(encode_new_a != encode_old_a اجرا کنم محتوای متغییر ها درست است ولی بعداز if(encode_new_a (!= encode_old_a محتوای temp1 تغییر میکند که علت آن مشخص نیست اسمبلی دستورات زیر چک کردم دستورات درست بود rstack=200 cstack=200
                          //----------------------------------------------------------

                          void check_display(void)
                          {
                          encode_new_a=TCC1_CNT;
                          temp1 = encode_old_a;
                          if(encode_new_a != encode_old_a)
                          {
                          display_1((uint8_t)encode_new_a);
                          display_2(temp1);

                          if(encode_new_a > encode_old_a)
                          {
                          if(highlight_text == 1)
                          highlight_text = 2;
                          else if (highlight_text == 2)
                          highlight_text = 3;

                          else
                          highlight_text=3;
                          }
                          else
                          {
                          if(highlight_text == 3)
                          highlight_text = 2;

                          else if(highlight_text == 2)
                          highlight_text = 1;

                          else highlight_text=1;
                          }
                          encode_old_a = encode_new_a;
                          line_1run(line_1);
                          line_2run(line_2);
                          line_3run(line_3);
                          }
                          }

                          //-----------------------------------------------------------

                          void line_1run(uint8_t line)
                          {
                          switch(line)
                          {
                          case 0:
                          line=0; break;

                          case 2:
                          line=9; break;

                          case 4:
                          line=18; break;

                          case 6:
                          line=27; break;

                          case 8:
                          line=36; break;

                          case 10:
                          line=45; break; // line=convert_encodre(0);
                          }
                          page_y_left(2,0);
                          for(uint8_t i=0;i<9;i++)
                          {
                          if(highlight_text == 1)
                          {
                          one_inv_char_send(main_text[line]);
                          }
                          else
                          {
                          one_char_send(main_text[line]);
                          }
                          line++;
                          }
                          }
                          //-----------------------------------------------------------

                          void line_2run(uint8_t line)
                          {
                          switch(line)
                          {
                          case 0:
                          line=0; break;

                          case 2:
                          line=9; break;

                          case 4:
                          line=18; break;

                          case 6:
                          line=27; break;

                          case 8:
                          line=36; break;

                          case 10:
                          line=45; break; //line=convert_encodre(2);
                          }
                          page_y_left(4,0);
                          for(uint8_t i=0;i<9;i++)
                          {
                          if(highlight_text == 2)
                          {
                          one_inv_char_send(main_text[line]);
                          }
                          else
                          {
                          one_char_send(main_text[line]);
                          }
                          line++;
                          }
                          }
                          //-----------------------------------------------------------

                          void line_3run(uint8_t line)
                          {
                          switch(line)
                          {
                          case 0:
                          line=0; break;

                          case 2:
                          line=9; break;

                          case 4:
                          line=18; break;

                          case 6:
                          line=27; break;

                          case 8:
                          line=36; break;

                          case 10:
                          line=45; break; //line=convert_encodre(4);
                          }
                          page_y_left(6,0);
                          for(uint8_t i=0;i<9;i++)
                          {
                          if(highlight_text == 3)
                          {
                          one_inv_char_send(main_text[line]);
                          }
                          else
                          {
                          one_char_send(main_text[line]);
                          }
                          line++;
                          }
                          }

                          //-----------------------------------------------------------

                          uint16_t convert_encodre(uint8_t encoder_out)
                          {
                          switch(encoder_out)
                          {
                          case 0:
                          encoder_out=0; break;

                          case 2:
                          encoder_out=9; break;

                          case 4:
                          encoder_out=18; break;

                          case 6:
                          encoder_out=27; break;

                          case 8:
                          encoder_out=36; break;

                          case 10:
                          encoder_out=45; break;
                          }
                          return encoder_out;
                          }

                          دیدگاه


                            پاسخ : نمونه کدهایی برای XMEGA

                            وقتی یک تاخیر 0.1 یا 0.05 میکروثانیه در مسیر اجرای تابع check_display قرار میدهم یا مقدار TCC1_CNT تقسیم بر 2 میکنم منوها به ترتیب از 1و2و3 و برعکس highlight میشوند (delay های کمتر بدون TCC1_CNT تقسیم بر 2 باز همان مشکل پیش می آید )؟ اصلا TCC1_CNT چرا 2 رقمی افزایش می یابد چرا تک رقمی افزایش یا کاهش نمی یابد ؟!

                            دیدگاه


                              پاسخ : نمونه کدهایی برای XMEGA

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

                              دیدگاه


                                پاسخ : نمونه کدهایی برای XMEGA

                                ولومی که استفاده کردم از همان نوعی است که در پخش خودروها بکار برده میشود و بیشتر جهت مصارف تعمیر پخش خودرو وارد میشود خروجی آن را با اسکوپ آزمایش کردم با هر پله چرخش هر دو خروجی البته با تاخیر 1 یا 0 میشوند و در همان حالت می مانند مثلا هر دو در نهایت تا حرکت بعدی 0 یا 1 می مانند . اگر با دست محور ولوم را بین 2 پله (بصورت نیم پله ) قرار دهم کانتر بصورت تک پله ای افزایش یا کاهش می یابد . ضمنا نمی دانم چرا متغییر temp1 که محتوای کانتر(که همیشه عدی زوج می باشد ) همیشه به عددی فرد با یک رقم کمتر از TCC1_CNT تبدیل می گردد ؟

                                دیدگاه

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