sht21 помогите разобратьтя

Обсуждаем цифровые устройства...
Ответить
Аватара пользователя
Виталий_36
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Ср мар 02, 2011 15:09:25
Откуда: Воронеж

sht21 помогите разобратьтя

Сообщение Виталий_36 »

С считыванием байтов проблем нет а вот что делать с полученными данными не могу разобраться.
По всем примерам в инете:
St = MSB<<8+LSB; //
тут возникает первый вопрос а что делать с двумя младшими битами младшего байта LSB их надо принудительно обнулять?

Для перевода полученного значения в градусы применяется формула: (не получается ее воткнуть нормально)
10.jpg
(2.64 КБ) 413 скачиваний


T=-46.85 +St*175.72/65536; //
Тут возникает второй вопрос - переменную Т объявлять как float ?

Далее я хочу данные выводить на 1602 индикатор и мне надо знать какие биты в переменной Т отвечают за минус (наверно старший)
а какие за целую и дробную часть?
mas123
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Re: sht21 помогите разобратьтя

Сообщение mas123 »

Виталий_36 писал(а):переменную Т объявлять как float ?
Как хочешь. Можешь сделать флоатом и получить результат с плавающей запятой.
А можешь использовать вариант с фиксированной запятой: умножь обе константы (46.85 и 175.72) на 100 - и в переменной типа signed long получишь температуры с двумя знаками после запятой. Т.е. число 123 будет означать 1.23 градуса.
Виталий_36 писал(а):какие биты в переменной Т отвечают за минус (наверно старший)
а какие за целую и дробную часть?
При использовании float будет проще сделать sprintf() в буфер в нужном формате и вывести результат.

При использовании целочисленной переменной: отрицательное число хранится в дополнительном коде.
Да, знак можно определить по старшему биту, но и остальные биты тоже надо обработать.
А с десятичной точкой: перевести число из HEX в DEC, и перед двумя младшими цифрами вставить точку. :)
Аватара пользователя
Виталий_36
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Ср мар 02, 2011 15:09:25
Откуда: Воронеж

Re: sht21 помогите разобратьтя

Сообщение Виталий_36 »

К сожалению я не знаком с sprintf() и почему только два знака после запятой ведь при делении может быть и больше
Аватара пользователя
BigallS
Опытный кот
Сообщения: 752
Зарегистрирован: Пт апр 15, 2011 21:11:22
Откуда: Россия

Re: sht21 помогите разобратьтя

Сообщение BigallS »

Виталий_36 писал(а):К сожалению я не знаком с sprintf() и почему только два знака после запятой ведь при делении может быть и больше


Тут есть про SHT21 http://we.easyelectronics.ru/search/topics/?q=SHT21
Аватара пользователя
Виталий_36
Первый раз сказал Мяу!
Сообщения: 33
Зарегистрирован: Ср мар 02, 2011 15:09:25
Откуда: Воронеж

Re: sht21 помогите разобратьтя

Сообщение Виталий_36 »

BigallS писал(а):
Виталий_36 писал(а):К сожалению я не знаком с sprintf() и почему только два знака после запятой ведь при делении может быть и больше


Тут есть про SHT21 http://we.easyelectronics.ru/search/topics/?q=SHT21

Я там все внимательно прочитал
mekuto
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Вт фев 17, 2009 21:28:10
Откуда: Новочебоксарск
Контактная информация:

Re: sht21 помогите разобратьтя

Сообщение mekuto »

Здравствуйте.
Извините.

Если используется язык СИ. То, лучше Т определить типа float. Вычисления с плавающей точкой медленнее, но думаю вам быстрота не нужна, все равно у датчика есть инерция к изменению температуры. У датчика есть погрешность измерения температуры. Не стоит брать лишние разряды чисел, которые уж точно не несут полезного сигнала с известной достоверностью. Следовательно, можно ограничится 1, 0.1, 0.05 и т.д. градусов. Перевод в интегер:

Код: Выделить всё

signed int temperature;
....
temperature = (signed int) T;

Получим целую часть, если надо дробную часть получить, то можно умножить на дополнительный коэффициент или использовать trunc().
https://ru.wikipedia.org/wiki/Math.h http://www.cplusplus.com/reference/cmath/
Спасибо.
mas123
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

Re: sht21 помогите разобратьтя

Сообщение mas123 »

Виталий_36 писал(а):К сожалению я не знаком с sprintf()
Функция из стандартной библиотеки языка С.
Если используется другой язык программирование - то смотри в доки, какая у него функция вывода числа из бинарного вида в текстовый.
Виталий_36 писал(а):и почему только два знака после запятой ведь при делении может быть и больше
Ключевые слова: целочисленная переменная (т.е. вообще нет дробных частей!) и фиксированная запятая.

Почему именно два знака? Ну, можно обе константы умножить на 1000 - будет в результате температура с тремя знаками после запятой.
А смысл? Что сказано в даташите про разрешающую способность датчика? 0.01 или 0.04 градуса!
Ответить

Вернуться в «Цифровая техника»