FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Понедельник, 11.12.2017, 16:14
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 212»
Модератор форума: support, Сергей, Anydy, Олег 
Форум » Основной » Железо - контроллеры, шилды, датчики и др. » Контроллеры » реализация watchdog в виде блока (нужна помощь знающих)
реализация watchdog в виде блока
zikkgaz24 Дата: Вторник, 28.02.2017, 23:15 | Сообщение # 1
Майор
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 0
Статус: Offline
всех приветствую знающих и нет вот пришла мне в голову идея сыкономить энергию батарейки в моем проекте нашел код с ним да только в блок сворганить не получаеться кто хорошо понимает чего куда вставлять из кода нужно поглядите мож сможете помочь его сворганить .
код простой там микруха моргает светодиодом и в промежутках спит и экономия колосальная прилогаю код ниже .
Прикрепления: sleep_mode.ino(1Kb)
 
Anydy Дата: Среда, 01.03.2017, 00:11 | Сообщение # 2
Генерал-лейтенант
Группа: Администраторы
Сообщений: 716
Награды: 15
Репутация: 10
Статус: Online
В IDE 1.8.0 не компилируется, а в 1.6.4 все нормально....поразбираюсь еще

blynk.su
 
robocraft Дата: Среда, 01.03.2017, 13:01 | Сообщение # 3
Лейтенант
Группа: Проверенные
Сообщений: 74
Награды: 0
Репутация: 0
Статус: Offline
Экономия вещь нужная.

☃ Loading... ██████████████] 99%
 
zikkgaz24 Дата: Среда, 01.03.2017, 18:44 | Сообщение # 4
Майор
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 0
Статус: Offline
Anydy, этот код взят из видео по тинки вот есть пример на уно мож там понятней попробуй

Добавлено (01.03.2017, 18:43)
---------------------------------------------
да еще у меня компилируеться в 1.8.0 если ставлю тини85

Добавлено (01.03.2017, 18:44)
---------------------------------------------
может есть поинтересней код  я ненашел

Прикрепления: WatchDog_Uno_Ex.ino(7Kb)
 
Boroda Дата: Четверг, 02.03.2017, 00:15 | Сообщение # 5
Генерал-лейтенант
Группа: Проверенные
Сообщений: 797
Награды: 38
Репутация: 36
Статус: Offline
Ковырял, я ковырял сегодня блоки с WDT и SLEEP, вроде должен работать, а вот длительность сна получалась не 5 секунд, а 200мс. Ставлю длительность 50 секунд - просыпается через каждые 2 секунды и часть программы между засыпаниями просто не выполняется. Уже и предделитель WDT на 1 секунду поставил и переменной секунды пытался считать в цикле While внутри блока. Даже регистры МК напрямую данными заполнял без всяких библиотек и прочего и все мимо, не работает и все тут. Поковырял еще - ощущение, что WDT неправильно отрабатывает.

Потом наткнулся на эту статью https://geektimes.ru/post/255800/. Залил скетч "Проверка работоспособности watchdog", получил результат: "загрузчик не поддерживает watchdog". Далее увидел фразу "Я протестировал 4 вида плат и только загрузчик в Arduino Uno сработал так как надо" и мои попытки на этом закончились.
Прикрепления: Sleep_1-CODE-.ubi(41Kb)


Сообщение отредактировал Boroda - Четверг, 02.03.2017, 00:45
 
slavas Дата: Четверг, 02.03.2017, 01:09 | Сообщение # 6
Генерал-майор
Группа: Проверенные
Сообщений: 567
Награды: 16
Репутация: 13
Статус: Offline
Поправьте если не прав, сторожевой пёс это защита от зависания процессора и эта функция встроена в него и включается установкой фьюза. Установка фьюза возможна только программатором и в ide не доступна. Соответственно реализовать это програмно не получится. А режим сна в ардуино из за загрузчика тоже толком не работает.

Добавлено (02.03.2017, 01:09)
---------------------------------------------
Глянул описание кода из 4 поста мне показалось что контроллер постоянно гоняет переменную по ком порту и  получая ожидаемый ответ продолжает жить.

 
Boroda Дата: Четверг, 02.03.2017, 07:18 | Сообщение # 7
Генерал-лейтенант
Группа: Проверенные
Сообщений: 797
Награды: 38
Репутация: 36
Статус: Offline
Цитата slavas ()
сторожевой пёс это защита от зависания

Но при определенных условиях. Посмотрите регистр WDTCSR МК Atmel. WDT включается фьюзами, но будет ли выполнять ресет, прерывание или будет молчать - решает пользователь.



У меня контроллер по циклу бежит, значит WDT как-то работает, но как, понять не могу.
Прикрепления: 4897495.png(18Kb)


Сообщение отредактировал Boroda - Четверг, 02.03.2017, 07:19
 
slavas Дата: Четверг, 02.03.2017, 09:20 | Сообщение # 8
Генерал-майор
Группа: Проверенные
Сообщений: 567
Награды: 16
Репутация: 13
Статус: Offline
Ну да, но ведь это не относится к программной части.

Добавлено (02.03.2017, 09:20)
---------------------------------------------
Нельзя заставить программу следить сама за собой, она зависнет и всё.


Сообщение отредактировал slavas - Четверг, 02.03.2017, 13:12
 
zikkgaz24 Дата: Четверг, 02.03.2017, 13:18 | Сообщение # 9
Майор
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 0
Статус: Offline
Boroda, привет по времени таймера есть ограничения в первом коде который я выложил хорошо видно какой период можно выставить
setup_watchdog(8);// 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms
                      // 6=1sec, 7=2 sec, 8=4 sec, 9= 8sec
вот та часть с установкой времени с 0-9 новер уставки которую надо ставить в скобках ну и через = время которое он будет отсчитывать до прерывания

Добавлено (02.03.2017, 13:18)
---------------------------------------------
slavas, по поводу фьюзов ими если включить то програмно его уже не затронешь
но его можно вкл и выкл програмно не трогая фьюзы
В самой флпрог в дереве есть установка от зависания и там ничего не говориться про фьюзы да и везде об этом пишут

 
slavas Дата: Четверг, 02.03.2017, 15:57 | Сообщение # 10
Генерал-майор
Группа: Проверенные
Сообщений: 567
Награды: 16
Репутация: 13
Статус: Offline
создайте пустую плату и посмотрите какой код будет в IDE

int _PWDC = 0;void setup()
{
TCCR2A = 0x00;
TCCR2B =  0x07;
TIMSK2=0x01;
TCNT2=100;
}
void loop()
{_PWDC = 0;

//Плата:1

}

ISR(TIMER2_OVF_vect)
{ TCNT2=100;
if(_PWDC >= 1000){asm volatile ("jmp 0x0000");}else{_PWDC = _PWDC+1;};
}

этот код будет встроен в Ваш проект и будет выполняться вместе с ним.
Ещё раз повторяю не может программа следить сама за собой.


Сообщение отредактировал slavas - Четверг, 02.03.2017, 16:05
 
zikkgaz24 Дата: Четверг, 02.03.2017, 17:32 | Сообщение # 11
Майор
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 0
Статус: Offline
slavas, да ты прав но его можно и не включать для сброса а только для прерывания на пробуждение
и вот еще прикол это нужно использовать для экономии энергии батареек  а значит это что то мобильное и это второстепенный узел а не головной
а головной как раз уже в основном от сети делают вот там и можно использовать контроль зависания
и такими принципами пользуються производители мобильной электроники и ни че все продаеться и работает
а других вариантов увы и нету чем ты еще можешь разбудить без внешнего воздействия если знаешь предлогай!!!
по всему интернету самодельщики тоже также его используют и не заморачиваються с зависанием
а виснет в основном из за плохо составленного скетча
у меня вот еще ни одна программа не залипла все работает как часы

Добавлено (02.03.2017, 17:32)
---------------------------------------------
и возмущаться на применение сторожевого таймера не по назначению
не имеет смысл
а вот внести свои идеи хотя бы в виде слов будет всегда уместно для этого и общаемся здесь и помогаем друг другу чем можем!!!)))

 
slavas Дата: Четверг, 02.03.2017, 17:50 | Сообщение # 12
Генерал-майор
Группа: Проверенные
Сообщений: 567
Награды: 16
Репутация: 13
Статус: Offline
А мы говорим об одном и том же? Вачдог это защита контроллера от зависания например при броске питания, а Вы похоже про зависание (закольцовывание) программы когда проц выполняет кусок кода бесконечно. А про sleep и interupt надо подумать, у меня есть кое что.
 
zikkgaz24 Дата: Четверг, 02.03.2017, 18:05 | Сообщение # 13
Майор
Группа: Проверенные
Сообщений: 132
Награды: 0
Репутация: 0
Статус: Offline
ну в общем ватчдог сделан от любого зависания кроме закольцовывания
но при этом его смогли применить и для сна вот аналога пока нет вот и ковыряем блок на нем выскажи свои мысли и посмотрим
я незнаю больше ни одного способа как разбудить камень не трогая ничего
 
Boroda Дата: Четверг, 02.03.2017, 20:18 | Сообщение # 14
Генерал-лейтенант
Группа: Проверенные
Сообщений: 797
Награды: 38
Репутация: 36
Статус: Offline
Цитата zikkgaz24 ()
по времени таймера есть ограничения в первом коде
К сожалению, пока я ковырял блок, от вашего кода ничего не осталось. Прерывания от WDT идут каждую секунду, а переменная в цикле эти прерывания считает, и по превышению, какого-либо порога, блок пускает программу дальше. Так что в блоке можно задать 32767 секунд сна. На общем потреблении энергии почти не сказывается, по сравнению с прерываниями через каждые 8 секунд.

П.С. Я прекрасно знаю потроха контроллеров от Microchip и спокойно их программирую и на Бейсике и на асме, так что работа с регистрами не проблема. А вот с МК от Атмеля у меня не сложилось.

П.П.С. у Микрочипа слип режим вообще одной асм командой включается и WDT без проблем настраивается, но тут это что-то с чем-то. Радиодатчики температуры от CR2032 работают не меньше двух лет.

Цитата slavas ()
Вачдог
 - это таймер, который работает от своего генератора и по переполнению которого происходит либо сброс микроконтроллера, либо прерывание. Программист должен написать программу так, что бы этот таймер постоянно сбрасывался. Вачдог - защита от зависания программы, остановки кварца и т.д.

Цитата slavas ()
от зависания например при броске питания
- это называется BOD (Brown-out Detection) или BOR (Brown-out Reset) - контроль питания, обычно настроен на уровни 2,7 или 4,3 вольта. При падении напряжения этот модуль сбрасывает МК и держит его в сбросе, пока питание не восстановится. В основном защищает от сбоя ЕЕПРОМ.

Цитата slavas ()
if(_PWDC >= 1000){asm volatile ("jmp 0x
 - этот код не сможет перезагрузить МК при повисании или сбое тактового генератора. Перезагрузит, если, например, библиотека I2C не увидит какую-либо внешнюю микросхему и закольцуется в ожидании. По сути бесполезная вещь.


Сообщение отредактировал Boroda - Четверг, 02.03.2017, 20:26
 
slavas Дата: Четверг, 02.03.2017, 21:19 | Сообщение # 15
Генерал-майор
Группа: Проверенные
Сообщений: 567
Награды: 16
Репутация: 13
Статус: Offline
Boroda, спасибо Вы уточнили что я имел ввиду, я учусь на чужом опыте и своих ошибках.

Добавлено (02.03.2017, 21:19)
---------------------------------------------
Может не прав но у меги вачдог умеет только ресет, а вот у тинек он умеет и прерывание.

 
Форум » Основной » Железо - контроллеры, шилды, датчики и др. » Контроллеры » реализация watchdog в виде блока (нужна помощь знающих)
Страница 1 из 212»
Поиск:

FLProg © 2017
Яндекс.Метрика