С радостью готов признать, что Леонид оказался прав - никакой подтяжки DQ не требуется, линия DQ не просаживается.
Точнее сказать: существуют такие датчики, которые работают именно так...
Но из 11 датчиков у меня есть два очень странных:
Первый (p1) общается по шине, но ничего кроме +85 или +127 отдавать в качестве температуры не может. Т.е. это явно неисправный.
Второй ведет себя интересней. При пассивной подтяжке и VCC < 4.0В просаживает линию (p2).
При активной подтяжке и VCC < 3.0В просаживает DQ импульсно (p3). При этом температура не корректная.
Датчики питаются по 3 ноге, т.к. изменение напряжения на ней играет роль.
Самое интересное, что второй датчик стоял у меня в тестовом кабеле, с помощью которого я вел все разработки.
Остальные датчики не просаживают линию даже при высоких T > +110С.
Процент неисправных меня настораживает. Попробую собрать больше статистики, ибо используем эти датчики в промышленных масштабах.
Кому интересно, прицепляю прошивку для STM32F4DISCOVERY, с помощью которой можно тестировать DS18B20.
Подключение:
- PA2 - console_tx;
- PA3 - console_rx;
- PB4 - ow_tx;
- PB5 - ow_rx;
- LED_GREEN[PD12] - светодиод "работа". мигает раз в секунду;
- LED_RED[PD14] - светится в момент преобразования температуры. можно синхронизировать осциллограф (желтый луч на прицепленных картинках);
- LED_ORANGE[PD13] - светится в режиме активной подтяжки;
- LED_BLUE[PD15] - светится если хотя бы один из датчиков на шине выдает T > +30С;
- кнопка USER[PA0] - при удержании переключает пассивную подтяжку на активную и наоборот.
Консоль работает с параметрами 115200-8N1.
Доступные команды:
"help" - показывает список команд;
"who" - показывает информацию о прошивке;
"reboot" - перезагружает контроллер;
"pullup=passive" - включает пассивную подтяжку;
"pullup=active" - включает активную подтяжку.
Конец команды - символ <CR>.
В консоль выводится информация об идентификаторах и данных датчиков на шине.
{ID 28 33 91 6C 02 00 00 1D} [T 50 05 4B 46 7F FF 0C 10 1C - 00] -> ds18b20 +85
Поддерживаются датчики типов ds1820 и ds18b20.
Для подключения датчика соединить PB4 и PB5 и подать на DQ.
VCC можно брать с платы или с внешнего БП.
Кому не лень и есть датчики, прошу проверить.
При пассивной подтяжке и питании датчика от "3V" с платы, должен загореться синий светодиод, если датчик просаживает линию и/или неисправно преобразует температуру. Но датчик не должен быть горячее +30C.
Красный светодиод будут загораться в момент преобразования температуры (на 1 сек). Если не загорается - значит датчик неисправен и/или неверно подключен.
Кста, исходный вопрос ТС пока остается без ответа. Думаю, не стоит заморачиваться, т.к. ТС, вроде, хотел поправить софт.
Эскизы прикрепленных изображений