Зарегистрирован: Чт янв 12, 2006 00:17:30 Сообщений: 186 Откуда: Новосибирск, ИФП СО РАН
Рейтинг сообщения:0
Так называемый сторожевой таймер. Если он включен, то по его переполнению контроллер сбрасывается. Нужен чтобы зависаний не было. Програмно может обнулятиься.
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Здравствуйте, Братья по паяльнику! Ваяю один полезный "девайсик" с батарейным питанием. Основа - ATtiny24. Данный МК выбрал за его мелкоту, наличие АЦП и относительно невысокую цену. Но вот засада - аппаратный INT, способный выводить данный МК из "глубокой спячки" только один, что для моего случая не достаточно. Внимание привлёк WDT с возможностью не только давать сброс, но и прерывание, способное пробудить ядро МК. По пробуждению решил задать опрос нужных портов и потом, если что, снова отправлять МК в "спячку". Попытался запустить WDT, создав проект в CV AVR и выставив все нужные опции при помощи "Визарда". Получилось следующее:
Спойлер
Код:
#include <tiny24.h> #include <delay.h>
#define red PORTB.2 #define yellow PORTB.1 #define green PORTB.0 #define left PINA.5 #define right PINA.6
// Watchdog timeout interrupt service routine interrupt [WDT] void wdt_timeout_isr(void) { WDTCSR|=0x40; // Place your code here yellow=1; //delay_ms(10); //yellow=0; }
#include <delay.h>
#define ADC_VREF_TYPE 0xC0
// ADC interrupt service routine interrupt [ADC_INT] void adc_isr(void) { unsigned int adc_data; // Read the AD conversion result adc_data=ADCW; // Place your code here
}
// Declare your global variables here
void main(void) { // Declare your local variables here
// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;
// External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=0x00; GIMSK=0x00;
Но единица на соответствующем порту так и не появляется, то есть программа никогда не попадает в обработчик прерывания от WDT. Сброс МК тоже не происходит (пробовал по нажатию кнопок менять ШИМ). Думал, может чего с самим МК не так, попытался запустить в "Протеусе" - ситуация аналогичная. Помогите, пожалуйста, разобраться.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Возможно выставлены неправильные настройки сторожевого таймера, в СИшном коде мало понимаю. Скинул скриншот с настройками из книги "Микроконтроллеры AVR семейств Tiny Руководство пользователя". В Протеусе есть пошаговая отладка, не пробовал там смотреть чем занят микроконтроллер?
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Вс дек 09, 2012 02:50:06
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Благодарю за ответ. В качестве настройки в регистр таймера последовательно записываются два значения WDTCSR=0x1A; WDTCSR=0x4A; затем разрешается глобальный флаг прерываний #asm("sei") Но, похоже, что этого не достаточно и нужно ещё где-то чего-то разрешить.
Бит WDIE - разрешение прерывания от сторожевого таймера. Бит WDE - должен быть сброшен в 0. См. файл который я прикреплял, он взят из книги "Микроконтроллеры AVR семейств Tiny Руководство пользователя.djvu".
P.S. извиняюсь, в первый раз переклинило, перепутал малость
Последний раз редактировалось стьюдент Вс дек 09, 2012 22:52:51, всего редактировалось 1 раз.
Не догнал... Ты пишешь, что WDTCSR=0x4A=1001010; и тут же рисуешь биты 0010 0010, что в hex будет 0х22, почему??? Там что, записью "1" меняется состояние на противоположное? Поясни, пожалуйста.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Вс дек 09, 2012 23:46:06
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Блин, не люблю загадки! Может ошибка в том, что сначала необходимо установить только один бит - бит разрешение изменения регистра: WDTCSR |= 0b00010000; и только потом внести сами настройки: WDTCSR |= 0b01001010; ??? То есть 0х10 и 0х4А ???
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Пн дек 10, 2012 00:08:30
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Нихрена не помогает. Складывается такое впечатление, как будто даташит написан к какому-то другому микроконтроллеру. Кроме того нигде в инете не встречал подобного примера настройки и использования WDT в режиме генерации прерываний. Конечно, далеко не все AVR-ки имеют такую функцию у встроенного WDT, но всё же надеялся найти хотябы какой-нибудь пример...
как насчет того, чтобы не путаться в битовых и других магических константах и сделать вот так: WDTCSR = (1<<WDE)|(1<<WDIE)|(1< WDP1);
А насчет загадок могу сказать, что вам код генератор уже создал нравильную последовательность активации таймера собаки, осталось выбрать правильный режим, на картинке , которую вам привели описано, что есть несколько режимов, если ваш Мк будет всегда уходить в перезагруз, то никаких лампочек вы не увидите. попробуйте в основном цикле сделать: 1 зажечь лампу 2 сбросить собаку
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Пт дек 14, 2012 10:08:13
Друг Кота
Карма: 67
Рейтинг сообщений: 1012
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 18798 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
Честно говоря, не имел дело ни с 24-й Тинькой, ни с собакой. Но! После прочтения соотв. раздела ДШ по диагонали, кое-что прояснилось: Помимо фьюзов, включать/выключать собаку можно программно. В зависимости от конфигурации, собака может вызывать ресет или своё прерывание. Для конфигурирования собаки надо выставить бит WDCE: Watchdog Change Enable и в течение 4-х тактов внести изменения. Есть какие-то два safety level, которые влияют на возможность отключения сторожа
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
в Safety level 1 (WDTON не запрограммирован) можно выставлять таймаут и без WDTCE. Тоже хочется разобраться с WD, но под рукой контроллера нет, а Proteus, похоже, некорректно работает с WDT. ELcat, попробуйте в железе для проверки простой тест:
только CLKDIV8 не программировать. в основном цикле дергание ножкой PA0 1 Гц, а если прерывание WD будет работать, то будут дергаться остальные PA7-PA1 0.5 Гц. скомпилированный HEX прилагается.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Пт дек 14, 2012 22:44:44
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
a_skr, к сожалению, мне этот код в "девайс" лить нельзя, поскольку "девайс" уже полностью спаянный и частично работает (без "спячки" пока, разумеется). На РА.7 повешен затвор HexFETa, и если туда вместо корректного ШИМ подать "1" на полсекунды, то буду иметь "пичальку" с погоревшими детальками бустера. Если можно, перепишите код, пожалуйста, исключительно для РВ.0, РВ.1 и РВ.2 (подключены светодиоды). Все остальные линии портов надо оставить "плавающими", то есть входами без "подтяжек".
По поводу подозрений в том, что я "мог не поймать ресет". Сейчас в основном цикле программы опрашиваются кнопки с частотой около 10Гц. По нажатию инкрементируется/декрементируется содержимое регистра OCR0B, по которому и формируется выходной сигнал ШИМ. То есть, если бы были сбросы, то при попытке установить какой-либо уровень скважности он периодически сбрасывался бы в 0х00, поскольку именно это число в моём коде пишется в OCR0B при инициализации таймера 0. Но тем не менее этого не происходило при любой записываемой мной комбинации в WDTCSR.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Вт дек 18, 2012 21:02:05
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
a_skr, прошу прощения, что долго не отвечал. Отец ушёл. Похороны. Ваш код работает, мигают оба светодиода (со снятым фузом CKDIV8). Проблема не в фузе. Мой вариант на CVAVR так и не запускается. Выкладываю архив проекта. Прошу вас взглянуть что в нём не так.
сожалею по программе. про фьюз CKDIV8 я указал просто, чтобы задержка нормально работала. я так понял, что сброс по WD не интересует, только таймаут, так? если так, то попробуйте поменять Ваши строчки: WDTCSR=0x1A; WDTCSR=0x4A; на следующие: WDTCSR=0x18; WDTCSR=0x42; таймаут 64 mS, правильно? из обработчика таймаута WD уберите WDTCSR|=0x40; кстати, в обработчике у Вас просто включается светодиод. для проверки на первое время можно просто помигать им из обработчика, не трогая в главном цикле.
Заголовок сообщения: Re: ATtiny24 не стартует WDT...
Добавлено: Ср дек 19, 2012 20:08:55
Друг Кота
Карма: 46
Рейтинг сообщений: 590
Зарегистрирован: Вт май 19, 2009 09:27:30 Сообщений: 3258 Откуда: Украина
Рейтинг сообщения:0
Благодарю за соболезнования. Он пережил операцию, мучался больше года. Мы все до последнего момента верили, но чуда так не произошло. Онкология никого не щадит. Для нашей семьи, друзей и знакомых это невосполнимая потеря. Он был видным общественным деятелем и очень уважаемым человеком.
a_skr писал(а):
попробуйте поменять Ваши строчки: WDTCSR=0x1A; WDTCSR=0x4A; на следующие: WDTCSR=0x18; WDTCSR=0x42;
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 29
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения