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

Получается у нас 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.

Config

Что насчет конфигурационного регистра: Разрешение задается двумя битами (R0, R1):
Основные конфигурации точности (биты 5-6 регистра конфигурации):

  1. 0x1F (00011111) - 9-битная точность

    • Разрешение: 0.5°C

    • Время преобразования: ~93.75 мс

    • Бинарно: R1=0, R0=0

  2. 0x3F (00111111) - 10-битная точность (используется для номера линии в вашем коде)

    • Разрешение: 0.25°C

    • Время преобразования: ~187.5 мс

    • Бинарно: R1=0, R0=1

  3. 0x5F (01011111) - 11-битная точность

    • Разрешение: 0.125°C

    • Время преобразования: ~375 мс

    • Бинарно: R1=1, R0=0

  4. 0x7F (01111111) - 12-битная точность (стандартная по умолчанию)

    • Разрешение: 0.0625°C

    • Время преобразования: ~750 мс

    • Бинарно: 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>)