02166766927 -02166703652
info@atrinelec.com تهران پاساژ امجد طبقه1 واحد 16
آموزش گام به گام ESP32_جلسه هجدهم (راه اندازی Timer)

آموزش گام به گام ESP32_جلسه هجدهم (راه اندازی Timer)

2019-01-03 21:14:30

آموزش گام به گام ESP32_جلسه هجدهم (راه اندازی Timer)_بخش اول

در این جلسه قصد داریم تا با نحوه راه اندازی تایمر و اینتراپت مربوط به آن آشنا شویم و برنامه ای را با هم بررسی نماییم که هر یک ثانیه وضعیت یک پایه را که به آن LED متصل شده است را تغییر می دهد. برای شروع می توانیم از مثال های آماده خود نرم افزار نیز استفاده نماییم که برای اینکار از قسمت File گزینه Examples را انتخاب و پس از آن گزینه ESP32 را انتخاب می کنیم در قسمت بعد Timer را انتخاب می کنیم و در نهایت مثال RepeatTimer را انتخاب می کنیم.

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

در ابتدا برای پایه متصل به میکروسوئیچ توقف کار تایمر و پایه متصل شده به LED نام های متناسب با عملکرد آنها را انتخاب می کنیم.

در ادامه یک اشاره گر به نوع hw_timer_t را تعریف می کنیم و متغیر های دیگر را نیز تعریف و مقدار دهی می کنیم

در تابع Setup در ابتدا واحد سریال را فعال می کنیم و پس از آن پایه متصل به میکرو سوئیچ را ورودی و پایه متصل به LED را خروجی تعریف می کنیم.

با استفاده از دستور timerBegin قصد داریم تا تایمر را پیکربندی کنیم. این تابع سه آرگومان ورودی دارد که آرگومان اول مربوط به شماره تایمر است که اعداد بین 0 تا 3 می باشند که در این برنامه تایمر اول را مورد استفاده قرار می دهیم. در آرگومان دوم مقدار پیش تقسیم فرکانسی را مشخص می کنیم و با توجه به اینکه فرکانس کار ماژول 80MHz می باشد با انتخاب عدد 80 فرکانس کلاک واحد تایمر برابر 1MHz می شود. آرگومان سوم مشخص می کند که شمارنده مربوط به تایمر صعودی یا نزولی بشمارد که با قرار دادن true این شمارنده بصورت صعودی می شود. در صورتیکه بخواهیم شمارنده بصورت نزولی بشمارد مقدار آرگومان سوم را false قرار می دهیم.

در ادامه باید مشخص کنیم که در صورت وقوع وقفه به چه تابع یا روتینی پرش کند و اینتراپت با لبه فعال شود یا با سطح فعال شود. تابع timerAttachInterrupt دارای سه آرگومان ورودی می باشد که آرگومان اول مربوط به اشاره گر از نوع hw_timer_t می باشد که قبلا تعریف کرده ایم و آرگومان دوم، نام روتین مورد نظر می باشد و با قرار دادن true در آرگومان سوم مشخص نمودیم که اینتراپت با لبه فعال شود.

پس از آن با استفاده از دستور timerAlarmWrite مقدار شمارش و وضعیت مربوط به مقدار دهی و شروع مجدد تایمر را مشخص می کنیم. این تابع سه آرگومان دارد که آرگومان اول مربوط به اشاره گر از نوع hw_timer_t می باشد که قبلا تعریف کرده ایم و آرگومان دوم مقدار شمارش را مشخص می کند. با توجه به اینکه فرکانس ماژول 80MHz است و مقدار پیش تقسیم کننده را قبلا 80 در نظر گرفتیم، مقدار فرکانس کلاک واحد برابر با 1MHz می شود که این بدین معناست که در هر ثانیه 1000000 پالس به این واحد می رسد. در صورتیکه شمارنده تایمر تا مقدار 1000000 را بشمارد یک ثانیه زمان لازم است. پس برای بدست آوردن زمان 1 ثانیه مقدار آرگومان دوم را 1000000 قرار می دهیم و با قرار دادن true در آرگومان سوم با وقوع اینتراپت مقدار تایمر مجدد بازنشانی می شود و اینتراپت بصورت پیوسته تکرار می شود.

در انتهای تابع setup با استفاده از دستور timerAlarmEnable واحد تایمر را استارت می کنیم.

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

                                                                                                                                                       شادیتان مستدام، سلامتیتان پایدار

                                                                                                                                                                        محمد هادی دشتی

در جلسه قبل مربوط به راه اندازی تایمر به نحوه اجرا نمودن یک مثال در مورد تایمر پرداختیم و دستورات مربوط به setup را بررسی نمودیم در این جلسه قصد داریم تا به بررسی توابع مربوط به loop  و روتین اینتراپت مربو ط به تایمر بپردازیم پس به سراغ قسمت Loop می رویم. در این قسمت که مدام در حال اجرا می باشد در صورتیکه که روتین وقفه اتفاق افتاده باشد شرط برقرار است و وارد شرط می شویم و تعداد اینتراپت های اتفاق افتاده از شروع برنامه و مدت زمان سپری شده از شروع برنامه را در قسمت سریال پورت نمایش می دهیم. همانطور که قبلا نیز به آن اشاره شد یک کلید برای متوقف نمودن تایمر در نظر گرفته شده است. در صورتیکه این کلید فشار داده شود با استفاده از دستور timerEnd عملکرد تایمر متوقف می شود.

برای خواندن وضعیت میکروسوئیچ از دستور digitalRead استفاده می شود که با توجه به اینکه این پایه را pullup کرده ایم باید زمانیکه ورودی صفر یا زمین می شود برنامه توقف تایمر را اجرا کنیم که برای بررسی زمین شدن باید درون این دستور شرط LOW بودن را بررسی کنیم.

در بخش روتین وقفه نیز دستورات زیر اجرا می شوند. در ابتدا متغیر مربوط به شمارش تعداد وقفه هایی که اتفاق افتاده یکی به آن اضافه می شود و پس از آن با استفاده از دستور millis مدت زمان سپری شده از زمان شروع کار برنامه را بر حسب میلی ثانیه بر می گرداند. با هر بار اجرا شدن این روتین عبارت Timer در سریال پورت نمایش داده می شود و وضعیت پایه متصل شده به LED نیز تغییر می کند. برای تغییر وضعیت LED از دستور digitalWrite استفاده شده است که برای اینکه هر بار وضعیت LED تغییر کند وضعیت پایه را با استفاده از دستور digitalRead می خوانیم و پس از آن وضعیت خوانده شده را معکوس یا Not می کنیم.

جهت دانلود برنامه  بر روی لینک  زیر کلیک نمایید:

 Timer_Sample_Code

                                                                                                                                                       شادیتان مستدام، سلامتیتان پایدار

                                                                                                                                                                             محمد هادی دشتی

برای مشاهده آموزش جلسه اول آموزش گام به گام ماژول ESP32(معرفی ماژول ESP32 ) کلیک کنید.

برای مشاهده آموزش جلسه دوم آموزش گام به گام ماژول ESP32(معرفینرم افزار Arduino ) کلیک کنید.

برای مشاهده آموزش جلسه سوم آموزش گام به گام ماژول ESP32(نحوه پروگرام کردن یک برنامه ساده) کلیک کنید.

برای مشاهده آموزش جلسه چهارم آموزش گام به گام ماژول ESP32(برنامه ال ای دی چشمک زن ) کلیک کنید.

برای مشاهده آموزش جلسه پنجم آموزش گام به گام ماژول ESP32(راه اندازی کلید(ورودی) ) کلیک کنید.

برای مشاهده آموزش جلسه ششم آموزش گام به گام ماژول ESP32(راه اندازی ADC) کلیک کنید.

برای مشاهده آموزش جلسه هفتم آموزش گام به گام ماژول ESP32(راه اندازی DAC ) کلیک کنید.

برای مشاهده آموزش جلسه هشتم آموزش گام به گام ماژول ESP32(راه اندازی PWM) کلیک کنید.

برای مشاهده آموزش جلسه نهم آموزش گام به گام ماژول ESP32(راه اندازی WiFi بصورت Client) کلیک کنید.

برای مشاهده آموزش جلسه دهم آموزش گام به گام ماژول ESP32(راه اندازی WiFi بصورت Server) کلیک کنید.

برای مشاهده آموزش جلسه یازدهم آموزش گام به گام ماژول ESP32(راه اندازیال سی دی کاراکتری) کلیک کنید.

برای مشاهده آموزش جلسه دوازدهم آموزش گام به گام ماژول ESP32(راه اندازی DS1307 (بخش اول)) کلیک کنید.

برای مشاهده آموزش جلسه سیزدهم آموزش گام به گام ماژول ESP32(راه اندازی DS1307 (بخش دوم)) کلیک کنید.

برای مشاهده آموزش جلسه چهاردهم آموزش گام به گام ماژول ESP32(راه اندازی ماژول  RC522 (بخش اول)) کلیک کنید.

برای مشاهده آموزش جلسه پانزدهم آموزش گام به گام ماژول ESP32(راه اندازی ماژول  RC522 (بخش دوم)) کلیک کنید.

برای مشاهده آموزش جلسه شانزدهم آموزش گام به گام ماژول ESP32(راه اندازی ماژول  EEPROM) کلیک کنید.

برای مشاهده آموزش جلسه هفدهم آموزش گام به گام ماژول ESP32(راه اندازی ماژول  Web Server) کلیک کنید.

به سبد خرید اضافه شد.
سبد خرید
سبد خرید
Item removed. بازگرداندن