| |

آشنایی با ری ست و مدار پالس ساعت AVR - نسخه قابل چاپ

آشنایی با ری ست و مدار پالس ساعت AVR
نویسنده: مسئول فنی در
۱۵ ارديبهشت ۱۳۹۳
[ آخرین به روزرسانی در ۱۵ ارديبهشت ۱۳۹۳ ]

ری ست RESET  :

سیگنال ری ست یا بازنشانی به میکروپرسسور می گوید، که برنامه را از ابتدا شروع کند. وقتی این سیگنال بیاید، میکروپروسسور در هر نقطه ای که باشد، ادامه اجرای برنامه را قطع می کند و به نقطه آغاز بر میگردد و  دستورالعملها را از آغاز مجدداً دنبال می کند.
در میکروپروسسورهای معمولی، میکروپرسسور فقط از طریق پایه Reset  به صورت "دستی" و یا "ری ست در زمان روشن شدن"  ری ست می شود.
اما در AVR چند نوع ری ست دیگر وجود دارد که در پروژه های حرفه ای مفید است، در اینجا به دو نمونه آن می پردازیم.

ری ست افت تغذیه  Brown-out Reset :

در صورتی که ری ست افت تغذیه را فعال کرده باشید، چنانچه تغذیه AVR کمتر از حد معینی شود، AVR ری ست می شود.
برای فعال کردن Brown-out Reset باید فیوز بیت BODEN را در هنگام برنامه ریزی AVR فعال کنید.
سطح ولتاژی که به ازای آن AVR ری ست می شود، با توجه به فیوز بیت BODLEVEL از دو مقدار 2.7 و 4 ولت انتخاب می شود.
هرگاه AVR به دلیل افت تغذیه  ری ست شود، فلگ BORF از رجیستر MCUCSR فعال می شود.
شکل زیر مراحل ری ست Brown-out را نشان می دهد. همانطور که در شکل می بینید، هرگاه مقدار Vcc  کمتر از VBOT-  شود، ری ست داخلی فعال و تا زمانی که به مقدار VBOT+  بر نگردد، در حالت ری ست باقی می ماند. مقدار tTOUT   که اضافه شده است، به خاطر اطمینان از تثبیت تغذیه سیستم می باشد، که آنرا حدود 4ms یا 65ms می توان انتخاب کرد.

 پس بطور خلاصه با فیوز بیت BODEN آن را فعال و با فیوز بیت BODLEVEL سطح ولتاژ را تعیین و با فلگ BORF می فهمید، که آیا ری ست بدلیل افت ولتاژ بوده است یا نه ؟  اما چگونه  از آن استفاده می کنید.
فرض کنیم شما سیستم کنترل یک کارخانه رب را با سیستمی مبتنی بر AVR طراحی کرده اید و مراحل شستشوی گوجه فرنگی و آب گیری انجام شده و وارد مرحله تغلیظ شده اید، در این زمان تغذیه سیستم افت می کند، بگونه ای که اندازه گیری پارامترهایی مانند غلظت و یا نمک با اشکال مواجه شود. طبیعی است که شما دوست دارید که کار متوقف و پس از رسیدن ولتاژ به مقدار مطلوب ادامه پیدا کند. شما هرگز نمی خواهید، مواد داخل مخازن به دور ریخته شود و فرآیند از صفر مجدداً شروع شود.
شما برنامه کنترل را چگونه باید بنویسید ؟
در ابتدای برنامه شما باید فلگ BORF را بررسی کنید. اگر این بیت یک باشد، مبین اینست که ری ست به دلیل افت تغذیه رخ داده است، باید مرحله متوقف شدن سیستم را براساس متغیرهای سیستم شناسایی کرده و ادامه پروسه را دنبال کنیم.

ری ست تایمر نگهبان Watchdog Timer Reset :

شاید تا به حال برای شما اتفاق افتاده باشد که کامپیوترتان هنگ کند، و با زدن دکمه ها هیچ کاری نکند و شما مجبور به ری ست دستگاه خود شده باشید. براستی اگر سیستم کنترل یک موشک یا کنترلر یک ترمز ABS ، یا سیستم کنترل یک کارخانه هنگ کند، چه اتفاقی می افتد؟  بله، همه چیز رها شده و هر اتفاق ناخوشایندی ممکن است رخ دهد.
در سیستمهای میکروپروسسوری برای اینکه از کارکرد سیستم مطمئن شوند، از تایمر نگهبان استفاده می کنند.
تایمر نگهبان شامل یک شمارنده است، که هرگاه مقدار آن سرریز شود،  یک پالس تولید می کند. این شمارنده با یک اسیلاتور مستقل 1MHz کار می کند و با یک مقسم فرکانس زمان سرریزشدن را می توان تعیین کرد. به عنوان نمونه این زمان بین 16ms تا 2.1s تنظیم می شود. پالس سرریز باعث ری ست شدن میکروکنترلر می شود. حال اگر قبل از سرریز شدن شمارنده، میکروکنترلر شمارنده را ری ست کند، شمارنده سرریز نمی شود. ری ست کردن شمارنده تایمر به کمک دستورالعمل WDR انجام می شود. اما اگر به هر دلیلی میکروپروسسور هنگ کند و دستورالعملی را اجرا نکند، نمی تواند شمارنده تایمر نگهبان را ری ست کند، پس شمارنده سرریز و میکروکنترلر را ری ست می کند.
به بیان دیگر اگر میکروکنترلر در فواصل زمانی مناسب شمارنده تایمر نگهبان را ری ست نکند، شمارنده تایمر نگهبان میکروکنترلر را ری ست خواهد کرد (اگر نزنی میخوری ). این موضوع در شکل زیر نشان داده شده است.

برای استفاده از تایمر نگهبان چه باید کرد:
1-      ابتدا آن را فعال کنید. دو روش برای فعال کردن وجود دارد. الف- فیوز بیت WDTON ( در میکروکنترلرهایی که این فیوز بیت وجود دارد)     ب - فعال کردن بیت WDE از رجیستر WDTCR بطور نرم افزاری
2-      تعیین زمان سرریز شدن تایمر نگهبان با بیتهای WDP2..0 از رجیستر WDTCR
با دو مورد فوق شما تایمر نگهبان را فعال کردید. برای ری ست کردن شمارنده تایمر نگهبان شما باید دستورالعمل WDR را در محل مناسبی در بدنه برنامه خود بنویسید، بگونه ای که این  دستورالعمل قبل از سرریز شدن شمارنده حتماً اجرا شود. برای اطمینان، بهتر است در فواصل کمتر از سرریزشدن این کار را انجام دهید. ( شکل فوق را من از اینترنت گرفته ام، توصیه نمی کنم، مطابق شکل  چندین بار این دستورالعمل را بنویسید و فقط یک بار در حلقه اصلی برنامه کافی است. در ضمن در سرویس های اینتراپت نیز دستورالعمل WDR را ننویسید. در آینده بهترین روش به نظر خودم را برایتان خواهم گفت.)
اگر شما تایمر نگهبان را بطور مداوم ری ست نکنید، میکروکنترلر شما با فواصل زمانی تنظیم شده ری ست، و هیچ کاری نمی تواند بکند.

برای غیر فعال کردن تایمر نگهبان چه باید کرد:
از آنجا که ناخواسته تایمر نگهبان غیر فعال نشود، دو کار با ترتیب خاص و در کمتر از 4 سیکل ساعت میکروکنترلر، باید انجام دهید. الف – بیت WDCE از رجیستر WDTCR را یک کنید. ب – در کمتر از 4 سیکل ساعت بیت WDE از رجیستر WDTCR را صفر کنید. ( معمولاً در دستورالعمل بعد این کار را انجام می دهند.) توجه داشته باشید که بیت WDCE پس از 4 سیکل ساعت بطور خودکار صفر می شود. در بعضی از میکروکنترلرها نام بیت WDCE  بیت WDTOE=WatchDog Turn Off Enable است.

 

نظرات کاربران
aa :    
۱۶ ارديبهشت ۱۳۹۳
۱۶ ارديبهشت ۱۳۹۳
سلام استاد لطفا در مورد كيبورد اطلاعات قرار دهيد در كتاب مطلب زيادي قرار ندارد
۱۶ ارديبهشت ۱۳۹۳
مسئول فنی :

تا پایان اردیبهشت بخش کیبورد را کامل می کنم. با توجه به اینکه برای درس مدار واسط مرجع مناسبی نیست، فعلا روی تکمیل آن وقت بیشتری می گذارم.



masammohammadi :    
۱۸ ارديبهشت ۱۳۹۳
۱۸ ارديبهشت ۱۳۹۳
با سلام و خسته نباشید و باتشکر از سایت خوبتون در آموزش برنامه نویسی در قسمت watch dog reset شما در مورد تنظیم زمان ریست آن آموزش دادید حال اگر پروِژه ما صنعتی باشد چطور بایستی برنامه را بنویسیم تا اگر اشکالی در روند پروژه پیش آمد بتوان تقریبا از قسمتی که مشکل ما ایجاد شده میکرو ریست شود . باتشکر
۱۹ ارديبهشت ۱۳۹۳
مسئول فنی :

نحوه استفاده از WDT در پروژه های آموزشی و صنعتی فرقی نمی کند. اما اگر منظور شما اینست، که اگر در یک فرآیند صنعتی اشکالی در سیستم میکروپروسسوری پیش امد و میکرو ری ست شد، پس از شروع مجدد از محل  قبلی به کار خود ادامه دهد. شما باید وضعیت سیستم را هرچند مدت، ذخیره کنید و حال پس از ری ست نگاه کنید که در چه وضعیتی بوده اید و آن را ادامه دهید. توجه داشته باشید که حافظه SRAM با ری ست پاک نمی شود. شما می توانید وضعیت سیستم را در حافظه EEPROM نیز ذخیره کنید، البته توجه داشته باشید که تعداد پاک کردن و نوشتن EEPROM در حد 100 هزار بار است.



دانشجوی نرم افزار :    
۱۰ آذر ۱۳۹۴
۱۰ آذر ۱۳۹۴
با سلام ; استاد همون طور که خودتون گفتین این درس برای دانشجوی نرم افزار در آینده به کار نمی آید مخصوصا برنامه نویسیش به نظرم بهتره برای دانشجویان نرم افزار ساده و دست پایین بگیرید اکثر دانشجویان نیز علاقه ای به این درس ندارند متاسفانه چرا باید در درسی که اهمیت زیادی برای ما ندارد اینقدر سختگیری شود با تشکر
۳۰ دي ۱۳۹۴
مسئول فنی :

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

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



نظر بدهید

بازگشت به بالا