Датчик DS18B20 (DS1820 — это более старый и менее распространённый вариант про него в самом конце, а в этой именно про DS18B20) — это цифровой термометр с интерфейсом 1-Wire.
Объём памяти DS18B20
DS18B20 имеет 9 байт (72 бита) оперативной памяти (SRAM), которая используется для временного хранения данных, включая:
-
Температурные данные (2 байта, 16 бит).
-
Пользовательские настройки (TH, TL и конфигурационный регистр, всего 3 байта).
-
Резервные байты (4 байта).
Кроме того, у DS18B20 есть EEPROM (независимая энергонезависимая память) объёмом 3 байта (24 бита), куда записываются:
-
TH (верхний порог тревоги, 1 байт)
-
TL (нижний порог тревоги, 1 байт)
-
Конфигурационный регистр (1 байт)
Хотелось бы немного пояснить. Да, у нас 3 байта, 24 бита, но реально можно записать 18 ячеек двоичной логикой 0 или 1. Взгляните на картинку.Получается у нас TH и TL: 1 байт = 8 ячейкам 0 или 1, что может дать нам значения в 16-тичной системе, - 256 значений (0–255). Фактически диапазон температур ограничен -55°C...+125°C, что соответствует значениям 0x00 (0) до 0xFF (255) с учетом смещения. Ведь 0xFF = 0b11111111, то есть когда все регистры заполнены по максимуму.
0xFF → интерпретируется как +125°C (даже если формально это 255 в десятичной системе). То есть условно все что выше 125, это все равно 125.
Что насчет конфигурационного регистра: Разрешение задается двумя битами (R0, R1):
9 бит: 0.5°C (R1=0, R0=0)
10 бит: 0.25°C (R1=0, R0=1)
11 бит: 0.125°C (R1=1, R0=0)
12 бит: 0.0625°C (R1=1, R0=1).
Остальные биты регистра зарезервированы и должны быть установлены в 0. То есть всего две ячейки опять же под логику двоичную 0 и 1. Нет никаких цифр выше 1!
Вывод
-
Оперативная память (SRAM): 9 байт (72 бита) — стирается при отключении питания.
-
Независимая память (EEPROM): 3 байта (24 бита) — сохраняется после отключения питания.
Если сказать именно про старый DS1820, то у него нет EEPROM, а только SRAM (9 байт), но он менее функционален, чем DS18B20.
И еще хотелось бы небольшой скетч для Ардуинки, чтобы показать как записывать и считывать те самые значения из EEPROM.
Смотреть файл для Arduino с стандартными операциями из библиотек. (#include <OneWire.h> #include <DallasTemperature.h>)