نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
مهدی دمیرچیلو

آموزش جامع AVR جلسه ۲۱ Introduction to Watchdog Timers

به نام خدا : تو این جلسه از آموزش AVR، انشالله میخوام به آموزش تایمر واچ داگ بپردازم.
آموزش جامع AVR جلسه ۲۱ Introduction to Watchdog Timers

آموزش جامع AVR جلسه ۲۱ Introduction to Watchdog Timers


مقدمه : سلام خدمت شما دوستان گل، چند وقتی نبودیم sorry ، از چند وقت یکم بیشتر، راسش فکرم مشغول بود یکم(فقط یکم bomb ) و درگیر یه موضوعی بودیم(که اگه پیگر مطالب سایت بوده باشید متوجه میشید موضوع چیه) لذا نتونستیم خدمت برسیم، البته همون موقع ها داشتیم یه چیزایی یاد میگرفتیم، مثلا من تجهیزات کار با قطعات Smd  رو گرفتم(و برا آموزش دادن آلتیوم و لحیم کاری و چیزای مرتبط اگه کسی سر فصلی چیزی داره بهم بده/بگه تا طبق اش بیام تو سایت آموزش و مطالبش رو تهیه کنم و بزارم – یکی از مشکلات من همین نبودن سرفصل هستش) و رفتم سمت qt که یه جیز تو مایه های c# هستش(برنامه نویسی کامپیوتر، هدف کنترل میکرو با کامپیوتر و موبایل و ارسال دیتای میکرو ها به کامپیوتر و مانیتورینگش هستش _فک کنم اصطلاحش همین باشه_ و qt از c# بهتره تا جایی که من خوندم)
 
داستان سفر من از خوزستان به تهران
داستان سفر من از خوزستان به تهران
داشتم از دانشگاه میومدم خونه، سوار اتوبوس بودم، از خوزستان میومدم تهران!!!، تو ماشین کنار یه افغانی نشسته بودم، سنی بود، اولش فک میکردم ایرانیه و شیعه هستش^_^، گفتم بچه کجایی گفتش زابل، گفتم کدوم استان میشه، دیدم هنگ کرد طرف، هیچی آقا آخر سر فهمیدیم افغانیه و این زابل یه استان از افغانستان هستش^_^،  آخه من فک میکردم زابل تو ایرانه، بگذریم، آقا بهش گفتم رهبر و مرجع تقلید شما کی هستش، دیدم باز هنگ کرد و اسم رئییس جمهورش رو به عنوان رهبر مطرح کرد، آقا حالا هی بگو این یارو یه شخصیت سیاسی هستش و نه مذهبی، بگذریم بازم(آخه تو عراق رفته بودم برا اربعین_همین امسال_ اونجا یکی از تفریحاتم این بود که از اونایی که باهاشون هم صحبت میشدم میپرسیدم رهبرو  و مرجع تقدیدتون کیه، آخه خیلی دوست دارم بدونم!، عراقی ها هم اکثرا میگفتن مرجع ام تقلید سیستانی هستش و رهبرم خامنه ای)، خب زیاد به حاشیه نریم(و بحث عراق بمونه برای مطالب بعد که خودش یه مطلب جدا میشه، اثلا نحوه عراق رفتن منو بشنوید شاخ درمیارید و….)، میگفتم این یارو افغانیه اسم مرجع تقلیدش رو که گفت دیدم تاحالا نشنیدم(حالا نه این که علمای افغانی رو میشناسم sarcastic )، آخر بهش گفتم یه سوال امکان داره بپرسم، ناراحت نمیشی، خندید و گفت بگو : گفتم شیعه هستی؟ گفت نه سنی ام، هیچی جان داش تا آخر شب داشتم باهاش صحبت میکردم و بحث میکردم(البته تو موضوعاتی که خودم اطلاعات داشتم و در اون زمینه مطالعه کردم قبلا)، هیجی بنده خدا یه سری شبهه نسبت به شیعیان داشت و می گفت شیعه این کار و اون کار رو میکنه که کار اشتباهی هستش(تقصیر اون بنده خدا نیستش چون تو اون فضایی که زندگی میکرده این تفکر حاکم بوده)، دوستمون هی میگفت: بحث فایده نداره چون من میگم عقیده من درسته و تو میگی عقیده من(هر کسی میگه عقیده خودش درسته)، من بهش گفتم حرفت درست ولی من میگم شرط صحت عقیده مطالعه هستش و نه تعصب و این که بگیم عقیده من درسته یا…، من میگم مطالعه، داشای گلم سرتون رو درد نیارم، هیچی بهش گفتم به جای پیش داوری و تعصب بیایم و کتاب های همدیگه رو مطالعه کنیم، گفتم یه کتاب هستش که یکی از علمای شیعه نوشته با عنوان “شیعه پاسخ میگوید” که آقای مکارم شیرازی نوشته این کتاب ۱۰ تا موضوع رو که سنی ها روش تاکید دارن و میگن که کار ما(شیعه ها) غلطه و کار خودشون درسته رو بحث کرده، شما میتونی این کتاب رو بخونی و دلایل کارهای ما رو متوجه بشی، بعد گفتم یه کتاب هم شما بهم معرفی کن یه کتابی معرفی کرد(ولی مثل کتابی که من بهش معرفی کرد نبود، مثلا کتابی معرفی نکرد که دلیل کارش رو بگه، چون این یارو افغانیه میگفت نماز شما غلط هستش، کتابی که معرفی کرد شیوه نماز صحیح از دید اهل سنت بودش و نه کتابی که بگه شیعه این کارش اشتباه هستش به این دلیل و اون دلیل.)، خب دیگه رمان نوشتم blush ، فعلا همین کافیه؛ بریم سراغ درس و مشغمون. laugh
 

تایمر واچ داگ چیست؟ / کاربرد تایمر واچ داگ؟

آموزش کار با تایمر واچ داگ
خب تایمر واچ داگ یا همون سگ نگهبان : یه مثال عملی یکی از دوستان زده بود که تو پروژش از تایمر واچ داگ استفاده نکرده بود و ببینید چه مشکلی براش پیش اومد : یه پروژه کنترل دما بود که  باید دمای محیط رو روی ۲۵ درجه نگه  میداشت ولی میکرو هنگ میکنه و دمای محیط همین طور زیاد میشه و میکرو نمیتونه به دستگاه خنک کننده دستور بده تا محیط رو خنک کنه(یا به دستگاه گرمایشی دستور بده تولید گرما رو متوقف کن یا کاهش بده) و یهو دمای میحط میبینی شده ۴۰ درجه و واویلا….، میای میبینی میکرو هنگ کرده و دیگه دستوراتی که بهش دادیم رو اجرا نمیکنه حالا اگه از تایمر نگهبان استفاده کرده بودیم اتفاق خوبی که میوفتاد این بود که وقتی میکرو هنگ میکرد، تایمر نگهبان میومد و میکرو رو از حالت هنگی! نجات میداد.(حتما میپرسید چطور، خب کاری که میکنه اینه که میاد میکرو رو ریست میکنه و به همین راحتی میکرو رو از حالت هنگ در میاره.) حالا این حالت خوبه بعضی وقتا میکرو هنگ میکنه کار های غیر عادی از خودش انجام میده که گاهی اوقات میتونه بدجور دردسر ساز بشه(این یه تیکه حرف یکی از دوستان بوده، من خودم تا حالا به همچین مشکلی برنخوردم که بفهمم میکرو چه عکس العملی از خودش نشون میده و…)
خب میدونم که همتون تا الان فهمیدید که تایمر واچ داگ یا همون تایمر نگهبان یا سگ نگهبان(زیاد مهم نیست بهش چی بگید ، تو حالت کلی میشه : تایمر سگ نگهبان، WatchDog Timer) چیه و میدونید که کارش اینه که وقتی میکرو هنگ کرد، میاد و میکرو رو ریست میکنه.
وسلام. ^_^
صلوات بفرست آقا…برای سلامتی برو بچه های مدافع حرم بفرست.(جان داش بفرستی ها، مثل ما تنبلی نکی یه وقت ^_^)
یه سری توضیحات از دیتاشیت مگا۱۶ در وصف Watchdog Timer : 

  1. فرکانس کاریش رو از یه اسیلاتور داخلی ۱MHz داخلی میگیره و لذا از فرکانس اصلی میکرو تغزیه نمیکنه.
  2. برا تعیین زمان ریست کردن میکرو توسط واچ داگ در دو ولتاژ ۳ و ۵ ولت به جدول ۱۷ مراجعه کنید(در ادامه مطلب عکسش رو گزاشتم)

 

آموزش تایمر واچ داگ / نحوه کار تایمر واچ داگ

خب حتما دوست دارید بدونید نحوه کار این تایمر چطوری هستش، بهتره با یه مثال ساده بیام و توضیح بدم :
فرض کنید یه پروژه نوشتید که در طول مثلا ۱۰۰ میلی ثانیه کل کدها اجرا میشن(حواستون هستش که ما کدهای پروژمون رو داخل While میزاریم لذا منظور من یه بار اجرای تموم کد ها بود یا به عبارتی یه بار اجرای کدهای داخل حلقه While)، حالا میخوام کاری کنم که وقتی میکرو هنگ کرد، میکرو ریست بشه، کاری که میکنم اینه که میایم داخل تابع Main تایمر واچ داگ رو فعال میکنم و همزمان هم تایمر واچ داگ شروع به شمارش زمان میکنه و هم زمان دستورات برنامه اجرا میشن، همون طور که گفتم کد برنامه در یه بار اجراش حدود ۱۰۰ میلی ثانیه طول میکشه و مثلا تایمر واچ داگ رو هم(به کمک ریجسترهاش) طوری تنظیم کردیم که بعد از شمارش ۱ ثانیه ریست میکنه میکرو رو، خوب میگفتم، داخل تابع Main میایم و تایمر واچ داگ رو فعال میکنیم و کدهای پروژه اجرا میشه و تایمر شروع به شمارش میکنه، و ته پروژه هم میایم تایمر واچ داگ رو Reset  میکنم.
 

سوال : منظور از Reset کردن تایمر واچ داگ چیه؟
جواب : همونطور که میدونید ما هی میگیم تایمر واچ داگ، تایمر هم که میدونید یه زمان رو میشموره و تو تایمر واچ داگ وقتی به زمان مورد نظر برسه تایمر میاد میکرو رو ریست میکنه و برای این که میکرو ریست نشه میایم و اون شمارنده تایمر واچ داگ رو ریست میکنیم(مقدارش رو ۰ میکنیم تا به مقدار مورد نظر نرسه و میکرو ریست نشه، با توجه به مثال بالا این زمان مورد نظر برای تایمر واچ داگ ۱ ثانیه هستش.)
حالا حتما میپرسید یه بار تایمر واچ داگ رو فعال میکنیم و بار بعد Reset، در جواب باید بگم که :
همون طور که گفتم تایمر واچ داگ میشموره و اگه این زمانی که میشموره به ۱ ثانیه برسه(حواستون هستش که این  ۱ ثانیه رو خودمون به کمک ریجستر ها تعیین کردیم) میکرو رو ریست میکنه، و لذا ما ته  پروژه میایم تایمر واچ داگ رو غیر فعال میکنیم، تا شمارش واچ داگ دوباره از ۰ شروع بشه و به ۱ نرسه و میکرو ریست نشه.(چون قراره فقط وقتی میکرو هنگ میکنه، تایمر واچ داگ بیاد و میکرو رو ریست کنه و نه هر زمانی)
خب حالا فرض کنید که برنامه ما که قرار بود ۱۰۰ میلی ثانیه طول بکشه هنگ کرد و این زمان هنگ کردن از ۱ ثانیه زیاد شد و برنامه هنوز تموم کدها رو اجرا نکرده میکرو هنگ میکنه و لذا دستور ریست کردن تایمر واچ داگ هم(که ته حلقه وایل گزاشتیمش) هم اجرا نمیشه، و این زمان هنگی بودن میکرو! اگه از ۱ ثانیه بیشتر بشه و تایمر واچ داگ شمارندش به ۱ ثانیه برسه میکرو رو ریست میکنه.
خب امیدوارم متوجه شده باشید، چون من خودم گیج شدم شما رو نمیدونم، البته اگه متوجه نشدید اشکالی نداره فدای سرتون، الان یه کد هم میزارم که قشنگ متوجه بشید (بعد از توضیحات ریجستر ها قرارش دادم، مطالب رو به ترتیب بخونید، پیلیز ^_^)
توضیح بهتر
به نظرم چند خط زیر رو هم بخونید(یکی از دوستان اینو این طوری توضیح داده که خوب توضیح داده و قاطی هم نمیکنید، ساده گفته) :
کار  WDTاین است که درمواقع هنگ کردن میکرو، میکرو را  Reset  می کنه.
طرز کار واچ داگ هم مانند یک تایمر معمولی یعنی مانند یک  counter/timer  شمارش می کنه و در فواصل زمانی مشخصی سر ریز می شه.
در  زمان سر ریز شدن، میکرو نیز  Reset  میشه.
چون که اگه واچ داگ رو فعال کنیم به صورت پی در پی میکرو رو Reset   میکنه برای اینکه برنامه رو با اشکال رو به رو نکنه باید قبل از سر ریز شدن واچ داگ، خودمون صفرش کنیم (ریست کنیم)
 

انواع روش کار با تایمر واچ داگ

 کدویزاردِ کدویژن :  خب کار خاصی انجام نمیده، حداثل برا مگا ۱۶ که این طور بود، توسط کدویزارد فقط میتونی تقسیم فرکانسی رو تعیین کنی.(لذا چون ارزش نداره، توضیحش نمیدم، البته نمیدونم برا مکیرو های خفن کدویزارد تنظیماتی داره یا نه، نگاه نکردم، و حالش رو هم ندارم، ولی اگه تنظیماتی داشت در قسمت بعدی این مطلب/برروزرسانی همین مطلب به این قسمت هم میپردازیم)
ریجستر ها : که در زیر توضیحش میدم.
 

ریجسترهای تایمر واچ داگ (سگ نگهبان، WatchDog و…)

قابل توجه دوستان گلم : خب این سگ نگهبان ما مثل این که فقط یه ریجستر داره که اونم ۵ بیتی هستش ^_^ و ۳ بیتش رزرو شده هستش.، این توضیحاتی که در زیر میگم اکثرش از دیتاشیت هستش اگه تو ترجمه سوتی داده بودم جایی اشتباه کرده بودم و …. لطفا بگید تا تصحیحش کنم(به هر حال همه باید به هم کمک کنیم تا یاد بگیریم، و تک خوری خیلی نامردیه جان داش)…در ضمن فایل مربوط به دیتاشیت مگا ۱۶ قسمت واچ داگش رو که ۳ صفحه هستش تقریبا رو از کل ۲۰۰-۳۰۰ صفحه دیتاشیت جدا کردم و ته مطلب گزاشتم(برید حالشو ببرید، ببینید چقدر حواتون رو دارم)…اگه خواستین بخونید و اشتباهات ترجمه رو تصحیح کنید(البته متن زیر رو بخونید خودتون میفهمید کجاها اشتباه/بد ترجمه کردم و….)
 

(WDTCR (Watchdog Timer Control Register :

Watchdog Timer Control Register
بیت های ۵ تا ۷ : غیر قابل استفاده هستن(رزرو شده هستن)، و باید هنگام مقدار دهی ریجستر WDTCR این بیت ها رو صفر کنید.
بیت۴، (WDTOE(Watchdog Turn-off Enable :
وقتی بیت (WDE(Watchdog Enable غیر فعال هستش(۰ هستش)، این بیت WDTOE رو باس ۱ کنی، در غیر این صورت تایمر واچ داگ غیر فعال نمیشه.(بیت WDTOE برای غیر فعال کردن تایمر واچ داگ بکار میره.)
یکبار که این بیت ۱ بشه سخت افزار بعد از ۴ کلاک پاکش میکنه.(کاربردش چیه نمیدونم، فقط متن دیتاشیت رو گزاشتم اینجا، کسی اگه متوجه شده بگه تا ما و بقیه دوستان هم بدونیم.)
بیت۳،(WDE(Watchdog Enable :
وقتی این بیت رو ۱ میکنید تایمر واچ داگ فعال میشه.(البته اگه قبلش تایمر واچ داگ غیر فعال بوده باشه) –> فعال کردن تایمر واچ داگ
و برای غیر فعال کردن تایمر واچ داگ هم باید این بیت رو ۰ کنید(و البته بیت WDTOE رو هم ۱ کنید که در بالا دربارش صحبت کردیم.)
بیت WDE تنها زمانی میتونه پاک بشه که که بیت WDTOE رو ۱ کنیم.(چیزی که من فهمیدم اینه که اگه بیت WDTOE  رو ۱ کنیم بیت WDE خودش صفر میشه و نیازی نیست صفرش کنیم_روال کاری غیر فعال کردن واچ داگ_، اگه اشتباه میگم دوستان تصحیح کنن.)
برای غیر فعال کردن تایمر واچ داگ ایی که فعال هستش باید :

  1. در شرایط(عملیات!) یکسان، هر دو بیت WDE و WDTOE باید ۱ بشن(باید ۱ شون کنید.)، حتی اگه بیت WDE قبل از این که عملیات غیر فعال کردن واچ داگ رو شروع کرده باشیم مقدارش ۱ بوده باشه(یعنی اگه هم از قبل مقدار بیت WDE یک بود باید در مرحله ۱ به همراه بیت WDTOE یکش کنیم.)
  2. تا قبل از گذشت ۴ کلاک مقدار بیت WDE رو باید صفر کنیم.
  3. تجربه عملی من : در این قسمت در مرحله ۲ فقط گفته بیت WDE باید صفر شود در حالی که در عمل باید تموم بیت های ریجستر WDTCR رو صفر کرد(البته با توجه به نمونه کد ته این قسمت در دیتاشیت)
  4. سوال من : بیت های ۵تا۷ که هیچ، بیت WDE هم که هیچ، ولی بیت WDTOE رو چرا باید ۰ کنیم و چرا باید بیت های ۰ تا ۲ که برا تعیین فرکانس واچ داگ هستش رو باید ۰ کنیم، این ۳ تا بیت رو اگه ۰ کنیم فقط زمان و فرکانس واچ داگ تغییر میکنه آخه این چه ربطیش به غیر فعال شدن واچ داگ!!!، کسی اگه جوابش رو میدونه بگه)

 
بیت های ۰ تا ۲(WDP2, WDP1, WDP0: Watchdog Timer Prescaler 2, 1, and 0) :
این ۳ تا بیت برای تعیین فرکانس کاری تایمر واچ داگ هستند(ضریب تقسیم فرکانس تایمر واچ داگ هستن)، که در جدول زیر مشاهده میکنید، که به ازای هر فرکانسی یه سری عدد بر حسب میلی ثانیه نوشته، در دو ولتاژ ۳ و ۵ ولت(ولتاژ تغزیه میکرو)، یعنی این که اگه مثلا فرکانس تایمر واچ داگ رو روی ۱۶K بزاریم، در ولتاژ ۵ ولت، تایمر واچ داگ بعد از حدود ۱۶٫۳میلی ثانیه میکرو رو ریست میکنه.
تعیین فرکانس کاری تایمر واچ داگ
 
در ضمن در زیر یه نمونه کد به دو زبان اسمبلی و سی رو میبینید که در کد C، این تابع، کارشون خاموش کردن تایمر واچ داگ هسش.(همون طور که در بالا گفتم و دیدید خاموش کردنش یکم دردسر هستش وگرنه روشن کردنش چیز خاصی نداره، بیت فعال ساز رو یک میکنی و بیت غیر فعال ساز رو صفر و به کمک ۳ بیت اول فرکانس کاری تایمر واچ داگ رو تعیین میکنی و تمام.)
C Code Example WDT
 

Reset کردن تایمر واچ داگ

خب در بالا ما نحوه فعال و غیر فعال کردن تایمر واچ داگ رو گفتم ولی نحوه Reset کردن تایمر واچ داگ رو نگفتم؛ برای این کار(ریست کردن تایمر واچ داگ) میتونید از کد اسمبلی زیر استفاده کنید.

سوال۱ : فرق بین ریست کردن تایمر واچ داگ با ریست کردن میکرو؟ آیا تایمر واچ داگ رو ریست کنم میکرو هم ریست میشه و بلعکس؟
جواب۱ : خب هر چند که در بالا تقریبا توضیح دادم ولی دوباره میگم : اولا واچ داگ یه تایمر هستش مثل تایمر های دیگه، و این که توسط ریجیتر های واچ داگ(که در بالا توضیح دادمشون) میایم و این زمان شمارش تایمر واچ داگ رو تعیین میکنیم، مثلا در پروژه زیر من زمان ۰٫۵ ثانیه رو ناتخاب کردم، یعنی تایمر واچ داگ از ۰ تا ۰٫۵ ثانیه میشموره و بعد میکرو رو ریست میکنه، ما میایم این ریجستری که این زمان داخلش ذخیره میشه رو مقدارش رو Reset میکنیم تا شمارش دوباره از ۰ شروع بشه.
و این Reset کردن ریست کردن یه ریجستر شمارنده هستش و نه ریست کردن میکرو، هر چند که اگه این مشارنده رو در زمان مناسب ریستش نکنی میاد و میکرو رو ریست میکنه.(لذا تایمر واچ داگ رو ریست کنی میکرو ریست نمیشه، ولی اگه میکرو ریست بشه شمارنده تایمر واچ داگ ریست میشه.)
 

پروژه تایمر واچ داگ

خب خب خب، الان میخوام با یه پروژه نمونه تا حد امکان به آموزش تایمر واچ داگ بپردازم.
شماتیک پروژه
آموزش تایمر واچ داگ
  
کدهای پروژه
توجه۱: برای این که برنامه شلوغ نشه اومدم برا روشن، خاموش و ریست کردن تایمر واچ داگ توابعی نوشتم که دیگه هر جای پروژه بخوام بتونم از تابعشون استفاده کنم و این طوری هم حجم برنامه کاهش پیدا میکنه و هم برنامه خواناتر میشه.
نحوه کار برنامه : همون طور که در شماتیک پروژه میبینید به پورت های A-B-D من به هر کدومشون ۸ تا LED وصل کردم، حالا در کدهای زیر اول اومدم بدون استفاده از تایمر واچ داگ اومدم این ۸ تا LED پورت A رو به ترتیب روشن کردم(۵ بار، با توجه به for اولی در خط ۳۸)، بعد میام و تایمر واچ داگ رو فعال میکنم و در زمان های مناسب ریستش میکنم و بعد میام خاموشش میکنم و ….(با کد های پروژه یکم ور برید و تجزیه تحلیلشون کنید متوجه میشید.)

 
فیلم پروژه بالا

سوال۱ : چطور متوجه میشی که تابع خاموش کردن واچ داگ به درستی عمل میکنه؟
جواب۱ : با توجه به کد های بالا، اگه تایمر واچ داگ خاموش نشه، در for آخر، که میخوایم LED های پورت D رو روشن کنید، در دفعه اول روشن شدن، ۵ تا LED اول روشن میشن و بعد میکرو ریست میشه و برنامه هیچگاه کد های داخل While رو اجرا نمیکنه.
 
سوال۲ : چطور متوجه میشی که تابع ریست کردن تایمر واچ داگ به درستی کار میکنه؟
جواب۲ : خب با توجه به این که من در خط ۲۵ اومدم تایمر رو تنظیماتش رو طوری انجام دادم به کمک رجستر اش که میکرو هر ۰٫۵ ثانیه(در صورت سر ریز شدن تایمر) ریست بشه، و حالا با توجه به for خط ۵۲ میایم و LED های PORTA رو به ترتیب روشن میکنیم، که با توجه به این که این حلقه ۸ بار اجرا میشه و یعنی ۸ تا ۵۰ میلی ثانیه که میشه ۴۰۰ میلی ثانیه که زمان مورد نیاز برای بررسی شرط های خود FOR توی خط ۵۲ و اجرا کردن کد تو خط ۵۴(به هر حال اجرا شدن اینا هم زمان مصرف میکنه دیگه) رو جمعا حساب کنی از ۰٫۵ ثانیه تایمر واچ داگ کمتر میشه، و بعد از این for ما اومدیم تایمر واچ داگ رو ریست کردیم، و اگه فیلم پروژه رو ببینید میبینید که led های پورت B به ترتیب از اول تا آخر روشن و خاموش میشن و این عمل ۵ بار تکرار میشه. و اگه تابع Reset درست کار نمیکرد سر دور اول که led های PORTB روشن شد، بعدش میکرو ریست میشد.........امیدوارم قاطی نکرده باشید.....کد ها رو ببینید و خودتون تجزیه و تحلیل کنید.
 
سوال۳ : چطور میفهمید که تابع روشن کردن تایمر واچ داگ درست کار میکنه؟
جواب۳ : خب شما اون تابع Reset توی خط ۵۷ رو بردارید ببنید که بعد از یک بار روشن شدن تمام led های PORTB میکرو ریست میشه یا نه.
 

سوالات و مشکلات تایمر واچ داگ

سوال۱ : آیا استفاده از watch dog تاثیری بر روی سرعت میکرو میزاره؟
جواب۱ : خب واچ داگ یه واحد سخت افزاری مجزا هستش که فرکانس کاریش رو از یه کریستال داخلی(داخل خود میکرو هستش) میگیره و با فرکانس کاری میکرو(که ما معمولا ۸ میگ میگیریمش) کاری نداره(منبع کلاک سگ نگهبان مجزا از منبع کلاک های دیگه هستش.)، این تایمر واچ داگ خودش یه کریستال ۱ میگ مجزا برا خودش داره که ما همون طور که در بالا گفتیم(تو قسمت ریجستر ها) به کمک ۳ بیت اول رجستر WDTCR میایم و این فرکانس ۱ میگ رو تقسیم بر یه عددی میکنیم و میدیم به تایمر واچ داگ.
سوال۲ : چرا از تابع delay_ms که در پروژه استفاده میکنم پروژه درست کار نمیکنه(انگار تایمر واچ داگ مشکلی داره)؟
جواب۲ : تو کامپایلر کدویژن تابع delay_ms هر یک میلی ثانیه واچ داگ رو ریست میکنه ولی تابع delay_us اینکارو نمیکنه.(اینم یکی از محدودیت های کدویژن هستش.)
سوال۳ : نحوه محاسبه زمان اجرای برنامه؟(زمانی که طول میکشه برنامه ما یه بار اجرا بشه، مثلا یه برنامه نوشتین که اطلاعات رو از پورت serial میگیره مثلا و تو lcd نشون میده و حالا مدت این کار، همین دریافت اطلاعات و نمایش دادن چقدر طول میکشه، الان دیگه فک کنم همه فهمیدن تقریبا که منظروم چیه.)
 

لینک های مفید

  1. آموزش WATCHDOG  میکروکنترلر AVR در زبان بیسیک : راه اندازی WATCHDOG در بسکام
  2. آموزش واچ داگ در آردوینو : Using the Internal WatchDog Timer for the Arduino
  3. طراحی یه مدار مجزا از میکرو با کاربردی همانند واچ داگ : مدار ضد هنگ میکروکنترلر

دانلود پروژه مدار ضد هنگ میکرو

کار های انجام نشده من

  1. نوشتن یه کتابخونه برای ساده شدن کار با واچ داگ در کدویژن | دانلود یه کتابخونه برای واچ داگ و توضیح دادنش(که چطور این کتاب خونه رو نوشتن و …)
  2. گفتن تفاوت تایمر واچ داگ در میکرو کنترلرهای مختلف AVR (و بر این اساس کتاب خونه رو طراحی کنم)
  3. پاسخ به سوال ۳ در قسمت “سوالات و مشکلات تایمر واچ داگ”
  4. توضیح دادن و آموزش دفترچه! توضیحات تایمر واچ داگ(تو فایل ته مطلب تو اون فایل Zip گزاشتمش)
  5. این ۴ مورد بالا رو بعدا تکمیل میکنم….ولی اگه یادم رفت یاد آوردی کنید…تاریخ انتشار مطلب که معلومه….

 


خب در فایل زیر پروژه این مطلب، ۳ صفحه مربوط به تایمر واچ داگ از دیتاشیت مگا۱۶، یه دفترچه! توضیحات تایمر واچ داگ! رو گزاشتم، میتونید دانلود کنید:

دانلود پروژه واچ داگ + مخلفات


 
شرط(واجب و نه کافی) خودکفا شدن : خب سوال پرسیدن خیلی خوبه(بر منکرش لعنت)، ولی سرت تو اینترنت هم چیز خوبیه ^_^، باهاش میشه غلط املایی ها رو فهمید، چیزایی الکترونیکی یاد گرفت و…، کلا انگلیسیت خوب باشه و سرچ کردن تو نت و پیدا کردن مطالب، خیلی خوبه و سریع تو الکترونیک پیشرفت میشه کرد، چون به قول یه استادی این چیزای الکترونیکی که ما کار میکنیم و یاد میگیرم قبلا شونصد نفر انجام دادن و کار کردن و…
عذرخواهی : خوب این مطلب رو بنا به درخواست یکی از دوستان نوشتم ولی قرار بود ۲ روز پیش تو سایت قرار بگیره ولی بنا به مشکلاتی نتونستم، از همین جا اگه مطلب رو میشه باس بگم شرمنده داش بابت بد قولی که کردیم.
فعلا بیش از این مزاحم نمیشیم، هزینه استفاده از این مطلب هم اینه که دعا کنید ما به هدفمون و آزومون برسیم + یه ۳ تا صلوات برا صلامتی بروبچه های مدافع حرم.
یا علی.

گروه پرسش و پاسخ الکترونیکی در سروش
مهدی دمیرچیلو گوگل میفرماید : إِنَّ اللّه مَعَ الساچِرین ( خداوند با سرچ کنندگان است )
ارسال دیدگاه
55

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

4) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    حدیث

    سلام یه سوال داشتم زمانی که میکرو توسط واچ داگ تایمر ریست میشه پایه ی ریست میکرو هم toggle میشه؟
    چون من روی پایه ی ریست اسکوپ گذاشتم و تغییری نمیبینم

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

      سلام-
      پایه ریست میکرو مگه “فقط ورودی” نیست؟ دیتاشیت میکرو رو بررسی کنید –

      • Avatar

        مهمان

        حدیث

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

        • مهدی دمیرچیلو

          نویسنده این مطلب

          مهدی دمیرچیلو

          تا جایی که من میدونم پایه ریست میکرو ورودی هستش ( و پایه خروجی نیستش که شما دارید اینکار رو میکنید )

  2. Avatar

    مهمان

    کیوان

    سلام و سپاس از شما.
    یه سوال و اینکه، در کد بالا چه لزومی داره واچ داگ رو خاموش کنیم؟
    یعنی لازمه در اول حلقه تایمر رو روشن و در آخر بعد از ریست کردم خاموش کنیم؟
    اگه خاموش نکنیم مشکلی پیش میاد؟

    • مهدی دمیرچیلو

      نویسنده این مطلب

      مهدی دمیرچیلو

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

      یه زمانی رو مثلا 1 ثانیه میشموره.زمانی که شمارشش به 1 ثانیه رسید میکرو رو ریست میکنه.مگر این که قبل از سرریز شدنش بیایم و شمارندشو ریست میکنیم تا دوباره از 0 بشمره.

      حالا بعضی وقتا میکرو هنگ میکنه و دیگه امکان ریست کردن شمارنده اچ داگ رو نداریم.اون وقت واچ داگ شمارش 1 ثانیه اش تموم میشه و میکرو رو ریست میکنه.

      حالا یه مشکلی.اومدیم و تایمر واچ داگ هم هنگ کرد.اون وقت چی؟

      اینو خودم هم جوابشو نمیدونم.

  3. Avatar

    مهمان

    مجتبی

    سلام اقا مهدی یه سوال داشتم نمیدونستم کجا بپرسم اینجا پرسیدم :
    ارور نیمه یا نصفه زیر در پرتیوس چگونه رفع میشود؟؟؟
    [SPICE] MINRES10R#001B: resistance=0, set to 1000
    error:[SPICE] MINRES10R#001B: resistance=0, set to 1000
    ????????????????

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      نمیدونم والا – پروتئوس کار نمیکنم.

  4. Avatar

    مهمان

    amir

    سلام دوست عزیز این برنامه شما ارور میده،delay_us میگه خارج از محدوده هستش(مقدارش)

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-تست کردم خطایی نداره.

  5. Avatar

    مهمان

    سامان

    سلام ممنون از اموزش هات همین که بصورت عامیانه مینویسی و اموزش میدی خیلی خوبه . در ضمن زابل هم یکی از شهرهای ایران در استان سیستان و بلوچستان ِ rtfm

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      بله حرف شما درسته – ایران هم زابل داره و من هم اونجا رفتم ولی افغانستان هم “ولایت زابل” داره. ( همون شهر یا شهرستان یا استان – حالا کدوم معنی درست ولایت میشه رو نمیدونم – فک کنم استان باشه – نمیدونم دقیقا )

  6. Avatar

    مهمان

    vhd

    سلام
    ممنون از مطالبتون
    الان متوجه شدم تابع
    lcd_clear
    عملکرد ریست کردن واچ داگ رو مختل میکنه(دیگه ریست نمیکنه)
    راه حلی هست برای این مشکل؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-نمیدونم والا – هر چی فک میکنم میبینیم نباید تاثیری داشته باشه تو واچ داگ

  7. Avatar

    مهمان

    ناشناس

    ممنون از لطفتون

  8. Avatar

    مهمان

    محسن

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام- برا سرو هات ان شاء الله از درایور استفاده کردی دیگه؟ یا مستقیم زدی به میکرو؟
      به کمک سریال پروژتو دیباگ کن ببین مشکل کجاس

    • Avatar

      مهمان

      Master

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

  9. Avatar

    مهمان

    علیرضا آهنی

    سلام.
    من چند بار این مشکل رو پیداکردم………………………………………هنگ کردن میکرو.
    یبار قرار بود توال سی دی یه متن نمایش بده.
    ولی نوشته ها برعکس بود!!!!!!!!!!!!!!!!!!!!!!!

  10. Avatar

    مهمان

    پیمان

    اقا مهدی اتمگا ۸ واچ داگ نداره ؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      دیتاشیتش رو ببین – اول دیتاشیت امکانات میکرو ذکر میشه.

  11. Avatar

    مهمان

    emad

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

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

  12. Avatar

    مهمان

    امیر

    دمت خیلی خیلی گرمممممم مهدی جان

  13. Avatar

    مهمان

    علی

    مطالبت عالی ، عالی آموزش میدی دمت گرم

  14. Avatar

    مهمان

    مهدی محمد میرزایی از کرمان

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام، نوکرتم حاجی، این چه حرفیه آخه.

  15. Avatar

    مهمان

    مهدی محمد میرزایی از کرمان

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      کدویژن

  16. Avatar

    مهمان

    مهدی محمد میرزایی از کرمان

    سلام پیغام من به شما نمی رسد

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام-سرم شلوغ بود جواب ندادم – الان میدم.-پیامت میرسه

  17. Avatar

    مهمان

    مهدی محمد میرزایی از کرمان

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      میشه.
      مطلب زیر رو بخون – اون ماژول – مدار داخلیش رو ببینی متوجه میشی باید چیکار کنی.
      http://dmf313.ir/%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-lcd-%D8%A8%D9%87-%D8%A2%D8%B1%D8%AF%D9%88%DB%8C%D9%86%D9%88-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-i2c-protocol/

      • Avatar

        مهمان

        مهدی محمد میرزایی از کرمان

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

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

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

  18. Avatar

    مهمان

    مهدی محمد میرزایی از کرمان

    سلام مهدی جان ممنون از مطالب که گذاشتی من روز های مطالب شما می خوانم

  19. Avatar

    مهمان

    یاسر

    سلام خیلی آقایی مهندس

  20. Avatar

    مهمان

    ehsan

    سلام . خسته نباشید . میخواستم بدونم چطور میشه کاری کرد که بیشتر طول بکشه تا ریست کنه مثلا بعد از 10 ثانیه ریست کنه. ؟

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      برا چی میخوای این کارو بکنی؟ بگو تا راه روش اگه تو ذهنم بود بگم.
      چون در ظاهر کارت منطقی نیست.

      • Avatar

        مهمان

        ehsan

        می خوام از port serial یه پاسخ دریافت کنم. اگه پاسخ بعد از مدتی داده نشد میکرو رو ریست کنه دوباره درخواست کنه. اگه تو portserial ورودی نداشه باشم میکرو هنگ میکنه

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

          خب حتما یه جای کارت اشتباه هستش که میرو هنگ میکنه دیگه
          وگرنه میکرو نباید هنگ کنه
          تو کانال آپاراتم چند تا فیلم آموزش ارتباط سریال با وقفه تو Avr گزاشتم – ببینی ظرر نداره. (فیلم های “آموزش پروژه محور AVR به زبونC با کامپایلر کدویژن”)
          http://www.aparat.com/MD3848

          • Avatar

            مهمان

            ehsan

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

          • مهدی دمرچیلو

            نویسنده این مطلب

            مهدی دمرچیلو

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

  21. Avatar

    مهمان

    حسام

    بیت WDTOE اصلن تو atmega8a نیستش ! نمیدونم چرا ؟

  22. Avatar

    مهمان

    هادی

    مهندس ممنون
    برای سوال ۳ کاری که قبلا انجام دادم این بود که بجای delay_us از یک حلقه for بدون کد استفاده کردم که تاخیر حدودی رو ایجاد کنه.
    تو کدی که داشتم چون از پورت سریال استفاده کرده بودم و قرار بود رو lcd چیزی نشون بده و… اومدم چندین جای کد ، مثلا قبل و بعد ارسال به پورت سریال تایمر واچ داگ رو صفر کردم.
    عملا جاهایی که فکر می کنید زمان اجرا از حد حوصله واچ داگ بیشتر هست ، پیشنهاد میشه ، قبل یا بعدش (یا هردو) تایمر ریست بشه.
    ممنون

  23. Avatar

    مهمان

    حسین

    سلام آقا مهدی؛
    مطالب شما مثل همیشه خوب و آموزنده است.
    یه سوال: ممکنه میکرو طوری هنگ کنه که واچ داگ هم عمل نکنه؟
    یه نکته: این checkbox مربوط به (تمام پاسخ های جدید رو بهم(از طریق ایمیل) اطلاع بده) مثل اینکه کار نمیکنه آقا مهدی چون من پاسخ ها رو فقط از توی سایت میبینم ایمیل نمیشه برام.

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      چیزی در این مورد تا جایی که یادم هست تو دیتاشیت و جای دیگه ندیدم
      چون واچ داگ و میکرو ۲ سخت افزار مجزا از هم هستن اگه اشتباه نکنم……و منبع کلاکشون هم فک کنم مجزا از هم هستش و برا واچ داگ یه کریستال ۱ میگ داخلی مجزا وجود داره
      لذا هنگ کردن میکرو هیچ اثری روی واچ داگ نداره
      اونم بررسی میکنم الان.
      ممنون از اطلاع رسانیت داش

      • Avatar

        مهمان

        حسین

        خواهش میکنم خیلی آقایی. انشاء الله یک سیصد و سیزدهم بشی (;

        • مهدی دمرچیلو

          نویسنده این مطلب

          مهدی دمرچیلو

          نه بابا من اوضام خرابه sarcastic
          درکه نریم فعلا، جیز ۳۱۳ نفر شدن پیشکش

  24. Avatar

    مهمان

    sajad

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      پروژه ای تو این مایه ها تو سایت هستش..بگردی پیدا میکنی
      و این که برا ارسال داده تو کامپیوتر یه بحث Com داریم و یه بحث usb، که انتقال داده از طریق usb رو من بلد نیستم و شنیدم که سخته……اما یه بحثی هستش به نما port com که میای میکرو رو با یه مبدل به usb وصل میکنی(مستقیم وصل نمیکنی) و باهاش ارتباط برقرار میکنی
      برا این امر باید مطلب Usart رو بخونی و …. مطالب برا ارتباط میکرو و pc کم نیست تو سایت…
      امری بود در خدمتیم

      • Avatar

        مهمان

        sajad

        ممنون از پاسختون

  25. Avatar

    مهمان

    ممد

    حاجی نبودی
    راستشو بگو کجا رفته بودی

  26. Avatar

    مهمان

    sajad

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

    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      دقیقا متوجه منظروتون نشدم
      “برنامه های توی میکرو رو کامپیوتر اجرا کنه” یعنی چی دقیقا؟/ اگه امکان داره بیشتر توضیح بدید.