Старая прошивка fw: 3.17b2 , проблема с DHT22 так же присутствуетandvas писал(а):Да,подтверждаю, не применяются значения, у меня прошивка 3.18 beta2.asteroid писал(а):А кто то в новой версии 318_beta4 применял на портах PWM ?
У меня что то не хочет применяться значение.
И еще, у кого нибудь на последних прошивках, в частности на 3.18 beta2 работает в данное время DHT22 ?
А то у меня проработает часов 12-15, и начинают показываться нулевые значения температуры и влажности, и вот не могу понять с чем это связано, хочу откатиться назад, и потестировать старые прошивки, в которых точно было все нормально
Прошивка MegaD-328 (релизы, обсуждения, предложения)
-
- Сообщения: 177
- Зарегистрирован: 07 ноя 2011, 23:04
- Откуда: Россия, Самара
- Контактная информация:
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Вот сегодня, исключил железо как проблему с DHT.
Собрал копию устройства, из всего другого, и оставил работать параллельно два.
Стартовал их вместе. То почти синхронно с обеих, перестали поступать данные температуры и влажности.
При том всем, данные с ADC поступают, устройство по вебу, доступно остается.
(Я прикрутил к своему серверу графики, и раз в 30 секунд, "вычитываю" температуру/влажность и напряжение на АКБ (данные ADC) с Mega-D.)
И вот на графиках, (синий влажность, зеленый - температура) видно, сколько времени устройство отвечает.
И еще, чего то довольно часто отвечает DHT нулями. (провалы на графике). Но это решается, просто на сервере, если пришли нули, то через 10 секунд, читаем еще раз, и если там данные, то на график их.
Собрал копию устройства, из всего другого, и оставил работать параллельно два.
Стартовал их вместе. То почти синхронно с обеих, перестали поступать данные температуры и влажности.
При том всем, данные с ADC поступают, устройство по вебу, доступно остается.
(Я прикрутил к своему серверу графики, и раз в 30 секунд, "вычитываю" температуру/влажность и напряжение на АКБ (данные ADC) с Mega-D.)
И вот на графиках, (синий влажность, зеленый - температура) видно, сколько времени устройство отвечает.
И еще, чего то довольно часто отвечает DHT нулями. (провалы на графике). Но это решается, просто на сервере, если пришли нули, то через 10 секунд, читаем еще раз, и если там данные, то на график их.
- Вложения
-
- Скриншот (25.05.2014 22-14-50).jpg (66.73 КБ) 12293 просмотра
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
http://ab-log.ru/files/File/ip_manager3 ... _beta5.zipasteroid писал(а):А кто то в новой версии 318_beta4 применял на портах PWM ?
У меня что то не хочет применяться значение.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Да, ошибка с сохранением настроек значения PWM, ушла.
Продолжаю эксперименты с влаго-градусником DHT22.
Тогда, когда показания с датчика прекращаются, я пробовал изменить настройки режима работы порта, где припаян DHT22. менял его на вход, или ADC, возвращая назад на Dsen. Думал, что таким образом, что то "зависнувшее" на порту сбросится, и он заработает. Не заработало.
Тогда, я повесил на информационный вывод датчика осциллограф. В момент опроса датчика, какие то импульсы видно, но они явно отличаются от "независнувшего" варианта.
Меня посетила мысль, а что если это сам датчик виснет ? И не отвечает на запросы. В датчике то же есть чему "застрявать".
Перепаял питание датчика не на +питания схемы, а на вывод порта меги. Сконфигурировав его как выход, с лог. единицей. Теперь если зависнет датчик, я могу дистанционно выключить-включить питание на датчик.
Вот теперь жду пока застрянет, после отвечу, что вышло.
Продолжаю эксперименты с влаго-градусником DHT22.
Тогда, когда показания с датчика прекращаются, я пробовал изменить настройки режима работы порта, где припаян DHT22. менял его на вход, или ADC, возвращая назад на Dsen. Думал, что таким образом, что то "зависнувшее" на порту сбросится, и он заработает. Не заработало.
Тогда, я повесил на информационный вывод датчика осциллограф. В момент опроса датчика, какие то импульсы видно, но они явно отличаются от "независнувшего" варианта.
Меня посетила мысль, а что если это сам датчик виснет ? И не отвечает на запросы. В датчике то же есть чему "застрявать".
Перепаял питание датчика не на +питания схемы, а на вывод порта меги. Сконфигурировав его как выход, с лог. единицей. Теперь если зависнет датчик, я могу дистанционно выключить-включить питание на датчик.
Вот теперь жду пока застрянет, после отвечу, что вышло.
-
- Сообщения: 177
- Зарегистрирован: 07 ноя 2011, 23:04
- Откуда: Россия, Самара
- Контактная информация:
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Я спустился уже на прошивку fw: 3.15, на ней тоже значения становяться нулевые. Никак не могу вспомнить на какой же прошивке у меня нормально работал датчик, но то что он работал без ошибок и 24/7 это точно.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
asteroid, попробуйте изменить частоту опроса, сделать ее больше или меньше и посмотреть изменится ли время, в течение которого происходит зависание датчика.
Если пробежаться по Интернету, то аналогичных тем про DHT22 много, но какого-то универсального решения, кажется, нет. У меня тоже есть подозрение, что зависать что-то может в самом датчике.
Если пробежаться по Интернету, то аналогичных тем про DHT22 много, но какого-то универсального решения, кажется, нет. У меня тоже есть подозрение, что зависать что-то может в самом датчике.
-
- Сообщения: 177
- Зарегистрирован: 07 ноя 2011, 23:04
- Откуда: Россия, Самара
- Контактная информация:
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
А вот я вообще его не "насилую" опросами, он просто у меня включен, и иногда я захожу посмотреть какая температура. А после 12-13 часов (точно не мерял но последний раз на прошивке 3.15 было точно между 12-13 часами.) значения становятся нулевыми. Хотя повторюсь что датчик точно работал на какой то прошивке без всяких глюков. Подтягивающий резистор пробовал 4,7КОм и 10КОм, разницы никакойAndrey_B писал(а):asteroid, попробуйте изменить частоту опроса, сделать ее больше или меньше и посмотреть изменится ли время, в течение которого происходит зависание датчика.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Похоже проблему с DHT22 я определил.
Виноват сам датчик. Он и виснет.
Я на одном устройстве включил только DHT22, а на другом, сразу два. И DHT11 и DHT22.
Сегодня утром, зависли оба DHT22, на разных устройствах.
При том всем, DHT11 продолжал работать.
Я по очереди не снимая питания с устройства, отпаял-припаял питание только от датчика DHT22.
И о чудо, он стал отвечать.
Проделал то же на втором устройстве, кратковременно прервал питание на сам датчик.
И то же запоехали показания.
Результат:
Я считаю, что наши друзья с поднебесной, что то начудили с датчиками.
А софт устройства Megad не при чем.
Решил проблему так как я и хотел. Питание датчика (+) я беру от одного из портов Меги. Конфигурирую как выход с лог единицей. Если только датчик на 5 запросов подряд отдает нули, я скриптом даю команду порту, откуда берется питание, сделать OFF - ON. И показания появляются.
Виноват сам датчик. Он и виснет.
Я на одном устройстве включил только DHT22, а на другом, сразу два. И DHT11 и DHT22.
Сегодня утром, зависли оба DHT22, на разных устройствах.
При том всем, DHT11 продолжал работать.
Я по очереди не снимая питания с устройства, отпаял-припаял питание только от датчика DHT22.
И о чудо, он стал отвечать.
Проделал то же на втором устройстве, кратковременно прервал питание на сам датчик.
И то же запоехали показания.
Результат:
Я считаю, что наши друзья с поднебесной, что то начудили с датчиками.
А софт устройства Megad не при чем.
Решил проблему так как я и хотел. Питание датчика (+) я беру от одного из портов Меги. Конфигурирую как выход с лог единицей. Если только датчик на 5 запросов подряд отдает нули, я скриптом даю команду порту, откуда берется питание, сделать OFF - ON. И показания появляются.
-
- Сообщения: 177
- Зарегистрирован: 07 ноя 2011, 23:04
- Откуда: Россия, Самара
- Контактная информация:
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
asteroid, т.е. мы с вами попали на одну и ту же партию плохих датчиков? да еще и примерно в одно времяasteroid писал(а): Результат:
Я считаю, что наши друзья с поднебесной, что то начудили с датчиками.
А софт устройства Megad не при чем.
Решил проблему так как я и хотел. Питание датчика (+) я беру от одного из портов Меги. Конфигурирую как выход с лог единицей. Если только датчик на 5 запросов подряд отдает нули, я скриптом даю команду порту, откуда берется питание, сделать OFF - ON. И показания появляются.
Мне все таки хочется решить эту проблемой подбором нормального датчика(если проблема в нем) у меня есть еще датчики попробую их все перебрать.
P.S. Эх, как бы его заставить побыстрее виснуть, а то ждать то так не хочется
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Да, че то я об этом не подумал.asteroid, т.е. мы с вами попали на одну и ту же партию плохих датчиков?
Очень сомнительно, что датчики мои и Ваши с одного конвеера.
По совету Andrey_B я пересмотрел многие форумы, то вывод сделал такой, что DHT22 очень чувствительныы к задержкам, так как получается асинхронный способ передачи данных. И распознавание "нуля" и "единицы" если длительность импульсов хоть чуть чуть меняется, может стать уже проблемой.
Советовали поиграться с величиной задержек в исходниках, и найти средние, между "еще не работает, и уже не работает". Но я в программировании не то что бы сильно, где еще явно подписано, что это и на что влияет, то рискнуть могу поменять. А остальное, никогда не трогаю.
Так же я попробовал изменить длину проводов от датчика. И из 20 см, сделал двухметровый. Датчик "завис" через 3 часа. Может так совпало, а может и попало.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Andrey_B, у меня к Вам такой вопрос, может быть так, что при нагреве логики, которая внутри DHT22 происходит так, что чуток смещается внутренняя тактовая частота самого тактового генератора датчика ?
Сомневаюсь, что она там кварцованная. Думаю, что там простой RC генератор.
Я просто заметил такую особенность, что при +60 градусов и выше, DHT22 вообще не отдает данные. Вернее, на осциллографе там импульсы в момент запроса есть, а возможно распознать такое, получается проблема из за смещения частоты, фазы, или длительности или скважности.
Вот в связи с этим собственно вопрос, можно ли и сложно ли добавить в меню конфигурации DHT (возможность подстройки), дополнительные опции, где можно менять в каких то пределах параметры задержек ?
Может путем подстройки, удастся найти оптимальный вариант задержек, для точного распознавания нулей и единиц с датчика. И появится возможность подстройки этих значений.
Сомневаюсь, что она там кварцованная. Думаю, что там простой RC генератор.
Я просто заметил такую особенность, что при +60 градусов и выше, DHT22 вообще не отдает данные. Вернее, на осциллографе там импульсы в момент запроса есть, а возможно распознать такое, получается проблема из за смещения частоты, фазы, или длительности или скважности.
Вот в связи с этим собственно вопрос, можно ли и сложно ли добавить в меню конфигурации DHT (возможность подстройки), дополнительные опции, где можно менять в каких то пределах параметры задержек ?
Может путем подстройки, удастся найти оптимальный вариант задержек, для точного распознавания нулей и единиц с датчика. И появится возможность подстройки этих значений.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Неплохо было бы добавить для температурных датчиков поля Action и Netaction , чтобы при определённой температуре выполнялись скрипты. Очень бы пригодились для климатической станции. Я использую в теплице для проветривания.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
asteroid, в проекте используется код Davide Gironi, который по таймингам вроде бы соответствует даташиту.
Вся работа с датчиком состоит из двух этапов: инициализация соединения и передача данных. Сбой может происходить и там и там.
Можно попробовать увеличить в исходниках следующие задержки.
_delay_ms(18); (сделать, например, 25)
_delay_us(30); (сделать, например, 40)
Номера строчек не говорю, так как эти команды встречаются в коде один раз.
Меньше задержки делать нецелесообразно.
Выносить в конфигурацию считаю лишним.
smorigo, у АЦП портов есть Action и Netaction. Нет у DSen (DHT11/22). У этих датчиков процедура опроса построена на задержках, что само по себе плохо в разрезе идеологии устройства. Опрос этих датчиков в автоматическом режиме может теоретически мешать работе других систем (где требуется немедленная реакция).
Вся работа с датчиком состоит из двух этапов: инициализация соединения и передача данных. Сбой может происходить и там и там.
Можно попробовать увеличить в исходниках следующие задержки.
_delay_ms(18); (сделать, например, 25)
_delay_us(30); (сделать, например, 40)
Номера строчек не говорю, так как эти команды встречаются в коде один раз.
Меньше задержки делать нецелесообразно.
Выносить в конфигурацию считаю лишним.
smorigo, у АЦП портов есть Action и Netaction. Нет у DSen (DHT11/22). У этих датчиков процедура опроса построена на задержках, что само по себе плохо в разрезе идеологии устройства. Опрос этих датчиков в автоматическом режиме может теоретически мешать работе других систем (где требуется немедленная реакция).
-
- Сообщения: 142
- Зарегистрирован: 12 ноя 2013, 00:34
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Андрей, поскольку это уже следующая итерация борьбы с DHT (в прошлой, если помнишь, я изменял тайминги, держа под рукой дейтшит). В общем и целом - можно лишь "подлечить", избавиться от подобного поведения DHT-датчиков, покрутив тайминги не получится. С Docsimus-ом разбирали дейтшит человеческий и он обратил внимание на то, что если опрос датчика происходит редко, то на такой запрос датчик отдает или прошлое значение (если оно там сохранилось), либо ничего. (это основная причина проскальзывания нулей и разных "глюков" от датчика). Для корректной работы датчиков в текущей реализации нужно сначала дернуть датчик (ответ нас не интересует), а уже потом (не ранее, чем через 2 сек) еще раз дернуть и вычитать ответ. В таком варианте (согласно дейтшиту) все будет работать. Здесь нужно немного подправить процедуру опроса именно в main.c, не трогая библиотеку David-а.Andrey_B писал(а):asteroid, в проекте используется код Davide Gironi, который по таймингам вроде бы соответствует даташиту.
Этот кусок касается исключительно DHT11, к 22-му относится 500мксAndrey_B писал(а):asteroid,
Можно попробовать увеличить в исходниках следующие задержки.
_delay_ms(18); (сделать, например, 25)
А вообще (уже проверено) нет необходимости в текущей реализации разделять датчики на DHT11 и DHT22. Разница лишь в начальной задержке при инициализации. DHT22 абсолютно адекватно себя ведет при 18мс. А результат все-равно отдаем целочисленный, т.е. можно две процедуры сложить в одну, разницы не будет.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
shaman1010, да, я еще на стадии реализации поддержки обратил внимание, что датчик всегда отдает предыдущие значения. Видимо, конвертация внутри датчика занимает некоторое время и это такая "оптимизация" по-китайски.
Мы даже, кажется, обсуждали - правильно ли дергать датчик два раза на уровне прошивки или лучше делать это на уровне ПО сервера.
Точно, не _delay_ms(18), а _delay_us(500)
Разница в коде не только в процедуре инициализации, но в процедуре получения значений температуры и влажности из данных, которые отдает датчик.
Мы даже, кажется, обсуждали - правильно ли дергать датчик два раза на уровне прошивки или лучше делать это на уровне ПО сервера.
Точно, не _delay_ms(18), а _delay_us(500)
Разница в коде не только в процедуре инициализации, но в процедуре получения значений температуры и влажности из данных, которые отдает датчик.
-
- Сообщения: 142
- Зарегистрирован: 12 ноя 2013, 00:34
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Да, но ее можно обойти проверкой на соответствие принятых значений рабочему диапазону.Andrey_B писал(а):Разница в коде не только в процедуре инициализации, но в процедуре получения значений температуры и влажности из данных, которые отдает датчик.
Плюс в обработке можно не делить результат на 10, а рисовать запятую перед последней цифрой...
Андрей, кстати, может логически целесообразней сделать плату-переходник на какой-нить тиньке, задача которой сводилась бы к опросу, к примеру, 4-х DHT датчиков и хранению данных у себя. А мегой - запрашивать уже тиньку и мгновенно получать валидный ответ?
В итоге:
1) На одну ногу мегадевайса вешаем столько DHT датчиков, сколько потянет выбранный мелкий процессор.
2) Опрашивать "DHT"-линию можно быстрым прерыванием
3) Данные от всех DHT-шек будут всегда валидные и всегда актуальные (можно одним запросом забирать данные со всей "гирлянды", а разделять потом. А можно и в параметрах отдавать, данные с какого датчика нужны)
Можно на эту переходную плату и ds2482 добавить, одним ударом все проблемы с температурными датчиками и их подмножеством решатся.
p.s. и до кучи туда ds3231 добавить, и общаться по i2c с этим внешним модулем.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Возможно, вы правы, но готовой такой платки как бы не существует. Для данного проекта ее либо нужно производить, либо подобный код в прошивке понадобится единицам, которые способны такую платку сделать. Все-таки людей, которые не хотят связываться с пайкой, несоизмеримо больше.shaman1010 писал(а):кстати, может логически целесообразней сделать плату-переходник на какой-нить тиньке, задача которой сводилась бы к опросу, к примеру, 4-х DHT датчиков и хранению данных у себя. А мегой - запрашивать уже тиньку и мгновенно получать валидный ответ?
-
- Сообщения: 142
- Зарегистрирован: 12 ноя 2013, 00:34
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Можно проще: за основу для этой платы взять 328p (тот-же ардуино микро, для самосборщиков) и готовый модуль на ds3231. Из прошивки мегадевайса изъять часть, отвечающую за обработку DHT, вместо нее организовать опрос бутерброда из микры и модуля.Andrey_B писал(а):Возможно, вы правы, но готовой такой платки как бы не существует. Для данного проекта ее либо нужно производить, либо подобный код в прошивке понадобится единицам, которые способны такую платку сделать. Все-таки людей, которые не хотят связываться с пайкой, несоизмеримо больше.shaman1010 писал(а):кстати, может логически целесообразней сделать плату-переходник на какой-нить тиньке, задача которой сводилась бы к опросу, к примеру, 4-х DHT датчиков и хранению данных у себя. А мегой - запрашивать уже тиньку и мгновенно получать валидный ответ?
А для коммерческого использования - доработать Ваш 7I7O и модульно вставлять плату расширения для реалтам-часов и опроса DHT-датчиков.
Ну это как пример обоюдоудовлетворимой реализации.
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Пока решил проблему с DHT22 следующим образом, питание на датчик подаю с одного из портов меги. (Разумеется не прямо с вывода, а через резистор в 100 ом, на всяк случай, и повесил конденсатор на +- питания датчика 10 мкф) Питание идет постоянно, пока мне не понадобится данные о влажности и температуре. Далее, тушу питание, (команду с сервера на порт в down) жду секунду, ( команду с сервера на порт в UP) жду три секунды, и команду на получить данные со всех портов.
Пока за сутки ни разу не завис.
Если показания нулевые, то повторяю итерацию с питанием.
С регулировкой _delay_us(500) не игрался. (Объект от меня за 5 км, много не набегаешься.)
А по сети прошивку не обновить, так как сеть не в едином броадкастном домене, а за несколькими шлюзами.
Так что пока, косвенными методами выкрутился.
Но, борьбу с датчиком не прекращаю, с задержками таки еще поиграюсь.
Пока за сутки ни разу не завис.
Если показания нулевые, то повторяю итерацию с питанием.
С регулировкой _delay_us(500) не игрался. (Объект от меня за 5 км, много не набегаешься.)
А по сети прошивку не обновить, так как сеть не в едином броадкастном домене, а за несколькими шлюзами.
Так что пока, косвенными методами выкрутился.
Но, борьбу с датчиком не прекращаю, с задержками таки еще поиграюсь.
-
- Сообщения: 142
- Зарегистрирован: 12 ноя 2013, 00:34
Re: Прошивка MegaD-328 (релизы, обсуждения, предложения)
Если сервер - может просто сделаете, как рекомендует дейтшит?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);
Причем, если дергать датчик постоянно - то даже в текущей реализации он будет отрабатывать корректно. Проблема появляется, когда китайский процессор внутри датчика уходит в спячку. Т.е. если не давать датчику уснуть - то все будет работать и так.