Библиотека для управления WDT на AVR ATmega328p/32U4/2560 & ATtiny85/84/167
- Настройка режима работы WDT
- Настройка прерываний
AVR ATmega328p/32U4/2560 & ATtiny85/84/167
К библиотеке есть расширенная документация
- Библиотеку можно найти по названию GyverWDT и установить через менеджер библиотек в:
- 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 prescaler); // включить WDT с настройками
// mode:
// RESET_MODE - сброс при зависании (при тайм-ауте WDT)
// INTERRUPT_MODE - прерывание при зависании (при тайм-ауте WDT)
// INTERRUPT_RESET_MODE - первый таймаут - прерывание, второй - сброс
// prescaler:
// WDT_PRESCALER_2, WDT_PRESCALER_4... WDT_PRESCALER_1024
Остальные примеры смотри в 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, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код