bma2bma писал(а):1. Порой нужно подключать не все термодатчики
Чем шинный подход мешает подключать не все термодатчики? Можно хоть один подключить, хоть сто — ни шину, ни код, ни связь при этом менять не надо.
bma2bma писал(а):2. Каждый раз требуется подключение определенного датчика в свое место
Это как раз
неиспользовании шины важно важно, какой датчик на какой пин подключен, и ошибившись с этим, причём ошибиться легко, можно всё испортить. С шинным подходом датчики не важно как и в каком порядке подключены к шине, обращение идёт по уникальному идентификатору датчика.
3. Было дело - выходили из строя, надо ставить новый из запаса - переписывать код из-за нового его номера?
Конечно же нет. С какой стати вообще уникальные идентификаторы датчиков жёстко вписаны в код? Как минимум они должны быть вписаны в конфигурационный файл, в реестр или где-то ещё в настройках опрашивающей программы. Поэтому в худшем случае нужно будет подправить конфиг-файл. В лучшем случае я бы сделал нечто вроде plug-and-play подхода. В начале работы программа производит энумерацию устройств на шине и находит все датчики, которые подключены. Если один из датчиков, который в прошлый раз был, пропал, а за то появился какой-то новый — программа автоматически понимает, что произошла замена одного из датчиков и сама правит конфиг-файл и молча рабоатет с новым датчиком. Если более одного датчика пропало/заменилось, тут уже программа предлагает вмешаться человеку.
Или всегда предлагает, почуяв изменение состава шин: дорогой юзер, раньше, мол, был датчик XXXXXXXX, но он не обнаружен, зато обнаружен новый датчик YYYYYYYYYY. Расценить это как замену?
А насчет времени - микросекунды в моем деле не требуются. Вполне можно работать с миллисекундами.
Тебе не требуется, а протоколу требуется. В отличие того же от протокола I²C, где ведущий и ведомый могут замедлять передачу данных по шине, силком удерживая SCL в низком состоянии, в 1-Wire такого сделать нельзя.
Время «A» жестко регламентировано. Время «E» жестко регламентировано. Если «A» вдруг растянется до величины «H», вместо попытки передать бит произойдёт сброс устройств на шине. Если «A» случайно растянется до величины, сопоставимой с «C», вместо передачи единичного бита будет передан нулевой бит.
А дрыгание пинами LPT-порта прикладной программой не даёт никакой гарантии того, с какими временными задержками будут дрыгаться эти самые пины.