Например TDA7294

Форум РадиоКот • Просмотр темы - WatchDog Timer Сторожевой таймер в AVR
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт июл 18, 2025 02:30:21

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 231 ]    , , , , 5, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: WatchDog Timer в AVR
СообщениеДобавлено: Пт фев 07, 2014 13:40:45 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19714
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Итак, товарищи.
Все темы непосредственно о стороже я собрал в одну и прилепил, благо они не пересекаются по времени.

Хотелось бы чтобы кто-нибудь поделился опытом использования САБЖа по "прямому" назначению, т.е. контроль за зависанием МК, а не вывод из спящего режима или ещё что, как то:
— как часто пользуется;
— на каком этапе написания кода / разработки алгоритма он продумывается;
и т.д. и т.п.

Делаю приборчик с автоотключением питания и боюсь что если МК зависнет, то аккумы сядут в ноль :)))

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср фев 26, 2014 15:12:32 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
подскажите правильна ли реализация сторожевого таймера (AVRStudio5)
особое внимание к строчкам с !!!!!!!!!!!

Код:
#include <avr/io.h> \\attiny13A
#include <avr/interrupt.h>
unsigned char k;

//из даташита скопировано       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
void WDT_off(void)
{
cli();
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF);
/* Write logical one to WDCE and WDE */
/* Keep old prescaler setting to prevent unintentional time-out */
WDTCR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCR = 0x00;
sei();
}


ISR(ADC_vect)
{
   k++;
   if (k>20)
   {
      asm ("wdr");              !!!!!!!!!!!!!!!!!!!!!!!!!
      ....что-то тут еще делается...
                                 .................
   k=0;
   }
}

int main(void)
{
   DDRB = 0b00000011;
   PORTB = 0b00000000;
   ADMUX = 0b00100010;
   ADCSRA =0b11111111;
   WDT_off(); вроде как инициализация?     !!!!!!!!!!!!!!!!   
                 sei(); // Глобально разрешаем прерывания
    while(1){}
}


вроде работает но мало ли...
Заранее спасибо.


Последний раз редактировалось Gudd-Head Чт фев 27, 2014 12:11:12, всего редактировалось 1 раз.
Сюда перенёс


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср фев 26, 2014 18:45:04 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
вроде как инициализация?


Э-э-э, ну, так-то это, вообще-то выключение сторожевого таймера...

А к слову, зачем он Вам вообще нужен? Обычно в 90% случаев в нем нет особой необходимости.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср фев 26, 2014 19:47:58 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
есть, т.к. зависает очень часто, скорее всего из-за помех от релюшек.
да выключает, тогда почему работает? как его правильно тогда инициализировать?
фьюз то я активировал как сказано в даташите.
MCUSR
WDTCR
оба регистра надо выставлять или только последний?


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср фев 26, 2014 22:36:42 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 2
Цитата:
зависает очень часто, скорее всего из-за помех от релюшек


Проблемы с регулярными помехами надо решать прежде всего грамотной трассировкой и вдумчивым конструированием.

Цитата:
оба регистра надо выставлять или только последний?


Чтобы запустить таймер, делаем так:

1. Выставляем фьюз WDTON (либо включаем таймер битами в WDTCR).
2. В WDTCR выбираем нужное значение предделителя.

Все. Это описано в документации. Раздел 8.3.

MCUSR только содержит информацию о причине сброса.

Цитата:
тогда почему работает? ... фьюз то я активировал как сказано в даташите.


Из-за фьюза и работает. Фьюз имеет приоритет над настройками регистра. И это тоже написано в даташите.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт фев 27, 2014 08:30:46 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
аааа, если фьюз активирован, то программно счетчик уже не вырубить, вот поэтому то он и работает, правда предделитель на минимальном значении 16ms так как в WDTCR у битов предделителя должны быть все нули после WDTCR=0х00;.
а сброс счетчика получается я правильно реализовал?


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт фев 27, 2014 10:13:30 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
YS писал(а):
А к слову, зачем он Вам вообще нужен? Обычно в 90% случаев в нем нет особой необходимости.

Я бы сказал что он обязательно нужен в устройствах, работающих непрерывно. А такие достаточно частое явление, кмк :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт фев 27, 2014 10:29:54 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
Еще обязательно нужен, если девайс питается от батареек и никогда не выключается, то есть спать ложится.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт фев 27, 2014 12:00:54 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 2
Цитата:
Я бы сказал что он обязательно нужен в устройствах, работающих непрерывно.


Зависит от критичности устройства. Если устройство неответственное (от него не зависят жизни) и стоит рядом с человеком, то проще в случае чего тыкнуть сброс/передернуть питание. Вообще, мне крайне редко встречались такие отказы.

Ну а если устройство стоит где-то на чердаке или в скважине, до него лезть два часа чтобы перезагрузить, оно работает круглосуточно и необслуживаемо, то там, конечно, стоит заморочиться на watchdog (может даже внешний).

В любом случае, простое включение watchdog'а и его тупое обнуление в цикле не принесет пользы. Всегда надо тщательно думать, как оптимальнее расположить команды сброса оного, чтобы таймер обеспечивал надежность, а не просто был включен. Это отдельная задача, и не всегда имеет смысл над ней думать, учитывая частоту таких отказов.

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт фев 27, 2014 12:09:31 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19714
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
YS писал(а):
В любом случае, простое включение watchdog'а и его тупое обнуление в цикле не принесет пользы.

Почему же... Вы, коллега, видимо не сталкивались с таким явлением, когда из десятка одновременно круглосуточно работающих одинаковых устройств примерно раз в неделю кто-то из них зависает. И отвисает обычным ресетом (не по питанию) МК.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт фев 27, 2014 20:43:32 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Цитата:
Почему же...


Если функционал расположен (бывает такое, конечный автомат, например) в главной программе, а WDT циклически обнуляется в прерывании (есть любители такое делать), то как бы по факту все ни висело, WDT не поможет... Это самое первое, что приходит в голову.

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

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт фев 27, 2014 21:07:18 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
YS писал(а):
а WDT циклически обнуляется в прерывании

ну право же, это крайность :)
Согласен, что ресет собаки надо делать осмысленно. Использовать его ведь ничего не стоит. Почему ж не поставить, если это повышает стабильность работы устройства? Хотя бы теоретически. Приведу пример - электронные счетчики, электроэнергии, воды, газа... Что будет если он зависнет? Плохо будет :) А если рестартанет, то и фиг с ним. В Швеции ребята рассказывают, на группу счетчиков стоит большой "ресеттер" раз в сутки их перезапускающий, но это уже конечно крайность и криворукость в изготовлении.
Второй момент это использование собаки в сложных системах из десятков-сотен модулей, порой сторонних. Ничего не стоит использовать эту штуку, а опять же, стабильность повышает. Если быть аккуратным с прерываниями и многопоточными системами.
Одно дело писать кривой код, другое дело защитится от возможных помех и прочей ерунды. Жалко что-ли его включить :)
:beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт фев 27, 2014 21:24:02 
Друг Кота
Аватар пользователя

Карма: 74
Рейтинг сообщений: 1247
Зарегистрирован: Вс мар 29, 2009 22:09:05
Сообщений: 7517
Рейтинг сообщения: 0
Я только "за". :)) Просто я акцентирую внимание на том, что просто включение таймера - не панацея. Это лишь инструмент, сам по себе он ничего не улучшит, если не продумать архитектуру в соответствующем ключе. Факт очевидный, но важный. :beer:

_________________
Разница между теорией и практикой на практике гораздо больше, чем в теории.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт фев 27, 2014 23:03:41 
Собутыльник Кота
Аватар пользователя

Карма: 11
Рейтинг сообщений: 47
Зарегистрирован: Пн апр 06, 2009 19:33:29
Сообщений: 2512
Откуда: Молдова, Кишинев
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Согласен :) Просто я хотел сказать что проволоку плоскогубцами крутить легче все же чем пальцами :)
:beer:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Вс июл 27, 2014 18:01:19 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6027
Откуда: Minsk
Рейтинг сообщения: 3
YS писал(а):
что просто включение таймера - не панацея.


И еще - для программера соблазн не отлаживать дотошно прогу, чтоб все возможные программные зависы выковырять, а понадеяться на собаку.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Ср ноя 26, 2014 11:04:25 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Ср фев 29, 2012 01:58:32
Сообщений: 672
Откуда: Харьков, Украина
Рейтинг сообщения: 0
Народ, подскажите пожалуйста. Устройство на tiny25 работает от батареек. Функционал маленький, поэтому основное время контроллер будет спать. А просыпаться бы хотелось от сторожевого таймера. Накрапал код:

Код:
#include <avr/io.h>
#include <avr/interrupt.h>

ISR (SIG_WATCHDOG_TIMEOUT)
{
   PORTB ^= 0x01;
}

int main(void)
{
   DDRB = 0x01;
   
   WDTCR |= (1<<WDCE)|(1 << WDE);
   WDTCR |= (1 << WDIE)|(1 << WDP0);
   
   sei();
   
    while(1)
    {
        asm volatile("nop"::);
    }
}

Симулирую в proteus. Ничего с выводом PB0 не происходит. Перечитал несколько раз даташит, вроде все логично сделал. Может действительно я чего-то не догоняю или протеус не моделирует собаку?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Ср ноя 26, 2014 11:07:51 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19714
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Там вроде где-то задаётся что будет от переполнения собаки — сброс или прерывание.

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Ср ноя 26, 2014 11:13:01 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Ср фев 29, 2012 01:58:32
Сообщений: 672
Откуда: Харьков, Украина
Рейтинг сообщения: 0
И я о том же. Если верить табл. 8-2 на стр.45 даташита, то получается что при установленных битах WDE и WDIE собака работает и по переполнению вызывается прерывание. У меня эти биты установлены.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Ср ноя 26, 2014 11:15:20 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19714
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А помимо глобального, от самой собаки прерывание разрешено? А если не прерывание, а ресет?

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Ср ноя 26, 2014 11:32:56 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Ср фев 29, 2012 01:58:32
Сообщений: 672
Откуда: Харьков, Украина
Рейтинг сообщения: 0
Бит WDIE отвечает за прерывание от собаки. Я его взвожу. С ресетом проверил, работает отлично, контроллер перегружается.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 231 ]    , , , , 5, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y