|
Не работает Watchdog в AtXmega |
|
|
|
Oct 4 2013, 13:29
|
Группа: Участник
Сообщений: 14
Регистрация: 26-05-05
Из: Житомир
Пользователь №: 5 403

|
Прошу помощи у Клуба! Кто пользовался watchdog таймером в Xmega контроллерах? У меня watchdog нагло отказывается работать! Вот кусок программы: CODE void watchdog_init(void) {unsigned char s,n; // Сгенерировано через Code Wisard AVR и проверено по атмеловскому даташиту #pragma optsize- s = SREG; // Save interrupts enabled/disabled state #asm("cli") // Disable interrupts n = WDT_PER_512CLK_gc | WDT_ENABLE_bm | WDT_CEN_bm; // Watchdog Timer: On. Period: 500 ms CCP = CCP_IOREG_gc; WDT.CTRL = n;
n = (WDT.WINCTRL & (~WDT_WEN_bm)) | WDT_WCEN_bm; // Watchdog window mode: Off CCP = CCP_IOREG_gc; WDT.WINCTRL = n;
SREG = s; // Restore interrupts enabled/disabled state }
#define SetGreenLed PORTC.OUTCLR = 0x40 #define ClrGreenLed PORTC.OUTSET = 0x40 #define SetRedLed PORTC.OUTCLR = 0x80 #define ClrRedLed PORTC.OUTSET = 0x80
void main(void) { watchdog_init(); InitPins(); //Инициализация ножек, куча строк типа "PORTA.DIR = 0b00110110;" и ничего больше SetGreenLed; // InitSystemClock(); //переключиться на внешний генератор 33 МГц delay_ms(400); // ClrGreenLed; // delay_ms(5000); // while(1) // {delay_ms(250); // SetRedLed; // delay_ms(250); // ClrRedLed; // } // //... //Дальше шла программа, которую WDT должен был защищать и оберегать После рестарта мигает зеленый светодиод, а затем навсегда начинает мигать красный. То есть контроллер не сбрасывается. Пробовал включить WDT через Fuse биты (устанавливал WDP и WDLOCK) - не помогает, все равно Watchdog не работает. Пробовал на двух контроллерах AtXmega128A1 AtXmega32A4. не работает ни там ни там. Как заставить его работать? Может я что-то упускаю? Кто то вообще использовал WDT в Xmega_х?
|
|
|
|
|
 |
Ответов
|
Oct 4 2013, 19:21
|
Группа: Участник
Сообщений: 14
Регистрация: 26-05-05
Из: Житомир
Пользователь №: 5 403

|
Цитата(zombi @ Oct 4 2013, 21:53)  Но мне просто интересно зачем вам нужен WDT. Конкретно сейчас есть 3 причины: 1. При подаче питания с помощью искрящего контакта контроллер зависает где -то один раз из двадцати. (это при том, BOD включен на 2,4В при питании 3,3, а нормально работать контроллер начинает с 1,8В) 2. Плата работает в условии достаточно сильных помех от расположенных рядом двигателей + также рядом стоящие радиопередатчики ей здоровья не добавляют  . 3. Использование WDT дает +2 к такому важному навыку разработчика, как "здоровый сон"  Цитата(Xenia @ Oct 4 2013, 22:08)  Перечитайте мой предыдущий пост... Да, я читал, как доберусь до железа - обязательно попробую и сообщу о результатах. Еще раз спасибо за помощь!
|
|
|
|
|
Oct 4 2013, 21:09
|

Гуру
     
Группа: Свой
Сообщений: 2 076
Регистрация: 10-09-08
Пользователь №: 40 106

|
Цитата(Хтось @ Oct 4 2013, 22:21)  Конкретно сейчас есть 3 причины: 1. При подаче питания с помощью искрящего контакта контроллер зависает где -то один раз из двадцати. (это при том, BOD включен на 2,4В при питании 3,3, а нормально работать контроллер начинает с 1,8В) 2. Плата работает в условии достаточно сильных помех от расположенных рядом двигателей + также рядом стоящие радиопередатчики ей здоровья не добавляют  . 3. Использование WDT дает +2 к такому важному навыку разработчика, как "здоровый сон"  1.Попробуйте внешний супервизор. 2.Борьба с зависаниями с помощью WDT абсурд. 3.Только с этим и согласен.
|
|
|
|
|
Oct 6 2013, 11:38
|
Группа: Участник
Сообщений: 14
Регистрация: 26-05-05
Из: Житомир
Пользователь №: 5 403

|
 Уважаемый zombi, на этом форуме уже есть не одна тема (и не без Вашего участия) с обсуждением стоит ли использовать WDT, с подобной "помощью" милости прошу туда! Цитата(zombi @ Oct 5 2013, 00:09)  1.Попробуйте внешний супервизор. Использование внешнего супервизора это абсурд, так как есть встроенный (BOD) который ничем не хуже, только дешевле. А от внешних мы отказались уже лет 8 назад, после того, как несколько штук сгорели и стали выдавать непериодический ресет просто так! (уж поверьте, сгорели именно супервизоры, а не питание сделалось плохим.) Цитата(zombi @ Oct 5 2013, 00:09)  2.Борьба с зависаниями с помощью WDT абсурд. Может мы говорим о разных вещах, но в документации от "атмел" написано, что ихний WDT именно для этого и предназначен! Цитата(zombi @ Oct 5 2013, 00:09)  3.Только с этим и согласен. Уже только этого и достаточно. P.S. Вы все равно не убедите меня, что WDT это зло, поэтому прошу по этому поводу в данной теме больше не писать. Кстати, некоторые убеждены, что ремень безопасности в машине это тоже зло, но я все равно им пользуюсь
|
|
|
|
|
Oct 7 2013, 19:29
|
Группа: Участник
Сообщений: 14
Регистрация: 26-05-05
Из: Житомир
Пользователь №: 5 403

|
Все! Я окончательно понял, что контроллеры делаются с помощью черной магии и их работоспособность сильно зависит от количества китайцев, на земле, фазы луны и еще от чего-то! В общем танцевал я с бубном вокруг WDT с утра и до обеда. Что только не пробовал на трех разных платах: и задержки и инициализации разные, по несколько раз через софт и через фьюзы, в конце вообще на ассемблер перешел прямо в АВР студии, чтоб компилятор был от производителя - ничего не помогает. Не работает и все! (Программный Reset, кстати, работал) Потом осенило посмотреть что в WDT.CTRL. Вывожу я его через UART наружу и - о чудо! Там 0x1A - в полном соответствии с симулятором! То есть WDT разрешён, и период 0,5сек. как я и устанавливаю. Получается - не работает сам модуль WDT в железе. Ну я и успокоился, решил что научились китайцы делать поддельные контроллеры, а нам повезло найти нужного поставщика - ну с кем не бывает  . Повытирал все свои эксперименты и сел дальше софт писать. Ближе к 5 часам вечера начинает коллега ругаться плохими словами - говорит программатор сдох ни с того ни с сего. Одолжил я ему свой (AVRISP mkII) на 5 мин., он свою плату перешил и программатор вернул. Прошиваю я сразу свою плату и вижу,что она уходит в ресет постоянный. И тут до меня доходит, что все "wdr" в программе закрыты, а watchdog в фьюзах остался включенным и он почему-то заработал. Беру другую плату - WDT не работает. Просто перешиваю программу (фьюзы не трогаю) и снова чудо - WDT заработал и на ней. Вот теперь даже не знаю - плакать  или смеяться  , а главное - каких сюрпризов дальше ждать.
|
|
|
|
Сообщений в этой теме
Хтось Не работает Watchdog в AtXmega Oct 4 2013, 13:29 Xenia Что такое у вас "n"?
Попробуйте прямо за... Oct 4 2013, 15:18 Хтось Укладывается, я смотрел сгенерированный asm, там n... Oct 4 2013, 17:17 Xenia Цитата(Хтось @ Oct 4 2013, 21:17) А Вы ис... Oct 4 2013, 18:22  Хтось Хорошо хоть у кого-то работает, значит проблема ре... Oct 4 2013, 18:36   Xenia Цитата(Хтось @ Oct 4 2013, 22:36) а может... Oct 4 2013, 18:49   Хтось вот сгенерированный код:
CODE;void watchdog_init(v... Oct 4 2013, 19:01    Xenia Цитата(Хтось @ Oct 4 2013, 23:01) Если у ... Oct 4 2013, 19:08    IgorKossak Цитата(Хтось @ Oct 6 2013, 14:38) Использ... Oct 6 2013, 13:46
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|