ايران ويج

نسخه‌ی کامل: اشکال در بکار گیری watchdog
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام . برای استفاده از Watchdog دچار مشکل شده ام هر کاری می کنم نمی افته و میکرو ریست نمیشه
برای تست یک برنامه نوشتم که یک عدد رو مرتب در حلقه while اضافه می کرد و می فرستاد روی پورت سریال اما هرچی منتظر شدم که میکرو ریست بشه و این عدد هم دوباره از صفر شروع بشه نشد که نشد
میکرو atmega16 و کریستال هم 12MHZ بود



// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/2048k
#pragma optsize-
WDTCR=0x1F;
WDTCR=0x0F;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

while (1)
{
i++;
itoa(i,str);
puts(str);
delay_ms(1000);

};
آقا هادی اگر امکان داره راهنمایی کنید
دلیل اینکه ریست نمیشه اینه که ، تابع delay_ms هر یه میلی ثانیه Watchdog رو ریست میکنه.
سلام .با تشکر منظورتان را متوجه نشدم لطفا کمی بیشتر را هنمایی کنید که منظورتان delay داخل حلقه while یا تنظیمات watchdog ایراد دارد چون تا آنجا که من می دانم برای ریست کردن watchdog باید از دستور اسمبلی #asm(‘wdr’) با ید استفاده شود که من در هیچکدام از خط ها از این دستور استفاده نکردم لطفا را هنمایی کنید . با تشکر :wink: :wink: :wink: :wink:
بله watchdog فقط با دستور wdr ریست میشه ولی در کتابخانه delay.h هم طوری تاخیر ها برنامه نویسی شدن که هر 1ms در داخلشون دستور wdr اجرا بشه.برای داشتن تاخیر، بدون ریست شدن واچداگ باید خودت زیرروالش رو بنویسی یا اون که کتابخونه delay.h رو تغییر بدی.