تو دیتاشیت خوشکل نوشته ! آروین :
timer 2 period register
و در قسمت وقفه داریم :
TMR2IE: TMR2 to PR2 Match Interrupt Enable bit
1 = Enables the TMR2 to PR2 match interrupt
0 = Disables the TMR2 to PR2 match interrupt
TMR2IF: TMR2 to PR2 Match Interrupt Flag bit
1 = TMR2 to PR2 match occurred (must be cleared in software)
0 = No TMR2 to PR2 match occurred
__________________________
The Timer2 module has an 8-bit period register PR2.
Timer2 increments from 00h until it matches PR2 and
then resets to 00h on the next increment cycle. PR2 is
a readable and writable register. The PR2 register is initialized
to FFh upon reset.
کافیه ؟
if all men are the same
then
why do women take so long to choose one ?
معمولا این سبک مشکلات انگشتی و دقیق نشدن تایمر ها از تنظیم اشتباه وقفه ها و یا اشتباه تنظیم شدن اینتراپت ها هستش . از اول بنویس . چک نکن . دوباره وقفه ها رو بنویس و داخل برنامه ی وقفه پرش نزار و فقط یک عدد رو اضافه کن . اگه چندتا وقفه باهم داشته باشی ، باید خیلی دقیق شرط ها رو تنظیم کنی . if ها رو چک کن . همش توی دیتاشیت هستش .
حالا برنامه . برای تایمر 2 و کریستال و کلاک 20 مگ ( pll نداری ) تنظیم تایمر 2 میشه :
void Interrupt(){
if (TMR2IF_bit){
TMR2IF_bit = 0;
//Enter your code here
}
}
زمان هر وقفه
//Prescaler 1:16; Postscaler 1:16; TMR2 Preload = 254; Actual Interrupt Time : 13.008 ms
که حداکثر هستش . حالا دیگه زمان مورد نیازت رو یه رجیستر دیگه بزار که بشمره ( داخل برنامه ی اصلیت نه تو وقفه تو وقفه فقط اضافه بشه بهش ) . یادت نره وقتی که تایم مورد نظرت رو ساخت ، حتما رجیسترها ی مرتبط رو صفر کنی .
با تشکر از شما. میخواستم ببینم باید وقفه اینتراپت هم بزارم تا دقیق بشه حتما؟؟ من نزاشتم وقفه اینتراپت.فقط وقفه تایمر 2 رو گذاشتم و اونجا به متغییر جهانیم یه عدد اضافه میکنم......
از وقفه تایمر صفر هم استفاده کردم به همین صورت.اونم دقیق نیستش ولی زیاد مهم نیس برام دقیق باشه. میشه بیشتر راهنمایی کنید.مرسی
با تقریب خوبی میتونی تایمر بسازی ثانیه 0.01300 میشه دقتش! ولی مشکل شما چیز دیگه ایه
آقا دمت گرم که همراهی میکنی مار. به نظر شما توی سخت افزار چیز خاسی نمیخادش تایمر 2؟؟ راحت با تایمر داخلی یک میشه زمان دقیق به دست آوردش. ولی تایمر 2 یه بار تو ده ثانیه 20 تا مشماره,یه بار 30 تا. اصلا دقیق نیستش!!!!!!
آقا دمت گرم که همراهی میکنی مار. به نظر شما توی سخت افزار چیز خاسی نمیخادش تایمر 2؟؟ راحت با تایمر داخلی یک میشه زمان دقیق به دست آوردش. ولی تایمر 2 یه بار تو ده ثانیه 20 تا مشماره,یه بار 30 تا. اصلا دقیق نیستش!!!!!!
والا دقیق بودنش رو مظمعن هستم ولی نه در جد ساعت اتمی! چیزی که شما دارین خیلی شبیه WDT هستش ولی من خیلی مطمعن نیستم
آخه میگی رندوم عدد میده که یه بار وقتی WDT فعال بود منم به همین معضل گرفتار شده بودم
نه من با Mikrobasic کار میکنم
شما توی mikrobasic از تایمر 2 جواب دقیق گرفتید؟ من فیوز بیتام مثل زیر تنظیم کردم. wdt هم غیر فعاله.کاش فعال بودش الان غیر فعالش میکردم درست میشد
#fuses hs,NOWDT,BROWNOUT,PROTECT
شما توی mikrobasic از تایمر 2 جواب دقیق گرفتید؟ من فیوز بیتام مثل زیر تنظیم کردم. wdt هم غیر فعاله.کاش فعال بودش الان غیر فعالش میکردم درست میشد
#fuses hs,NOWDT,BROWNOUT,PROTECT
آره من از همه تایمر ها جواب دقیق گرفتم
BROWNOUT رو هم خاموش کن ببین شاید فرجی شد
Mikroc بسیار بهتر از ccs هستش . شما که پول نمیخواد بدی !!! ولی یادت باشه که ccs خیلی استاندارد انسی نیست . ولی Mikroc بسیار استاندارده و دقیقه . کار کنی متوجه میشید . بگذریم .
اولاندش یه سوال ! یعنی چی این جملتون " میخواستم ببینم باید وقفه اینتراپت هم بزارم تا دقیق بشه حتما؟؟ من نزاشتم وقفه اینتراپت " !! پس چجوری با تایمر ها کار میکنین ؟ اصلا پس چرا تایمر چندتا میزارن ؟ با روش شما که 4 تا nop بزاری تو یه حلقه ، نیازی به تایمر هم نداری ! تایمر رو وقتی میخوای برای زمان سنجی استفاده بکنی ، باید وقفه رو بزاری . بعدش من که برنامه رو گذاشتم ! شما همون رو توی پروتئوس شبیه سازی بکن و ببین . بعد دیتاشیت رو باید با دقت مطالعه کنید . دوباره میگم :
تنظیمات تایمر 2 همین هستش که توی حلقه ی اصلی همون اول قرار میگیره . و آخرش هم اینتراپت رو روشن میکنه .
T2CON = 0x7E;
PR2 = 254;
TMR2IE_bit = 1;
INTCON = 0xC0;
و اینم مال برنامه ی وقفه هستش . اصلا با وقفه کار کردین ؟ اگه نه به help کامپایلرتون مراجعه کنید .
void Interrupt(){
if (TMR2IF_bit){
TMR2IF_bit = 0;
اینجا کد وقفه رو میزاری . مثلا رجیسترت رو یکی اضاف میکنی .
}
اگه کامپایلرت دستور TMR2IE_bit = 1; رو شناسایی نکرد ، PIE1 برابر 2 بکن . همین .
تمام . حالا تو برنامت هر وقت به عدد مورد نظر رسیدی ، رجیسترت رو صفر کنی تا دوباره بشمره .
من بنا به دلایلی خیلی علاقه به چرخیدن بیش از نیاز ندارم . برای همین دیر به دیر ممکنه بیام . نیازی به پیغام شخصی نیست . معمولا بعضیا خوش ندارن جوابام رو بخونن !
موفق باشید .
if all men are the same
then
why do women take so long to choose one ?
در ضمن یک نکته ی حیاتی : سعی کن هرگز با تایمر 0 کار نکنی . چون 99% مواقع ، خوده کامپایلر باهش کار میکنه برای تنظیمات زمانها . مثلا پورت های سریال و ... . بعد بعضی سخت افرارهای داخلی هم با سایر تایمرها کار میکنن که باید به دیتاشیت رجوع کنید .
if all men are the same
then
why do women take so long to choose one ?
دیدگاه