Перейти к содержанию

Как узнать, какой из нескольких DS18B20 на линии какой?

Обновлено Редакция GAW

У DS18B20 нет адреса, который задают выводами, как у датчиков I2C. Вместо него на заводе в каждый датчик записан уникальный 64-битный код — по нему мастер и выбирает, с кем говорить на общей линии 1-Wire.

Устройство кода ROM

БайтыСодержимое
младший байткод семейства 28h — это DS18B20
следующие 6 байтсерийный номер, 48 бит
старший байтCRC от первых 56 бит

Если CRC прочитанного кода не сходится, код прочитан с ошибкой. Посчитать CRC для проверки можно в калькуляторе 1-Wire.

Как сопоставить коды с датчиками

  1. По одному. Подключайте датчики к линии по очереди и читайте код командой Read ROM [33h], подписывая каждый.
  2. Все сразу. Командой Search ROM [F0h] найдите все коды, затем грейте датчики по очереди рукой и смотрите, у какого кода растёт температура.
  3. Запишите коды в программу и обращайтесь к датчику командой Match ROM [55h] с его кодом.

Цена адресации

Обращение по коду длиннее, чем ко всем сразу. Наш расчёт по минимальному тайм-слоту 60 мкс:

Как обращатьсяБит после сбросаВремя, не меньше
Skip ROM [CCh] — ко всем8около 0,5 мс
Match ROM [55h] + код8 + 64 = 72около 4,3 мс

На фоне 750 мс преобразования при 12 битах это несущественно. Удобный приём — запустить преобразование у всех датчиков сразу через Skip ROM, а читать каждый по Match ROM. Если датчик вообще не находится, сначала проверьте импульс присутствия. Параметры и схемы подключения — в карточке DS18B20.

Похожие вопросы

Почему Read ROM возвращает мусор, когда датчиков несколько?

Read ROM рассчитана на одно устройство: по даташиту при нескольких датчиках они отвечают одновременно, и на линии получается их монтажное И. Прочитанный код, как правило, не проходит проверку CRC — так обычно и видно, что на линии больше одного устройства.

Изменится ли порядок датчиков после перезагрузки?

Порядок поиска определяется самими кодами, а не тем, где датчик стоит на линии, поэтому без изменений на линии он повторяется. Но если добавить или заменить датчик, номера в списке сдвинутся — поэтому в программе хранят коды, а не порядковые номера.

Можно ли записать в датчик свою метку?

Код ROM не меняется, но регистры TH и TL хранятся в EEPROM датчика и записываются командами Write Scratchpad [4Eh] и Copy Scratchpad [48h]. Если тревоги по температуре не используются, в эти два байта можно записать номер места установки.

Источники

  1. Maxim Integrated (Analog Devices). DS18B20 Programmable Resolution 1-Wire Digital Thermometer (19-7487, Rev 6, 7/19) — уникальный 64-битный код в ROM: младшие 8 бит — код семейства 28h, затем 48 бит серийного номера, старшие 8 бит — CRC от первых 56 бит (рис. 8); Search ROM [F0h] — поиск кодов всех устройств методом исключения, повторяется столько раз, сколько нужно; Read ROM [33h] — только при одном устройстве на линии, иначе ответы столкнутся; Match ROM [55h] с 64-битным кодом — отвечает только совпавший датчик; Skip ROM [CCh] — обращение ко всем сразу; TH и TL хранятся в EEPROM, запись через Write Scratchpad [4Eh] и Copy Scratchpad [48h]; длительность тайм-слота 60–120 мкс
  2. Microchip. AN1199: 1-Wire Communication with PIC Microcontroller (DS01199A, 2008) — протокол 1-Wire: обмен тайм-слотами, сброс и импульс присутствия; пример чтения 64-битного регистрационного номера — 8 бит CRC, 48 бит серийного номера и 8 бит кода семейства

Нашли ошибку?