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

موضوع: تاخیر در تغییر حالت میکرو

  1. #1
    عضو جدید
    تاریخ عضویت
    Sep 2013
    نام
    محسن علیرضایی
    نوشته ها
    7
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض تاخیر در تغییر حالت میکرو

    سلام به همگی
    من به کمک میکرو tiny13 دارم یک چشمک زن چند کانال می سازم که حالت چشمک زدنش به کمک یک شاسی تغییر می کنه و از وقفه برای این کار کمک گرفتم. حالا مشکلم اینه که بعد از اینکه شاسی رو فشار میدم حالت جدید بلافاصله نمیاد و باید حالت قبلی تموم بشه حتی اگه 10 ثانیه طول بکشه. می خواستم ببینم چه طور میشه بلافاصله حالت جدید با فشار دادن شاسی بیاد.
    تعداد حالات 8 تاست و فایل text برنامه رو هم ضمیمه کردم .ممنونم.
    فايل هاي پيوست شده فايل هاي پيوست شده

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

  3. #2
    عضو جدید
    تاریخ عضویت
    Sep 2013
    نام
    محسن علیرضایی
    نوشته ها
    7
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

    خدا خیرتون بده جواب ما رو بدید منتظریم.

  4. #3
    کاربر فعال processor آواتار ها
    تاریخ عضویت
    May 2010
    نام
    محمد صداقتی
    نوشته ها
    171
    تشکر
    124
    تشکر شده 262 بار در 120 پست

    پیش فرض

    سلام
    برنامه شما مشکل داره وباید تغییرش بدید

    میتونید تاخیرهات رو کم کنی و داخل حلقه قرار بدی
    کد:
           if(a==160)
           {
    
        for (i =0;i<100; i++)
        {
          PORTB.3=1;
          PORTB.4=0;
          delay_ms(5);
    
    ...    }

    ادامه رو همین طور بنویس

  5. #4
    عضو جدید
    تاریخ عضویت
    Sep 2013
    نام
    محسن علیرضایی
    نوشته ها
    7
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام
    اولا ممنونم بابت جواب ولی با گذاشتن توی حلقه فقط حجم برنامه کمتر شد و مشکل قبلی هنوزم هست. فکر کنم مشکل از اونجاست که باید صبر کنیم if قبلی تموم بشه تا بعد دستورات زیر if جدید اجرا بشه. حالا من میخوام بلافاصله با فشار شاسی اجرای دستورات if قبلی متوقف بشه و if جدید شروع بشه. الان چیکار باید بکنم؟

  6. #5
    کاربر فعال Hesam1984 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مهره مار
    نوشته ها
    315
    تشکر
    45
    تشکر شده 108 بار در 77 پست

    پیش فرض

    خوب درسته وقفه فقط اجرا رو می بره به روتین وقفه و بعد برمی گرده به جایی که بوده. اگر همچین هدفی دارین شما باید برای این کارها تابع بنویسید و نوع عملکرد رو در روتین وقفه تون عوض کنید.
    در ضمن من فکر می کنم اینکار با دستور Delay نمی شه و این مشکل پا برجاست مگر با تایمر بنویسید و اول روتین وقفه تایمر رو ریست کنید و بهش مقادیر جدید بدین تا الگوی جدید رو بیاره. برای هر الگو هم می تونین فانکشن بنویسید و یک شمارنده در روتین وقفه که با فشردن شستی اضافه بشه و فانکشن مربوطه رو اجرا کنه تا اونم به تایمر مقدار بده و شروع به کار کنه، 1و2و3 و الی آخر

  7. #6
    عضو جدید
    تاریخ عضویت
    Sep 2013
    نام
    محسن علیرضایی
    نوشته ها
    7
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

    سلام منظورتون اینه که هر کدوم از حالات رو در قالب یک تابع تعریف کنم و بعد در زیر برنامه وقفه اونا رو با هر وقوع وقفه فراخوانی کنم. اگه میشه یه کم بیشتر توضیح بدید

  8. #7
    کاربر فعال Hesam1984 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مهره مار
    نوشته ها
    315
    تشکر
    45
    تشکر شده 108 بار در 77 پست

    پیش فرض

    بخش اول آره. این رو در نظر بگیر.
    تایمر زمانش محدوده اونم می تونی ار روتین تیک اش استفاده کنی که یک شمارنده رو زیاد کنه تا زمانهای نیم ثانیه و یک ثانیه رو بدست بیاری. در واقع شما یک بار تایمر رو مقدار می دین، مثلا 100 میلی ثانیه که تیک بزنه و بعدش با اون شمارنده بازی می کنی.
    اول روتین وقفه ات برای کلید هم تایمر رو ریست و خاموش می کنی تا ادامه نده. شما در واقع میایین برای هر پورت برنامه در نظر میگیرن که مقادیر شما عملکرد اون رو تغییر میده. حالا ممکنه دو پورت عین هم باشن.

    شما اول این رو برای دو led بنویس بعد بسط بده.

    راه دیگه به نظرم رسید می گم.

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


  10. #8
    کاربر فعال Hesam1984 آواتار ها
    تاریخ عضویت
    Sep 2007
    نام
    مهره مار
    نوشته ها
    315
    تشکر
    45
    تشکر شده 108 بار در 77 پست

    پیش فرض

    شما باید برای هر حالت الگو در نظر بگیرین که نشون می ده هر پورتی چقدر قراره تاخیر داشته باشه. شمارنده به مقدار هر پورت رسید وضعیتش عوض بشه تا آخری. اصلا برای راحتی کار بیا شمارنده ها رو به تعداد پورتهایی که داری در نظر بگیر، برای هر پورت یکی. این راه آسونه راحت با یک تایمر و دستور if یا select case بنویس

  11. #9
    عضو جدید
    تاریخ عضویت
    Sep 2013
    نام
    محسن علیرضایی
    نوشته ها
    7
    تشکر
    1
    تشکر شده 0 بار در 0 پست

    پیش فرض

    آقا ممنون از راهنمایی شما . من به کمک تایمر صفر برنامه رو باز نویسی کردم و مشکل با صفر کردن تایمر در روتین وقفه حل شد.ضمنا به کمک امکان تقسیم فرکانسی tiny13 تونستم مستقیما فرکانسای کم مثلا 2و8و16و... رو برای کلاک تایمر به دست بیارم تا نیاز نباشه با کانتر فرکانسو کم کنم.

موضوعات مشابه

  1. تغییر فرکانس برق شهر
    توسط jik در انجمن الكترونيك قدرت
    پاسخ: 11
    آخرين نوشته: 06-11-2013, 16:18
  2. مشکل با تغییر فرکانس واحد pll در برنامه tft lcd
    توسط iman7107 در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 7
    آخرين نوشته: 27-06-2013, 23:11
  3. تغییر فرکانس میکرو
    توسط abbasalifix در انجمن AT91 series (ATMEL)
    پاسخ: 7
    آخرين نوشته: 30-11-2012, 00:47
  4. مشکل در تغییر کانال adc
    توسط m.safavy در انجمن AVR
    پاسخ: 3
    آخرين نوشته: 23-05-2012, 16:01
  5. تغییر دلخواه پایه های lcd در ccs
    توسط MEYSAMHL در انجمن PIC
    پاسخ: 7
    آخرين نوشته: 13-09-2011, 01:09

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

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