صفحه 2 از 3 نخستنخست 123 آخرینآخرین
نمایش نتایج: از 11 به 20 از 23
Like Tree4 لایک

موضوع: استفاده از تایمر

  1. #11
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    نقل قول نوشته اصلی توسط magmagmary نمایش پست ها
    به کدتون دقت کنید:
    شما فقط توی تابع ستاپ زمانی که key صفره دارید attachInterrupt رو صدا می زنید.
    در صورتی که میخواید روی تمام پینهایی که صدا زدید اینتراپت داشته باشید باید تابع attachInterrupt رو هر بار که میرید تو if صدا بزنیدو بهش مقدار بدید.

    آیا هدفتون اینه که روی تمام پینها اینتراپت داشته باشید یا فقط پین 2

    اما سوال دومم ببینید من میخوام روی یکی از کلیدها طی برقراری یک شرط اینتراپت داشته باشم برنامه دقیق اینه که با انتخاب یک کلید زمان شروع به شمارش کنه و با فشردن دوباره همون کلید زمان شمرده شده که به میکروثانیه هستش به نمایش دراد

  2. #12
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    220
    اینو همین الان نوشتم تست کن ببین به کارت میاد
    unsigned long timer;
    boolean count = false;
    boolean show = false;

    void setup() {
    pinMode(A0,INPUT);
    Serial.begin(115200);
    }

    void loop() {
    if (count == true){
    if(digitalRead(A0) == 1){count = false;show = false;delay(1000);timer = millis();}
    }
    if (count == false){
    if(digitalRead(A0) == 1){count = true;show = true;delay(1000);timer = millis();}
    }
    if (show == true){
    Serial.println(millis() - timer);
    delay(1);
    }
    }
    کد ها هم کمتر می شن هم بهینه می شن

  3. #13
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    میتونی اینو بدون اینتراپت هم بنویسیا

    کافیه یه flag تعریف کنی به ازای فشار دادن اول flag بشه 1
    به ازای فشار دادن دوم flag بشه 0 دوباره

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

  4. #14
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط solxsado نمایش پست ها
    اینو همین الان نوشتم تست کن ببین به کارت میاد

    کد ها هم کمتر می شن هم بهینه می شن
    کد رو تست نکردم ولی چون میکروثانیه میخواد به جای millis بایدmicros استفاده کنه
    https://www.arduino.cc/en/Reference/Micros

  5. #15
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    ممنون من کدتون یکم تغییر دادم شد کد زیر یکم ایراد داره اگه چکش کنید ممنون میشم در ضمن من از پول داون استقاده کردن بخاطر همین شرط برابری رو low قرار دادم ایرادش اینه که کلیدها رو چن بار میشمره و فاصله زمانی برابر 20 میکرو ثانیه ثبت میشه اونم چن بار باوجود اینکه من یه حلقه whileگذاشتم که کلید تغییر حالت داد بره خط بعدی و قاصله دوبار کلیذ زدن من قطعاا بیشتر از 20 میکرو ثانیه هستش




    unsigned long timer=0;
    boolean count = true;
    boolean show = true;




    void setup() {
    pinMode(16,INPUT);
    Serial.begin(9600);

    }

    void loop() {

    if (count ==false){
    if(digitalRead(16)==LOW){
    while(digitalRead(16)==HIGH);show = false;
    }
    }
    if (count == true){
    if( digitalRead(16) == LOW){timer = micros(); while(digitalRead(16)==HIGH);count = false;
    }
    }
    if (show == false){
    Serial.println(micros() - timer);
    show=true;count = true;
    delay(50);
    }
    }
    ویرایش توسط ANOOSHEH : 07-16-2016 در ساعت 10:36 AM

  6. #16
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    و تجربه ثابت کرده اینکه milisو micros را مدام از مقدار اولیه اش کم کنیم مدام خطا میده و اعداد پرت در ضمن این دوتا دستور مدام در طول برنامه در حال شمردن هستند در صورتی که من فقط در یک زیر بذنامه میخام زمان شروغ به شمارش و و stop
    شود این خودش در برنامه اختلال ایجاد میکنه در ضمن هر حدود 70 دقیقه مقدار انها صفر میشه و اگه این پایان 70 دقیقه دقیقا بیفته وسط برنامه من مشکل ایجاد میکنه من توی برنامه code vision این برنامه رو با اینتراپت نوشتم و فقط کدهای اون رو با اردوینو میخام معادل این کدها

    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm

    و بعد هر جا خواستم تایمر راه بیفته
    #asm("sei")
    و هر جا تایمر از کار بیفته

    #asm("cli")

    با یه سری مخلفات دیگه که ازش صرفنظر کردم

    ممنون میشم یکم راجع به کتابخونه stopwatch و نحوه درس کردن و کار کردنش توضیح بدید ببینید برنامه من طولانیه من توضیح مختصری راجع بهش دادم که کد اصلی و طریقه نوشتنش دستم بیاد
    دقت اندازه گیری در برنامه برای من مهمه و قک میکنم حلقه های تو در تو if دقت برنامه رو پایین میاره (*برنامه اینه که بعد از برقراری یه سری شرط که خودش چنتا if هستش زمان شروع به شمارش کنه و بعد از فشرده شده یه کلید خاص که اونم بستگی به شروط داره و خودش چنتا if داره شمارش زمان متوقف میشه ینی من زمان بین برقراری شروط و فشرده شده یک کلید متناسب با اون رو میخوام )*اینکه بخوام زمان رو هم با if و کم کردنش از زمان اولیه بدست بیارم تجربه ثابت کرده اعداد اونجوری که باید نیست
    ویرایش توسط ANOOSHEH : 07-16-2016 در ساعت 11:55 AM

  7. #17
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    220
    به خاطر اینه که تاخیر های 1 ثانیه ایی رو حذف کردی

  8. #18
    Senior Member
    تاریخ عضویت
    Dec 2013
    محل سکونت
    ایران - شیراز
    نوشته ها
    220
    سرعت پردازش بخاطر چند if پایین نمیاد.
    اینکه خودتو جای پردازنده بزاری و بگی آخی داره کم میاره کاملا اشتباه است. سرعت همین پردازنده ۱۶ مگاهرتزی انقدر زیاد هست که نتونی درکش کنی. ۱۶ مگاهرتز یعنی ۱۶ میلیون بار در هر ثانیه.
    میلی ثانیه یعنی ۱۰۰۰ بار در ثانیه.
    یعنی شما تقریبا می تونی ۱۰۰۰ دستور if رو در کسری از ثانیه پردازش کنی.
    اگر خودت رو جای پردازنده بزاری نمی تونی برنامه نویسی کنی
    لایک کردن

  9. #19
    مدیر گروه
    تاریخ عضویت
    Nov 2013
    محل سکونت
    ایران
    نوشته ها
    4,064
    نقل قول نوشته اصلی توسط solxsado نمایش پست ها
    سرعت پردازش بخاطر چند if پایین نمیاد.
    اینکه خودتو جای پردازنده بزاری و بگی آخی داره کم میاره کاملا اشتباه است. سرعت همین پردازنده ۱۶ مگاهرتزی انقدر زیاد هست که نتونی درکش کنی. ۱۶ مگاهرتز یعنی ۱۶ میلیون بار در هر ثانیه.
    میلی ثانیه یعنی ۱۰۰۰ بار در ثانیه.
    یعنی شما تقریبا می تونی ۱۰۰۰ دستور if رو در کسری از ثانیه پردازش کنی.
    اگر خودت رو جای پردازنده بزاری نمی تونی برنامه نویسی کنی

    توصیف جالبی بود اقای امیر

  10. #20
    Member
    تاریخ عضویت
    May 2016
    نوشته ها
    86
    ینی میخاید بگید دستوری معادل انچه در codevision هست تو واردوینو وجود نداره من دلم میخاد با امکانات اردوینو اشنا شم علاوه بر اینکه کارم راه بیفته علاوه بر این اون ایراد 70 دقیقه رو چیکار کنم ؟

صفحه 2 از 3 نخستنخست 123 آخرینآخرین

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

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

SEO by vBSEO