странно. для начала уберите все манипуляции с yellow в основном цикле. если не поможет - возьмите мой код, который работает, перенесите в codevision и постепенно добавляйте свою функциональность. так найдете то, что ломает работоспособность. обратите внимание на то, что у меня 0.5 Гц прерывания WD, а у Вас 15.6 Гц.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Чт дек 20, 2012 22:08:34
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
a_skr писал(а):
для начала уберите все манипуляции с yellow в основном цикле.
Извиняюсь, это я, наверное, от пережитого. Голова почти "не варит".
a_skr писал(а):
возьмите мой код, который работает, перенесите в codevision
Ваш код не компилируется в Code Vision, поскольку она "не знает", что такое WDIE, WDP1, WDP2... В её "хидерах" не прописаны названия битов почти всех регистров, за очень редкими исключениями.
a_skr писал(а):
обратите внимание на то, что у меня 0.5 Гц прерывания WD, а у Вас 15.6 Гц.
Именно что-то в районе 15Гц я и планировал, как самую "удобную" частоту опроса состояния портов. К стати, если вам интересно, прикладываю схемку "супердевайса".
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Чт дек 20, 2012 23:07:19
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Абсолютный аналог вашего кода в CVAVR. Начинают терзать смутные сомнения по поводу возможности включения этого таймера в CVAVR как таковой. В какой среде компилируете вы?
посмотрите в настройках проекта должна быть галка "include IO definitions" или нечто подобное для того, чтобы эти имена корректно обрабатывались в CVAVR.
Абсолютный аналог вашего кода в CVAVR. Начинают терзать смутные сомнения по поводу возможности включения этого таймера в CVAVR как таковой. В какой среде компилируете вы?
ну аналог не совсем абсолютный, у меня вместо 0x42 пишется 0x46 (1 сек) , но это не принципиально. еще CV в начале программы запрещает WD, но это не должно влиять. компилирую в WinAVR. сегодня будет возможность поиграться с tiny13, попробую WinAVR и CV - отпишусь.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Пт дек 21, 2012 10:12:33
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
a_skr, хорошо.
vitalik_1984 писал(а):
...в настройках проекта должна быть галка "include IO definitions" или нечто подобное...
Ничего подобного не нашёл. CVAVR версии 1.25.5. Но описание битов не относится ни к проекту, ни к версии среды. Оно должно задаваться в "хидерах" конкретных МК, например, в tiny24.h, tiny13.h, mega8.h и т.п. из папки ...\cvavr\inc\*.*
нашел причину. CodeVisionAVR в функциях задержки (delay_ms и т.д.) всегда сбрасывает WD командой wdr, независимо от того, стоит ли в настройках проекта использование WD или нет. вот такие пироги. так что, если нужны прерывания от WD - или не используйте задержки, или...
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Пт дек 21, 2012 16:37:12
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Вот это дааа! Delay использовался вообще-то как временная "заглушка". Но чтоб вот такие тщательно припрятанные "грабли" - не ожидал. Вы мне очень помогли. Благодарю.
Закомментировал delay_ и действительно пошли прерывания от WD!
ELcat, сэкономлю Вам 4 байта кода : строчка WDTCSR = 0x18; (WDCE и WDE) не нужна, если WD используется только для генерации прерываний. для включения прерываний достаточно установить WDIE и задать частоту с помощью WDPx одной записью в управляющий регистр. ну и про глобальное разрешение прерываний не забыть. проверено на tiny13.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Пн дек 24, 2012 23:41:52
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Спасибо. Я это в даташите находил. Мне, в принципе, удобнее прерывание и затем сброс. Сейчас воюю с АЦП - почему-то считывается какой-то шум вместо кодов предполагаемой величины.
Всем привет!!! Все необходимые для нашей системы функции управления мы реализовали в Watchdog-е,осталось позаботиться только о самом МК!! Решили написать код по перезагрузке МК в случае чего!! Хотел узнать у Вас, как проверить правильность работы кода? я к тому, что сброса таймера внутреннего Ватчдога я не делаю, но Ватчдог обрабатывает все команды, хотя по сути должен непрерывно перезагружаться!!
Камень - Atmega8a Вот мой код (WDTON fuse стоит с галочкой в uniprof-е):
void WDT_Init(void) { //disable interrupts cli(); //reset watchdog wdt_reset(); //set up WDT interrupt WDTCR = (1<<WDCE)|(1<<WDE); //Start watchdog timer with 2.2s prescaler WDTCR = (1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); //Enable global interrupts sei(); }
правильно я понимаю, что Ватчдог , сидящий внутри, должен ребутать МК каждые 2 секунды? и почему не ребутает тогда? или ребутает все же, просто быстро очень все делает и потому запросы обрабатываются ? Помогите разобраться плиз с этим неведомым зверьком)) Самое главное, проверить как, чтобы просто успокоиться, что все готово!)
wdt_reset() у меня уже понапихан во все возможные места кода ( пока закомментирован ).
и какие значения может принимать параметр внутри wdt_enable() ?я так понимаю , это время до перезапуска платы? просо по документации я ставлю максимальное значение , и оно равно 2.1 s...
это время до возникновения события таймера, в случае, если в течение этого времени не было сброса таймера командой wdt_reset() какое конкретно действие выполнится при возниковении события - решать Вам. можете работать в прерывании, можете сразу сбрасывать, можете прерваться и после этого сбросить (список зависит от типа микроконтроллера).
Спасибо, мне желательно, чтобы плата перезагружалась по переполнению!! Это стандартное поведение в случае, Ели за время прескайла не было команды wdt_reset()??
перечитал Ваш пост, ознакомился с главой Watchdog timer из даташита на ATMega8A : в Вашем коде все верно. Достаточно вызвать эту функцию в начале программы (не в цикле), после этого все должно сброситься через 2 секунды. Если не получается, попробуйте уменьшить время. Подробнее про время в даташит ATMega8A - таблица 10-1, page 44 good luck!
wdt_enable() - все что надо для инициализации?? для сброса - wdt_reset() ?????
Загляни в h файл, в котором объявлены функции wdt_enable, wdt_reset. Там тебе будет и описание, что функции делают и константы которые можно туда ставить.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения