Датчик температуры ds1820

 

Обо всяком понемножку)

Во-первых, буковку "s" в названии частенько пропускают потому, что старая моделька ds1820 давно уже снята с производства.

Итак, внешний вид датчика:

Внешний вид датчика

Рис. 1. Внешний вид датчика

Работает он как от внешнего питания, так и паразитно (от шины данных); измеряет температуру в диапазоне от -55ОС до +125ОС, причём с точностью ±0,5 ОС в диапазоне от -10ОС до +85ОС

Максимальное время конвертации (считки, преобразования в относительно читабельный вид и запись в память датчика) температуры – 750 мс

Кстати, о памяти:

 № байта Значение
 0 LSB (Старший байт значения температуры)
 1 MSB (Младший байт значения температуры)
 2 TH (Старший байт сохранённых в EEPROM данных)
 3 TL (Младший байт сохранённых в EEPROM данных)
 4  Зарезервировано
 5 Зарезервировано
 6 Count_Remain
 7 Count_Per_C
 8 CRC

Есть ещё EEPROM – энергонезависимая память, в которую можно скидывать текущее значение температуры; содержит, соответственно, 2 байта: TH и TL

Показания температуры (байты LSB и MSB) хранятся в следующем виде:

Хранение данных о температуре

Рис. 2. Хранение данных о температуре

При этом по умолчанию температура датчика - +85 ОС. Иногда это пригождается -_-

Также есть хитроумная метода извлечения из датчика более точного значения температуры – с использованием байтов 6 и 7 – Count_Remain и Count_Per_C

Получение точного значения температуры

Где Temp_Read – наше обычное значение с точностью до целых (последний бит, отвечающий за «0.5», просто отбрасываем). В результате – точность до 1/16.

Здесь Count_Per_C - это количество делений одного градуса (тут 16), а Count_Remain - сколько осталось этих делений до целого градуса. Вот такие пироги.

Код устройства, как у всех одноварных, таков:

Уникальный код устройства

Код семейства – 10h

Немного о некоторых функциональных командах, которые воспринимает DS18S20:

  • Convert_T ($44h) - команда преобразования температуры - считывания показателей датчика и сохранения данных в 2-хбайтовом регистре в памяти. После этого датчик возвращается к режиму ожидания. Если же мы используем паразитное питание, то в течение максимум 10 мкс после отсылки команды ведущий должен послать на шину подтяжку – логическую единицу – в течение всего срока преобразования.
  • Write_Schratchpad ($4E) - запись двух байтов данных в память DS18S20 (первый байт в регистр TH - 2 байт памяти,  второй байт в регистр TL - 3 байт памяти). Данные будут переданы младшим байтом вперёд; ведущий может выдать на линию сброс только после полной записи обоих байтов, иначе есть вероятность повреждения данных.
  • Read_Schratchpad ($BE) - эта команда позволяет мастеру прочитать содержимое памяти датчика. Передача данных начинается с младшего бита нулевого байта и заканчивается последним, восьмым байтом, содержащим код CRC. При этом мастер может прекратить чтение в любое время.
  • Copy_Schratchpad ($48) - эта команда копирует TH и TL регистры (второй и третий байты в памяти датчика) в EEPROM (чтобы сохранить информацию даже при отключении датчика). Если используется паразитное питание, то максимум через 10 мкс ведущий должен поставить на шине логическую единицу  шины, по крайней мере, в течение 10 мс.
  • Recall_E2 ($B8) – эта команда помещает данные о температуре из EEPROM (TH и TL) во второй и третий байты памяти датчика.
  • Read_power_supply ($B4) - с помощью этой команды можно определить, используется ли паразитное питание (если после команды на шине логический ноль) или внешнее питание (логическая единица, соответственно).

 

 

 Автор - Moriam

Обсудить на форуме