Адрес DS18B20
- Войдите на сайт для отправки комментариев
Сб, 18/04/2020 - 18:03
Всем привет.
Вопрос простой. Можно ли извлечь один датчик DS18B20 и установить другой, такой же без смены адреса?
Есть ли код, который бы определял любой подключённый датчик?
у меня - есть.
И как сделать?
запрограммировать.
Это понятно, что запрограммировать.
Только как ни пробую не выходит.
Вопрос простой.
Да нихрена он не простой. Лично я ничо_нипонял. Темнишь ты что-то или недоговариваешь. Здесь видиццо несколько вариантов: код`у фпринципе без разницы на адрес датчика, если он инициализируется при старте. Другое дело - если он жестко привязан и не может менятся. Этт так обычно "комерсы" в кедах делают, типо привязко и тд. Но такие "босяццкие" защиты обходяцца раздэзом и банкой пифффка :))) Так_шо колись, чо там у тебя?
Обычный термометр на работе для измерения температуры воздуха снаружи. Иногда выходит из строя, где-то раз в три-пять месяцев. Ставлю новый, определяю адрес, лезу в код, подключаю и опять работает. Просто надоело. Хочу один выкинул, а другой вставил и чтобы работало.
Йоптэ_гавновапрос. Перепейши код, дилоф_то...
Так вот и не пойму как отвязаться от адреса.
Литр коня ***** или VSOP нам с Дедом и мы те прям на_пальцах обЪясним, чо_куда_и_каг. ДагаварилисЪ?
Да без базара)))
И как сделать?
Взять пример из библиотеки. Там спокойно спрашивают у устройства его адрес, а потом с ним работают. И вот также спрашивать, а потом работать с тем, что ответили.
Отлично. Ждём схему и прочие "интимности" :))
Нашёл вот:
OneWire ds(10); // on pin 10 (a 4.7K resistor is necessary) byte deviceType; void setup(void) { Serial.begin(9600); } void loop(void) { byte i; byte type_s; byte data[12]; byte addr[8]; float celsius; if ( !ds.search(addr)) { ds.reset_search(); delay(250); return; } if (OneWire::crc8(addr, 7) != addr[7]) { return; } switch (addr[0]) { case 0x10: type_s = 1; deviceType=1; //Chip = DS18S20 or old DS1820 break; case 0x28: type_s = 0; deviceType=2;//Chip = DS18B20 break; case 0x22: type_s = 0; deviceType=3;// Chip = DS1822 break; default: deviceType=0; return; } ds.reset(); ds.select(addr); ds.write(0x44, 1); delay(1000); ds.reset(); ds.select(addr); ds.write(0xBE); for ( i = 0; i < 9; i++) {data[i] = ds.read();} int16_t raw = (data[1] << 8) | data[0]; if (type_s) { raw = raw << 3; if (data[7] == 0x10) { raw = (raw & 0xFFF0) + 12 - data[6]; } } else { byte cfg = (data[4] & 0x60); if (cfg == 0x00) raw = raw & ~7; else if (cfg == 0x20) raw = raw & ~3; else if (cfg == 0x40) raw = raw & ~1; } celsius = (float)raw / 16.0; Serial.write (1); Serial.write (2); Serial.print (deviceType); Serial.write (3); for( i = 0; i < 8; i++) { Serial.write (2); Serial.print(addr[i], HEX); Serial.write (3); } Serial.write (2); Serial.print(celsius); Serial.write (3); Serial.write (4); }http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
Я где-то слышал что есть такие люди
которые умеют получать температуру с любого датчика
просто подключенного к какому-то пину.....
И слышал что им пофигу какой адрес у этого датчика..
MuravyovSF
А сколько у вас всего подключенных датчиков?
Всего один. Его меняю на другой и начинаются танцы с бубном.
Для одного датчика обычно адрес знать не надо. Даются команды без указания адреса и на измерение и потом на чтение.
Гугли ds18b20 команда SkipROM
А можно просто гуглить Dallas Termometer library
Гугли ds18b20 команда SkipROM
Дет, ну какой из_тя бизЪнесЪмэн??? Весь "конь" профукал ))))
А я блин так старалсо...
А я, кстати, малину не портил, держался.
41 - да, так держать!!!
Обычный термометр на работе для измерения температуры воздуха снаружи. Иногда выходит из строя, где-то раз в три-пять месяцев.
Вы где их берёте, (чтобы не напороться), та-кто они вроде трудно убиваемые.
http://arduino.ru/forum/programmirovanie/pochistil-sketch-primera-raboty-s-ds18b20-iz-bibly-oneware#comment-111623
Контроллер нормальный вроде...