Страница 1 из 1
Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 00:04:33
КАШАК
Доброго времени суток
Задался я тут целью соединить датчик температуры/влажности DHT21 с AtTiny2313. Начал читать
даташит, Написано, что интерфейс 1-Wire, не совместимый с Dallas. Далее написано, что после отправки старт последовательности от МК датчик начинает выплевывать данные в количестве 40 бит. Вот на этом я и завис, никак не могу разобраться с этой самой последовательностью. Что она включает в себя? Плюс на одном форме прочитал, что требуется преобразование полученных данных по формуле. Я как-то совсем запутался. Может кто работал с данным датчиком?
Заранее спасибо всем откликнувшимся

Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 07:13:50
BOB51
С именно таким - нет.
А вот с даташитами при работе с новыми компонентами - постоянно.
Береш даташит изготовителя, распечатываеш, также распечатываеш перевод сего даташита. Лезеш на сайт изготовителя - ищеш апноты/рекомендации по применению. Все энто перерабатываеш. Пишеш пробную тест-программку, гоняеш макет. Сводиш результат в конспект и пользуешся полученными данными в дальнейшей работе.
P.S.
То , что это заявлено как далласаподобный интерфейс совершенно не означает применения пакетного стандарта однопроводных "пуговичек".
Частенько это касается только аппаратной реализации внешней шины связи, а содержимое пересылаемых данных трактуется совершенно по-своему.

Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 07:59:43
Ser60
Ну почему при сегодняшнем изобилии сенсоров влажности люди выбирают самый непутевый, у которого еще зачем-то однопроводный интерфейс. Приобретите нормальный сенсор с i2c интерфейсом и радуйтесь жизни. Извините, не смог равнодушно пройти мимо.
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 08:09:31
BOB51
Берут то, что имеется в продажи и подешевше.

Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 08:42:25
RoboC
КАШАК писал(а):никак не могу разобраться с этой самой последовательностью.
Сначала микроконтроллер настраивает порт на выход и прижимает шину к минусу на время не менее 500 мкс. Затем отпускает шину, настраивает порт на вход и ожидает ответа в течение 20-40 мкс. Если датчик не ответил (не выдал низкий уровень) то микроконтроллер формирует информацию об ошибке. В случае ответа датчика, шина отпускается на время 80 мкс, после чего начинается передача значений влажности и температуры. Бит, равный нулю, представляет собой импульс длительностью 26-28 мкс, а бит единицы – длительностью 70 мкс.
Пакет информации, получаемый микроконтроллером от датчика, состоит из 40 бит (5 байт) и представляет собой следующую последовательность – байт целых значений влажности, байт десятых значений влажности, байт целых значений температуры, байт десятых значений температуры, контрольная сумма. В датчике DHT-11, в отличие от DHT-22, десятые части влажности и температуры не используются и их значение всегда равно нулю. Контрольная сумма равна сумме всех предыдущих байтов.
Данные получаешь в формате BCD, т.е. байт нужно разделить на тетрады, что бы получить цифры.
Пример можно посмотреть
здесь или другой метод
здесь, но стартовый импульс для DHT-21 короче.
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 09:27:28
ARV
RoboC писал(а):Сначала микроконтроллер настраивает порт на выход и прижимает шину к минусу на время не менее 500 мкс. Затем отпускает шину, настраивает порт на вход и ожидает ответа ...
чтобы ваш совет не выглядел подозрительно, следует уточнить, как именно МК "
прижимает" и "
отпускает" шину.
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 13:15:12
RoboC
Сарказм не понят
Код: Выделить всё
//=============MCU send START
DHT_DDR|=(1<<DHT_BIT); //pin as output
DHT_PORT&=~(1<<DHT_BIT); //0
delay_ms(18);
DHT_PORT|=(1<<DHT_BIT); //1
DHT_DDR&=~(1<<DHT_BIT); //pin as input
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 13:28:54
ARV
сарказма и не было.
ваш код показал, что мои опасения ненапрасны. если говорить об AVR, то ваш код в предпоследней команде при КЗ в линии (что почти норма для выносных датчиков) будет стараться выжечь порт МК. думаю, аналгичная ситуация и для других типов МК.
правильная работа с однопроводкой заключается в выводе в PORT нуля единожды и навсегда, а все прочие манипуляции делаются исключительно через переключение режима порта ввд-вывод, т.е. через DDR
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 14:32:24
ibiza11
Согласен с
ARV. Но если очень хочется включить внутреннюю подтяжку, то это нужно делать только после входа в режим "ввода". Соответственно, перед переводом пина в режим "вывода", предварительно отключить подтяжку.
вот выжимка из моей библиотеки 1-wire:
Код: Выделить всё
#define _SetLine(port,bit) do{DDR##port &= ~(1<<(bit)); PORT##port |= (1<<(bit)); }while(0) /* input with pullup */
#define _ClrLine(port,bit) do{PORT##port &= ~(1<<(bit)); DDR##port |= (1<<(bit)); }while(0) /* output with log "0" */
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 14:37:21
RoboC
Человек задал вопрос об алгоритме работы!! КАк ее организовать он, думаю, сам разберется..
ваш код показал, что мои опасения ненапрасны.
Зря опасались, код для примера взят из ветки
http://radiokot.ru/forum/viewtopic.php?f=61&t=82040, можете туда обязательно написать об этой критической ошибке.
сарказма и не было
Ну- ну, Вы ждали этой ошибки

и могли предупредить сразу. За замечание по делу "+", за отношение "-".

Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 14:45:13
ARV
знающий человек таких вопросов не задал бы, а начинающему нельзя давать подозрительные советы - он может поиметь неприятности.
вы идете на поводу чужих исходников, а мне все равно, откуда они взяты: если в коде есть ошибка или небрежность - я об этом говорю. до тех пор, пока я не удостоверился, что ошибка действительно есть - я назвал ваши рекомендации подозрительными, ведь вы могли и привести абсолютно корректный код в качестве примера.
если вы считаете, что плюсами или минусами вы как-то влияете на мое отношение, вы заблуждаетесь. если количество плюсов для вас равносильно подтверждению безошибочности - рекомендую интересоваться мнением кошшшки, у нее плюсов много.
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 14:47:45
ARV
ibiza11 писал(а):Но если очень хочется включить внутреннюю подтяжку
по какой причине это может хотеться в 1-wire? никакого заметного эффекта, кроме вреда, от этого не будет...
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 15:13:34
HHIMERA
ARV писал(а):если говорить об AVR, то ваш код в предпоследней команде при КЗ в линии (что почти норма для выносных датчиков) будет стараться выжечь порт МК. думаю, аналгичная ситуация и для других типов МК.
правильная работа с однопроводкой заключается в выводе в PORT нуля единожды и навсегда, а все прочие манипуляции делаются исключительно через переключение режима порта ввд-вывод,
Для "других типов МК" нет смысла переключать ввод-вывод... у них есть
open drain... Например STM8 или STM32...
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 15:44:00
ibiza11
ARV писал(а):по какой причине это может хотеться в 1-wire? никакого заметного эффекта, кроме вреда, от этого не будет...
я включал подтяжку для работы без внешнего резистора подтяжки. В моем случае работало на столе.
А какой вред может принести включение подтяжки?
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 16:02:53
HHIMERA
Внутренняя подтяжка вообще не для этого предназначена... к тому же она ещё и хлипкая... Чуть больше ёмкость линии и затянутся фронты... низкая помехоустойчивость...
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 16:15:23
ARV
ibiza11 писал(а):я включал подтяжку для работы без внешнего резистора подтяжки. В моем случае работало на столе.
А какой вред может принести включение подтяжки?
если мы говорим об 1-wire, то:
1. подтяжка AVR - это в лучшем случае 30К (в худшем 70-100К), в то время как стандарт 1-wire требует 4,7К (5,1К).
2. лишняя команда приводит к увеличению интервалов, а стандарт 1-wire очень жестко регламентирует временные интервалы - вы рискуете попасть в просак на 1 мкс и ничего работать не будет...
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 19:24:34
Serg22
Еще добавлю... При работе с DHT22 мне не удалось добиться низкого энергопотребления. либо он все врямя кушает 150мка, либо гасить ему питание и при включении ждать примерно 2 секунды первого адекватного измерения. Может кто-то знает как понизить его аппетиты?
Re: Датчик DHT21 + AtTiny2313
Добавлено: Ср апр 09, 2014 22:46:40
КАШАК
Всем огромное спасибо, в принципе интересовала в основном стартовая последовательность

Дальше все понятно. С 1Wire работал, а тут не особо отличается
