Библиотека для управления WDT на AVR ATmega328p/32U4/2560 & ATtiny85/84/167 со старым загрузчиком.
- Настройка режима работы WDT
- Настройка прерываний
AVR ATmega328p/32U4/2560 & ATtiny85/84/167.
Warning
Библиотека не совместима с GyverWDT.h
!
- Библиотеку можно найти по названию BootWDT и установить через менеджер библиотек в:
- Arduino IDE
- Arduino IDE v2
- PlatformIO
- Скачать библиотеку .zip архивом для ручной установки:
- Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
- Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
- Распаковать и положить в Документы/Arduino/libraries/
- (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
- Читай более подробную инструкцию по установке библиотек здесь
- Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
- Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
Нет
/////////////// ФУНКЦИИ ///////////////
void reset(void); // сброс
void disable(void); // отключить WDT
void enable(uint8_t mode, uint8_t ps, void (*fn)()); // включить WDT с настройками
void enable(uint8_t mode, uint8_t ps); // включить WDT с настройками
void reboot(void); // перезагрузить МК (Программно)
void bootLoop(void); // Служебная функция boot loop
// mode:
// RESET_MODE - сброс при зависании (при тайм-ауте WDT)
// INTERRUPT_MODE - прерывание при зависании (при тайм-ауте WDT)
// INTERRUPT_RESET_MODE - первый таймаут - прерывание, второй - сброс
// ps (prescaler):
// WDT_PRESCALER_2, WDT_PRESCALER_4... WDT_PRESCALER_1024
// WDT_TIMEOUT_16MS, WDT_TIMEOUT_32MS... WDT_TIMEOUT_8S
// fn (function):
// Функцияб которая будет вызвана при прерывании.
/////////////// ПРЕРЫВАНИЯ ///////////////
void fn_name() {
// CODE
}
Остальные примеры смотри в examples!
#include <GyverWDT.h>
#include <avr/sleep.h>
/*
Пример использования watchdog в "будильника"
Зависимость таймаутов от делителей см. в GyverWDT.h
*/
void setup() {
pinMode(13, OUTPUT);
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Выбираем нужный режим сна
}
void loop() {
/* Мигаем светодиодом , а в паузах спим */
digitalWrite(13, HIGH);
Watchdog.enable(INTERRUPT_MODE, WDT_PRESCALER_128); // Режим прерываний , таймаут ~1c
sleep_enable(); // Разрешаем сон
sleep_cpu(); // Уходим в сон
digitalWrite(13, LOW);
Watchdog.enable(INTERRUPT_MODE, WDT_PRESCALER_128); // Режим прерываний , таймаут ~1c
sleep_enable(); // Разрешаем сон
sleep_cpu(); // Уходим в сон
}
/* Прерывание watchdog , в нем мы просыпаемся */
ISR(WATCHDOG) {
sleep_disable(); // Запрещаем сон
Watchdog.disable(); // Выключаем watchdog
}
- v2.1
- v2.2 - оптимизация и мелкие исправления
- v2.3 - исправлена ошибка компиляции на тини
При нахождении багов создавайте Issue, а лучше сразу пишите на почту mail.
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код