реализация watchdog в виде блока

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#1

Сообщение zikkgaz24 » 28.02.2017{, 23:15}

всех приветствую знающих и нет вот пришла мне в голову идея сыкономить энергию батарейки в моем проекте нашел код с ним да только в блок сворганить не получаеться кто хорошо понимает чего куда вставлять из кода нужно поглядите мож сможете помочь его сворганить .
код простой там микруха моргает светодиодом и в промежутках спит и экономия колосальная прилогаю код ниже .
Вложения
sleep_mode.ino
(1.07 КБ) 49 скачиваний

Аватара пользователя
Anydy
Администратор
Сообщения: 3281
Зарегистрирован: 30.12.2017{, 12:10}
Репутация: 278
Имя: Андрей

реализация watchdog в виде блока

#2

Сообщение Anydy » 01.03.2017{, 00:11}

В IDE 1.8.0 не компилируется, а в 1.6.4 все нормально....поразбираюсь еще

robocraft
Рядовой
Сообщения: 74
Зарегистрирован: 22.11.2016{, 09:10}
Репутация: 0
Откуда: Москва

реализация watchdog в виде блока

#3

Сообщение robocraft » 01.03.2017{, 13:01}

Экономия вещь нужная.
☃ Loading... ██████████████] 99%

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#4

Сообщение zikkgaz24 » 01.03.2017{, 18:44}

Anydy, этот код взят из видео по тинки вот есть пример на уно мож там понятней попробуй

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

Добавлено (01.03.2017, 18:44)
---------------------------------------------
может есть поинтересней код  я ненашел
Вложения
WatchDog_Uno_Ex.ino
(6.58 КБ) 44 скачивания

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 36
Откуда: Коломна
Имя: Станислав
Контактная информация:

реализация watchdog в виде блока

#5

Сообщение Boroda » 02.03.2017{, 00:15}

Ковырял, я ковырял сегодня блоки с WDT и SLEEP, вроде должен работать, а вот длительность сна получалась не 5 секунд, а 200мс. Ставлю длительность 50 секунд - просыпается через каждые 2 секунды и часть программы между засыпаниями просто не выполняется. Уже и предделитель WDT на 1 секунду поставил и переменной секунды пытался считать в цикле While внутри блока. Даже регистры МК напрямую данными заполнял без всяких библиотек и прочего и все мимо, не работает и все тут. Поковырял еще - ощущение, что WDT неправильно отрабатывает.

Потом наткнулся на эту статью https://geektimes.ru/post/255800/. Залил скетч "Проверка работоспособности watchdog", получил результат: "загрузчик не поддерживает watchdog". Далее увидел фразу "Я протестировал 4 вида плат и только загрузчик в Arduino Uno сработал так как надо" и мои попытки на этом закончились.
Вложения
Sleep_1-CODE-.ubi
(41.47 КБ) 52 скачивания
Последний раз редактировалось Boroda 02.03.2017{, 00:45}, всего редактировалось 1 раз.

Аватара пользователя
slavas
Лейтенант
Сообщения: 587
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

реализация watchdog в виде блока

#6

Сообщение slavas » 02.03.2017{, 01:09}

Поправьте если не прав, сторожевой пёс это защита от зависания процессора и эта функция встроена в него и включается установкой фьюза. Установка фьюза возможна только программатором и в ide не доступна. Соответственно реализовать это програмно не получится. А режим сна в ардуино из за загрузчика тоже толком не работает.

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

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 36
Откуда: Коломна
Имя: Станислав
Контактная информация:

реализация watchdog в виде блока

#7

Сообщение Boroda » 02.03.2017{, 07:18}

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



У меня контроллер по циклу бежит, значит WDT как-то работает, но как, понять не могу.
Вложения
4897495.png
Последний раз редактировалось Boroda 02.03.2017{, 07:19}, всего редактировалось 1 раз.

Аватара пользователя
slavas
Лейтенант
Сообщения: 587
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

реализация watchdog в виде блока

#8

Сообщение slavas » 02.03.2017{, 09:20}

Ну да, но ведь это не относится к программной части.

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

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#9

Сообщение zikkgaz24 » 02.03.2017{, 13:18}

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
Лейтенант
Сообщения: 587
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

реализация watchdog в виде блока

#10

Сообщение slavas » 02.03.2017{, 15:57}

создайте пустую плату и посмотрите какой код будет в 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}, всего редактировалось 1 раз.

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#11

Сообщение zikkgaz24 » 02.03.2017{, 17:32}

slavas, да ты прав но его можно и не включать для сброса а только для прерывания на пробуждение
и вот еще прикол это нужно использовать для экономии энергии батареек  а значит это что то мобильное и это второстепенный узел а не головной
а головной как раз уже в основном от сети делают вот там и можно использовать контроль зависания
и такими принципами пользуються производители мобильной электроники и ни че все продаеться и работает
а других вариантов увы и нету чем ты еще можешь разбудить без внешнего воздействия если знаешь предлогай!!!
по всему интернету самодельщики тоже также его используют и не заморачиваються с зависанием
а виснет в основном из за плохо составленного скетча
у меня вот еще ни одна программа не залипла все работает как часы

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

Аватара пользователя
slavas
Лейтенант
Сообщения: 587
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

реализация watchdog в виде блока

#12

Сообщение slavas » 02.03.2017{, 17:50}

А мы говорим об одном и том же? Вачдог это защита контроллера от зависания например при броске питания, а Вы похоже про зависание (закольцовывание) программы когда проц выполняет кусок кода бесконечно. А про sleep и interupt надо подумать, у меня есть кое что.

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#13

Сообщение zikkgaz24 » 02.03.2017{, 18:05}

ну в общем ватчдог сделан от любого зависания кроме закольцовывания
но при этом его смогли применить и для сна вот аналога пока нет вот и ковыряем блок на нем выскажи свои мысли и посмотрим
я незнаю больше ни одного способа как разбудить камень не трогая ничего

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 36
Откуда: Коломна
Имя: Станислав
Контактная информация:

реализация watchdog в виде блока

#14

Сообщение Boroda » 02.03.2017{, 20:18}

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}, всего редактировалось 1 раз.

Аватара пользователя
slavas
Лейтенант
Сообщения: 587
Зарегистрирован: 14.09.2015{, 22:29}
Репутация: 0
Откуда: Санкт-Петербург

реализация watchdog в виде блока

#15

Сообщение slavas » 02.03.2017{, 21:19}

Boroda, спасибо Вы уточнили что я имел ввиду, я учусь на чужом опыте и своих ошибках.

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

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#16

Сообщение zikkgaz24 » 02.03.2017{, 21:36}

Boroda писал(а):На общем потреблении энергии почти не сказывается, по сравнению с прерываниями через каждые 8 секунд.
вот это не понял

Добавлено (02.03.2017, 21:32)
---------------------------------------------
и еще вопрос который я не понял с загрузчиком : а если камень пустой без загрузчика все должно нормально работать ?
а то в твоей ссылке говориться о готовых платах ардуино с загрузчиком на борту
я его использовать не хочу
А да пока незабыл а про сон и пробуждение  nrf24l01+ что нибудь знаешь? а то в примерах по коду шарил и нашел тока две строчки  усыпить и проснуться больше ничего не вижу пример Network Ping Sleep

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

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 36
Откуда: Коломна
Имя: Станислав
Контактная информация:

реализация watchdog в виде блока

#17

Сообщение Boroda » 02.03.2017{, 22:01}

zikkgaz24 писал(а):вот это не понял
Ситуация раз: 1 секунду спим/100мкс работаем.

100 мкс потребляем 30мА - потребление 30мА * 0,0001сек = 3мкА*секунд
1 секунду потребляем 30мкА - потребление 30мкА * 1сек = 30мкА*секунд

Суммарное потребление за 1,0001 секунду = 33 мкА
За 8,0008 секунд =  264мкА
За час = 118,8мА
За день = 2,85А

Ситуация два: 8 секунд спим/100мкс работаем.

100 мкс потребляем 30мА - потребление 30мА * 0,0001сек = 3мкА*8секунд
8 секунд потребляем 30мкА - потребление 30мкА * 8сек = 240мкА*8секунд

Суммарное потребление за 1,0000125 секунд = 30,3 мкА
За 8,0001 секунду = 243мкА
За час = 109мА
За день = 2,61А

Расчеты грубые. Разница не велика, хотя просыпались в 8 раз чаще.

Добавлено (02.03.2017, 22:01)
---------------------------------------------
zikkgaz24 писал(а):я не понял с загрузчиком
- загрузчик (bootloader) нужен ардуине, чтоб программу через UART заливать и там же скорее всего записаны служебные функции, такие как глобальные счетчики millis и micros и все остальные плюшки, которых в голом AVR нет. Без загрузчика надо брать USB программатор и подключать контроллер пятью проводками и.... брать компилятор AVR Studio и ручками на голом листике код набирать.
Последний раз редактировалось Boroda 02.03.2017{, 22:18}, всего редактировалось 1 раз.

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#18

Сообщение zikkgaz24 » 02.03.2017{, 22:10}

у меня на голом камне все работает и програмирую черей ide  и ардуиной
по питанию понял
а по радиомодулю знаешь или нет ?

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 36
Откуда: Коломна
Имя: Станислав
Контактная информация:

реализация watchdog в виде блока

#19

Сообщение Boroda » 02.03.2017{, 22:15}

zikkgaz24 писал(а):пробуждение nrf24l01+
у него есть бит PWR_UP, по нему модуль или спит, или работает. Бит этот можно поменять только со стороны МК, сам модуль ничего такого не умеет. Он может ногой IRQ только известить МК о приеме новых данных, отправке данных, переполнении буфера приема.

А функция Network Ping Sleep скорее всего организована программно: контроллер проснулся, разбудил модуль, модуль послушал радиоэфир, МК его заснул и сам в сон. Если проснувшийся хочет что-то передать, то начинает кричать в эфир, и через какое-то время его услышат другие (когда проснутся послушать эфир) и примут данные.

zikkgaz24
Сержант
Сообщения: 132
Зарегистрирован: 26.08.2016{, 22:53}
Репутация: 0
Откуда: Красноярск

реализация watchdog в виде блока

#20

Сообщение zikkgaz24 » 02.03.2017{, 22:22}

мне и надо чтоб контроллер усыплял и сам спать потом проснулся проверил эфир еси че передал инфу и все по новой модуль спать камень спать
промежуток например 2 секунды
в других вариантах при irq модуль постоянно должен в эфире сидеть а это 15 млА много очень СR2032 махом сьедает а надо хоть месяцев на 5 чтоб хвотало

Ответить

Вернуться в «Arduino. Другие МК»