Pull to refresh

У кого виснет 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. Для других не проверялось.

Tags:
Total votes 3: ↑0 and ↓3-3
Comments1

Articles