Аналоговый и цифровой DS18B20 oneWire
Я только что обнаружил, что Dallas DS18B20 можно считывать как с цифровых, так и с аналоговых контактов. Я никогда не думал, что аналоговый вариант возможен, пока не наткнулся на статью, посвященную другой проблеме. Итак, теперь мне интересно, если у меня есть дюжина DS18B20 с проводом длиной около 20 футов и резистором 4,7 кОм, какой вариант чтения будет лучшим? Цифровой или аналоговый?
@daves_nt_here, 👍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-проводная шина представляет собой цифровую коммуникационную шину, однако на многих процессорах для этого можно использовать аналоговый вывод. Это достигается на многих процессорах, поскольку аналоговый вывод можно настроить и использовать для цифрового ввода-вывода. Ардуино, такие как 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/
- Что выбрать между датчиками температуры и влажности: AM230x или DHT22?
- Данные DHT11 из Arduino UNO в Firebase через ESP8266
- BMP280 возвращает 0
- Колебания показаний датчика температуры LM35 (+- 5°C) с Arduino UNO
- Неверные показания PT100 и MAX31865
- Почему показания датчика температуры становятся непоследовательными при добавлении к плате дополнительного оборудования?
- Отправка аналоговых входных данных из последовательного порта в Google Таблицы
- Вентиляторы PWM вызывают ошибочные значения датчика температуры (помехи?)
1) Аналог на Arduino Uno означает, что эти контакты поддерживают аналоговый режим (не все контакты GPIO поддерживают аналоговый режим), а это означает, что их можно настроить как аналоговый вход, а не просто как цифровой ввод/вывод. 2) DS18B20 — это цифровой датчик, обменивающийся данными по [1-проводному протоколу](https://en.wikipedia.org/wiki/1-Wire), это шина, то есть несколько DB18B20 могут использовать одну и ту же шину., @hcheung