اطلاعیه

Collapse
No announcement yet.

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

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

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

    داشتم تو اینترنت میگشتم چشمم افتاد به چند تا سورس که با Winavr برای Xmega نوشته شده بود . مال سایت نوین تراشه بود .
    چون رایگان بود لینکشو گذاشتم:

    http://*****tarasheh.com/site/index.php/1388-05-07-10-13-36/72-xmega-.html
    A-Hosseini

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

    نوشته اصلی توسط electronet_ir
    داشتم تو اینترنت میگشتم چشمم افتاد به چند تا سورس که با Winavr برای Xmega نوشته شده بود . مال سایت نوین تراشه بود .
    چون رایگان بود لینکشو گذاشتم:
    http://*****tarashe.com/site/index.php?option=com_content&view=article& id=72:xmega-&catid=9:1388-05-07-12-35-55&Itemid=24
    این پروژه ها با کامپایلر IAR نوشته شده.

    دیدگاه


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

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

      دیدگاه


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

        برای نوشتن نرم افزار ابتدا باید آرایش سخت افزاری را بدانیم. تعداد 6 عدد 7segment و 8 عدد LED بصورت کاتد مشترک و با روش mulltiplex به یکدیگر متصل شده اند. خطوط دیتا به PORTE و کاتدها به PORTF متصل شده اند. سر راه کاتدها و هر پین PORTF یک گیت NOT قرار گرفته است. SELECT_0 مربوط به 7SEGMENT سمت راست و SELECT_5 مربوط به 7SEGMENT سمت چپ است:
        PE0 --- a
        PE1 --- b
        PE2 --- c
        PE3 --- d
        PE4 --- e
        PE5 --- f
        PE6 --- g
        PE7 --- dot point
        PF0 --- SELECT_LED
        PF1 --- SELECT_0
        PF2 --- SELECT_1
        PF3 --- SELECT_2
        PF4 --- SELECT_3
        PF5 --- SELECT_4
        PF6 --- SELECT_5


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

        دیدگاه


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

          خدمت شما:
          {خلاف قوانین - امضا ویرایش شد}

          دیدگاه


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

            برنامه 1:
            برنامه چشمک زدن LED متصل به PE0

            در این برنامه بدون استفاده مستقیم از تایمر و با استفاده از تابع delay_cycles__ تاخیر لازم برای روشن و خاموش بودن LED ایجاد شده است.تابع مذکور به میزان تعداد سیکل درخواست شده تاخیر ایجاد می کند. با توجه به اینکه کلاک داخلی XMEGA بصورت default برابر 2MHz است، پس 1000000 سیکل برابر نیم ثانیه می شود و فرکانس چشمک زدن LED مقدار بسیار اندکی کمتر از یک هرتز است( به دلیل تاخیر ناشی از سایر دستورات). برای شناخت این تابع توسط کامپایلر باید intrinsics.h در ابتدای برنامه include شود. نکته دیگر اینکه در IAR نوع میکروکنترلر از منوی Project/options انتخاب می شود و به همین دلیل در متن برنامه، اشاره ای به شماره میکروکنترلر نشده است.

            #include <ioavr.h>
            #include <intrinsics.h>

            void main( void )
            {
            PORTE_DIR = 0xFF;
            PORTF_DIR = 0X01;
            PORTF_OUT = 0X01;
            while(1)
            {
            PORTE_OUTTGL = 0X01;
            __delay_cycles(1000000);
            }
            }
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


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

              برنامه 2:
              برنامه چشمک زدن LED متصل به PE0 به زبان اسمبلی و بدون استفاده از تایمر

              در این برنامه بدون استفاده از تایمر و با استفاده از زمان اجرای دستورالعمل ها، یک تاخیر ایجاد شده و چشمک زدن LED انجام می شود. با حساب کردن مقدار اولیه رجیسترهای R19:R18:R17 بر اساس تاخیر دستورالعمل ها می توان یک زمان دقیق را ایجاد کرد. اما در این برنامه چنین مسئله ای مورد نظر نبوده و یک زمان تقریبی برای این کار کفایت می کند.

              .INCLUDE "atxmega64a3def.inc"

              .ORG 0x00
              SER R16
              STS PORTE_DIR,R16
              LDI R16,1
              STS PORTF_DIR,R16
              STS PORTF_OUT,R16
              MAIN:
              STS PORTE_OUTTGL,R16
              RCALL DELAY
              RJMP MAIN
              DELAY:
              LDI R19,6
              LOOP_1:
              SER R18
              LOOP_2:
              SER R17
              LOOP_3:
              DEC R17
              BRNE LOOP_3
              DEC R18
              BRNE LOOP_2
              DEC R19
              BRNE LOOP_1
              RET
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


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

                برنامه 3:
                برنامه چشمک زدن LED متصل به PE0 با استفاده از وقفه تایمر

                #include <ioavr.h>
                #include <intrinsics.h>

                void main()
                {
                PORTE_DIR=0XFF;
                PORTF_DIR=0X01;
                PORTF_OUT=0X01;
                TCC0_PER=15624;
                TCC0_INTCTRLA=1;
                PMIC_CTRL=0X01;
                TCC0_CTRLA=0X05;
                __enable_interrupt();
                while(1);
                }
                #pragma vector= TCC0_OVF_vect

                __interrupt void TCC0_OVF(void)
                {
                PORTE_OUTTGL=0X01;
                }

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

                دیدگاه


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

                  برنامه 4:
                  در این برنامه هر 100ms یک LED خاموش می شود و LED بعدی روشن می شود و به انتها که رسید در جهت برعکس شروع به حرکت می کند. در این برنامه از وقفه تایمر استفاده شده است.

                  #include <ioavr.h>
                  #include <intrinsics.h>
                  bool direction_f=false;
                  void main()
                  {
                  PORTE_DIR=0XFF;
                  PORTF_DIR=0X01;
                  PORTF_OUT=0X01;
                  PORTE_OUT=0X01;
                  TCC0_PER=3124;
                  TCC0_INTCTRLA=1;
                  PMIC_CTRL=0X01;
                  TCC0_CTRLA=0X05;
                  __enable_interrupt();
                  while(1);
                  }
                  #pragma vector= TCC0_OVF_vect

                  __interrupt void TCC0_OVF(void)
                  {
                  if (direction_f==false)
                  {
                  PORTE_OUT <<= 1;
                  if (PORTE_OUT==128) direction_f=true;
                  }
                  else
                  {
                  PORTE_OUT >>= 1;
                  if (PORTE_OUT==1) direction_f=false;
                  }
                  }
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


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

                    برنامه 5:
                    شدت نور LED در این برنامه به صورت نوسانی کم و زیاد می شود به این ترتیب که از حداقل نور به تدریج زیاد می شود و مجددا به آرامی کم می شود و این کار همچنان ادامه می یابد. برای انجام این پدیده از خروجی PWM استفاده شده است.

                    #include <ioavr.h>
                    #include <intrinsics.h>
                    bool dir_f=false;
                    void main()
                    {
                    PORTE_DIR=0XFF;
                    PORTF_DIR=0X01;
                    PORTF_OUT=0X01;
                    PORTE_OUT=0X01;
                    TCE1_PER=0X30;
                    TCE0_PER=0X3FF;
                    TCE0_CCA=0X00;
                    TCE1_INTCTRLA=1;
                    PMIC_CTRL=0X01;
                    TCE0_CTRLA=0X01;
                    TCE0_CTRLB=0X13;
                    TCE1_CTRLA=0X05;
                    __enable_interrupt();
                    while(1);
                    }
                    #pragma vector= TCE1_OVF_vect
                    __interrupt void TCE1_OVF(void)
                    {
                    switch (dir_f)

                    {
                    case false:
                    {
                    TCE0_CCABUF+=1;
                    if (TCE0_CCABUF==0X3ff)
                    {
                    dir_f=true;
                    }
                    break;
                    }
                    case true:
                    {
                    TCE0_CCABUF-=1;
                    if (TCE0_CCABUF==0X0)
                    {
                    dir_f=false;
                    }
                    }
                    }
                    }
                    اوژن: به معنای افکننده و شکست دهنده است
                    دانایی، توانایی است-Knowledge is POWER
                    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                    دیدگاه


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

                      برنامه 6:
                      ساعت دیجیتال که از زمان 00:00:00 شروع می شود و تا 2359 زمان را می شمارد و مجددا صفر می شود. توضیح اینکه یک وقفه یک میلی ثانیه فعال شده و هر دو عملیات Refresh کردن صفحه نمایش و زمان گیری ساعت در همین وقفه انجام می شود.

                      #include <ioavr.h>
                      #include <intrinsics.h>
                      __flash unsigned char seg_code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
                      0x7d,0x07,0x7f,0x6f};
                      unsigned char second=0;
                      unsigned char minute=0;
                      unsigned char hour=0;
                      unsigned int interrupt_counter=0;
                      unsigned char digit_select=0x02;
                      void main()
                      {
                      PORTE_DIR=0XFF;
                      PORTF_DIR=0X7E;
                      TCC0_INTCTRLA=1;
                      TCC0_PER=999; // overflow time = 1 ms
                      TCC0_CTRLA=0X02; // Prescaler = 2
                      PMIC_CTRL=0X01;
                      __enable_interrupt();
                      while(1);
                      }
                      #pragma vector= TCC0_OVF_vect
                      __interrupt void TCC0_OVF_ISR(void)
                      {
                      PORTF_OUTCLR=0X7E;

                      switch (digit_select)
                      {
                      case 0x02:
                      {
                      PORTE_OUT=seg_code[second%10];
                      break;
                      }
                      case 0x04:
                      {
                      PORTE_OUT=seg_code[second/10];
                      break;
                      }
                      case 0x08:
                      {
                      PORTE_OUT=seg_code[minute%10];
                      break;
                      }
                      case 0x10:
                      {
                      PORTE_OUT=seg_code[minute/10];
                      break;
                      }
                      case 0x20:
                      {
                      PORTE_OUT=seg_code[hour%10];
                      break;
                      }
                      case 0x40:
                      {
                      PORTE_OUT=seg_code[hour/10];
                      }
                      }
                      if(digit_select==8||digit_select==32) PORTE_OUTSET=128;
                      PORTF_OUTSET=digit_select;
                      digit_select <<= 1;
                      if(digit_select==0x80) digit_select=0x02;
                      interrupt_counter++;
                      if (interrupt_counter == 1000)
                      // 1000 * 1ms = 1 second
                      {
                      interrupt_counter=0;
                      second++;
                      if(second == 60)
                      {
                      second=0;
                      minute++;
                      if(minute == 60)
                      {
                      minute=0;
                      hour++;
                      if(hour == 24) hour=0;
                      }
                      }
                      }
                      }
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


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

                        برنامه 7: ساعت دیجیتال با BASCOM

                        توضیحات این برنامه در تاپیک مربوط به برنامه نویسی XMEGA با BASCOM 1.11.9.8 آورده شده است.

                        $regfile = "xm64a3def.dat"

                        On Tcc0_ovf Tcc0_ovf_isr

                        Dim Second As Byte
                        Dim Minute As Byte
                        Dim Hour As Byte
                        Dim Interrupt_counter As Word
                        Dim Digit_select As Byte
                        Dim I As Byte
                        Second = 0
                        Minute = 0
                        Hour = 0
                        Interrupt_counter = 0
                        Digit_select = $02

                        Config Porte = Output
                        Config Pinf.1 = 1 , Pinf.2 = 1 , Pinf.3 = 1 , Pinf.4 = 1_
                        , Pinf.5 = 1 , Pinf.6 = 1
                        ' TCC0_PER address is 0x826
                        I = Low(999)
                        Out &H826 , I
                        I = High(999)
                        Out &H827 , I
                        'Prescaler = 2
                        Tcc0_ctrla = $02

                        Config Priority = Static , Vector = Application , Lo = Enabled
                        Enable Tcc0_ovf , Lo
                        Enable Interrupts
                        Do
                        Loop

                        Tcc0_ovf_isr:
                        Portf_outclr = $7f

                        Select Case Digit_select
                        Case $02
                        I = Second Mod 10 : Porte = Lookup(i , Bcd7seg_table)
                        Case $04
                        I = Second \ 10 : Porte = Lookup(i , Bcd7seg_table)
                        Case $08
                        I = Minute Mod 10 : Porte = Lookup(i , Bcd7seg_table)
                        Case $10
                        I = Minute \ 10 : Porte = Lookup(i , Bcd7seg_table)
                        Case $20
                        I = Hour Mod 10 : Porte = Lookup(i , Bcd7seg_table)
                        Case $40
                        I = Hour \ 10 : Porte = Lookup(i , Bcd7seg_table)
                        End Select

                        If Digit_select = $08 Or Digit_select = $20 Then
                        Set Porte.7
                        End If
                        Portf = Digit_select
                        Digit_select = Digit_select * 2
                        If Digit_select = $80 Then
                        Digit_select = $2
                        End If

                        Interrupt_counter = Interrupt_counter + 1
                        If Interrupt_counter = 1000 Then
                        Interrupt_counter = 0
                        Second = Second + 1
                        If Second = 60 Then
                        Second = 0
                        Minute = Minute + 1
                        If Minute = 60 Then
                        Minute = 0
                        Hour = Hour + 1
                        If Hour = 24 Then
                        Hour = 0
                        End If
                        End If
                        End If
                        End If
                        Return

                        Bcd7seg_table:
                        Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7D , &H07 , &H7F , &H6F
                        اوژن: به معنای افکننده و شکست دهنده است
                        دانایی، توانایی است-Knowledge is POWER
                        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                        دیدگاه


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

                          پروژه ایجاد PWM برای کنترل دور موتور DC

                          این پروژه که در IAR نوشته شده برای تولید یک موج PWM روی خروجی PC5 به منظور تغییر دور یک موتور DC و یا تغییر ولتاژ متوسط تحویل شده به بارهای مشابه می باشد و یک سوئیچ نیمه هادی بین خروجی مذکور و بار مورد نظر قرار می گیرد. این پروژه شامل کتابخانه ای است که برای راه اندازی 7segment و LED و دسترسی به صفحه کلید نوشته شده و به صورت دو فایل مجزای C و h به پروژه Add شده است. با استفاده از این روش می توان در سایر کاربردها هم از همین کتابخانه نوشته شده استفاده کرد و نیاز به نوشتن روتین های مشترک در پروژه های گوناگون، مرتفع می شود. نوع تعریف متغیرها در این پروژه مطابق نام گذاری استاندارد است و از قرار دادن مقدار عددی برای رجیسترها خودداری شده است.
                          سه کلید به عنوان Up و Down و Start/Stop تعریف شده اند که در ادامه نحوه اتصال آن شرح داده می شود (نحوه اتصال 7segmentهم در پست های قبل شرح داده شده است).محتوای رجیستر PWM در محدوده 255-0 روی 3 عدد 7segment نمایش داده می شود که با فشار دادن کلید های Up و Down مقدار آن و در نتیجه Duty cycle خروجی تغییر می کند. نگه داشتن این کلید ها منجر به افزایش یا کاهش سریع رقم های نمایش داده شده می شود که این یکی از روتین های پر کاربرد در استفاده از صفحه کلید می باشد. با فشار دادن کلید Start/Stop خروجی PWM فعال می شود و یک LED هم به نشانه وضعیت فعال بودن خروجی روشن می شود. فشار دادن مجدد این کلید هم موجب قطع خروجی PWM و low شدن آن می شود. PWM مورد استفاده در مد 8 بیتی تنظیم شده است.

                          نحوه اتصال صفحه کلید:
                          Up --- PA4
                          Down --- PA3
                          Start/Stop --- PA2
                          PA5 به سر دوم هر سه کلید متصل است.

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

                          دیدگاه


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

                            به منظور تکمیل کتابخانه های مختلف XMEGA در کامپایلر IAR، اخیرا مشغول تکمیل کتابخانه ای برای LCD های کاراکتری هستم که دارای مشخصات زیر است:

                            1- پین های Data و Control مربوط به LCD می توانند روی هر پورتی باشند و رعایت ترتیب در آن مهم نیست. چنانکه هر پین Data می تواند از هر پورتی انتخاب شود.

                            2- ارتباط با LCD بصورت 4 بیتی است.

                            3- فرکانس کلاک سیستم قابل تعریف و تغییر است.

                            4- ارتباط با LCD می تواند بصورت زمانی و یا با چک کردن وضعیت Busy در LCD انجام بپذیرد(قابل انتخاب)

                            5- تعریف توابع مختلفی که ارتباط با LCD را تا حد امکان راحت تر و سریع تر کند.

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

                            دیدگاه


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

                              نمونه کد لازم برای اتصال Shaft encoder با دقت 5000ppr به XMEGA که خروجی های QPH0 و QDPH90 و QDINDX به ترتیب به PC5 و PC6 و PC7 متصل شده باشند. حرکت encoder بصورت خودکار مقدار TCC1 را تغییر می دهد و سیگنال QDINDX موجب صفر شدن خودکار آن می شود.این کد تنها به عنوان بخشی از برنامه است که مقدار دهی اولیه به Event system و تایمر و پورت را انجام می دهد و قبلا هم در AVRFreaks قرار داده شده است.

                              کد:
                              void QDECInit(void)
                               { 
                               PORTC_PIN5CTRL=PORT_ISC_LEVEL_gc; // QDPH0
                               PORTC_PIN6CTRL=PORT_ISC_LEVEL_gc; // QDPH90 
                               TCC1_PER=19999;
                               EVSYS_CH0MUX=EVSYS_CHMUX_PORTC_PIN5_gc;
                               EVSYS_CH1MUX=EVSYS_CHMUX_PORTC_PIN7_gc; 
                               EVSYS_CH0CTRL=EVSYS_QDIEN_bm|EVSYS_QDEN_bm|EVSYS_DIGFILT_2SAMPLES_gc;
                               EVSYS_CH0CTRL=EVSYS_QDEN_bm|EVSYS_DIGFILT_2SAMPLES_gc;
                               TCC1_CTRLD=TC_EVACT_QDEC_gc|TC_EVSEL_CH0_gc;
                               TCC1_CTRLA=TC_CLKSEL_DIV1_gc;
                               }
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه

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