03.03.2018, 16:14
|
|
Прописка
Регистрация: 10.09.2009
Адрес: Санкт-Петербург
Сообщений: 101
Сказал спасибо: 11
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Проблемы с моделированием работы сторожевого таймера.
В моем проекте не удается корректно применить сторожевой таймер в режиме сброса. Устанавливаю его на период 1 сек. (визардом CVAVR), а он сбрасывает через 0,5мс. Устанавливаю его на 2 сек., сбрасывает через 1 мс.
Контроль по симуляции в Proteus 7.7.2.9089. CVAVR: V2.05.0 Professional.
под WINDOWS 7. Работаю с ATmega328P.
Для того, чтобы разобраться с ситуацией, подготовил проект проверки работы Watchdog Timer (в приложении в одной папке исходник и симуляция в Протеусе).
Запускаю программу, и получаю постоянные сбросы, с периодом в 2000 раз меньше задаваемого (таких времен (‹16mc) даже в даташите нет).
Подскажите, в чем засада?
Вложения:
|
1.rar (74.2 Кб, 0 просмотров) |
|
code.txt (1,021 байт, 0 просмотров) |
__________________
Электроника - это то, что было до фотоники.
|
|
|
|
04.03.2018, 00:14
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,715
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
|
Re: Проблемы с моделированием работы сторожевого таймера.
А вы уверенны в корректной симуляции Watchdog Timer ? Он и в железе бывает глючит, а вы в симуляции корректной работы хотите.
|
|
|
|
04.03.2018, 12:00
|
|
Прописка
Регистрация: 10.09.2009
Адрес: Санкт-Петербург
Сообщений: 101
Сказал спасибо: 11
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Проблемы с моделированием работы сторожевого таймера.
Не уверен. Поэтому и хотел бы услышать тех, кто имеет опыт в этом вопросе. Когда раньше использовал "собаку", то как-то с бубном обходилось. Но сейчас другой комп, другие версии программ.
При прошивке в МК программа работает как надо с задействованным на сброс WDR.
По этому, чтобы разобраться решил помучить только одну эту функцию (сброс по сторожевому таймеру) в выложенном проекте.
Прошу откликнуться тех, кто столкнулся с этой проблемой или знает, в чем дело.
__________________
Электроника - это то, что было до фотоники.
Последний раз редактировалось kolobokus; 04.03.2018 в 17:49.
|
|
|
|
04.03.2018, 13:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,021
Сказал спасибо: 3,026
Сказали Спасибо 3,201 раз(а) в 2,172 сообщении(ях)
|
Re: Проблемы с моделированием работы сторожевого таймера.
Сообщение от DanilinSA
|
Он и в железе бывает глючит
|
То, что не отражено в errata - существует только в нашем воображении.
Сообщение от DanilinSA
|
а вы в симуляции корректной работы хотите.
|
Это - более вероятно.
А теперь - посмотрим на code.txt и /List/1.lst и увидим, что макрос инициализации таймера - спорный. Вместо
Код:
|
#asm("wdr")
WDTCSR=0x1E; // init WDT
WDTCSR=0x0E; // 1s |
следует писать (как указано в примерах в документации на МК - глава Watchdog Timer, раздел Overview)
Код:
|
#asm("wdr")
MCUSR &= (0xFF & (0 ‹‹ WDRF)); // Clear WDRF in MCUSR
WDTCSR=0x18; // а лучше - (1 ‹‹ WDCE)+(1 ‹‹ WDE)
WDTCSR=0x0E; // а лучше - (1 ‹‹ WDE)+(1 ‹‹ WDP2)+(1 ‹‹ WDP1) |
Также - зачем стоит в самом низу "while (1){}"? Не там-ли спотыкается тест?
Да и на "delay_ms(1000); // 1s" уже есть шанс поймать сброс.
__________________
Экзорцист 40-го уровня.
Последний раз редактировалось ForcePoint; 04.03.2018 в 15:15.
Причина: Движок возбудился на "<<" и съел половину кода.
|
|
|
|
04.03.2018, 14:48
|
|
Прописка
Регистрация: 10.09.2009
Адрес: Санкт-Петербург
Сообщений: 101
Сказал спасибо: 11
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Проблемы с моделированием работы сторожевого таймера.
Возможно, проблема в симуляторе.
Код взят из даташита
Нажмите, чтобы открыть спойлер
C Code Example(1)
void WDT_Prescaler_Change(void)
{
__disable_interrupt();
__watchdog_reset();
/* Start timed equence */
WDTCSR |= (1‹‹WDCE) | (1‹‹WDE);
/* Set new prescaler(time-out) value = 64K cycles (~0.5 s) */
WDTCSR = (1‹‹WDE) | (1‹‹WDP2) | (1‹‹WDP0);
__enable_interrupt();
}
и из визарда кодевижен.
Нажмите, чтобы открыть спойлер
// Watchdog Timer initialization
// Watchdog Timer Prescaler: OSC/128k
// Watchdog Timer interrupt: Off
#pragma optsize-
#asm("wdr")
WDTCSR=0x1E;
WDTCSR=0x0E;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
"while (1){}" - это, собственно, основная программа
Пока она крутится, переполняется WDR и спустя 1 с (задано установками WDP2 и WDP0) должен пройти сброс МК, а на самом деле он проходит спустя 0,5мс (смотри лог) после установки. Да и сама установка при этом равна 0,5мс вместо 1с.
Функция delay_ имеет встроенный сброс wdr с периодом 1мс (см. описание функции в CV) и помешать не может. Ее использую только для наглядности мигания светодиода (без задержки не увидишь кратковременного загорания светодиода). То есть, если бы симуляция работала правильно, то на выходе PB0 был бы меандр с частотой пол герца.
__________________
Электроника - это то, что было до фотоники.
Последний раз редактировалось kolobokus; 04.03.2018 в 14:51.
|
|
|
|
04.03.2018, 14:54
|
|
Прописка
Регистрация: 10.09.2009
Адрес: Санкт-Петербург
Сообщений: 101
Сказал спасибо: 11
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Проблемы с моделированием работы сторожевого таймера.
Clear WDRF in MCUSR не помогает, проверено.
Период delay уменьшал до 500мс - не помогло.
__________________
Электроника - это то, что было до фотоники.
|
|
|
|
04.03.2018, 17:57
|
|
Прописка
Регистрация: 10.09.2009
Адрес: Санкт-Петербург
Сообщений: 101
Сказал спасибо: 11
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Проблемы с моделированием работы сторожевого таймера.
Думаю, вопрос надо считать решенным: При прошивке в МК программа работает правильно. Значит глючит Протеус.
Всем кто наступит на те же грабли рекомендую отлаживать программу в Протеусе с закоментированными строчками инициализации сторожевого таймера в коде и с Unprogrammed WDTON в свойствах камушка в Протеусе.
А при заливке не забыть разкомментировать инициализацию WDT и перекомпилировать проект.
__________________
Электроника - это то, что было до фотоники.
|
|
|
|
04.03.2018, 19:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 7,984
Сказал спасибо: 0
Сказали Спасибо 4,943 раз(а) в 2,371 сообщении(ях)
|
Re: Проблемы с моделированием работы сторожевого таймера.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 06:23.
|
|