Датчик температуры 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