Датчик 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 регистра конфигурации):
-
0x1F (00011111) - 9-битная точность
-
Разрешение: 0.5°C
-
Время преобразования: ~93.75 мс
-
Бинарно:
R1=0, R0=0
-
-
0x3F (00111111) - 10-битная точность (используется для номера линии в вашем коде)
-
Разрешение: 0.25°C
-
Время преобразования: ~187.5 мс
-
Бинарно:
R1=0, R0=1
-
-
0x5F (01011111) - 11-битная точность
-
Разрешение: 0.125°C
-
Время преобразования: ~375 мс
-
Бинарно:
R1=1, R0=0
-
-
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>)