Например TDA7294

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





Текущее время: Пн июл 07, 2025 07:44:01

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


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



Начать новую тему Ответить на тему  [ Сообщений: 231 ]     ... , , , , 12
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Сб янв 01, 2022 17:53:07 
Это не хвост, это антенна
Аватар пользователя

Карма: 15
Рейтинг сообщений: 214
Зарегистрирован: Пт дек 10, 2021 12:48:46
Сообщений: 1455
Откуда: Тюмень
Рейтинг сообщения: 0
Мысль то возможно правильная но не очевидная если честно.....

Всё очевидно… :)) это касается не только этого конкретного МК… возьмите любой другой AVR перекомпилируйте свой код и получите всё тоже самое. Так как в Вашем случае включение и настройка сторожевого таймера происходила по условию в "середине" алгоритма, а не вначале как в классических случаях. Потому и такой подводный камень был найден… при классическом варианте, когда настройка данного таймера производится в начале алгоритма, такого эффекта Вы бы не встретили. А вот в Вашем случае такие моменты необходимо предусматривать. Что и подтвердилось при добавлении в самом начале процедуры отключения сторожевого таймера. На это указывал и тот момент, когда Вы отключали питание МК полностью. Так как при вновь поданном напряжении сторожевой таймер ещё отключен и потому не вносил своего влияния. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Пт апр 01, 2022 12:45:41 
Прорезались зубы

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 216
Рейтинг сообщения: 0
Подниму тему собаки. Не могу разобраться с watchdog в Atmega88/
Задумано включить таймер в режим прерывания и сброса. Если я правильно понимаю, по первому срабатыванию таймера должно вызываться прерывание, по следующему, если не было сброса wdr, уже генерится сброс контроллера.
Код инициализации:
Код:
asm("wdr");   
   MCUSR &= ~(1<<WDRF); /* Clear WDRF in MCUSR */   
   WDTCSR |= (1<<WDCE) | (1<<WDE);   /* Write logical one to WDCE and WDE */   
   WDTCSR = 0x00;   /* Turn off WDT */
   //WD Timer initialization---------------------------------------------------------------------------------------------   
   wdt_enable(WDTO_1S); // период 1 сек
   WDTCSR |= (1<<WDCE) | (1<<WDE)| (1<<WDIE);//разрешить прерывания от WDT

т.е. задаем период и разрешаем прерывания от сторожевого таймера.
Обработка прерывания
Код:
ISR(WDT_vect)
   {
      asm("wdr");   
      WDTCSR |= (1<<WDIF); // Clear WDIF 
      wdt_enable(WDTO_1S);
      WDTCSR |= (1<<WDCE) | (1<<WDE)| (1<<WDIE);//разрешить прерывания от WDT
      ++seconds;
      flag_CLOCK = _ON;
   }

собственно в прерыании происходит сброс таймера командой wdr и перезапуск его.
В симуляции Atmel Studio все работает как задумано. В Proteus и в реальном железе работать не желает. Мозг уже сломал, взываю к чужому разуму.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Пт апр 01, 2022 12:53:50 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18401
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
для начала используйте только средства, которые вам предоставляет библиотека компилятора: wdt_reset, цве_утфидуб не работайте с WDTCSR напрямую, кроме того раза, когда настроили прерывания.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


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

Карма: -5
Рейтинг сообщений: -18
Зарегистрирован: Ср янв 11, 2012 11:55:51
Сообщений: 216
Рейтинг сообщения: 0
спасибо. Убрал строку с WDTCSR -- в железе работает. Вопрос закрыт


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт июн 08, 2023 16:57:49 
Открыл глаза

Зарегистрирован: Вт июн 11, 2019 17:08:25
Сообщений: 42
Рейтинг сообщения: -7
Столько возни со сторожевым.
Я вешаю на "ресет" транзистор и с любого пина сбрасываю ,когда захочу и во время делея и в любое другое.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт июн 08, 2023 20:16:02 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 878
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 6012
Откуда: Minsk
Рейтинг сообщения: 0
С любого пина этого же МК? Так для этого нужно, чтобы сработал участок кода, "пинающий" этот пин. А смысл же "собачки" - вывести МК из состояния, когда прога в нём крутится хрен_где_поймёшь и не пинает периодически "собачку", и не получив пинка, она ресетит МК.

_________________
Изображение


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт мар 21, 2024 08:55:11 
Вымогатель припоя
Аватар пользователя

Карма: 5
Рейтинг сообщений: 10
Зарегистрирован: Ср дек 08, 2010 19:03:17
Сообщений: 591
Рейтинг сообщения: 0
ATmega328 - WDTCSR[WDE] и MCUSR[WDRF] - сокральный смысл?!

по даташиту
Код:
### WDTCSR[WDE] Watchdog System Reset Enable

WDE is overridden by WDRF in MCUSR.
This means that WDE is always set when WDRF is set.
To clear WDE, WDRF must be cleared first.
This feature ensures multiple resets during conditions causing failure, and a safe start-up after the failure.

итак, имеем
Код:
MCUSR  - MCU Status Register
WDTCSR - Watchdog Timer Control Register

конкретно:
Код:
WDTCSR[WDE]  - Watchdog Timer Control Register
MCUSR [WDRF] - Watchdog System Reset Flag

если
Код:
WDTCSR[WDE] = 1

то, если срабатывает "Watchdog System Reseт" то устанавливается флаг
Код:
MCUSR [WDRF] = 1

что в свою очередь ведет к "переустановке"
Код:
WDTCSR[WDE] = 1

но он уже установлен в 1цу

и наоборот, если
Код:
WDTCSR[WDE] = 0

то и "Watchdog System Reseт" - не сработает

короче, не понимаю я пока сокрального смысла взамиосвязи и переопределений
WDTCSR[WDE] и MCUSR[WDRF]

спасибо

_________________
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...


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

Карма: 5
Рейтинг сообщений: 10
Зарегистрирован: Ср дек 08, 2010 19:03:17
Сообщений: 591
Рейтинг сообщения: 0
с данной проблемой разобрался, спасибо всем! :о)

по ходу тестирования wdt - проявился странный артефак:
после того, как я отладил все что нужно с wdt, я перешел к отладке других частей кода, без wdt и тут... программа начала сбрасываться/перегружаться, как будто я использовал ваЧдоГ, но не сбрасывал его. перепробовал множество пассов (перепрошивка кода, сброс eeprom в дефолт, втч от arduino, манипуляции с фузами, но сам бит WDT_ON не трогал, есно, использовал онлайн калькулятор)... короче, ни чего не помогало, не мог найти "зацепку". после некоторого времени - хобана, прошивка заработал так как надо. ВО, думаЮ, ПОЙМАЛ ЗА КОКИ этот странный глюк (до этого перешивал версии фузов, уст/сброс фуза - "стирать/нет eeprom", что-то еще). решил откатить фузы обратно, как бы "до того", и ... опана! хренушки! ни чего не поменялось! попробовал другие варианты - аналогично, все на месте.

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

какие будут идеи, что это был?! (естественно, кривизна лап, хвоста и усов - ни куда ни делись, но все же...)
- сборка с пом-ю makefile, через make clean
- фуз WDT_ON не трогал

спасибки

_________________
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...


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

Карма: 5
Рейтинг сообщений: 10
Зарегистрирован: Ср дек 08, 2010 19:03:17
Сообщений: 591
Рейтинг сообщения: 0
###!!! UPDATE !!!###
уже не помню чем порешилось, но по моему "все по даташиту" - что-бы wdt не сбрасывал чип нужно было ... гм... отрубить питание :о)

_________________
Енот - это кот, только инкогнито!
p.s. держитесь обоими руками, а то прорвет...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт мар 06, 2025 09:53:41 
Встал на лапы

Зарегистрирован: Пн янв 13, 2025 15:24:02
Сообщений: 148
Рейтинг сообщения: 1
Мой сторожевой таймер присутствует во всех местах где должна быть активной программа в течении одного цикла это 1ms, обычно от 5_ти мест до 10. макрос подсчитывает количество мест где он установлен, потом счётчик увеличивается реальным кодом который внутри макроса, число которое в переменной и количество мест, вот основной макрос который разбрасывается везде где нужно, написан в AStudio на ASM2

Код:
.macro wdt_inc
   .set _WDT_v = _WDT_v + 1
   lds AL,M_WDT_v
   inc AL
   sts M_WDT_v,AL
.endm

после в распределителе задач сравнение и сброс если числа не совпадут. Опубликовал, может кому интересно будет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: WatchDog Timer Сторожевой таймер в AVR
СообщениеДобавлено: Чт май 29, 2025 21:31:28 
Грызет канифоль
Аватар пользователя

Карма: 4
Рейтинг сообщений: 96
Зарегистрирован: Вс окт 25, 2020 22:13:25
Сообщений: 296
Откуда: Смоленск
Рейтинг сообщения: 0
Land писал(а):
собственно в прерыании происходит сброс таймера командой wdr и перезапуск его

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


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

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


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

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 10


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

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


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