اطلاعیه

Collapse
No announcement yet.

کار با تایمر SAM7X

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

    #61
    پاسخ : کار با تایمر SAM7X

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

    دیدگاه


      #62
      پاسخ : کار با تایمر SAM7X

      نوشته اصلی توسط gizmo89
      سلام،چطوری می تونم از دوتا وقفه مختلف که توی یه پریفرال تایمر اتفاق می افته استفاده کنم.میشه با یه تایمر دو تا کار مختلف انجام داد؟
      سلام
      بله میشه
      هر وقت وقفه ای رخ بده میتونی بفهمی که کدوم اتفاق موجب رخ دادن وقفه شده
      حالا چه جوری ؟
      اینجوری: داخل تابع وقفه باید TC Status Register رو بخونی و ببینی کدوم رخداد باعث ایجاد وقفه شده.
      برو دیتا شیت قسمت TC Status Register رو بخون متوجه میشی (صفحه 418)

      • COVFS: Counter Overflow Status
      0 = No counter overflow has occurred since the last read of the Status Register.
      1 = A counter overflow has occurred since the last read of the Status Register.
      • LOVRS: Load Overrun Status
      0 = Load overrun has not occurred since the last read of the Status Register or WAVE = 1.
      1 = RA or RB have been loaded at least twice without any read of the corresponding register since the last read of the Status
      Register, if WAVE = 0.
      • CPAS: RA Compare Status
      0 = RA Compare has not occurred since the last read of the Status Register or WAVE = 0.
      1 = RA Compare has occurred since the last read of the Status Register, if WAVE = 1.
      • CPBS: RB Compare Status
      0 = RB Compare has not occurred since the last read of the Status Register or WAVE = 0.
      1 = RB Compare has occurred since the last read of the Status Register, if WAVE = 1.
      • CPCS: RC Compare Status
      0 = RC Compare has not occurred since the last read of the Status Register.
      1 = RC Compare has occurred since the last read of the Status Register.
      • LDRAS: RA Loading Status
      0 = RA Load has not occurred since the last read of the Status Register or WAVE = 1.
      1 = RA Load has occurred since the last read of the Status Register, if WAVE = 0.
      • LDRBS: RB Loading Status
      0 = RB Load has not occurred since the last read of the Status Register or WAVE = 1.
      1 = RB Load has occurred since the last read of the Status Register, if WAVE = 0.
      • ETRGS: External Trigger Status
      0 = External trigger has not occurred since the last read of the Status Register.
      1 = External trigger has occurred since the last read of the Status Register.
      • CLKSTA: Clock Enabling Status
      0 = Clock is disabled.
      1 = Clock is enabled.
      • MTIOA: TIOA Mirror
      0 = TIOA is low. If WAVE = 0, this means that TIOA pin is low. If WAVE = 1, this means that TIOA is driven low.
      1 = TIOA is high. If WAVE = 0, this means that TIOA pin is high. If WAVE = 1, this means that TIOA is driven high.
      • MTIOB: TIOB Mirror
      0 = TIOB is low. If WAVE = 0, this means that TIOB pin is low. If WAVE = 1, this means that TIOB is driven low.
      1 = TIOB is high. If WAVE = 0, this means that TIOB pin is high. If WAVE = 1, this means that TIOB is driven high.
      زندگی یعنی امید و حرکت
      کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
      سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
      برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
      به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

      دیدگاه


        #63
        پاسخ : کار با تایمر SAM7X

        خوب باید اگه مثلا می خوام RC compare رو چک کنم بگم:
        کد:
        if(status & (1<<4) == (1<<4))
        {
        }
        ?????

        دیدگاه


          #64
          پاسخ : کار با تایمر SAM7X

          نوشته اصلی توسط gizmo89
          خوب باید اگه مثلا می خوام RC compare رو چک کنم بگم:
          کد:
          if(status & (1<<4) == (1<<4))
          {
          }
          ?????
          ببین
          بهتره که کل رجیستر رو بخونی و بعد چک کنی
          پس اول یه متغییر ایجاد کن و مقدار رجیستر رو بریز توی اون. بعدش بیا بیتاشو چک کن. من الان نمیدونم کدی که گذاشتی درسته یا نه (شاید باشه شایدم نه من نمیدونم) ولی به این روش عمل کن
          کد:
          flag = (status & 0x10);
          if(flag == 0x10)
          {
          .
          .
          .
          }
          فک کنم کدی که نوشتی هم درست باشه الان تو دانشکده هستم وقت ندارم درست چکش کنم :mrgreen:
          موفق باشی
          زندگی یعنی امید و حرکت
          کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
          سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
          برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
          به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

          دیدگاه


            #65
            پاسخ : کار با تایمر SAM7X

            دستتون درد نکنه،مال خودم رو تست کردم جواب نمی داد.با اینکه با مال شما به نظر یکی میاد.
            اگه تو مد کپچر باشم،LDRA و LDRB کی فعال میشن؟چی کار باید کنم تا فرکانس بار شدن ra و rb رو تعیین کنم؟

            دیدگاه


              #66
              پاسخ : کار با تایمر SAM7X

              نوشته اصلی توسط gizmo89
              دستتون درد نکنه،مال خودم رو تست کردم جواب نمی داد.با اینکه با مال شما به نظر یکی میاد.
              اگه تو مد کپچر باشم،LDRA و LDRB کی فعال میشن؟چی کار باید کنم تا فرکانس بار شدن ra و rb رو تعیین کنم؟
              خواهش میکنم
              کد من جواب داد؟
              والا باور کن تاحالا درگیر RA,RB نشدم ولی فک کنم وقتی از خارج کلاک میدیم به کار میاد. دقیق نمیدونم :sad:
              زندگی یعنی امید و حرکت
              کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
              سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
              برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
              به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

              دیدگاه


                #67
                پاسخ : پاسخ : کار با تایمر SAM7X

                نوشته اصلی توسط علی ایمانی فر
                خواهش میکنم
                کد من جواب داد؟
                والا باور کن تاحالا درگیر RA,RB نشدم ولی فک کنم وقتی از خارج کلاک میدیم به کار میاد. دقیق نمیدونم :sad:
                بله جواب داد.مرسی!!ra انگار همیشه باید کوچکتر از rc باشه.درسته؟
                می خوام دو تا وقفه با فرکانسهای وقوع برابر داشته باشم، ی جوری که همزمان دوتا موتور رو بتونم حرکت بدم.یعنی یکی از وقفه ها باعث بشه چهار تا از i/o ها تغییر کنن و اونیکی چهار تا دیگرو تغییر بده.وقتی هم که همزمان وقفه های تایمر اومد هشت تایی باهم استپ بدن به موتور ها،الگوریتم حرکتش اوکی شده.فقط گیر این وقفه هام.
                به نظرتون چطورایجاد کنمشون؟الان مد wave رو هم امتحان کردم ولی ra گیجم کرده .نمی دونم عملکردش چطوریه.

                دیدگاه


                  #68
                  پاسخ : پاسخ : کار با تایمر SAM7X

                  نوشته اصلی توسط gizmo89
                  بله جواب داد.مرسی!!ra انگار همیشه باید کوچکتر از rc باشه.درسته؟
                  می خوام دو تا وقفه با فرکانسهای وقوع برابر داشته باشم، ی جوری که همزمان دوتا موتور رو بتونم حرکت بدم.یعنی یکی از وقفه ها باعث بشه چهار تا از i/o ها تغییر کنن و اونیکی چهار تا دیگرو تغییر بده.وقتی هم که همزمان وقفه های تایمر اومد هشت تایی باهم استپ بدن به موتور ها،الگوریتم حرکتش اوکی شده.فقط گیر این وقفه هام.
                  به نظرتون چطورایجاد کنمشون؟الان مد wave رو هم امتحان کردم ولی ra گیجم کرده .نمی دونم عملکردش چطوریه.
                  ببین منظورتو درست نمیفهمم.
                  شما میخای دوتا موتور رو کنترل کنی و کنترلشون هم باید توی وقفه صورت بگیره حالا مشکل چیه؟
                  شما یه وقفه تعریف کن همشو یجا کنترل کن دیگه. فرکانسشون هم که یکیه
                  تازه هرجا هم خاستی توی وقفه از if استفاده کن نت همه ی دستورات با هم اجرا نشه
                  من دقیقا نمیفهمممشکل چیه :sad:
                  زندگی یعنی امید و حرکت
                  کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                  سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                  برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                  به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                  دیدگاه


                    #69
                    پاسخ : پاسخ : پاسخ : کار با تایمر SAM7X

                    نوشته اصلی توسط علی ایمانی فر
                    ببین منظورتو درست نمیفهمم.
                    شما میخای دوتا موتور رو کنترل کنی و کنترلشون هم باید توی وقفه صورت بگیره حالا مشکل چیه؟
                    شما یه وقفه تعریف کن همشو یجا کنترل کن دیگه. فرکانسشون هم که یکیه
                    تازه هرجا هم خاستی توی وقفه از if استفاده کن نت همه ی دستورات با هم اجرا نشه
                    من دقیقا نمیفهمممشکل چیه :sad:
                    قرار نیست هر دو همزمان شروع به حرکت کنن.و گاهی ممکنه یکی از موتورها وسط حرکت اونیکی شروع به حرکت کنه.بنابراین فرکانس تاخیر استپهای هردوشون یکسان نیست.(سرعت حرکت منظورمه)!!من یکم راجع به tc تو حالت wave خوندم دیشب.تو حالت wave میتونه دوتا خروجی داشته باشه.پس من اگه فرکانس وقفه مقایسه ra و rb رو تغییر بدم فکر کنم درست باشه.شما مثالی در رابطه با گرفتن دوتا خروجی از tc ندارین؟rc در این حالت چه نقشی داره و چطور باید تنظیم بشه؟

                    دیدگاه


                      #70
                      پاسخ : پاسخ : پاسخ : کار با تایمر SAM7X

                      نوشته اصلی توسط gizmo89
                      قرار نیست هر دو همزمان شروع به حرکت کنن.و گاهی ممکنه یکی از موتورها وسط حرکت اونیکی شروع به حرکت کنه.بنابراین فرکانس تاخیر استپهای هردوشون یکسان نیست.(سرعت حرکت منظورمه)!!من یکم راجع به tc تو حالت wave خوندم دیشب.تو حالت wave میتونه دوتا خروجی داشته باشه.پس من اگه فرکانس وقفه مقایسه ra و rb رو تغییر بدم فکر کنم درست باشه.شما مثالی در رابطه با گرفتن دوتا خروجی از tc ندارین؟rc در این حالت چه نقشی داره و چطور باید تنظیم بشه؟
                      راستش من تاحالا با مد Wave کار نکردم :sad:
                      شما میتونی چندتا متغییر تعریف کنی و وقتی وارد وقفه شدی با دستکاری متغییرات زمان لازم رو اندازه بگیری
                      زندگی یعنی امید و حرکت
                      کارهایتان را آغاز کنید، توانایی انجام دادنش را بدست خواهید آورد
                      سوالاتی که در انجمن قابل طرح شدن هستند در پیام خصوصی جواب داده نمی شود.
                      برای تشکر از دکمه تشکر کنار هر پست استفاده کنید، پست هایی که فقط حاوی تشکر هستند پاک می شوند.
                      به دلیل کار بر روی پایاننامه و دفاع، مدتی نیستم!

                      دیدگاه

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