Прошивка MegaD-328 (релизы, обсуждения, предложения)

Обсуждение статей, технологий домашней автоматизации, программных и аппаратных решений
andvas
Сообщения: 177
Зарегистрирован: 07 ноя 2011, 23:04
Откуда: Россия, Самара
Контактная информация:

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение andvas » 25 май 2014, 21:24

andvas писал(а):
asteroid писал(а):А кто то в новой версии 318_beta4 применял на портах PWM ?
У меня что то не хочет применяться значение.
Да,подтверждаю, не применяются значения, у меня прошивка 3.18 beta2.
И еще, у кого нибудь на последних прошивках, в частности на 3.18 beta2 работает в данное время DHT22 ?
А то у меня проработает часов 12-15, и начинают показываться нулевые значения температуры и влажности, и вот не могу понять с чем это связано, хочу откатиться назад, и потестировать старые прошивки, в которых точно было все нормально
Старая прошивка fw: 3.17b2 , проблема с DHT22 так же присутствует

asteroid
Сообщения: 42
Зарегистрирован: 13 апр 2013, 02:16

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение asteroid » 25 май 2014, 23:25

Вот сегодня, исключил железо как проблему с DHT.
Собрал копию устройства, из всего другого, и оставил работать параллельно два.
Стартовал их вместе. То почти синхронно с обеих, перестали поступать данные температуры и влажности.
При том всем, данные с ADC поступают, устройство по вебу, доступно остается.
(Я прикрутил к своему серверу графики, и раз в 30 секунд, "вычитываю" температуру/влажность и напряжение на АКБ (данные ADC) с Mega-D.)
И вот на графиках, (синий влажность, зеленый - температура) видно, сколько времени устройство отвечает.
И еще, чего то довольно часто отвечает DHT нулями. (провалы на графике). Но это решается, просто на сервере, если пришли нули, то через 10 секунд, читаем еще раз, и если там данные, то на график их.
Вложения
Скриншот (25.05.2014 22-14-50).jpg
Скриншот (25.05.2014 22-14-50).jpg (66.73 КБ) 12261 просмотр

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 26 май 2014, 10:26

asteroid писал(а):А кто то в новой версии 318_beta4 применял на портах PWM ?
У меня что то не хочет применяться значение.
http://ab-log.ru/files/File/ip_manager3 ... _beta5.zip

asteroid
Сообщения: 42
Зарегистрирован: 13 апр 2013, 02:16

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение asteroid » 27 май 2014, 01:29

Да, ошибка с сохранением настроек значения PWM, ушла.
Продолжаю эксперименты с влаго-градусником DHT22.
Тогда, когда показания с датчика прекращаются, я пробовал изменить настройки режима работы порта, где припаян DHT22. менял его на вход, или ADC, возвращая назад на Dsen. Думал, что таким образом, что то "зависнувшее" на порту сбросится, и он заработает. Не заработало.
Тогда, я повесил на информационный вывод датчика осциллограф. В момент опроса датчика, какие то импульсы видно, но они явно отличаются от "независнувшего" варианта.
Меня посетила мысль, а что если это сам датчик виснет ? И не отвечает на запросы. В датчике то же есть чему "застрявать".
Перепаял питание датчика не на +питания схемы, а на вывод порта меги. Сконфигурировав его как выход, с лог. единицей. Теперь если зависнет датчик, я могу дистанционно выключить-включить питание на датчик.
Вот теперь жду пока застрянет, после отвечу, что вышло.

andvas
Сообщения: 177
Зарегистрирован: 07 ноя 2011, 23:04
Откуда: Россия, Самара
Контактная информация:

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение andvas » 27 май 2014, 08:57

Я спустился уже на прошивку fw: 3.15, на ней тоже значения становяться нулевые. Никак не могу вспомнить на какой же прошивке у меня нормально работал датчик, но то что он работал без ошибок и 24/7 это точно.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 27 май 2014, 09:45

asteroid, попробуйте изменить частоту опроса, сделать ее больше или меньше и посмотреть изменится ли время, в течение которого происходит зависание датчика.
Если пробежаться по Интернету, то аналогичных тем про DHT22 много, но какого-то универсального решения, кажется, нет. У меня тоже есть подозрение, что зависать что-то может в самом датчике.

andvas
Сообщения: 177
Зарегистрирован: 07 ноя 2011, 23:04
Откуда: Россия, Самара
Контактная информация:

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение andvas » 27 май 2014, 10:42

Andrey_B писал(а):asteroid, попробуйте изменить частоту опроса, сделать ее больше или меньше и посмотреть изменится ли время, в течение которого происходит зависание датчика.
А вот я вообще его не "насилую" опросами, он просто у меня включен, и иногда я захожу посмотреть какая температура. А после 12-13 часов (точно не мерял но последний раз на прошивке 3.15 было точно между 12-13 часами.) значения становятся нулевыми. Хотя повторюсь что датчик точно работал на какой то прошивке без всяких глюков. Подтягивающий резистор пробовал 4,7КОм и 10КОм, разницы никакой

asteroid
Сообщения: 42
Зарегистрирован: 13 апр 2013, 02:16

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение asteroid » 27 май 2014, 13:15

Похоже проблему с DHT22 я определил.
Виноват сам датчик. Он и виснет.
Я на одном устройстве включил только DHT22, а на другом, сразу два. И DHT11 и DHT22.
Сегодня утром, зависли оба DHT22, на разных устройствах.
При том всем, DHT11 продолжал работать.
Я по очереди не снимая питания с устройства, отпаял-припаял питание только от датчика DHT22.
И о чудо, он стал отвечать.
Проделал то же на втором устройстве, кратковременно прервал питание на сам датчик.
И то же запоехали показания.
Результат:
Я считаю, что наши друзья с поднебесной, что то начудили с датчиками.
А софт устройства Megad не при чем.
Решил проблему так как я и хотел. Питание датчика (+) я беру от одного из портов Меги. Конфигурирую как выход с лог единицей. Если только датчик на 5 запросов подряд отдает нули, я скриптом даю команду порту, откуда берется питание, сделать OFF - ON. И показания появляются.

andvas
Сообщения: 177
Зарегистрирован: 07 ноя 2011, 23:04
Откуда: Россия, Самара
Контактная информация:

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение andvas » 27 май 2014, 15:20

asteroid писал(а): Результат:
Я считаю, что наши друзья с поднебесной, что то начудили с датчиками.
А софт устройства Megad не при чем.
Решил проблему так как я и хотел. Питание датчика (+) я беру от одного из портов Меги. Конфигурирую как выход с лог единицей. Если только датчик на 5 запросов подряд отдает нули, я скриптом даю команду порту, откуда берется питание, сделать OFF - ON. И показания появляются.
asteroid, т.е. мы с вами попали на одну и ту же партию плохих датчиков? да еще и примерно в одно время ;)
Мне все таки хочется решить эту проблемой подбором нормального датчика(если проблема в нем) у меня есть еще датчики попробую их все перебрать.

P.S. Эх, как бы его заставить побыстрее виснуть, а то ждать то так не хочется :)

asteroid
Сообщения: 42
Зарегистрирован: 13 апр 2013, 02:16

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение asteroid » 27 май 2014, 18:12

asteroid, т.е. мы с вами попали на одну и ту же партию плохих датчиков?
Да, че то я об этом не подумал.
Очень сомнительно, что датчики мои и Ваши с одного конвеера.
По совету Andrey_B я пересмотрел многие форумы, то вывод сделал такой, что DHT22 очень чувствительныы к задержкам, так как получается асинхронный способ передачи данных. И распознавание "нуля" и "единицы" если длительность импульсов хоть чуть чуть меняется, может стать уже проблемой.
Советовали поиграться с величиной задержек в исходниках, и найти средние, между "еще не работает, и уже не работает". Но я в программировании не то что бы сильно, где еще явно подписано, что это и на что влияет, то рискнуть могу поменять. А остальное, никогда не трогаю.
Так же я попробовал изменить длину проводов от датчика. И из 20 см, сделал двухметровый. Датчик "завис" через 3 часа. Может так совпало, а может и попало.

asteroid
Сообщения: 42
Зарегистрирован: 13 апр 2013, 02:16

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение asteroid » 28 май 2014, 18:33

Andrey_B, у меня к Вам такой вопрос, может быть так, что при нагреве логики, которая внутри DHT22 происходит так, что чуток смещается внутренняя тактовая частота самого тактового генератора датчика ?
Сомневаюсь, что она там кварцованная. Думаю, что там простой RC генератор.
Я просто заметил такую особенность, что при +60 градусов и выше, DHT22 вообще не отдает данные. Вернее, на осциллографе там импульсы в момент запроса есть, а возможно распознать такое, получается проблема из за смещения частоты, фазы, или длительности или скважности.
Вот в связи с этим собственно вопрос, можно ли и сложно ли добавить в меню конфигурации DHT (возможность подстройки), дополнительные опции, где можно менять в каких то пределах параметры задержек ?
Может путем подстройки, удастся найти оптимальный вариант задержек, для точного распознавания нулей и единиц с датчика. И появится возможность подстройки этих значений.

smorigo
Сообщения: 42
Зарегистрирован: 28 май 2014, 23:30
Откуда: Витебск

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение smorigo » 28 май 2014, 23:42

Неплохо было бы добавить для температурных датчиков поля Action и Netaction , чтобы при определённой температуре выполнялись скрипты. Очень бы пригодились для климатической станции. Я использую в теплице для проветривания.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 29 май 2014, 12:11

asteroid, в проекте используется код Davide Gironi, который по таймингам вроде бы соответствует даташиту.
Вся работа с датчиком состоит из двух этапов: инициализация соединения и передача данных. Сбой может происходить и там и там.
Можно попробовать увеличить в исходниках следующие задержки.
_delay_ms(18); (сделать, например, 25)
_delay_us(30); (сделать, например, 40)
Номера строчек не говорю, так как эти команды встречаются в коде один раз.
Меньше задержки делать нецелесообразно.

Выносить в конфигурацию считаю лишним.

smorigo, у АЦП портов есть Action и Netaction. Нет у DSen (DHT11/22). У этих датчиков процедура опроса построена на задержках, что само по себе плохо в разрезе идеологии устройства. Опрос этих датчиков в автоматическом режиме может теоретически мешать работе других систем (где требуется немедленная реакция).

shaman1010
Сообщения: 142
Зарегистрирован: 12 ноя 2013, 00:34

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение shaman1010 » 29 май 2014, 12:38

Andrey_B писал(а):asteroid, в проекте используется код Davide Gironi, который по таймингам вроде бы соответствует даташиту.
Андрей, поскольку это уже следующая итерация борьбы с DHT (в прошлой, если помнишь, я изменял тайминги, держа под рукой дейтшит). В общем и целом - можно лишь "подлечить", избавиться от подобного поведения DHT-датчиков, покрутив тайминги не получится. С Docsimus-ом разбирали дейтшит человеческий и он обратил внимание на то, что если опрос датчика происходит редко, то на такой запрос датчик отдает или прошлое значение (если оно там сохранилось), либо ничего. (это основная причина проскальзывания нулей и разных "глюков" от датчика). Для корректной работы датчиков в текущей реализации нужно сначала дернуть датчик (ответ нас не интересует), а уже потом (не ранее, чем через 2 сек) еще раз дернуть и вычитать ответ. В таком варианте (согласно дейтшиту) все будет работать. Здесь нужно немного подправить процедуру опроса именно в main.c, не трогая библиотеку David-а.
Andrey_B писал(а):asteroid,
Можно попробовать увеличить в исходниках следующие задержки.
_delay_ms(18); (сделать, например, 25)
Этот кусок касается исключительно DHT11, к 22-му относится 500мкс
А вообще (уже проверено) нет необходимости в текущей реализации разделять датчики на DHT11 и DHT22. Разница лишь в начальной задержке при инициализации. DHT22 абсолютно адекватно себя ведет при 18мс. А результат все-равно отдаем целочисленный, т.е. можно две процедуры сложить в одну, разницы не будет.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 29 май 2014, 13:05

shaman1010, да, я еще на стадии реализации поддержки обратил внимание, что датчик всегда отдает предыдущие значения. Видимо, конвертация внутри датчика занимает некоторое время и это такая "оптимизация" по-китайски.
Мы даже, кажется, обсуждали - правильно ли дергать датчик два раза на уровне прошивки или лучше делать это на уровне ПО сервера.
Точно, не _delay_ms(18), а _delay_us(500)
Разница в коде не только в процедуре инициализации, но в процедуре получения значений температуры и влажности из данных, которые отдает датчик.

shaman1010
Сообщения: 142
Зарегистрирован: 12 ноя 2013, 00:34

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение shaman1010 » 29 май 2014, 15:09

Andrey_B писал(а):Разница в коде не только в процедуре инициализации, но в процедуре получения значений температуры и влажности из данных, которые отдает датчик.
Да, но ее можно обойти проверкой на соответствие принятых значений рабочему диапазону.
Плюс в обработке можно не делить результат на 10, а рисовать запятую перед последней цифрой...

Андрей, кстати, может логически целесообразней сделать плату-переходник на какой-нить тиньке, задача которой сводилась бы к опросу, к примеру, 4-х DHT датчиков и хранению данных у себя. А мегой - запрашивать уже тиньку и мгновенно получать валидный ответ?
В итоге:
1) На одну ногу мегадевайса вешаем столько DHT датчиков, сколько потянет выбранный мелкий процессор.
2) Опрашивать "DHT"-линию можно быстрым прерыванием
3) Данные от всех DHT-шек будут всегда валидные и всегда актуальные (можно одним запросом забирать данные со всей "гирлянды", а разделять потом. А можно и в параметрах отдавать, данные с какого датчика нужны)
Можно на эту переходную плату и ds2482 добавить, одним ударом все проблемы с температурными датчиками и их подмножеством решатся.
p.s. и до кучи туда ds3231 добавить, и общаться по i2c с этим внешним модулем.

Andrey_B
Администратор
Сообщения: 5327
Зарегистрирован: 18 мар 2011, 12:06

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение Andrey_B » 29 май 2014, 15:56

shaman1010 писал(а):кстати, может логически целесообразней сделать плату-переходник на какой-нить тиньке, задача которой сводилась бы к опросу, к примеру, 4-х DHT датчиков и хранению данных у себя. А мегой - запрашивать уже тиньку и мгновенно получать валидный ответ?
Возможно, вы правы, но готовой такой платки как бы не существует. Для данного проекта ее либо нужно производить, либо подобный код в прошивке понадобится единицам, которые способны такую платку сделать. Все-таки людей, которые не хотят связываться с пайкой, несоизмеримо больше.

shaman1010
Сообщения: 142
Зарегистрирован: 12 ноя 2013, 00:34

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение shaman1010 » 29 май 2014, 16:06

Andrey_B писал(а):
shaman1010 писал(а):кстати, может логически целесообразней сделать плату-переходник на какой-нить тиньке, задача которой сводилась бы к опросу, к примеру, 4-х DHT датчиков и хранению данных у себя. А мегой - запрашивать уже тиньку и мгновенно получать валидный ответ?
Возможно, вы правы, но готовой такой платки как бы не существует. Для данного проекта ее либо нужно производить, либо подобный код в прошивке понадобится единицам, которые способны такую платку сделать. Все-таки людей, которые не хотят связываться с пайкой, несоизмеримо больше.
Можно проще: за основу для этой платы взять 328p (тот-же ардуино микро, для самосборщиков) и готовый модуль на ds3231. Из прошивки мегадевайса изъять часть, отвечающую за обработку DHT, вместо нее организовать опрос бутерброда из микры и модуля.
А для коммерческого использования - доработать Ваш 7I7O и модульно вставлять плату расширения для реалтам-часов и опроса DHT-датчиков.
Ну это как пример обоюдоудовлетворимой реализации.

asteroid
Сообщения: 42
Зарегистрирован: 13 апр 2013, 02:16

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение asteroid » 29 май 2014, 16:53

Пока решил проблему с DHT22 следующим образом, питание на датчик подаю с одного из портов меги. (Разумеется не прямо с вывода, а через резистор в 100 ом, на всяк случай, и повесил конденсатор на +- питания датчика 10 мкф) Питание идет постоянно, пока мне не понадобится данные о влажности и температуре. Далее, тушу питание, (команду с сервера на порт в down) жду секунду, ( команду с сервера на порт в UP) жду три секунды, и команду на получить данные со всех портов.
Пока за сутки ни разу не завис.
Если показания нулевые, то повторяю итерацию с питанием.
С регулировкой _delay_us(500) не игрался. (Объект от меня за 5 км, много не набегаешься.)
А по сети прошивку не обновить, так как сеть не в едином броадкастном домене, а за несколькими шлюзами.
Так что пока, косвенными методами выкрутился.
Но, борьбу с датчиком не прекращаю, с задержками таки еще поиграюсь.

shaman1010
Сообщения: 142
Зарегистрирован: 12 ноя 2013, 00:34

Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)

Сообщение shaman1010 » 29 май 2014, 17:13

asteroid писал(а):Но, борьбу с датчиком не прекращаю, с задержками таки еще поиграюсь.
Если сервер - может просто сделаете, как рекомендует дейтшит?
1) опросили порт с DHT, результат не интересует
2) через 2 сек делайте стандартный свой опрос всех портов.

По идее всегда должны приходить валидные данные. А если таки повиснет - дергайте ножку с питанием.

Заодно и статистики немного соберем...

Там смысл не подать питание и подождать 2сек, а начать инициализацию, а потом подождать 2 сек.
У меня, насколько я помню, более-менее стабильно отдавались данные (но долго, как видно) при таких задержках (сверху-вниз, заменой)

_delay_ms(1000);

if ( port_m == 2 )
_delay_ms(5);
else
_delay_ms(18);

_delay_us(40);

_delay_us(80);

_delay_us(80);

_delay_us(30);

_delay_ms(100);

Причем, если дергать датчик постоянно - то даже в текущей реализации он будет отрабатывать корректно. Проблема появляется, когда китайский процессор внутри датчика уходит в спячку. Т.е. если не давать датчику уснуть - то все будет работать и так.

Ответить