0 / 0 / 0
Регистрация: 07.04.2014
Сообщений: 137
1

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

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

Доброго времени суток.
На старом АТ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
Ответы с готовыми решениями:

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

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

WatchDog
Есть устройство на меге16 (пока на ней) которое тупо запоминает в EEPROM во сколько на одном из...

Внешний WAtchdog
Добрый день! Есть рабочее устройство на AVR! Надо к нему прикрепить внешний watchdog, тоесть...

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
Регистрация: 07.02.2106
Сообщений: 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
Регистрация: 07.02.2106
Сообщений: 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.04.2017, 18:14

AvrSudio и watchdog
Не могу дождаться чтобы аврстудия ушла в ресет или прерывание по вочдогу. В реале сбрасывает, а в...

Watchdog attiny13 и mega8.
Изучаю статью что то понять не могу нет бита WDIE в байте настройки ватчдога WDTCR? ..... ISR...

VMLab не выключает Watchdog Timer
Здравствуйте. Вроде сбрасываю Watchdog Timer - все по науке. Но VMLab пишет, что он не сброшен и...

как включить watchdog avr, напишите кто нибудь код на asme
как включить watchdog avr, напишите кто нибудь код на asme, что бы по вектору сбрасывался в ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.