Страница 1 из 2
					
				реализация watchdog в виде блока
				Добавлено: 28 фев 2017, 23:15
				 zikkgaz24
				всех приветствую знающих и нет вот пришла мне в голову идея сыкономить энергию батарейки в моем проекте нашел код с ним да только в блок сворганить не получаеться кто хорошо понимает чего куда вставлять из кода нужно поглядите мож сможете помочь его сворганить .
код простой там микруха моргает светодиодом и в промежутках спит и экономия колосальная прилогаю код ниже .
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 01 мар 2017, 00:11
				 Anydy
				В IDE 1.8.0 не компилируется, а в 1.6.4 все нормально....поразбираюсь еще
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 01 мар 2017, 13:01
				 robocraft
				Экономия вещь нужная.
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 01 мар 2017, 18:44
				 zikkgaz24
				Anydy, этот код взят из видео по тинки вот есть пример на уно мож там понятней попробуй
Добавлено (01.03.2017, 18:43)
---------------------------------------------
да еще у меня компилируеться в 1.8.0 если ставлю тини85
Добавлено (01.03.2017, 18:44)
---------------------------------------------
может есть поинтересней код  я ненашел
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 00:15
				 Boroda
				Ковырял, я ковырял сегодня блоки с WDT и SLEEP, вроде должен работать, а вот длительность сна получалась не 5 секунд, а 200мс. Ставлю длительность 50 секунд - просыпается через каждые 2 секунды и часть программы между засыпаниями просто не выполняется. Уже и предделитель WDT на 1 секунду поставил и переменной секунды пытался считать в цикле While внутри блока. Даже регистры МК напрямую данными заполнял без всяких библиотек и прочего и все мимо, не работает и все тут. Поковырял еще - ощущение, что WDT неправильно отрабатывает.
Потом наткнулся на эту статью 
https://geektimes.ru/post/255800/. Залил скетч "Проверка работоспособности watchdog", получил результат: "загрузчик не поддерживает watchdog". Далее увидел фразу "Я протестировал 4 вида плат и только загрузчик в Arduino Uno сработал так как надо" и мои попытки на этом закончились.
 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 01:09
				 slavas
				Поправьте если не прав, сторожевой пёс это защита от зависания процессора и эта функция встроена в него и включается установкой фьюза. Установка фьюза возможна только программатором и в ide не доступна. Соответственно реализовать это програмно не получится. А режим сна в ардуино из за загрузчика тоже толком не работает.
Добавлено (02.03.2017, 01:09)
---------------------------------------------
Глянул описание кода из 4 поста мне показалось что контроллер постоянно гоняет переменную по ком порту и  получая ожидаемый ответ продолжает жить.
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 07:18
				 Boroda
				slavas писал(а):сторожевой пёс это защита от зависания
Но при определенных условиях. Посмотрите регистр WDTCSR МК Atmel. WDT включается фьюзами, но будет ли выполнять ресет, прерывание или будет молчать - решает пользователь.
У меня контроллер по циклу бежит, значит WDT как-то работает, но как, понять не могу.
 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 09:20
				 slavas
				Ну да, но ведь это не относится к программной части.
Добавлено (02.03.2017, 09:20)
---------------------------------------------
Нельзя заставить программу следить сама за собой, она зависнет и всё.
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 13:18
				 zikkgaz24
				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, по поводу фьюзов ими если включить то програмно его уже не затронешь
но его можно вкл и выкл програмно не трогая фьюзы
В самой флпрог в дереве есть установка от зависания и там ничего не говориться про фьюзы да и везде об этом пишут
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 15:57
				 slavas
				создайте пустую плату и посмотрите какой код будет в 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;};
}
этот код будет встроен в Ваш проект и будет выполняться вместе с ним.
Ещё раз повторяю не может программа следить сама за собой.
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 17:32
				 zikkgaz24
				slavas, да ты прав но его можно и не включать для сброса а только для прерывания на пробуждение
и вот еще прикол это нужно использовать для экономии энергии батареек  а значит это что то мобильное и это второстепенный узел а не головной
а головной как раз уже в основном от сети делают вот там и можно использовать контроль зависания
и такими принципами пользуються производители мобильной электроники и ни че все продаеться и работает
а других вариантов увы и нету чем ты еще можешь разбудить без внешнего воздействия если знаешь предлогай!!!
по всему интернету самодельщики тоже также его используют и не заморачиваються с зависанием
а виснет в основном из за плохо составленного скетча
у меня вот еще ни одна программа не залипла все работает как часы
Добавлено (02.03.2017, 17:32)
---------------------------------------------
и возмущаться на применение сторожевого таймера не по назначению
не имеет смысл
а вот внести свои идеи хотя бы в виде слов будет всегда уместно для этого и общаемся здесь и помогаем друг другу чем можем!!!)))
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 17:50
				 slavas
				А мы говорим об одном и том же? Вачдог это защита контроллера от зависания например при броске питания, а Вы похоже про зависание (закольцовывание) программы когда проц выполняет кусок кода бесконечно. А про sleep и interupt надо подумать, у меня есть кое что.
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 18:05
				 zikkgaz24
				ну в общем ватчдог сделан от любого зависания кроме закольцовывания
но при этом его смогли применить и для сна вот аналога пока нет вот и ковыряем блок на нем выскажи свои мысли и посмотрим
я незнаю больше ни одного способа как разбудить камень не трогая ничего
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 20:18
				 Boroda
				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 не увидит какую-либо внешнюю микросхему и закольцуется в ожидании. По сути бесполезная вещь.
 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 21:19
				 slavas
				Boroda, спасибо Вы уточнили что я имел ввиду, я учусь на чужом опыте и своих ошибках.
Добавлено (02.03.2017, 21:19)
---------------------------------------------
Может не прав но у меги вачдог умеет только ресет, а вот у тинек он умеет и прерывание.
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 21:36
				 zikkgaz24
				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 не увидит какую-либо внешнюю микросхему и закольцуется в ожидании. По сути бесполезная вещь.
а вот про это надо разработчику говорить это он его в программу внедрил мож ошибся!!!
 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 22:01
				 Boroda
				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 и ручками на голом листике код набирать. 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 22:10
				 zikkgaz24
				у меня на голом камне все работает и програмирую черей ide  и ардуиной
по питанию понял
а по радиомодулю знаешь или нет ?
			 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 22:15
				 Boroda
				zikkgaz24 писал(а):пробуждение nrf24l01+
у него есть бит PWR_UP, по нему модуль или спит, или работает. Бит этот можно поменять только со стороны МК, сам модуль ничего такого не умеет. Он может ногой IRQ только известить МК о приеме новых данных, отправке данных, переполнении буфера приема.
А функция Network Ping Sleep скорее всего организована программно: контроллер проснулся, разбудил модуль, модуль послушал радиоэфир, МК его заснул и сам в сон. Если проснувшийся хочет что-то передать, то начинает кричать в эфир, и через какое-то время его услышат другие (когда проснутся послушать эфир) и примут данные.
 
			
					
				реализация watchdog в виде блока
				Добавлено: 02 мар 2017, 22:22
				 zikkgaz24
				мне и надо чтоб контроллер усыплял и сам спать потом проснулся проверил эфир еси че передал инфу и все по новой модуль спать камень спать
промежуток например 2 секунды
в других вариантах при irq модуль постоянно должен в эфире сидеть а это 15 млА много очень СR2032 махом сьедает а надо хоть месяцев на 5 чтоб хвотало