Например TDA7294

Форум РадиоКот • Просмотр темы - ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Proteus
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 15:37:06

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


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



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Proteus
СообщениеДобавлено: Ср окт 27, 2010 14:02:01 
Родился

Зарегистрирован: Ср окт 27, 2010 13:47:56
Сообщений: 11
Рейтинг сообщения: 0
Здраствуйте
Извините за глупый и простой вопрос (ибо начинающий), но всё же...
Необходимо реализовать вот что: по прерыванию WDT проверять состояние PIN'а, если он =0 -> sleep_enable();powerdown(); Иначе ->выполнять некоторые действия.
Но при этом не делать Reset МК
CVAVR выдаёт шаблон (wdt: 1024k)
Код:
#include <tiny13.h>
interrupt [WDT] void wdt_timeout_isr(void)
{
WDTCR|=0x40;
// Place your code here
......
}
void main(void)
{
.....
#pragma optsize-
WDTCR=0x39;
WDTCR=0x69;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

#asm("sei")
while (1){};
}


Почитал, что CVAVR выдает в шаблоне WDE=1 и WDIE=1 что приводит к reset'у. Соответственно WDTCR надо бы сделать равным 0b0110001.
Прочитал
Цитата:
при смене делителя нужно сбрасывать бит WDCE (бит 4), по сему и инициализация WDTCSR производится в две строки.
. Здесь не понял. То что в две строчки - видно из шаблона, но что и в какую строку...?

И еще. В обработчике прерывания присутствует WDTCR|=0x40;. Для чего и надо ли её править для моей задачи.

И будет ли данная программа в Proteus'е симулироваться?

Заранее благодарю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Prot
СообщениеДобавлено: Ср окт 27, 2010 22:16:14 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Вт сен 30, 2008 09:23:14
Сообщений: 209
Откуда: Краснодарский край
Рейтинг сообщения: 0
Ничего не выйдет! А если выйдет - это не правильное решение. К чему такие извратства? Если прерывание ДОГа случилось то ресет обязательно последует за ним. Опишите точнее поставленную задачу. Хотите будить МК по внешнему сигналу, или что?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Prot
СообщениеДобавлено: Чт окт 28, 2010 00:32:45 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
axiv, мыслишь верно. Смотри стр41-43 даташита, там все есть.
Цитата:
• Bit 4 - WDCE: Watchdog Change Enable
This bit is used in timed sequences for changing WDE and prescaler bits. To clear the WDE bit,
and/or change the prescaler bits, WDCE must be set.
Once written to one, hardware will clear WDCE after four clock cycles.

тебе нужно сбросить бит WDE, ну и прескалер настроить.
Код:
#define WDP_mask 0b110      //прескалер настраиваем например,  на 1с (табл. 8-2)
        .
        .
        .
WDTCR=(1<<WDTIE|1<<WDCE|WDP_mask);  //инициализаця вотчдога

по идее должно работать. Если все-таки надо в две строки, (хз зачем, может какая заморочка есть), тогда так:
Код:
WDTCR=(1<<WDTIE|WDP_mask);  //инициализаця вотчдога
WDTCR|=(1<<WDCE);

И обрати внимание на фьюз WDTON (табл. 8-1) - он должен быть незапрограммирован
Цитата:
Note: 1. WDTON fuse set to “0“ means programmed and “1“ means unprogrammed.

AndyWorld писал(а):
...Если прерывание ДОГа случилось то ресет обязательно последует за ним...

Не болтайте ерундой. В аврках вотчдог во многих случаях можно использовать вместо нормального таймера, освободив последний для более важных забот. Сбрасывать или не сбрасывать МК по вотчдогу - настраивается фьюзом WDTON и регистром WDTCR. Об том собственно и речь.
axiv писал(а):
И еще. В обработчике прерывания присутствует WDTCR|=0x40;. Для чего и надо ли её править для моей задачи.

Опять же - читаем даташит. Строчка
Код:
WDTCR|=0x40;
значит "сделать поразрядное ИЛИ регистра WDTCR со значением 0x40" То бишь - просто установить 6-й бит. Это надо, чтобы заново установить WDTIE (разрешить прерывания от вотчдога) который (бит, в смысле) аппаратно сбрасывается после перехода в обработчик.


Последний раз редактировалось stas00n Чт окт 28, 2010 00:50:35, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Prot
СообщениеДобавлено: Чт окт 28, 2010 00:49:01 
Вымогатель припоя

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Пн мар 23, 2009 04:03:45
Сообщений: 557
Рейтинг сообщения: 0
axiv писал(а):
Прочитал
Цитата:
при смене делителя нужно сбрасывать бит WDCE (бит 4), по сему и инициализация WDTCSR производится в две строки.

Где такое написано? Вообще-то этот бит надо как раз таки устанавливать для обновления прескалера и WDE, а сбрасывается он аппаратно, то бишь самостоятельно, спустя 4 такта...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Prot
СообщениеДобавлено: Чт окт 28, 2010 13:15:34 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 454
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5180
Откуда: Воронеж
Рейтинг сообщения: 0
Бит надо ставить для включения/выключения, а делитель меняется и так.
"WDTCR|=0x40;" как защита от зависания. Без этой строчки второе прерывание вызовет сброс.
Вообще контроллер усыпляется одной ассемблерной командой sleep. Для этого однажды в программе выставляется MCUCR=48 для power down, а потом в тесте #asm("sleep"). Только учтите, что усыплять контроллер в прерывании НЕЛЬЗЯ! В этом случае он не проснётся никогда. Выставляется какой-либо флаг, который проверяется в основной программе, где уже и усыпляется.
Да, чуть не забыл: протеус скорее всего будет врать безбожно про собаку, а особенно про power down, так что не удивляйтесь если что.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Prot
СообщениеДобавлено: Чт окт 28, 2010 16:07:24 
Родился

Зарегистрирован: Ср окт 27, 2010 13:47:56
Сообщений: 11
Рейтинг сообщения: 0
Всем спасибо, разобрался методом проб и ошибок.
Сторожевой пес работает отлично. Использовать его решил чтобы пробуждать МК, ибо прерываниями на INT0 пробуждается он при low-level, а брать его было не откуда, у меня на INT0 только 1 приходит. Мутить инвертирование не было смысла ибо Мк надо было запихнуть в тесное место.
Proteus-таки и с powerdown отработал отлично, как ни странно.
С "WDTCR|=0x40;" в прерывании чегой-то не захотело работать, пришлось в конце обработчика вставлять #asm("wdr"); (может оно тоже самое делает, не знаю пока).


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Prot
СообщениеДобавлено: Пт окт 29, 2010 09:48:35 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 454
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5180
Откуда: Воронеж
Рейтинг сообщения: 0
WDR сбрасывает счётчик собачки в ноль, а та команда разрешает прерывание вместо сброса. Скорее всего МК у вас не просыпается, а сбрасывается и тем самым выходит из сна.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATtiny13,WatchDog, прерывания без reset'а МК. CVAVR,Prot
СообщениеДобавлено: Ср дек 29, 2010 21:26:18 
Первый раз сказал Мяу!
Аватар пользователя

Зарегистрирован: Пт ноя 05, 2010 11:12:51
Сообщений: 26
Рейтинг сообщения: 0
У меня похожая ситуация

Chip type : ATtiny13
Clock frequency : 4,800000 MHz
...................
// Watchdog timeout interrupt service routine
interrupt [WDT] void wdt_timeout_isr(void){
WDTCR|=0x40;
ADCSRA|=0x40;
}
..................
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/32k
// Watchdog Timer interrupt: On
#pragma optsize-
WDTCR=0x1C;
WDTCR=0x4C;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
..................

надо чтоб по пррыванию собаки запускался АЦП, но прерывание не происходит, а сразуже резет. Сброс тоже нужен. Т0 использовать не могу,
так как он задействован для других целей. симулировал в AVR Studio 4


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 8 ] 

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


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

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


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

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


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