نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه

آموزش جامع 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. این ۴ مورد بالا رو بعدا تکمیل میکنم….ولی اگه یادم رفت یاد آوردی کنید…تاریخ انتشار مطلب که معلومه….

 


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

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


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

پسورد فایل های سایت :
www.dmf313.ir
جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. ان‌شاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
ارسال دیدگاه
49

1) تعداد حروف فارسی از حروف غیر فارسی بیشتر باشه دیدگاه جفنگ/اسپم محسوب میشه.

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

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. مهمان

    مجتبی

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

    1397/01/31
    05:31
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1397/01/31
      09:20
  2. مهمان

    amir

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

    1397/01/10
    04:21
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1397/01/11
      10:52
  3. مهمان

    سامان

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

    1396/12/18
    09:06
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1396/12/19
      02:33
  4. مهمان

    vhd

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

    1396/09/09
    09:04
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1396/09/10
      05:58
  5. مهمان

    ناشناس

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

    1396/05/27
    07:13
  6. مهمان

    محسن

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

    1396/05/15
    10:08
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1396/05/18
      08:14
    • مهمان

      Master

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

      1397/06/28
      12:27
  7. مهمان

    علیرضا آهنی

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

    1396/02/02
    02:28
  8. مهمان

    پیمان

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

    1395/11/11
    04:26
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1395/11/11
      05:29
  9. مهمان

    emad

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

    1395/11/06
    08:40
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1395/11/06
      09:10
  10. مهمان

    امیر

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

    1395/10/30
    09:47
  11. مهمان

    علی

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

    1395/09/15
    04:49
  12. مهمان

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

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

    1395/06/27
    08:02
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1395/06/27
      08:15
  13. مهمان

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

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

    1395/06/27
    07:52
    • نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      کدویژن

      1395/06/27
      08:04
  14. مهمان

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

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

    1395/06/23
    08:22
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1395/06/23
      08:28
  15. مهمان

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

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

    1395/06/23
    06:56
    • نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      میشه.
      مطلب زیر رو بخون – اون ماژول – مدار داخلیش رو ببینی متوجه میشی باید چیکار کنی.
      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/

      1395/06/23
      08:30
      • مهمان

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

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

        1395/06/28
        09:30
        • نویسنده این مطلب

          مهدی دمرچیلو

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

          1395/06/28
          10:08
  16. مهمان

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

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

    1395/06/23
    05:32
  17. مهمان

    یاسر

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

    1395/06/11
    01:52
  18. مهمان

    ehsan

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

    1395/05/11
    04:19
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1395/05/11
      04:38
      • مهمان

        ehsan

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

        1395/05/11
        05:02
        • نویسنده این مطلب

          مهدی دمرچیلو

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

          1395/05/11
          05:38
          • مهمان

            ehsan

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

            1395/05/13
            09:42
          • نویسنده این مطلب

            مهدی دمرچیلو

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

            1395/05/13
            09:53
  19. مهمان

    حسام

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

    1395/03/07
    06:54
  20. مهمان

    هادی

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

    1394/12/24
    08:27
  21. مهمان

    حسین

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

    1394/11/22
    10:49
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1394/11/23
      11:57
      • مهمان

        حسین

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

        1394/11/23
        01:41
        • نویسنده این مطلب

          مهدی دمرچیلو

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

          1394/11/23
          02:42
  22. مهمان

    sajad

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

    1394/11/08
    12:23
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1394/11/08
      01:51
      • مهمان

        sajad

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

        1394/11/08
        08:06
  23. مهمان

    ممد

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

    1394/10/27
    10:56
  24. مهمان

    sajad

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

    1394/10/26
    08:29
    • نویسنده این مطلب

      مهدی دمرچیلو

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

      1394/10/26
      09:17