У кого виснет WatchDog таймер на atmega 2560 и 1280 на стандартном загрузчике Ардуино или при загрузке программы из MPALB.
Чтобы починить есть 2 варианта.
Использовать плату в ардуино MegaCore. В ней загрузчик, который не подвешивается сработкой Watchdog таймера. (в гуле находится легко).
При стандартном ардуиновском загрузчике работать вочдог не будет. И в MPLAB тоже.
Но можно запустить чтобы работал и это вариант 2.
Загружать надо скетч через программатор.
И в программу в любом месте вставить вот это:
// Функция, которая выполняется до main() и отключает нежданную перезагрузку по WDT
attribute((naked, section(".init3"))) void early_wdt_config() {
// Проверяем, был ли сброс из-за WDT
if (MCUSR & (1 << WDRF)) {
// Сбрасываем флаг WDRF, который показывает что перезагрузка была по вочдог в регистре.
MCUSR &= ~(1 << WDRF);
// Отключаем WDT
wdt_disable(); // Встроенная функция AVR-GCC для отключения WDT
}
}
Все это касается компилятора avr-gcc. Для других не проверялось.