Аналоговый и цифровой DS18B20 oneWire

Я только что обнаружил, что Dallas DS18B20 можно считывать как с цифровых, так и с аналоговых контактов. Я никогда не думал, что аналоговый вариант возможен, пока не наткнулся на статью, посвященную другой проблеме. Итак, теперь мне интересно, если у меня есть дюжина DS18B20 с проводом длиной около 20 футов и резистором 4,7 кОм, какой вариант чтения будет лучшим? Цифровой или аналоговый?

, 👍2

Обсуждение

1) Аналог на Arduino Uno означает, что эти контакты поддерживают аналоговый режим (не все контакты GPIO поддерживают аналоговый режим), а это означает, что их можно настроить как аналоговый вход, а не просто как цифровой ввод/вывод. 2) DS18B20 — это цифровой датчик, обменивающийся данными по [1-проводному протоколу](https://en.wikipedia.org/wiki/1-Wire), это шина, то есть несколько DB18B20 могут использовать одну и ту же шину., @hcheung


2 ответа


2

Для использования нескольких устройств DS18B20 на одной шине

1/ Сначала получите адрес каждого устройства DS18B20, подключив его к Arduino и вызвав функцию discoverOneWireDevices();. Запишите адрес. Это набор из 8 шестнадцатеричных цифр, например 0x28, 0x13, 0x97, 0x9A, 0x0A, 0x00, 0x00, 0x6A

2/ Жестко закодируйте адрес каждого устройства, например #define TEMP_SENSOR1 {0x28, 0x13, 0x97, 0x9A, 0x0A, 0x00, 0x00, 0x6A перед вызовом программы настройки и определите соответствующий адрес устройства: DeviceAddress tempSensor1 = TEMP_SENSOR1;

3/ каждый раз, когда вы запускаете команду на DS18B20, указывайте, с кем вы разговариваете, например, temperature1 = Sensors.getTempC(tempSensor1);

,

1

Аналоговый вариант невозможен, поскольку 1-проводная шина представляет собой цифровую коммуникационную шину, однако на многих процессорах для этого можно использовать аналоговый вывод. Это достигается на многих процессорах, поскольку аналоговый вывод можно настроить и использовать для цифрового ввода-вывода. Ардуино, такие как UNO, могут добиться этого благодаря используемому ими процессору. Обратите внимание, что не все микропроцессоры используют аналоговый вывод для цифрового ввода-вывода.

Существует примечание по применению от AMD под названием «Алгоритм поиска 1-Wire», https://www.analog.com/en/app-notes/1wire-search-algorithm.html. Используя этот процесс, вы можете независимо считывать информацию со всех датчиков, не зная их адресов. Использование этого метода не гарантирует, какой датчик вы считываете, но последовательность будет повторяться, и вы можете просто заменить датчик, но порядок, вероятно, изменится. Это позволяет вам менять датчики и т. д., когда задействовано не так много датчиков. Вот несколько ссылок, которые лучше объяснят это.

https://docs.arduino.cc/learn/communication/one-wire

https://www.arduino.cc/reference/en/libraries/onewire/

,