اطلاعیه

Collapse
No announcement yet.

ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

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

    #31
    پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

    با تشکر از عالی جنابان fule و طراح. خیلی جالب بود! چشم و گوشم بازتر شد! عجیبه هرچی بیشتر یاد میگیرم احساس بی سوادی بیشتری میکنم!!
    در مورد توضیحاتی که برای الگوریتم mega64 ارائه دادین :
    من متوجه نشدم چطور میشه که اول لبه بالا رونده و بعد لبه پایین رونده ثبت میشه؟؟ یعنی بنظرم ممکنه قبل از اینکه زمان اول ثبت بشه، زمان دوم (همون که منجر به محاسبه اختلاف زمان میشه) بیاد و محاسبات رو خراب کنه.
    اینم متوجه نشدم که چرا دستور Period = ICR3 - ICR1 رو هم جزو خطا حساب کردین؟ چون زمان ها که ثبت شدن...
    https://www.linkedin.com/in/mohammadhosseini69

    http://zakhar.blog.ir

    دیدگاه


      #32
      پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

      نوشته اصلی توسط طراح
      دو مورد برای صورت مسئله قبلی قابل ذکر است. اول اینکه یک تایمر 8 بیتی در کلاک 16 مگاهرتز اگر بخواهد زمان 24.5 میکروثانیه را تولید کند، می توان تقسیم کننده آن را روی 8 قرار داد و مقدار OCR0 در اینحالت برابر 48 می شود. پس جمله ای که در پست های قبل گفته شد ( عدم امکان تولید این زمان با تایمر 8بیتی) برای شرایطی بود که جناب حسینی مسئله را حل کردند و تقسیم کننده را روی یک قرار دادند. اما با قرار دادن تقسیم کننده روی 8 می توان همین زمان را با TIMER0 تولید کرد.
      مقصود بنده این بخش از نظریات شما بود:
      نوشته اصلی توسط طراح
      با یک برنامه نویسی اسمبلی بهینه می توان بدون ایجاد هیچ مشکلی از کلاک 8 مگاهرتز و حتی کمتر هم برای تولید این 7 شکل موج جواب گرفت.
      .

      نوشته اصلی توسط طراح
      مورد بعدی در راه حل جدید شماست که عملیات جمع را تنها در وقفه یکی از تایمرها انجام داده اید. مسئله ای که باید به آن توجه کنید این است که هر چند در اولین سیکل شکل موج ها، فاصله بین هر دو وقفه تنها 250 نانو ثانیه است. اما به مرور این فاصله ها تغییر می کنند و رابطه اولیه خود را از دست می دهند. بنابراین اگر اضافه شدن OCR ها تنها در یک وقفه انجام شود منجر به خراب شدن شکل موج ها می شود.
      یعنی به دلیل بروز خطا این اتفاق رخ می دهد(هدف ساخت سیگنال های بدون خطا است)؛ و یا دلایل فنی دیگری دارد؟
      .

      نوشته اصلی توسط طراح
      در صورت مسئله جدید اصل استفاده از واحد Capture کاملا صحیح است و این واحد اصولا به همین منظور در میکروکنترلر پیش بینی شده است. در mega32 که مجبور به استفاده از یکی از این واحدها هستیم، حداقل عرض پالس قابل اندازه گیری، به سرعت تغییر نوع حساسیت ورودی بستگی دارد و هرچه این عمل سریعتر انجام شود، عرض پالس کوچکتری را می توان اندازه گرفت. برای کاهش این زمان می توان از منطق IF صرف نظر کرد و به محض ایجاد وقفه، وضعیت ICES1 را NOT کرد. در هر صورت با لحاظ حداقل 4 سیکل برای پرش به وقفه و عملیات مذکور، حداقل عرض پالس اندازه گیری شده وابستگی کاملی به نوع دستورالعمل های اسمبلی دارد که در وقفه نوشته می شود و برای ادامه دار بودن این تاپیک، نوشتن این روتین را به عهده دوستان می گذارم.
      هدف اصلی استفاده از دستور if و دلیل غیر قابل حذف بودن آن، متوجه شدن زمان خواندن رجیستر کپچر (اولین رخداد وقفه=لبه بالا رونده پالس) و زمان انجام تفریق (دومین رخداد وقفه=لبه پایین رونده پالس) است.
      در مورد لحاظ نمودن چند سیکل "برای پرش به وقفه" با جنابعالی موافق نیستم، زیرا اگر به اندازه گیری مداوم و پریودیک عرض پالس نیاز نباشد و یا فاصله پالس ها به اندازه کافی زیاد باشد، زمان پرش به وقفه یا خروج از آن هیچگونه تاثیری در "حداقل عرض پالس قابل خواندن" ندارد.
      .

      نوشته اصلی توسط طراح
      در هر دو روشی که بیان کردید، صفر کردن مقدار تایمر بستگی به ماهیت پالس ورودی دارد و اگر بین دو پالس متوالی فاصله کافی وجود داشته باشد، خاموش کردن تایمر و مقدار دهی اولیه می تواند بعد از پروسه اندازه گیری و در شروع اندازه گیری بعدی انجام شود. وقفه هر دو تایمر هم می تواند تواما فعال باشد و نیازی به غیرفعال بودن وقفه تایمر دوم نیست.
      کاملا درست است.
      It's your attitude, not your aptitude,that makes your altitude

      << اللهم عجل لولیک الفرج >>

      دیدگاه


        #33
        پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

        نوشته اصلی توسط محمد حسینی

        در مورد توضیحاتی که برای الگوریتم mega64 ارائه دادین :
        من متوجه نشدم چطور میشه که اول لبه بالا رونده و بعد لبه پایین رونده ثبت میشه؟؟ یعنی بنظرم ممکنه قبل از اینکه زمان اول ثبت بشه، زمان دوم (همون که منجر به محاسبه اختلاف زمان میشه) بیاد و محاسبات رو خراب کنه.
        اینم متوجه نشدم که چرا دستور Period = ICR3 - ICR1 رو هم جزو خطا حساب کردین؟ چون زمان ها که ثبت شدن...
        در mega64 دو واحد کپچر مستقل در دسترس است. از طرفی فرض بر این است که پالس ورودی به این شکل است:
        _______
        | |
        -----------| |----------

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

        در مورد Period = ICR3 - ICR1:
        اگر قرار باشد یک پالس اندازه گیری شود، این دستور و همچنین دستورات ریست تایمر ها تاثیری ندارند؛ ولی اگر قرار باشد این کار به صورت پریودیک انجام شود، باید زمان اجرای آن ها را مدنظر قرار داد.
        It's your attitude, not your aptitude,that makes your altitude

        << اللهم عجل لولیک الفرج >>

        دیدگاه


          #34
          پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

          نوشته اصلی توسط fule
          یعنی به دلیل بروز خطا این اتفاق رخ می دهد(هدف ساخت سیگنال های بدون خطا است)؛ و یا دلایل فنی دیگری دارد؟
          برای توضیح دلیل ایجاد خطا بعد از گذشتن یک زمان مشخص باید گفت که به مرور زمان، فاصله وقوع وقفه ها با هم زیاد می شود. یعنی اگر کوتاهترین وقفه از نظر زمانی در اولین بار دارای 750 نانو ثانیه اختلاف با طولانی ترین وقفه باشد، در بار دوم این اختلاف به 1.5 میکروثانیه و در بار سوم به 2.25 میکرو ثانیه می رسد. بنابراین بعد از گذشت زمان معلوم نیست که در لحظه وقوع یک وقفه، مجوزی برای تغییر OCR سایر وقفه ها وجود داشته باشد و شاید هنوز وقفه تایمر دیگر اتفاق نیافتاده باشد تا بتوان OCR قبلی را تغییر داد.

          نوشته اصلی توسط fule
          هدف اصلی استفاده از دستور if و دلیل غیر قابل حذف بودن آن، متوجه شدن زمان خواندن رجیستر کپچر (اولین رخداد وقفه=لبه بالا رونده پالس) و زمان انجام تفریق (دومین رخداد وقفه=لبه پایین رونده پالس) است.
          قبل از بار اولی که وقفه اتفاق بیافتد، با مقدار دهی قبلی به یک Pointer مانند رجیستر Y و دستورات اسمبلی مانند ST Y+,R16 ، می توان یک کپی از Capture Register را در روتین وقفه در نقطه مشخصی از حافظه ذخیره کرد و بعد در حلقه اصلی برنامه از روی محتوای Pointer تشخیص داد که کدام عدد مربوط به لبه اول و کدام مربوط به لبه دوم بوده است. بنابراین نیازی به دستور IF یا معادل آن در زبان اسمبلی نیست.

          نوشته اصلی توسط fule
          در مورد لحاظ نمودن چند سیکل "برای پرش به وقفه" با جنابعالی موافق نیستم، زیرا اگر به اندازه گیری مداوم و پریودیک عرض پالس نیاز نباشد و یا فاصله پالس ها به اندازه کافی زیاد باشد، زمان پرش به وقفه یا خروج از آن هیچگونه تاثیری در "حداقل عرض پالس قابل خواندن" ندارد.
          برای توجیه اهمیت 4 سیکل زمان پرش به روتین وقفه، فرض کنید که لبه اول اتفاق افتاده و مقدار تایمر هم capture شده است. حال برای اینکه لبه بعدی (که از نظر جهت مخالف لبه قبلی است) قابل آشکار سازی باشد، باید در اسرع وقت بوسیله خطوط برنامه در رجیستر کنترل کننده نوع لبه، تغییر بوجود بیاید. پس این 4 سیکل به عنوان یک عامل تاخیری عمل می کند و تغییر رجیستر را 4 سیکل به تاخیر می اندازد.
          اوژن: به معنای افکننده و شکست دهنده است
          دانایی، توانایی است-Knowledge is POWER
          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

          دیدگاه


            #35
            پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

            نوشته اصلی توسط طراح
            قبل از بار اولی که وقفه اتفاق بیافتد، با مقدار دهی قبلی به یک Pointer مانند رجیستر Y و دستورات اسمبلی مانند ST Y+,R16 ، می توان یک کپی از Capture Register را در روتین وقفه در نقطه مشخصی از حافظه ذخیره کرد و بعد در حلقه اصلی برنامه از روی محتوای Pointer تشخیص داد که کدام عدد مربوط به لبه اول و کدام مربوط به لبه دوم بوده است. بنابراین نیازی به دستور IF یا معادل آن در زبان اسمبلی نیست.
            این بخش از نظریاتتان کمی گنگ می باشد، لطفا واضح تر بفرمایید .
            .

            نوشته اصلی توسط طراح
            برای توجیه اهمیت 4 سیکل زمان پرش به روتین وقفه، فرض کنید که لبه اول اتفاق افتاده و مقدار تایمر هم capture شده است. حال برای اینکه لبه بعدی (که از نظر جهت مخالف لبه قبلی است) قابل آشکار سازی باشد، باید در اسرع وقت بوسیله خطوط برنامه در رجیستر کنترل کننده نوع لبه، تغییر بوجود بیاید. پس این 4 سیکل به عنوان یک عامل تاخیری عمل می کند و تغییر رجیستر را 4 سیکل به تاخیر می اندازد.
            این مطلب برای برنامه mega32 کاملا صحیح است، و باید تاخیر وقفه را مدنظر قرار داد.
            It's your attitude, not your aptitude,that makes your altitude

            << اللهم عجل لولیک الفرج >>

            دیدگاه


              #36
              پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

              در mega32 فرض کنید مقدار رجیستر Capture متناظر با لبه بالا رونده قرار است در آدرس های 0x100 و 0x101 و مقدار متناظر با لبه پایین رونده در آدرس های 0x102 و 0x103 ذخیره شوند. اگر قبل از شروع عملیات اندازه گیری و فعال کردن وقفه، مقدار 0x100 در رجیستر Y قرار بگیرد و با دستوری مانند ST Y+,R16 عمل ذخیره سازی در روتین وقفه برای هر بایت رجیستر Capture انجام شود، در پابان ذخیره سازی دوم در رجیستر Y مقدار 0x104 قرار خواهد گرفت. از آنجا که Y دارای طول 16 بیت است و بایت بالای آن برای تمام این موارد 0x00 است، در حلقه اصلی با منتظر ماندن برای 0x04 شدن بایت پایین Y می توان به اتمام ذخیره سازی دو کپی مورد نظر در حافظه پی برد.
              اگر همچنان مسئله برای شما مبهم است بفرمایید تا با تفصیل بیشتری توضیح داده شود.
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                #37
                پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                سلام حیف باشه من عقب موندم خیلی دوست داشتم با زور هم شده یکم از مغزم رو به کار بگیرم.
                ممنونم از جناب طراح و سایر دوستان.
                و یه خواهش داشتم جناب طراح اگه میشه تاپیک اسمبلی رو ادامه بدبد ... :wow:
                الهم عجل لولیک الفرج

                فقط 313 نفر...

                دیدگاه


                  #38
                  پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                  نوشته اصلی توسط FAM
                  یه خواهش داشتم جناب طراح اگه میشه تاپیک اسمبلی رو ادامه بدید.
                  برای مبحث برنامه نویسی اسمبلی، مخاطبی پیدا نشد که مباحث را در عمل پیاده کند و بصورت فعال در بحث شرکت کند. وگرنه نکات و ریزه کاری های فنی این بحث به حدی زیاد است که تا مدت زیادی می توان در مورد آن مطلب نوشت. با اطمینان می گویم که کاربردهایی وجود دارد که فقط و فقط با اسمبلی قابل انجام است. اما وقتی اکثرا به دنبال راحتی و به اصطلاح لقمه آماده به عنوان یک user هستند و وقتی زحمت کشیدن به یک ضدارزش تبدیل شده است، چه لزومی برای مطرح کردن این موارد وجود دارد؟
                  اوژن: به معنای افکننده و شکست دهنده است
                  دانایی، توانایی است-Knowledge is POWER
                  برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                  وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                  قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                  اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                  ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                  دیدگاه


                    #39
                    پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                    هرچی گشتم این تاپیک اسمبلی که میگین پیدا نکردم! کجاست؟! (لینکش رو بدین لطفا) آقای طراح ادامه بده.
                    من درس زبان ماشین و اسمبلی پاس کردم. اما در مورد اسمبلی avr چیزی نمیدونم. این تاپیک هم که شدیدا مشتاقم کرده که اسمبلی یاد بگیرم.
                    https://www.linkedin.com/in/mohammadhosseini69

                    http://zakhar.blog.ir

                    دیدگاه


                      #40
                      پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                      نوشته اصلی توسط محمد حسینی
                      هرچی گشتم این تاپیک اسمبلی که میگین پیدا نکردم! کجاست؟! (لینکش رو بدین لطفا)
                      تاپیک مذکور در انجمن XMEGA قرار دارد:

                      http://www.eca.ir/forum2/index.php?topic=39020.0
                      اوژن: به معنای افکننده و شکست دهنده است
                      دانایی، توانایی است-Knowledge is POWER
                      برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                      وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                      قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                      اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                      ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                      دیدگاه


                        #41
                        پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                        با سلام

                        طبق هماهنگی های صورت گرفته ، جناب "طراح" سوالی را طرح کردند که آقای "محمد حسینی" موفق به حل مسئله شدند .
                        جناب "طراح" جایزه ای را برای این سوال در نظر گرفتند که واقعا شخصا ازشون تشکر میکنم.


                        جایزه بن خرید محصولات فروشگاه به مبلغ یکصد هزار تومان می باشد.

                        ضمن تبریک به دوست خوبمون ، از همکار عزیز جناب "طراح" هم بابت این پیشنهادشون و همچنین تقبل هزینه تشکر میکنم و امیدوارم سایر دوستانی که در کار صنعت هستند با مطرح کردن سوالات اینچنینی باعث ایجاد چالش خوبی در بین کاربران علاقمند شوند.
                        I ❤️ ECA

                        دیدگاه


                          #42
                          پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                          سلام
                          من هم به نوبه ی خودم به آقای حسینی تبریک می گم و از جناب طراح هم برای این حرکتی زیبایی که انجام دادند قدردانی می کنم.

                          برای هر دو عزیز آرزوی موفقیت می کنم

                          دیدگاه


                            #43
                            پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                            بنده هم از آقای طراح به دلیل این فعالیت کاملا تازه در فضای اینترنتی ایرانی متشکرم. انشاالله این حرکت ایشان باعث فتح بابی خجسته و میمون در این فروم گردد.
                            It's your attitude, not your aptitude,that makes your altitude

                            << اللهم عجل لولیک الفرج >>

                            دیدگاه


                              #44
                              پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گ&#1740

                              سلام
                              راستش نمیدونم چی بگم... !!
                              واقعا واسه جایزه نبود! اصلا قضیه جایزه منتفی شده بود و من بخاطر علاقه و کنجکاوی، وقت زیادی رو این مساله گذاشتم... (آخر اون پستم یه شوخی کردم که بدجوری عذاب وجدان گرفتم!)

                              از آقای طراح بخاطر فعالیت علمی و مفید و راهنمایی هاشون نهایت سپاس گذاری رو دارم. و همینطور تشکر ویژه بخاطر جایزه (شرمندم کردین!)
                              ضمنا من بیش از یه دانشجوی ساده نیستم و شدیدا تحت تعلیمم! (یعنی خودم رو مستحق این همه تحویل گرفتن نمی بینم!! :mrgreen همین بحث تایمرها که با کمک جناب طراح مطرح شد، نکات آموزشی زیادی برای من داشت. و جالبه که الان تو بخش مهم پروژه ای که یکی از استادامون بهم داده بود، به کارم اومد!
                              برای آقای طراح آرزوی موفقیت می کنم و امیدوارم همینطور پرانرژی به فعالیتشون در موضوعات کاربردی و صنعتی ادامه بدن.
                              درآخر هم از مدیران سایت تشکر میکنم. امیدوارم بتونم دینم رو به فروم و اعضاش ادا کنم. (اگه خدا بخواد در آینده نزدیک که در زمینه پردازش تصویر تسلطم بیشتر بشه، یه تاپیک آموزشی باز میکنم)

                              (راستی این مکانیزم بن خرید چطوریه؟! )
                              https://www.linkedin.com/in/mohammadhosseini69

                              http://zakhar.blog.ir

                              دیدگاه


                                #45
                                پاسخ : ایجاد زمان های دقیق و مستقل و اندازه گیری پالس با AVR

                                منم از آقای طراح تشکر میکنم اگر ممکنه باز هم از این نکات که میشه در برنامه نویسی حرفه ای از انها استفاده کردمطرح کنن درضمن من با اسمبلی avr کار کردم واگر کسی کمک بخواد میتونم در حد سوادم کمک کنم از همه دوستان ممنونم

                                دیدگاه

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