آموزش واحد Watchdog Timer در STM8

Watchdog Timer در STM8

Watchdog Timer در STM8

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

در برخی اوقات به علت عدم طراحی صحیح یا بروز نویز های خارجی و مشکل در مسیر تغذیه میکرو در عملکرد خود دچار مشکل شده که در صورت عدم رسیدگی و Reset نمودن آن عملکرد مدار متوقف و حتی امکان بروز سوانح در کابردهای خاص محتمل است که دو وضعیت به منظور رفع این مشکل وجود دارد.

1. Reset نمودن میکرو بصورت دستی ( Manual Reset)

2. مدیریت بر عملکرد صحیح میکرو با استفاده از Watchdog Timer

STM8 microcontroller architecture

میکروکنترلرهای STM8 دارای دو واحد Watchdog Timer می باشند که در اصل واحد IWDG با استفاده از رجیسترهای مربوطه نقش مکمل را برای واحد اصلی Window Watchdog (WWDG) به عهده دارد.

این واحد ، سیگنال کلاک خود را از نوسان ساز کم سرعت داخلی ( LSI ) با فرکانس 128KHz دریافت می نماید که حتی در زمان توقف کامل عملکرد پردازنده اصلی و بروز خطا در سیستم کلاک را میتواند دریافت نماید.

تشریح عملکرد Watchdog Timer (IWDG) یا واحد سگ نگهبان!

Watchdog-Timer-(IWDG) in stm8

در تصویر فوق دیاگرام بلوکی واحد واچ داگ تایمر مشاهده می گردد ، زمانی که این واحد مستقل با درج مقدار 0xCC در رجیستر ( IWDG-KR ) شروع به فعالیت می نماید ، شمارشگر شروع به کاهش مقدار خود از 0xFF می نماید و زمانی که این مقدار به 0x00 برسد یک سیگنال RESET به وسیله این تایمر تولید می شود( IWDG RESET ).

این واحد مستقل به وسیله رجیسترهای IWDG_PR , IWDG_PLR پیکربندی می گردند ، رجیستر IWDG_PR به منظور مدیریت بر ضریب تقسیم فرکانس تغذیه این واحد به کاربرده می شود و تعیین مبدا شمارش تا زمان انجام عملیات ریست نیز توسط رجیستر IWDG_KR که بصورت پیش فرض معادل 0xAA می باشد تعیین می گردد.

رجیسترهای اصلی IWDG_PR , IWDG_PLR در وضعیت پیش فرض فقط خواندنی می باشند و کاربر امکان تغییر تنظیمات آن را ندارد و به منظور دسترسی به تنظیمات این دو رجیستر در ابتدا باید کد (0x55 ) را IWDG_KR (KEY REFRESH) وارد نمود و این حالت را میتوان با وارد نمودن نقطه شروع شمارش 0xAA لغو نمود. (Watchdog RESET)

محاسبه پریود زمانی در تایمر Watchdog

پریود زمانی توسط دو رجیستر IWDG_PR , IWDG_PLR قابل مدیریت و پیکربندی می باشند که معادله ذیل تشریح ساده محاسبه زمان در عملکرد این واحد مستقل می باشد.

تایمر واچ داگ در Stm8

 

عملکرد صحیح در تایمر سگ نگهبان در برنامه باید به شکلی مدیریت گردد که امکان صدور فرمان RESET در عملکرد صحیح میکروکنترلر غیر ممکن گردد بدین ترتیب که درحلقه اصلی برنامه دائماً شمارشگر این واحد به روز گردد تا امکان اتمام شمارش مقدور نگردد و در صورتی که خطایی در برنامه رخ دهد و حلقه اصلی متوقف گردد آنگاه شمارنده به انتهای مقدار رسیده و میکرو از نو راه اندازی می گردد.

 

پریود زمانی واحد تایمر سگ نگهبان با احتساب فرکانس داخلی 128KHz:

Watchdog-Timer-(IWDG)-perido time-with-128k-clock-in-stm8

با توجه به توضیحات بسیار مقدماتی ذکر شده حال به بررسی رجیسترهای کاربردی این واحد خواهیم پرداخت:

رجیستر IWDG_PR در Watchdog Timer

IWDG_PR register s in stm8

رجیستر 8 بیتی که بیت های 3 تا 7 آن رزرو وبدون کاربرد می باشد ، این رجیستر به منظور انجام تقسیمات ضریب کلاک داخلی برای عملکرد Watchdog بکار برده می شود که ضرایب را میتوان با تقسیمات زیر مدیریت نمود:

Reload register (IWDG_PLR)

Reload register (IWDG_PLR)

این رجیستر 8 بیتی به منظور تعیین مقدار بارگذاری اولیه شمارشگر واحد مستقل تایمر سگ نگهبان به کار برده می شود که در صورت فعال شدن این واحد شمارش از مقدار تعیین شده در این رجیستر به صورت معکوس شروع به شمارش کرده و در انتهای مسیر دستور RESET را صادر می نماید.

حال به بررسی فرامین و رجیسترهای اصلی تایمر سگ نگهبان می رسیم.

Window Watchdog (WWDG)

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

چگونه تایمر سگ نگهبان را فعال نماییم؟

معادله زیر به منظور محاسبه زمان وقفه در اجرای عملکرد این تایمر به کار برده می شود:

که TCPU پریود اصلی زمان واحد برحسب میلی ثانیه می باشد.

با توجه به هدف محور بودن مطالب از توضیح موارد جانبی اجتناب می کنیم و رجیسترهای اصلی را بررسی می نماییم.

Control Register (WWDG_CR)

Control Register (WWDG_CR) in stm8

بیت هشتم این رجیستر ( bit7 ) فعال سازی RESET در انتهای عمل شمارنده را به عهده دارد که به صورت نرم افزاری فعال شده و در انتها بصورت سخت افزاری غیر فعال می گردد و در کل میتوان گفت تایمر سگ نگهبان را می توان با این بیت فعال یاغیر فعال نمود.

( 0:disable , 1:Enable )

هفت بیت دیگر این رجیستر ( T[6:0] ) : این بیت ها حاوی مقادیر شمارنده تایمر سگ نگهبان می باشد که مقادیر در تناسب با پریود زمانی تنظیم شده شمارش معکوس می نماید.

نکته بسیار مهم : در زمان تنظیم بیت های این رجیستر حتماً بیت T6 را با ارزش 1 تنطیم نمایید که از Reset خودکار در مواقع عادی عملکرد جلوگیری گردد.

Window register ( WWDG_WR )

Window register ( WWDG_WR ) in stm8

بیت هشتم این رجیستر رزرو شده و در حال حاضر بدون استفاده می باشد ، این رجیستر محتوی مقداری است که شمارنده Watchdog Timer مقدار نهایی خود را با آن مقایسه میکند و در صورت مطابقت فرمان reset را صادر می نماید.

جدول زیر رجیسترهای اصلی و وضیت reset را نشان در حالت کلی نشان می دهد:

Watchdog Timer-in-stm8-output-register

پروژه کاربردی :

در این مثال یک LED جشمک زن را مشاهده می نمایید که Watchdog Timer در stm8 صحت عملکرد کلی را بررسی مینماید و در صورت بروز خطا میکرو را reset مینماید ، دقت گردد که در حلقه اصلی مقدار شمارنده باید همواره صفر گردد تا مانع از وقفه در عملکرد صحیح گردد:

پروژه با Stm8 و Watchdog Timer

 

بخش Watchdog Timer در STM8 نیز به پایان رسید و در بخش بعدی اموزش به معرفی واحد SPI میپردازیم .

موفق باشید

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

6 پاسخ‌ها

  1. محسن گفت:

    سلام ممنون از اموزش هاتون … فوقا لعادست کلی استفاده کردیم ///فقط فکر کنم در کد led چشمک زن اون #define key اضافی باشه چون سوییچی چیزی نداریم تو مدار و توی خاسته ی پروژه هم نیست … و این که اون #define led و داخل کد ها به کار نبرده شده

    • حمید گفت:

      سلام، خواهش میکنم ، این بخش stm8 خیلی پر دردسر شده برامون… مهندس علیزاده میفرستن و باید من بررسی کنم و اصلاح ولی متاسفانه وقت نمیکنم، حتما بررسی میکنم ، ممنون ک اطلاع دادین

  2. علی گفت:

    سلام
    خیلی عالی بود
    منتظر SPI هستیم….!
    دستتون دردنکنه بابت آموزش عالی و رایگانتون…!

  3. Hadi گفت:

    مهندس برو تو کار راه اندازی uart

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *