Датчик 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>)