Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/33: Рейтинг темы: голосов - 33, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
1

Пробуждение по watchdog

15.04.2017, 21:43. Показов 6163. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток.
На старом АТ90S нужно уйти в сон, проснуться по watchdog, убедиться что событие не произошло, и опять уйти в сон.
Делаю так:
Код
.def   flags      =r17
#define   yes_pack   flags,1

.cseg
; много всякой инициализации
outp   MCUCR,(1<<SE)|(0<<SM)      ; Change Idle Mode (макрос)
outp   WDTCR,   (0<<WDTOE)|(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0) ; (макрос)
Woyt:
WDR
sleep
sbrs   yes_pack ; проснулись смотрим событие
rjmp   Woyt
cbr   yes_pack
sbi      Status_Led
; программа пошла дальше
И контроллер постоянно ресетиться. Что я не так делаю ?
Читал http://we.iosyitistromyss.ru/AVR/avr-po ... -spat.html , но все вроде как надо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2017, 21:43
Ответы с готовыми решениями:

Пробуждение приложения
Здравствуйте. Столкнулся с проблемой пробуждения приложения. Приложение - будильник. В определенный...

Самопроизвольное пробуждение
Добрый вечер! Возникла такая проблема: ноутбук с Win8 начал произвольно выходить из спящего режима....

MPU6050 пробуждение и сон
Читал даташит и там было написано что у этого датчика, наверно как и всех остальных есть режим сна...

Пробуждение ПК из режима сна
Всем привет) Подскажите пожалуйста как программно вывести ПК/Ноут из режима сна? Добавлено...

9
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
16.04.2017, 01:05 2
Неправильно куришь ДШ.

Сторожевой таймер (СТ) старых AVR перезапускает ядро МК с адреса 0.

Даже не всякие "новые" могут что-то другое.
Например, СТ Мега8 делает тоже самое, что и AT90S. А Tiny2313 можно настроить еще и на обработку прерывания. Т.е. изменить событию СТ вектор прерывания.

В статье по ссылке явно же указано "ISR (WDT_vect)".
Я хоть и не чирикаю, но приведенная запись явно указывает, что СТ (WDT) в данном примере вызовет процедуру обработки прерывания, а не сбросит программный счетчик в ноль.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 155
16.04.2017, 01:07 3
еще tiny13A умеет так
0
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
16.04.2017, 01:12 4
Цитата Сообщение от myshomy984
еще tiny13A умеет так
Например, СТ Мега8 делает тоже самое, что и AT90S. А Tiny2313 можно настроить
0
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
16.04.2017, 01:51 5
В меге8 единственный вариант - это после сброса анализировать причину сброса в регистре MCUCSR, но я где-то вычитал, что способ не гарантирует надежности, поэтому я от него отказался. Кроме того, оказалось геморно объяснить компилятору, что мне надо использовать переменные без инициализации, в которых бы хранилось состояние программы до сброса. Когда мне понадобилось минимизировать ток потребления в спящем режиме, но чтобы МК бы делал что-то полезное, я соорудил внешний генератор, который подавал прерывание 10 раз в секунду. Общее потребление составило около 15 мкА. Но лучше взять МК, который умеет прерываться по WDT - без лишних деталей и хлопот.
0
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
16.04.2017, 07:39 6
"геморно объяснить"
Сделал бы asm-ую вставку да и всё
0
0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
16.04.2017, 08:59 7
Цитата Сообщение от Fohyvis
Неправильно куришь ДШ.
Сторожевой таймер (СТ) старых AVR перезапускает ядро МК с адреса 0.
Даже не всякие "новые" могут что-то другое...
Спасибо, вопрос снят. Я просто впервые сон и собаку (одновременно) попробовал на 16(12) Пиках. И там описаный алгоритм легко реализовывалася (там тоже нет вектора под сброс по собаке, просто после сна контроллер начинает исполнять команды после слипа). Почему-то думал что АТ90 не менее совершенный контроллер в этом плане. А тут получаеться: либо экономичность (сон) в ущерб надежности (не используем собаку), либо без сна постоянно в цикле вертись и собаку сбрасывай (и получай повышенное потребление). Вот теперь затрудняюсь, что предпочесть... Каждый раз ресетиться не вариант, у меня инициализации 25 команд, пока все пройдет уже пол старт-бита по UART-у прозевать можно...
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
16.04.2017, 10:03 8
Дык собака - она и есть собака, она для конкретных задач сделана (ребутнуться, если мк завис).

Навороты (типа возможности повесить на прерывание) - это именно навороты для нецелевого использования. А просто выход из sleep по watchdog выглядит вообще беспределом.

Впрочем, на асме вообще не вижу проблемы. Можете даже реализовать именно так, как у вас сейчас код устроен:
1. Пишете процедуру, сохраняющую SP в память по заданному адресу и пишущую рядом "нигическое число" (а потом таки уходящую в сон)
2. Вместо sleep делаете call в эту процедуру
3. На risit проверяете нигическое число, если совпало - восстанавливаете SP и ret, иначе продолжаете инициализацию.
0
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
16.04.2017, 10:28 9
Цитата Сообщение от oomomstir
На risit проверяете нигическое число, если совпало - восстанавливаете SP и ret, иначе продолжаете инициализацию.
Если питание снизится где-то до 1.5в, а потом восстановится, испортится половина памяти и регистров. При этом нигическое число может уцелеть.
0
0 / 0 / 0
Регистрация: 28.01.2012
Сообщений: 499
16.04.2017, 18:14 10
Цитата Сообщение от Kmusmos
Я просто впервые сон и собаку (одновременно) попробовал на 16(12) Пиках. И там описаный алгоритм легко реализовывалася (там тоже нет вектора под сброс по собаке, просто после сна контроллер начинает исполнять команды после слипа)...
После какого слипа контроллер начинает? :))
0
16.04.2017, 18:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2017, 18:14
Помогаю со студенческими работами здесь

Планировщик заданий (Пробуждение ПК из сна)
Всем привет! Столкнулся с проблемой пробуждения ноутбука из сна. Имеется две задачи, одна...

Планировщик заданий - пробуждение компьютера
Здравствуйте, есть нужда создать на нескольких компьютерах задачу для пробуждения компьютера каждую...

Пробуждение микроконтроллера по прерыванию с АЦП
Всем привет, Разрабатываю систему, которая должна постоянно следить за уровнем шума вокруг, и, раз...

Atmega 324PA UART и пробуждение.
Добрый вечер. Подскажите пожалуйста. Мне нужно пробуждать Atmego324PA из Power-save приходящим по...

Не работает пробуждение по расписанию в Windows 7 с grub2
Добрый день. Есть необходимость сделать автоматическое пробуждение ноутбука из режима гибернации...

Как отключить пробуждение компьютера по таймерам?
Я замучался с этими произвольными включениями. на windows 8 было ок всё, а 10ка постоянно...

Пробуждение STM32F401 по временному интервалу (РЕШЕНО)
Дорогие форумчане, в настоящий момент разрабатываю приложение на ST32f401 чипе и есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru