1 (изменено: Mr. Green, 25-05-2017 01:28:57)

Тема: Аппаратный (Внешний) Watchdog для Ардуино.

Привет ребята,во первых хочу сказать спасибо за форум что он есть у нас,я тут новичок,с ардуино не так давно стал работать и не все тоже знаю,и возник вопрос,существует ли  Аппаратный Watchdog? то есть внешний Watchdog,и что бы в саму программу в писать сам код если зависла ардуинка,при зависании ардуинки что бы этот внешний Watchdog дергал пин ардуино,начитался про Watchdog ардуино и понял что не всегда он спасает,да и есть код где если в самой программе применить Watchdog то будет  работать не правильно,хочу послушать Гуру в этом деле,не знаю правильно ли я задал вопрос.

2

Re: Аппаратный (Внешний) Watchdog для Ардуино.

В Arduino есть аппаратный таймер Watchdog.
И работать с ним легко и просто.

#include "avr/wdt.h"

// WDTO_15MS, WDTO_30MS, WDTO_60MS, WDTO_120MS, WDTO_250MS, WDTO_500MS, WDTO_1S, WDTO_2S, WDTO_4S, WDTO_8S

void setup()
{
  // Запуск таймера watchdog.
  wdt_enable(WDTO_8S);
}

void loop()
{
  // Ваш код.  
  // ...
  // Сброс таймера watchdog.
  wdt_reset();
}

Но есть подводные камни.
Таймер сработает исправно, но bootloader не сбросит при перезагрузке его и Arduino уйдет в бесконечную перезагрузку.

Причины.
1. bootloader что зашит в Arduino скомпилирован без поддержки watchdog.
2. bootloader что зашит в Arduino скомпилирован с поддержкой watchdog, но были версии с багом где он не работал.

Как узнать что таймер не работает?
Если после срабатывания таймера светодиод Rx или Tx ушел в разнос и моргает с огромной скоростью в хаотичном порядке то - поздравляю ваше Arduino не поддерживает таймер watchdog.

Решение проблемы.
Перепрошить bootloader до более свежей версии.

Ссылки по теме.
https://geektimes.ru/post/255800/

Привет ребята,во первых хочу сказать спасибо за форум что он есть у нас

Спасибо.

что бы этот внешний Watchdog дергал пин ардуино

По поводу внешнего Watchdog.
Есть порт Reset, для того чтобы перезагрузить Arduino достаточно подтянуть его к земле на короткое время.
Для этого можно использовать как другую Arduino так и какое нибудь программируемое или настраиваемое реле с задержкой выключения/выключения.

3 (изменено: Mr. Green, 26-05-2017 14:20:52)

Re: Аппаратный (Внешний) Watchdog для Ардуино.

genaonyx пишет:

В Arduino есть аппаратный таймер Watchdog.
И работать с ним легко и просто.

#include "avr/wdt.h"

// WDTO_15MS, WDTO_30MS, WDTO_60MS, WDTO_120MS, WDTO_250MS, WDTO_500MS, WDTO_1S, WDTO_2S, WDTO_4S, WDTO_8S

void setup()
{
  // Запуск таймера watchdog.
  wdt_enable(WDTO_8S);
}

void loop()
{
  // Ваш код.  
  // ...
  // Сброс таймера watchdog.
  wdt_reset();
}

Но есть подводные камни.
Таймер сработает исправно, но bootloader не сбросит при перезагрузке его и Arduino уйдет в бесконечную перезагрузку.

Причины.
1. bootloader что зашит в Arduino скомпилирован без поддержки watchdog.
2. bootloader что зашит в Arduino скомпилирован с поддержкой watchdog, но были версии с багом где он не работал.

Как узнать что таймер не работает?
Если после срабатывания таймера светодиод Rx или Tx ушел в разнос и моргает с огромной скоростью в хаотичном порядке то - поздравляю ваше Arduino не поддерживает таймер watchdog.

Решение проблемы.
Перепрошить bootloader до более свежей версии.

Ссылки по теме.
https://geektimes.ru/post/255800/

Привет ребята,во первых хочу сказать спасибо за форум что он есть у нас

Спасибо.

что бы этот внешний Watchdog дергал пин ардуино

По поводу внешнего Watchdog.
Есть порт Reset, для того чтобы перезагрузить Arduino достаточно подтянуть его к земле на короткое время.
Для этого можно использовать как другую Arduino так и какое нибудь программируемое или настраиваемое реле с задержкой выключения/выключения.


Привет,это мне знакомо,но объясню по порядку.

Есть код написан для холодильника,есть ардуино про мини куда записан этот код,успешно все работало до первого зависания через 2 месяца работы,дальше в коде есть таймер оттайки,так вот если сделать внутренний WDT то есть проблема, если написать как вы говорите то он сбрасывает постоянно это время оттайки для разморозки каждые 7-8 часов так как холодильник системой No Frost. Надеюсь что правильно изложил,спасибо за понимания.

Конечно можно и внутренний WDT применить,но для надежности нужно и внешний,так как даже в промышленном оборудовании используют и внешний WDT для надежности если зависла система.

Если решится моя проблема обязательно выложу сюда два моих проекта,есть еще Система вольт контроля 220в где тоже нужен внешний WDT.

Я не знаю можно ли здесь выкладывать внешние ссылки,но если что извините.

http://flprog.ru/forum/19-351-1

https://geektimes.ru/post/255800/

http://arduino.ru/forum/programmirovani … up-i-reset

4

Re: Аппаратный (Внешний) Watchdog для Ардуино.

Конечно можно и внутренний WDT применить,но для надежности нужно и внешний,так как даже в промышленном оборудовании используют и внешний WDT для надежности если зависла система.

Дело в том что порт Reset это обычный порт. И разницы во встроенном WDT и Reset - нет, и то и то обрабатывает bootloader. Тогда вам надо рубить полностью питание.

Есть код написан для холодильника,есть ардуино про мини куда записан этот код,успешно все работало до первого зависания через 2 месяца работы,

Думаю что ошибка не аппаратная, а программная.
Предполагаю что вы активно используете функцию millis(), счетчик которой переполняется примерно каждые 50 дней.
Это надо проверять и обрабатывать.
В статье где я обозреваю FLProg есть пример таймера который он генерирует, так вот этот таймер с проверкой на переполнение.
http://arduino.on.kg/obzor-FLProg-chast-1

дальше в коде есть таймер оттайки,так вот если сделать внутренний WDT то есть проблема, если написать как вы говорите то он сбрасывает постоянно это время оттайки для разморозки каждые 7-8 часов так как холодильник системой No Frost.

То же что и выше + часы реального времени, думаю разморозка на минуту, две, три, пять раньше или позже холодильнику не повредит.

Ну а без примера скетча, мало что могу вам еще сказать.

5

Re: Аппаратный (Внешний) Watchdog для Ардуино.

genaonyx пишет:

Конечно можно и внутренний WDT применить,но для надежности нужно и внешний,так как даже в промышленном оборудовании используют и внешний WDT для надежности если зависла система.

Дело в том что порт Reset это обычный порт. И разницы во встроенном WDT и Reset - нет, и то и то обрабатывает bootloader. Тогда вам надо рубить полностью питание.

Есть код написан для холодильника,есть ардуино про мини куда записан этот код,успешно все работало до первого зависания через 2 месяца работы,

Думаю что ошибка не аппаратная, а программная.
Предполагаю что вы активно используете функцию millis(), счетчик которой переполняется примерно каждые 50 дней.
Это надо проверять и обрабатывать.
В статье где я обозреваю FLProg есть пример таймера который он генерирует, так вот этот таймер с проверкой на переполнение.
http://arduino.on.kg/obzor-FLProg-chast-1

дальше в коде есть таймер оттайки,так вот если сделать внутренний WDT то есть проблема, если написать как вы говорите то он сбрасывает постоянно это время оттайки для разморозки каждые 7-8 часов так как холодильник системой No Frost.

То же что и выше + часы реального времени, думаю разморозка на минуту, две, три, пять раньше или позже холодильнику не повредит.

Ну а без примера скетча, мало что могу вам еще сказать.

Моя почта kamal1953@mail.ru  если можете скиньте свой номер телефона.

Про millis() вы правы он есть в коде. две три минуты погоды не сыграют,он постоянно скидывает время.