Почему-то не хочет заводиться собака на этом камне. Если сбросить бит WDE в ноль - светодиод мигает. Если установить в 1 - не мигает. И что странно, никакого эффекта не даёт изменение битов WDP3..0, ставлю от 1 до 8 секунд - ничего. Фьюз WDTON не программируется. Где косяк? Помогите, пожалуйста! Спойлер#include "_def.h" #include "_var.h" #include "head_files.h"
uk8amk Уже пробовал. Только чуть другую процедуру(WDT_off). Не помогает. Насколько я понял, после первого срабатывания WD после перехода на нулевой адрес программы сбрасывается прескалер WD на минимальное значение (16 мс). Поэтому после ресета его надо сразу выключить, а потом опять включить на нужное время. Но я не вижу срабатывания WD даже первый раз, если устанавливаю таймер на длительное время (4 или 8 секунд) и отключаю сброс (//WDR).. Спойлер#include "_def.h" //Глобальные переменные #include "_var.h" ///******************* #include "head_files.h"
//---------- FUNCTION--- int main() { //----------***---INITIALISATION---*** //-----выключение WD CLI WDR /* Clear WDRF in MCUSR */ MCUSR &= ~(1<<WDRF); /* Write logical one to WDCE and WDE */ /* Keep old prescaler setting to prevent unintentional time-out */ WDTCSR |= (1<<WDCE) | (1<<WDE); /* Turn off WDT */ WDTCSR = 0x00; SEI //-----
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Цитата:
• 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.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Это описание бита WDCE. Вроде там перевести то не сложно. Смысл: включение данного бита разрешает изменение битов WDE и WDPx. Данный бит продержится во включенном состоянии 4 такта и затем сбросится. Поэтому для изменения настроек собаки надо не только включать WDCE, но и запрещать прерывания, а программирую на ЯВУ смотреть за степенью оптимаизации иначе можно в 4 такта и не уложится.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Z_h_e Да перевести то несложно, а вот сообразить, что даже первая установка битов прескалера должна выполняться в указанном порядке, а не просто записью битов в регистр WDTCSR... ))) Благодарю! А можно указать компилятору явно, чтобы он не оптимизировал определенные строки? Вроде авр студия не трогает их, но хотелось бы наверняка.
Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2694 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
В ДШ же есть примеры кодов и на ассме и на С. Как изменять уровень оптимизации для участков кода я не знаю. А для всей функции в ее прототипе используются атрибут.
Код:
__attribute__((optimize(0))) //оптимизация 0
Это для компилятора GCC. У студии он. Но если выключить оптимизацию, как раз |= скомилируется в болшое количество команд.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Угу, всё так и есть. Пример из даташита для асма - 3 такта: Спойлерlds r16, WDTCSR ori r16, (1<<WDCE) | (1<<WDE) sts WDTCSR, r16 ; -- Got four cycles to set the new values from here - ; Set new prescaler(time-out) value = 64K cycles (~0.5 s) ldi r16, (1<<WDE) | (1<<WDP2) | (1<<WDP0) sts WDTCSR, r16 А вот что дает дизассемблер сишного оптимизированного кода - тоже 3 такта (LDI+STS): Спойлер25: WDTCSR |= (1<<WDCE) | (1<<WDE); +00000478: 91800060 LDS R24,0x0060 Load direct from data space +0000047A: 6188 ORI R24,0x18 Logical OR with immediate +0000047B: 93800060 STS 0x0060,R24 Store direct to data space 27: WDTCSR = (1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); +0000047D: E08F LDI R24,0x0F Load immediate +0000047E: 93800060 STS 0x0060,R24 Store direct to data space А вот дизасм неоптимизированного сишника - явно побольше: Спойлер25: WDTCSR |= (1<<WDCE) | (1<<WDE); +00000488: E680 LDI R24,0x60 Load immediate +00000489: E090 LDI R25,0x00 Load immediate +0000048A: E620 LDI R18,0x60 Load immediate +0000048B: E030 LDI R19,0x00 Load immediate +0000048C: 01F9 MOVW R30,R18 Copy register pair +0000048D: 8120 LDD R18,Z+0 Load indirect with displacement +0000048E: 6128 ORI R18,0x18 Logical OR with immediate +0000048F: 01FC MOVW R30,R24 Copy register pair +00000490: 8320 STD Z+0,R18 Store indirect with displacement 27: WDTCSR = (1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); +00000491: E680 LDI R24,0x60 Load immediate +00000492: E090 LDI R25,0x00 Load immediate +00000493: E02F LDI R18,0x0F Load immediate +00000494: 01FC MOVW R30,R24 Copy register pair +00000495: 8320 STD Z+0,R18 Store indirect with displacement
Единственное, что не очень хорошо видно - как студия дизассемблирует функцию. Если указать эти команды непосредственно в main, то выглядит в дизасме получше. Хотя работает и так и эдак.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 53
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения