NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 4144 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 8 از 8

موضوع: مشکل با تایمر2 pic

  1. #1
    کاربر علاقه مند mahdifah آواتار ها
    تاریخ عضویت
    Aug 2009
    نام
    محمد مهدی
    نوشته ها
    99
    تشکر
    19
    تشکر شده 53 بار در 36 پست

    Icon17 تایمر2 pic

    با سلام و خسته نباشید.
    چند وقتی هست که روی تایمر 2 pic گیر کردم و هرکار میکنم که باهاش زمان دقیق درست کنم اصلا نمیشه. یعنی نمیتونم , شدنش که میشه. خیییییییلیم دقیق نمیخوام.مثلا تو 20 یا 30 ثانیه 1 ثانیه عقب یا جلو شد مشکل نداره ولی دیگه نه انقد. من دستم رو میکرو میزارم قشنگ کار میکنه ولی بر میدارم از کار میفته. البته از تایمر صفر و یک هم تو برنامه استفاده میکنم. و وقفه تایمر صفر. ولی میخوام با تایمر 2 یه زمانه دقیقی ایجاد کنم. کسی میتونه کمکم کنه؟ زبان برنامه نویسیم هم ccs هستش.
    با تشکر
    ویرایش توسط mahdifah : 03-01-2013 در ساعت 17:23

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    اینجور مشکلات معمولا به یکی از دو دلیل زیر ایجاد میشن :
    توی سخت افزار ار منبع کلاکی غیر از منبع کلاک تعیین شده در برنامه استفاده بشه :
    مثلا در برنامه فرکانس کاری برابر با 20 مگا هرتز هست ولی به میکرو کریستال 10 مگا هرتز متصل هست .
    توی تایمر ها از متغیر های مشترک استفاده شده باشه .
    مثلا یک متغیر به نام a معرفی شده باشه که هم از تایمر دو و هم از یک جای دیگه مقدار بگیره .
    اگه برنامتون رو بزارید بهتر میشه نظر داد .

  4. #3
    کاربر علاقه مند mahdifah آواتار ها
    تاریخ عضویت
    Aug 2009
    نام
    محمد مهدی
    نوشته ها
    99
    تشکر
    19
    تشکر شده 53 بار در 36 پست

    پیش فرض

    آقا دم شما گرم. حجم برنامم خیلی زیاد بودش واس همین قسمت مربوط به تایمر 2ش رو آپلود کردم.من هم کلاک درست وصل کردم و هم توی برنامم از یه متغییر مشترک استفاده نکردم. اصلا به نظر شما میشه با تایمر 2 زمان دقیق ایجاد کردش؟؟ شما خودتون امتحان کردید؟؟ و اینکه نظرتون راجبه micro c چی هستش؟؟ در مقایسه با ccs بهتر نیستش؟؟
    با تشکر
    فايل هاي پيوست شده فايل هاي پيوست شده
    ویرایش توسط mahdifah : 04-01-2013 در ساعت 00:09

  5. #4
    کاربر ارشد 1nafar آواتار ها
    تاریخ عضویت
    Jul 2007
    نوشته ها
    2,745
    تشکر
    1,266
    تشکر شده 4,874 بار در 1,377 پست

    پیش فرض

    سلام
    توی تایمر 2 زمان از رابطه ی عدد پریود*(فرکانس cpu /(مد تایمر * مقدار postscale ) ) بدست میاد ،
    کد:
    setup_timer_2 ( T2_DIV_BY_16,250,16);
    که توی برنامه شما فرکانس کاری میکرو برابر با 20 مگا هرتز هست که فرکانس cpu میشه 5 مگا هرتز ، با این حساب مقدار زمانی که تایمر میشمره میشه 128 =250*(5000000 /(16* 16 ) ) میلی ثانیه
    توی برنامه از وقفه ی تایمر 2 استفاده کردید که بهتره به شکل زیر تغییرش بدید :
    کد:
     void timer2_isr() 
     { 
      ll+=1; 
    if(ll>=100)
    {
    ll=0;
    output_toggle(led);
    } 
        }
    برنامه ظاهرا مشکلی نداره اما اگه چند تا مورد زیر رو هم رعایت کنید بهتره :
    1- در ابتدای برنامه ( بعد از معرفی کریستال ) از دستور #priority timer2 استفاده کنید .
    این دستور وقفه ها رو اولویت بندی میکنه و اگه دو تا وقفه به صورت همزمان ایجاد بشن ، ابتدا وقفه ی معرفی شده توسط دستور مذکور اجرا میشه .
    کد:
    #priority timer2
    2- دستور return; رو از زیر برنامه ی تایمر 0 حذف کنید .

  6. تشکرها از این نوشته :


  7. #5
    کاربر علاقه مند mahdifah آواتار ها
    تاریخ عضویت
    Aug 2009
    نام
    محمد مهدی
    نوشته ها
    99
    تشکر
    19
    تشکر شده 53 بار در 36 پست

    پیش فرض

    پس با این حساب نمیشه با تایمر 2 زمان دقیق درست کرد. درسته؟؟ فکر کنم مشکل از ccs باشه. نظر شما چیه؟؟ من حتی دستم نزدیک آی سی میکنم قشنگ 4یا 5 ثانیه عقب میفته!!!!!!!

  8. #6
    کاربر علاقه مند mahdifah آواتار ها
    تاریخ عضویت
    Aug 2009
    نام
    محمد مهدی
    نوشته ها
    99
    تشکر
    19
    تشکر شده 53 بار در 36 پست

    پیش فرض

    کسی میدونه توی ccs با تایمر 2 میشه زمان دقیق ایجاد کردش یا نه؟؟ انصافا یه ماهه گیرم روش!!!!!!!! کمک کنید

  9. #7
    کاربر علاقه مند mahdifah آواتار ها
    تاریخ عضویت
    Aug 2009
    نام
    محمد مهدی
    نوشته ها
    99
    تشکر
    19
    تشکر شده 53 بار در 36 پست

    پیش فرض

    آقا ما به این نتیجه رسیدیم که با تایمر صفر و دو و تایمر داخلی اصلا نمیشه زمان دقیق ایجاد کردش. مجبور شدیم کل برنامر تغییر بدیم از همون تایمر 1 استفاده کنیم. مثل ساعت کار میکنه. از کمک همگی ممنونم

  10. #8
    کاربر علاقه مند mahdifah آواتار ها
    تاریخ عضویت
    Aug 2009
    نام
    محمد مهدی
    نوشته ها
    99
    تشکر
    19
    تشکر شده 53 بار در 36 پست

    پیش فرض

    آقا ما اشتباه به نتیجه رسیده بودیم. بعد از اینکه کله برناممون پاک کردیم فهمیدیم خییییییلی راحت با تایمر 2 میشه زمان دقیق ایجاد کرد. فقط نباید به رجیستراش دست میزدم و مثل تایمر 1 تنظیمش میکردم!!!!!!
    اینم نمونه برنامه. حتی نمیخاس روشنش کنم!!!!!!!

    #include <16f873a.h>
    #device adc=8
    #use delay (clock=20mhz) //you are selecting 'crystal' with hs
    #fuses hs,nowdt,noput,nobrownout,protect
    //keep case consistent

    #define led pin_c5
    #use i2c(master,sda=pin_c4,scl=pin_c3)

    #include <2408.c>

    int8 tick;

    #int_timer2
    void timer2_isr(void) {
    if(++tick>=100) {
    tick=0;
    output_toggle(led);
    }
    }

    //-------------------------------------------------------------------
    void main(void){

    setup_timer_0 (rtcc_internal|rtcc_div_256);
    setup_timer_2 ( t2_div_by_16,250,16);
    enable_interrupts(int_timer2);
    enable_interrupts(global);
    output_high(led);
    //delay is pointless

    while(true) {

    }
    }

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •