اطلاعیه

Collapse
No announcement yet.

اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

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

    #16
    پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

    نوشته اصلی توسط jh_topgraph
    سلام
    جوابی که من دادم مربوط به اولین سوالتون بود که گفته بودید میخواهید زمان بیشتری از تایمر بگیرید.

    فرض کنید شما هر پالس تایمرتون ۱ میلی ثانیه طول میکشه. برای بدست آوردن زمان ۲۵۰ میلی ثانیه شما به ۲۵۰ شمارش نیاز دارید.
    کاری که ما میکنیم اینه که تایمر را در مودی (mode) میزاریم که هر وقت به 250 شمارش رسید تایمر صفر شود و یک وقفه هم تولید شود (مثلا در avr تایمر را در مود ctc قرار میدیم و وقفه مقایسه رو هم فعال میکنیم)

    حالا در روتین وقفه هم بصورت برنامه نویسی یک شمارنده (counter) قرار میدیم که هر وقت برنامه به روتین وقفه رفت یک واحد به اون اضافه کنه. counter++
    حالا اگر مقدار counter عدد ۴ شد یعنی ۱ ثانیه سپری شده. و باید مقدار counter دوباره صفر شه.
    کد:
    if(counter==4){
    counter=0;
    your code
    }
    شما میتونید توی روتین این وقفه هر زمانی رو که مضربی صحیح از زمان وقفه هست ایجاد کنید.
    مثلا من متغییر counter2 رو هر وقت به 40 رسید صفر میکنم تا بتونم زمان ۱۰ ثانیه رو هم بسازم.

    البته کد بهینه تر اینه که مقدار counter2 در بدنه شرط 1 ثانیه یکی اضافه بشه و زمانی که مقدار counter2 به ۱۰ رسید ۱ ثانیه سپری شده.
    خیلی ممنون ... ولی اینطوری که شما فرمودید ، من قابلیت تغییر زمانم با دقت یک میکرو ثانیه رو نخواهم داشت . مگر اینکه کاری کنم که هر یک میکرو ثانیه به وقفه بره و در اونجا یک کانتر درست کنم و مثلا هر 430 دفعه که به وقفه رفت ، یک زمان 430 میکرو ثانیه ای دارم . و تا هر عددی که دلم بخواد میتونم اینو ادامه بدم ....مثلا میتونم هر 1000000 بار که به وقفه رفت ، به زمان یک ثانیه برسم ... و اینطوری زمانم را یک میلی ثانیه ، یک میلی ثانیه کنترل کنم . عیب این روش فقط این است که هر یک میلی ثانیه باید به وقفه برود و اگر درستور های درون روتین وقفه زیاد باشد ، ممکن است توقفش در روتین وقفه زیاد شود و برنامه از حالت کارکرد صحیح خارج شود . اما اگر قرار باشد پری اسکیلرم را عوض کنم ، آن وقت دقتم پایین میاید . درسته که میتونم اونطوری هم هر زمانی را که خواستم ، هر چقدر هم طولانی باشد ، درست کنم . اما اونوقت این قدرت را نخواهم داشت که با دقت یک میکرو ثانیه زمانم را کنتزل کنم
    دلا خوبـــان دل خونیــــن پســـندند
    دلا خون شو که خوبان این پسندند
    متاع کفر و دین بیآ‌مشتری نیست
    گروهــــی آن گروهی این پســـندند

    دیدگاه


      #17
      پاسخ : اگر تعداد بیت های رجیستر تایمر برای ما کم بود چکار کنیم؟

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

      مثلا جمله بالا یعنی اینکه شما اگر بخواهید یه ساعت به این روش بسازید زمان بدون خطا هست(البته خطای پالس ساعت همچنان وجود درد) ولی زمانی که شما در مثلا سون سگمنت نشان میدهید کمی تاخیر دارد.
      Work with what you have .Never limit yourself by things you could have had

      دیدگاه

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