سلام به دوستان و اساتید گرامی
دوتا سوال داشتم در مورد تایمر.
با pic18f452-CCS-crystal=16mhz - no PLL
1- آیا راهی ( به جز استفاده از متغیر های عمومی ) برای انتقال متغیر به تابع اینتراپت هست ؟
مثلا:
2-اگر بخواهیم تایمر یه عدد غیر رند مثلا 62470 رو بشماره باید چیکار کرد؟
با حساب کتاب من باید تایمر رو اینجوری تنظیم کرد:
و بعد 3.8 برابر صبر کرد!
خوب این میشه 3 بار اینتراپت به علاوه ی 208 بار شمارش اضافی.
این شمارش اضافی رو شما بودید چه طور در میاوردید؟
مشکل اینه که با تغییر دادن مقدار تایمر تنظیمات تایمر یعنی -period-postscaler-prescaler از بین میره .
متشکر
-----------------------------
ویرایش جدید:
البته برای سوال دوم خودم چند تا راهکار به ذهنم میرسه که هیچکدوم چنگی به دل نمیزنه:
1- استفاده از setup_timer دو بار در وقفه یک بار برای تنظیم حالت شمارش 0.8 یک بار هم برای برگرداندن از اون حالت
2- استفاده از تاخیر delay که واقعا بده
3- گرفتن مقدار الان تایمر و یک جمع و تفریق برای در آوردن 0.8 و صبر کردن تا رسیدن به مقدار جدید ( یه چیزی مثل همون مورد دوم )
که بازم میگم همه روش های ابتدایی و بدی هستن
دوتا سوال داشتم در مورد تایمر.
با pic18f452-CCS-crystal=16mhz - no PLL
1- آیا راهی ( به جز استفاده از متغیر های عمومی ) برای انتقال متغیر به تابع اینتراپت هست ؟
مثلا:
کد:
#int_timer2 void timer2_ISR(float variable1 , unsigned int8 variable2)
با حساب کتاب من باید تایمر رو اینجوری تنظیم کرد:
کد:
setup_timer2(16,255,16);
خوب این میشه 3 بار اینتراپت به علاوه ی 208 بار شمارش اضافی.
این شمارش اضافی رو شما بودید چه طور در میاوردید؟
مشکل اینه که با تغییر دادن مقدار تایمر تنظیمات تایمر یعنی -period-postscaler-prescaler از بین میره .
متشکر
-----------------------------
ویرایش جدید:
البته برای سوال دوم خودم چند تا راهکار به ذهنم میرسه که هیچکدوم چنگی به دل نمیزنه:
1- استفاده از setup_timer دو بار در وقفه یک بار برای تنظیم حالت شمارش 0.8 یک بار هم برای برگرداندن از اون حالت
2- استفاده از تاخیر delay که واقعا بده
3- گرفتن مقدار الان تایمر و یک جمع و تفریق برای در آوردن 0.8 و صبر کردن تا رسیدن به مقدار جدید ( یه چیزی مثل همون مورد دوم )
که بازم میگم همه روش های ابتدایی و بدی هستن
دیدگاه