• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Решено DS18B20 - хочу изменить разрешение

MiDash

Member
Здравствуйте!
Хочу научиться изменять разрешение DS18B20. И даже получается, но никак не могу сохранить изменения.
Код:
      ow.reset(pin)
      ow.select(pin, addr)
      ow.write(pin,0x4E,1)
      ow.write(pin,0x00,1)
      ow.write(pin,0x00,1)
      ow.write(pin,0x3F,1)
      ow.write(pin,0x48,1)
Все работает, разрешение становится 0,25 градуса. Но!
Отключаю питание датчика - он выдает 85 градусов. Подключаю обратно - начинает выдавать с разрешением в 0,0625, т.е. забывает, что я его программировал. ЧЯДНТ?
 

Alexey N

Member
Я с такими датчиками не работал пока, но вот здесь вроде то, что Вам нужно. Ваш код как раз и выполняет временное изменение разрешения до ресета. Чтобы оно сохранилось после ресета, его надо записать в EEPROM датчика. Посмотрите примеры кода в статье.

DS18B20 : How to change resolution (9/10/11/12 bits)? | Homautomation

Запись по адресу 0x48 там выполняется после ресета.
 
Последнее редактирование:

MiDash

Member
О, а может быть, в этом-то и дело!
Я смотрел как раз на эту статью, но не дочитал до конца. Поспешишь - ...
Спасибо, попробую.
 

MiDash

Member
Проверил. все так и есть. Copy Scratchpad [48h] - самостоятельная команда и не может быть в потоке данных предыдущей команды. Работающая последовательность такая:
Код:
      ow.reset(pin)
      ow.select(pin, addr)
      ow.write(pin,0x4E,1)
      ow.write(pin,0x00,1)
      ow.write(pin,0x00,1)
      ow.write(pin,0x3F,1)
      ow.reset(pin)
      ow.select(pin, addr)
      ow.write(pin,0x48,1)
      tmr.delay(15000)
Меня сбил с толку неправильный перевод даташита DS18B20. Там написано:
Запись в память [4Eh]
Эта команда позволяет устройству управления записывать 3 байта данных в память DS18B20.
Первый байт данных записывается в регистр (TH), второй байт записывается в регистр (TL), и третий байт записывается в регистр конфигурации.
Данные должны быть переданы наименьшим значащим битом вперед.
Для датчиков температуры с паразитным питанием все три байта ДОЛЖНЫ быть записаны командой КОПИРОВАНИЕ ОЗУ В ПЗУ [48h] прежде, чем устройством управления будет сгенерирован импульс сброса, иначе данные будут потеряны.
В оригинале же так:
Write Scratchpad [4Eh]
This command allows the master to write 3 bytes of data to the DS18B20’s scratchpad. The first data byte is written into the TH register (byte 2 of the scratchpad), the second byte is written into the TL register (byte 3), and the third byte is written into the configuration register (byte 4). Data must be transmitted least significant bit first. All three bytes MUST be written before the master issues a reset, or the data may be corrupted.
Последняя фраза:
Все три байта ДОЛЖНЫ быть записаны прежде, чем устройством управления будет сгенерирован импульс сброса, иначе данные могут быть повреждены.
То есть не нужно торопиться выдавать reset, и ни слова про паразитное питание и копирование в ПЗУ.
 
Последнее редактирование:
Сверху Снизу