اطلاعیه

Collapse
No announcement yet.

نیاز به یک تابع در مورد شمارش سیگنال

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    نیاز به یک تابع در مورد شمارش سیگنال

    با سلام
    من یک موتور دارم ک یک صفحه دندانه دار به محو این موتور متصله و به ازای هر میزان دوران شافت موتور ، سنسور نصب شده روی این صفحه دنداده دار ، یک پالس ایجاد میکنه (شبیه انکودر)
    یک کد میخوام که با میکرو کنترلر بتونم این پالسها رو دریافت کنه و از یک نقطه خاص ، دقیق شروع به شمارش این پالسها کنه
    روی چرخ 360 دندانه وجود داره ک دو تا شو حذف شده و جاش یک سطح صافه که نقطه مرجع شمارش پالس همین نقطه هست ک سنسور وقتی به این نقطه میرسه یک پالس خاص و ثابت ایجاد میکنه

    تصویر پیوست شده واضحتر بیان کرده
    حالا چه کدی بنویسم که میکرو به محض اینکه پالس خاص نقطه A رو دریافت کرد شروع کنه به شمارش پالس های بعد از این نقطه؟

    یک نکته هم داره و اون اینکه هرچی دور موتور بیشتر میشه فرکانس موج های حاصل از دندانه ها هم بیشتر میشه و ارتفاع موج ها از ارتفاع موج حاصل از نقطه A هم بیشتر میشه اما شکل و نوع سیگنال نقطه A در هیچ صورتی تغییر نمیکنه و ثابتهhttp://8pic.ir/images/otvtxru0aje302hyhzmq.gif

    #2
    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

    سلام

    با میکروها چقدر آشنایی دارید ؟

    کار شما با وقفه پین RB0 و وقفه یه تایمر و چند محاسبه ساده قابل اجراست.
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

    دیدگاه


      #3
      پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

      سلام ممنونم ک پاسخ دادین اینجا ک هیچکس جواب نمیده
      متاسفانه دقیقا همین بخش وقفه ها و تایمر کانتر میکرو رو بلد نیستم زیاد

      میشه توضیح بدین یا با شماتیک یا متن برنامه
      تا الان خیلی سرچ کردم و یک فایل اموزش کار با وقفه های AVR هم خوندم ولی چیزی نفهمیدم.بیشتر این بود ک تایمر میشماره و سر ریز ک شد پرش میکنه یا مثلا با دو عدد اگر برابر شد پرش میکنه به لیبل ما یا کانتر تا تعداد موج رو میشماره و در صورت سرریز شدن یا برابر شدن با عدد خاصی پرش میکنه ولی اینا که من خوندم جواب منو نمیده چون میکرو باید از یک نقطه خاص یعنی همون A بتونه بشماره و در دور های بالا و پایین موتور ک فرکانس موج بقیه دندانه ها زیاد و کم میشه ، هنگ نکنه

      دیدگاه


        #4
        پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

        وقتی وقفه پین RB0 رو فعال کنید , با هر بار یک شدن سیگنالتون , یعنی دیدن یک دندانه , جریان برنامه به یه تابع که شما نوشتید هدایت میشه , داخل تابع یک متغیر رو یک پله افزایش میدین تا تعداد دندانه ها دستتون باشه , همچنین داخل این تابع باید یه تایمر رو فعال کنید تا زمان وقفه خوردن بین دو دندانه به دست بیاد , اینجوری هم سرعت موتور مشخص میشه هم اگر زمان بین دو وقفه بیش از 50 یا 70 درصد شد یعنی به نقطه A رسیدیم , کل سیستم میتونه با وقفه کار کنه , بدون هنگ ! یا اشتباه

        اگر زمان برای انجام پروژه دارید , بهانه خوبیه برای یادگیری میکروها , فقط دقت کنید که اینجا فرم PIC هست و میکروهای PIC اموزش های فارسی کمی دارند.

        تصمیم با شماست , آموزش های داخل سایت برای شروع خوب هستند , فقط ابتدا تحقیق کنید

        موفق باشید
        نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
        تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

        دیدگاه


          #5
          پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

          اینطوری واقعا نگاه نکرده بودم به موضوع
          وقتم زیاده ولی من فقط با AVR کارکردم و پروگرمر دارم و با PICکار نکردم و حتی کامپایلرشم نمیدونم چیه
          با ای وی ار نمیشه؟

          خب یک سوال پس ما انگار با بدست اوردن وقفه زمانی نقطه A ک بیشتر از سایر نقاطه اون نقطه رو شناسایی میکنیم؟
          خب اگ دور موتور کم بشه چطور؟

          دیدگاه


            #6
            پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

            خب یک سوال پس ما انگار با بدست اوردن وقفه زمانی نقطه A ک بیشتر از سایر نقاطه اون نقطه رو شناسایی میکنیم؟
            خب اگ دور موتور کم بشه چطور؟
            بله به خاطر همین از درصد صحبت کردم , که با کم یا زیاد شدن سرعت موتور اتفاقی نیفته , شما همیشه میانگین زمان بین دو دندانه رو حساب میکنید و چنانچه افزایش یا کاهش زمان بیش از 70 درصد بود ( برای مثال ) یعنی به نقطه A رسیدیم

            وقتم زیاده ولی من فقط با AVR کارکردم و پروگرمر دارم و با PICکار نکردم و حتی کامپایلرشم نمیدونم چیه
            با ای وی ار نمیشه؟
            چرا با AVR نشه! , آموزش های زیادی هم براش پیدا میکنید و دوستان زیادی تو قسمت AVR هستن که میتونن کمکتون کنن
            نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
            تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

            دیدگاه


              #7
              پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

              والا دوستان دیگه گویا بحثای مهمتر رو پاسخ میدن

              خب پس با ای وی ار میشه من یکم بلدم میشه راهنمایی کنید
              پس من یک برنامه مینویسم ک ابتدا دندانه هارو بشماره و هر دندانه رو ک فهمید بلافاصله پرش کنه به لیبل یک و اونجا یک واحد به متغیری اضافه کنه
              بعد یک تایمر در همون لیبل شروع به شمارش کنه و تا باز دوباره پرش به اون لیبل صورت گرفت شمارش تایمر متوقف بشه و عدد رو بریزه تو یک متغیر دیگه
              تا اینجا درسته؟
              خب این عدد فاصله زمانی بین دو دندانه را نشون میده ک در دور ارام موتور عددی مثلا مساوی 10 باشه و در همون سرعت موتور عدد زمانی نقطه A مثلا 15 باشه
              خب باید چیکار کنم؟

              دیدگاه


                #8
                پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                نوشته اصلی توسط ezraeell
                والا دوستان دیگه گویا بحثای مهمتر رو پاسخ میدن

                خب پس با ای وی ار میشه من یکم بلدم میشه راهنمایی کنید
                پس من یک برنامه مینویسم ک ابتدا دندانه هارو بشماره و هر دندانه رو ک فهمید بلافاصله پرش کنه به لیبل یک و اونجا یک واحد به متغیری اضافه کنه
                بعد یک تایمر در همون لیبل شروع به شمارش کنه و تا باز دوباره پرش به اون لیبل صورت گرفت شمارش تایمر متوقف بشه و عدد رو بریزه تو یک متغیر دیگه
                تا اینجا درسته؟
                بله درسته فقط شما باید سیستم رو توری طراحی کنید که همه چیز با وقفه انجام بشه , وقتی زمان بین دندانه ها رو حساب میکنید , عددی رو در رجیستر مقایسه کننده تایمر قرار بدین تا هنگام رسیدن به نقطه A , تایمر وقفه بخورد.

                فقط محدوده سرعت زیاده ؟
                اگه زیاد باشه الگوریتم پیچیده تر میشه
                شاید لازم باشه کلاک تایمر رو کم یا زیاد کنید



                نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
                تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

                دیدگاه


                  #9
                  پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                  نوشته اصلی توسط ramezani.t
                  بله درسته فقط شما باید سیستم رو توری طراحی کنید که همه چیز با وقفه انجام بشه , وقتی زمان بین دندانه ها رو حساب میکنید , عددی رو در رجیستر مقایسه کننده تایمر قرار بدین تا هنگام رسیدن به نقطه A , تایمر وقفه بخورد.

                  فقط محدوده سرعت زیاده ؟
                  اگه زیاد باشه الگوریتم پیچیده تر میشه
                  شاید لازم باشه کلاک تایمر رو کم یا زیاد کنید
                  الان من یک برنامه نوشتم به محض اینکه دندانه اول پالس رو دریافت میکنه وقفه میخوره و میاد به لیبل خودش و اونجا اول تایمر2 شروع به شمارش میکنه و یک متغر هم یک واحد اضافه میشه(تعداد دندانه ها)و کانتر صفر میشه و برمیگرده به شمارش پالس و تا دندانه دوم سنس میشه وقفه دوم میخوره و میاد تو همین لیبل ایندفعه وارد یک شرط میشه و تایمر استپ میشه و عدد تایمر داخل یک متغیر مستقل ریخته میشه و اونو نمایش میده
                  و هرچی دور موتور یا فرکانس رو افزایش میدم زمان بین دندانه ها کمتر میشه تا اینجا نشون میده درست کار میکنه
                  پس برای تایمر هم یک وقفه به کار ببرم و زمان پالس نقطه A رو بهش بدم و وقتی به نقطه A برسه خودش میاد به لیبل وقفه تایمر و مساله حل میشه؟
                  خب یک مشکل دور موتور ک تغییر میکنه یکم عدد ها در حدود 2 یا 4 واحد کمتر بیشتر تغییر میکنن اما مد مقایسه ای تایمر فقط دو عدد رو میشه بهش داد ک فقط هم مساوی همون اعداد باید بشه

                  الان موتور من در شرایط عادی 900 دور در دقیقه میزنه و نهایتا هم 4000 دور بر دقیقه که همیشه سرعت دورانی موتور ثابت نیس ممکنه گاهی تند بشه کاهی کند فقط نباید در شناسایی نقطه A اشتباه رخ بده چون این موتور بنزینی هست اگه نقطه A رو گم کنه شمع سیلندر خانه اول جرقه نمی خوره و موتور از کار میوفته

                  اضافه شده در تاریخ :
                  اومدم تو پروتیوس دو تا میکرو گذاشتم یکی به عنوان تولید کننده پالس مربعی که مثلا در اینجا همون سنسور و چرخ دندانه رو نقش بازی میکنه و میکرو دوم که پلاس هارو انالیز میکنه
                  پالس ها دونه دونه زده میشه تا 360 پالس و به پالس 360 که میرسه هم کانتر و هم تایمر صفر میشه و از دوباره میشماره
                  یک مشکل هست وقتی از پالس شماره یک تا شماره 2 زمان میگیره در میاد 59 و تا پالس 40 این زمان تغییری نمیکنه باز پالس ها ک بیشتر میشه مثلا پالس 45 ام زمان میشه 60 و همینطور به پالس 359 ام ک میرسه زمان میشه 64
                  چرا اینقد اختلاف داره؟درحالی که پالس ها یک پارچه در میکرو اول تولید میشن و نقطه A هم هنوز وارد میکرو نکردم

                  دیدگاه


                    #10
                    پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                    ببینید , وقتی با وقفه ها کار میکنید باید سعی کنید با کمترین کد نویسی به مقصودتون برسید , من فکر میکنم بهتره از تایمر به عنوان یه تایمر نگهبان مثل " واچ داگ تایمر " استفاده کنید , به این معنا که وقتی یک دندانه دیده میشه تایمر ریست میشه و این کار تا جایی ادامه پیدا میکنه که به نقطه A برسیم و دندانه ای دیده نشه و تایمر سر ریز بشه یا با مقایسه کننده خودش برابر بشه و درنتیجه وقفه بخوره , حال تا اینجا اگر سرعت تغییر نمیکرد مشکلی نبود , با تغییر سرعت زمان سر ریز شدن تایمر نگهبانمون تغییر میکنه که این مشکل هم با یه محاسبه ساده در روتین وقفه شمارش دندانه ها قابل اجراست , کافیست قبل از ریست کردن تایمر در روتین وقفه شمارش دندانه ها , پنجاه درصد به زمان بین دندانه ها اضافه کنید و این زمان را در تایمر قرار دهید و البته دقت کنید هر میکرویی تایمر های مخطلفی دارد , من فکر میکنم بهتره از تایمر 16 بیتی که مقایسه کننده هم داره استفاده کنید , همچنین سعی کنید از میکرو پر سرعتی استفاده کنید که اعدادی که در تایمر شکل میگیرند بالا تر باشند , تا جای بازی و محاسبه بیشتر باشه

                    نوشته اصلی توسط ezraeell
                    اومدم تو پروتیوس دو تا میکرو گذاشتم یکی به عنوان تولید کننده پالس مربعی که مثلا در اینجا همون سنسور و چرخ دندانه رو نقش بازی میکنه و میکرو دوم که پلاس هارو انالیز میکنه
                    پالس ها دونه دونه زده میشه تا 360 پالس و به پالس 360 که میرسه هم کانتر و هم تایمر صفر میشه و از دوباره میشماره
                    یک مشکل هست وقتی از پالس شماره یک تا شماره 2 زمان میگیره در میاد 59 و تا پالس 40 این زمان تغییری نمیکنه باز پالس ها ک بیشتر میشه مثلا پالس 45 ام زمان میشه 60 و همینطور به پالس 359 ام ک میرسه زمان میشه 64
                    چرا اینقد اختلاف داره؟درحالی که پالس ها یک پارچه در میکرو اول تولید میشن و نقطه A هم هنوز وارد میکرو نکردم
                    شاید جایی از الگوریتمتون مشکل داره! البته به پروتئوس هم نمیشه اطمینان داشت ! من با این نرم افزار کار نکردم اما تو همچین برنامه های ساده ای دیگه باید درست کار کنه.
                    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
                    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

                    دیدگاه


                      #11
                      پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                      خب ماژول WDT مخصوص پی ای سی هستش و ای وی ار نداره
                      من از اصطلاحاتتون متوجه نشدم
                      میشه ساده تر بیان کنید

                      دیدگاه


                        #12
                        پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                        کاری نداره :smile: پله پله پیش برید مشکل حل میشه

                        و سعی کنید یه فلوچارت از الگوریتمتون بکشید بعد شروع به برنامه نویسی کنید و هم زمات فلوچارت رو تکمیل کنید

                        برای برنامه نویسی هم پله پله پیش برید , ابتدا یه تایمر 16 بیتی راه اندازی کنید که دارای مقایسه کننده باشه , چون تو PIC بعضی از تایمر ها فقط با سرریز شدن وقفه میخورن , AVR رو نمیدونم
                        نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
                        تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

                        دیدگاه


                          #13
                          پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                          خب ای وی ار فک کنم فقط 8 بیتی هست
                          ای وی ار هم دو مد داره هم با سرریزی وقفه میخوره و هم با مد مقایسه
                          یعنی هم در شمارش پالس سریزی و مقایسه داره و هم در تایمر سرریزی و مقایسه داره
                          خب الان برنامه ای ک نوشتم زمان پله به پله رو روی ال سی دی نمایش میده
                          چطوری زمان نقطه A رو بدست بیارم چون پالس ها زود زود رد میشن
                          به نظرم برنامم یکم خطا داره اخه دستورات در وقفه ها باید کم باشه تا در کمترین تاخیر برنامه حرکت کنه

                          به نظر شما باید حتما برم سراغ PIC؟ اخه در نمونه دستگاه بازاری از همین مدار از یک میکرو PIC18F.. استفاده شده بود اما به علت رزین و چسب خاصی ک روی کیت ریخته بود کارخانه سازنده ف نمیشد کپی کرد کیت رو

                          دیدگاه


                            #14
                            پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                            مطمئنا با AVR هم میشه این کار رو انجام داد و من توصیه نمیکنم هزینه و زمان اضافه تر بگزارید و پروگرامر و آموزش ها و ...

                            اگر پروژتون رو کامل تعریف کنید و اون رو به مسائل کوچک تغسیم کنید و هر مسعله رو جداگانه حل کنید , به جواب خاهید رسید

                            چطوری زمان نقطه A رو بدست بیارم چون پالس ها زود زود رد میشن
                            زمان نقطه A حداقل 50 درصد بیشتر از زمان های دیگه هست
                            شما میتونید نقطه A رو فقط یک بار حساب کنید و فقط با شمارش تعداد دندانه ها نقطه A رو پیش بینی کنید
                            بله به هر حال انجام پروژه شما ممکنه چندین راه داشته باشه که با ساده سازی مسائل , به بهترین جواب خاهید رسید
                            نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
                            تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه

                            دیدگاه


                              #15
                              پاسخ : نیاز به یک تابع در مورد شمارش سیگنال

                              ببنید بزارید تمام بگم چون تا الان ک کسی جز شما نیس ک راهنمایی کنه
                              تو هر ماشین یک دستگاهی است که قابش اندازه کف دسته و توش یک میکرو کنترلر داره با چند ترانزیستور قدرت که کار این دستگاه اینه که با توجه به داده های سنسور موقیعت میل لنگ موتور رو بسنجه و با توجه به موقیت پیستون ها در هر سیلندر ، زمان جرقه رو تعیین کنه و به ترانزیستور ها فرمان روشن و خاموش شدن بده تا کویل هر شمع در زمان خودش جرقه بزنه
                              یک مدل ماشین هست که این یونیت جرقه به ایران وارد نمیشه و خیلی گرونه چون کمیابه
                              من چند ماهه دارم روش کار میکنم تا بتونم بسازم از روش اما هیچکس نتونسته بسازه چون کارخانش ک اسکانیا هم هست نوعی رزین(چسب صنعتی) داخل قوطی این دستگاه ریخته ک هیچ حلالی نداره
                              من با شگردی خاص بعد جند ماه تونستم یکی از این یونیت هارو باز کنم و دیدم دقیقا مث ECU ماشین توش یک میکرو داره و چند ترانزیستور قدرت برای سوییچ و بعد با بازدید از خود ماشین متوجه شدم تنها ورودی به این یونیت یک سنسور هست ک سه تا سیم داره دو سیم برای تغذیه و یک سیم هم ک پالس ها رو میفرسته به یونیت جرقه
                              بعد یک اسیلوسکوپ درست کردم و باهاش شکل موج خروجی این سنسور رو دیدم و ازش عکس گرفتم

                              این سنسور روی یک چرخ دندانه دار هست که برای هر تعداد دندانه ها متفاوته مثلا من اسکوپم رو روی سنسور خودرو پراید تست کردم ک چرخش 360 دندانه داره اما دو دندانه حذف شده یعنی در کل 358 دندانه داره و جای دو دندانه خالیه
                              در عکس بالا فلش سفید نشانگر شکل پالس ایجاد شده حاصل از 358 دندانه هست و فلش قرمز نشانگر همون پالس ثابت نقطه A یا جای همون دو دندانه خالیه
                              اونجایی ک روی ال سی دی نوشته فرکانس یعنی دور موتور ماشین چون تقریبا دور موتور با فرکانس برابره و به ازای هر 1000 دور در دقیقه از موتور 980 هرتز فرکانس تولید میشه ک روی عکس میبینی و هرچی به عکس های بعدی میره دور موتور تغییر میکنه به فرکانس نگاه کن گاهی تا 1460 هرتز هم میره که همون دور موتور 1500 دور بر دقیقه پرایدهست که شکل و ارتفاع موج و فرکانس موج دندانه ها در اثر افزایش دور موتور بیشتر میشه اما موج نقطه A تغیر چنداد محسوسی نمیکنه

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

                              ای وی ار قابلیت های صنعتی پی ای سی مث همون سگ نگهبان رو نداره تازه همین سگ رو هم با یک مطالعه کوتاه فهمیدم حدودا ک معنیش چیه
                              من تاحالا برای برنامه نویسی از فلورچارت استفاده نکردم دقیقا چطوری باید بکشم
                              و اگر شما سوالی دارید تا تفهیم پروژه بهتر بشه بفرمایید تا من بگم

                              من الان یک برنامه نوشتم با وقفه ها و جملات شرطی که میتونه تعداد دندانه ها و زمان بین دندانه ها رو بشماره اما یا برنامه من مشکل داره یا روش چیز دیگه ای باید باشه چون من اومدم یک میکرو رو به عنوان تولید کننده پالس استفاده کردم یعنی میکرو شماره یک بعد از راه اندازی وارد یک حلقه محدود میشه یعنی این حلقه فقط 360 بار تکرار میشه و تو این حلقه یک پین از میکرو که به عنوان خروجی هست هر یک میلی ثانیه روشن و هر یک میلی ثانیه خاموش میشه تا بتونه در 360 بار تکرار ، 360 پالس مربعی ایجاد کنه که دقیقا تو شبیه ساز پروتیوس روی اسکوپ ک میزنی موج مربی نشون میده
                              تا اینجا این میکرو کارش شده تولید پالس برای تست ازمایشی برنامه در کامپیوتر
                              خب بعد از تولید پالس 360 ام از حلقه تکرار خارج میشه و یک پالس سه میلی ثانیه ای تولید میشه و دوباره به حلقه تکرار 360 برمیگرده
                              یعنی بعد از تولید 360 پالس مربعی ، بلافاصله یک پالس بزرگ ایجاد میشه ک تاخیرش سه برابر سایر پالس هاست تا نقش نقطه A رو بازی کنه
                              این شد برنامه میکرو شماره یک که کارش تولید پالس دندانه ها و پالس نقطه A بود
                              تا اینجا خوبه؟برای تست ازمایشی

                              حالا میکرو دوم ک شما راهنمایی کردین ک کارش انالیز یا شمارش پالس ها و پیدا کردن نقطه A هست
                              این میکرو رو طبق گفته شما اول یک تایمر میکرو را در مد کانتر معرفی کردم و خاصیت مقایسه گر کانتر و وقفه آن را فعال کردم
                              یعنی تا اینجا میکرو قادر هست با دریافت هر مقدار پالس ، اون رو بشماره و به ازای هر عددی ک اول برنامه به وقفه کانتر بدیم بلا فاصله وقتی تعداد پالس های شمرده شده به اون مقدار رسید ، پرش میزنه به لیبل مشخص شده در وقفه
                              اما از اون جایی که به محض روشن شدن میکرو ، کانتر هرچی پالس دریافت کنه میشماره و ما میخوایم هر پالس رو ک دریافت کرد وقفه بخوره و پرش کنه به لیبل
                              خب پس باید در عدد نوشته شده در مقایسه گر کانتر ، عدد یک رو نوشت یعنی به محضی ک یک پالس رو شمارش کرد یعنی یک پالس دریافت کرد به لیبل وقفه پرش کنه
                              خب تا به لیبل پرش میکنه اونجا یک جمله شرطی نوشتم که اگر x مساوی صفر بود تایمر استارت بخوره (چون دفعه اوله که وارد لیبل میشه عدد x از قبل صفر بوده پس وارد میشه) تایمر شماره دو میکرو استارت میخوره(درضمن تایمر شماره دو میکرو هم قبلا پیکر بندی شده با دقت بالا و در مد مقایسه گر با وقفه معرفی شده) خب به محض استارت خوردن تایمر عدد x رو هم بعد از استارت خوردن تایمر مساوی یک میشه تا دفعه بعد که وارد این لیبل شد تایمر استارت مجدد نخوره یا هنگ نکنه
                              بعد یک واحد به متغیر y که تعداد دندانه ها هست اضافه میشه و میشه یک ک یعنی دندانه شماره یک و بعد یک واحد به متغیر x اضافه میشه و میشه دو جمله شرطی دوم که نوشتم اگر x مساوی سه شد تایمر رو استپ کن و عدد تایمر رو بریز تو متغیر تایم اما چون الان متغیر x دو هستش وارد این شرط نمیشه و کانتر مساوی صفر میشه خارج میشه و بر میگرده به ادامه شمارش پالس و به محض دریافت پالس دوم یا دندانه دوم که میشه پالس شمرده شده یک دوباره وارد همین لیبل میشه و چون x مساوی دو هست وارد شرط استارت تایمر نمیشه و میاد پایین و یک واحد به متغیر y ک تعداد دندانه ها است اضافه میش و میشه 2 که یعنی دندانه دوم و بعد یک واحد به x اضافه میشه ک یعنی x مساوی سه میشه و شرط دوم ک استاپ تایمر هست اجرا میشه و تایمر متوقف میشه و میزان تایم بین دو دندانه شمارده شده داخل متغیر تایم ریخته میشه و روی ال سی دی نشون میده و متغیر x مساوی صفر میشه و همینطور ادامه پیدا میکنه و با وقفه بعدی وارد لیبل میشه و شرط استارت تایمر اجرامیشه و باز دفعه بعد ک میاد تو لیبل شرط استاپ تایمر اجرامیشه و الا اخر

                              این برنامه ای هست ک من نوشتم اما ب نظرم اصولی نیس

                              دیدگاه

                              لطفا صبر کنید...
                              X