Перейти к содержанию
    

SHT21 (Модуль GY-21) на ATMega8

Привет всем.

 

Вот обзавёлся этим датчиком и решил заменить им старый добрый проверенный HIH-3610 (аналоговый датчик влажности с выходом на АЦП), но сдохший к великому сожалению :crying: .

 

В конечный прибор пока не вставлял, в целях тестирования/отладки подключил его к отдельной меге8@16MHz. Результаты для простоты гоню на USART и далее в комп.

На базе примеров из интернета написал функции для работы с этим датчиком. Использую ногодрыг, т.к. в конечном устройстве на меге8 ноги аппаратного i2C заблокированы АЦП (там ещё MPX6115A висит). Это не STM32 :rolleyes: ...

 

Датчик запустился в общем-то без проблем, данные с него приходят исправно, но, на мой взгляд, немного странные. Например:

Temp=24.54; Hum=28.76

Temp=24.55; Hum=28.58

Temp=24.55; Hum=28.45

Temp=24.54; Hum=28.30

Temp=24.53; Hum=28.18

Temp=24.51; Hum=28.15

Temp=24.51; Hum=28.12

Temp=24.51; Hum=28.03

Temp=24.50; Hum=27.91

Temp=24.51; Hum=27.87

Temp=24.54; Hum=27.97

Temp=24.56; Hum=27.97

Temp=24.57; Hum=27.91

Temp=24.57; Hum=28.15

Temp=24.58; Hum=28.18

Замеры раз в секунду. В 30 см от него лежит DS18B20, показывает ~22 градуса.

Если долго держать включённым, температура медленнно но повышается. это нормально? В целом вопрос теоретический, у меня прибор сам вырубается через 10 сек после включения.

 

А вот влажность какая-то пониженная. Эталона у меня, правда, нет, но когда HIH-3610 был в норме, он 30% даже в жару не показывал...

 

И ещё вопрос. По стандарту I2C вначале положено передавать адрес девайса. В некоторых примерах под ардуину я видел передачу этого адреса. Но когда я это делаю, оно где-то виснет (не разбирался где).

Но у меня нет доверия к ардуино-примерам, т.к. там значения из датчика везде делят на 65535, хотя по доке на SHT21 там разрешения 16 бит нигде нет, для температуры максимум 14 бит, для влажности - 12.

 

Я также не припаял pull-up резюки к ногам. Для этого модуля они вроде не нужны. Или я ошибаюсь?

 

Кто-то может помочь?

Код для CvAVR приложил. Сам датчик полностью адекватный - кладу палец - температура повышается (кстати и влажность тоже :) ), открываю окно (идёт холодный воздух) - понижается.

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

 

Спасибо.

Mega8_SHT11.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я нe работал с SHT11, но когда-то изучал.

 

И ещё вопрос. По стандарту I2C вначале положено передавать адрес девайса. В некоторых примерах под ардуину я видел передачу этого адреса.
Цитата из DataSheet-а:

"The sensor cannot be addressed by I2C protocol; however, the sensor can be connected to an I2C bus without interference with other devices connected to the bus. The controller must switch between the protocols."

 

Я также не припаял pull-up резюки к ногам.
На коротком расстоянии можно пользоваться внутреннюю подтяжку на линии потра АВР, но надеяться на неё не стоит, и лучше подтянуть резистром в 10КОм.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот чуток инфы с we.easyelectronix.ru

SHTxx_Design_Guide.zip

лишней думаю не будет.

Да, спасибо. я видел кое-где упоминания этой доки, но все ссылки были битые :(

 

На коротком расстоянии можно пользоваться внутреннюю подтяжку на линии потра АВР, но надеяться на неё не стоит, и лучше подтянуть резистром в 10КОм.

 

Резюки припаяю ... хз. У меня расстояние между датчиком и процом максимум 5 см (если мерять по длине проводка).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В документации на SHT10 (SHT11) есть указания по дизайну платы и по ограничениям на частоту опросов, чтобы свести к минимуму саморазогрев девайса.

Удивительно, что Вам удалось без документации запустить обмен. Там в общем то не совсем I2C.

Ещё там есть CRC, которую желательно проверять.

Да и процедуры сброса интерфейса на стороне SHT надо реализовать. В условиях помех зависание по шине обмена - вовсе не редкость.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дико извиняюсь, датчик SHT21 - http://www.ebay.com/itm/112053626741?_trks...K%3AMEBIDX%3AIT

Дизайн платы - китайский :biggrin: и пуллапы 10 кил там уже есть. Поэтому этот вопрос отпадает.

 

Про ограничения на частоту опроса я в курсе, делаю раз секунду (или 2 ) - и так и так делал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но у меня нет доверия к ардуино-примерам, т.к. там значения из датчика везде делят на 65535, хотя по доке на SHT21 там разрешения 16 бит нигде нет, для температуры максимум 14 бит, для влажности - 12.

ну если ардуинам не верите, то даташит Вы читали? :)

там пишут, что датчик отдаёт данные всегда в 16-битном формате, только, к примеру, для 12-битного разрешения младшие 4 бита не считаются (и лучше их после приёма принудительно сбросить, так бит 1 указывает на тип данных 0 - температура, 1 - влажность).

и формула из даташита H = -6 + 125*<16-bits_data>/65536 немного не совпадает с тем, что у Вас в исходниках: return -6.0F + 125.0F*(float)hum_raw/4096.0F;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Если данные более-менее адекватные, значит с ПО все в порядке, а далее начинается "магия". Любой датчик температуры (влажности) показывает температуру (влажность) самого себя и уже ваша проблема заставить его показывать температуру (влажность) среды, которую вы хотите :).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну если ардуинам не верите, то даташит Вы читали? :)

там пишут, что датчик отдаёт данные всегда в 16-битном формате, только, к примеру, для 12-битного разрешения младшие 4 бита не считаются (и лучше их после приёма принудительно сбросить, так бит 1 указывает на тип данных 0 - температура, 1 - влажность).

и формула из даташита H = -6 + 125*<16-bits_data>/65536 немного не совпадает с тем, что у Вас в исходниках: return -6.0F + 125.0F*(float)hum_raw/4096.0F;

ну ДШ я читал :) Но там тоже, извините, лажа.

В разделе 6, в формулах (!) указано 16 бит, в разделе 5.6 - 12 и 14 бит, в разделе 9, самая последняя страница - вообще 2^RES :biggrin:

Я пытался писать формулы из расчёта RES=16, получил температуру типа -86 градусов в комнате, и такую же ахинейскую влажность. Кстати RES=16 -- брал из ардуины. интересно, как оно там работает?

Когда вписал 12 и 14 -значения стали более-менее правдоподобные.

А из датчика я всегда 2 байта забираю.

 

M_Andrey, а как же рассказы про заводскую калибровку? Все врут, все врут ...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А при чем тут калибровка. Может у вас датчик что-то греет.

Замеры раз в секунду. В 30 см от него лежит DS18B20, показывает ~22 градуса.

Если долго держать включённым, температура медленнно но повышается. это нормально?

А вот влажность какая-то пониженная.

Может сама схема, а может горячий воздух из ноута, например :).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну я ж не первый раз делаю такие схемы :)

Китайская платка с датчиком в воздухе, где-то в 1-1.5 см от платы. Воткнута в разъём, который собственно и задаёт эту высоту. Сам проц вообще в стороне от него.

Могу фотку скинуть :)

 

ЗЫ

А ноута у меня вообще нет :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати у SHT21 есть встроенный подогрев чипа, у вас он не включен случайно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну я его не включал, он мне 300 лет не нужен :D . Гляну. выключу на всякий случай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот влажность какая-то пониженная. Эталона у меня, правда, нет, но когда HIH-3610 был в норме, он 30% даже в жару не показывал...

Зимой в помещениях с отоплением влажность всегда ниже чем это бывает в теплое время года. Вам ещё повезло, что целых 28-29%. У меня на работе всего 15-17% (на улице -10°C) в лучше случае, если верить AM2302. Могу скинуть свои логи, на которых хорошо видно как проседает влажность, когда кто-то запускает воздух с улицы в комнату, даже после того как температура восстановится до номинальной.

 

Если долго держать включённым, температура медленнно но повышается. это нормально?

В каком диапазоне меняется температура? Даже если у вас датчик находится внутри изолированной термокамеры - температура может спокойно плавать в небольшом диапазоне. Ну и конечно - может быть саморазогрев чипа .

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...