XDN писал(а):Доброго времени суток, товарищи РадиоКотовцы!
Довелось мне поработать с шиной 1-wire. Всё бы ничего, штука занятная, но застрял в необычно простой ситуации: не могу понять, при помощи чего выставляется низкий уровень в шине.
Если не ошибаюсь, в продуктах DALLAS этим занимается MOSFET, который "стягивает", когда нужно, линию в low. Но за счёт чего просадка реализуется в том же AVR (для пример, AppNote AVR318) одной ножкой? На схеме I/O из даташита не видно ничего, за счёт чего можно было бы "заземлиться".
Понимаю, что думаю куда-то не в ту сторону.

Укажите, пожалуйста, правильное направление.
В составе порта АВР тоже есть МДП транзисторы, один из которых может подтягивать вывод порта к земле, другой к плюсу питания - это если соответствующая линия порта настроена на вывод.
Как я понимаю для реализации 1 W с помощью линий порта возможны два случая.
1. Если в качестве подтягивающего (к плюсу) резистора используется встроенный подтягивающий резистор МК.
В этом случае для "стягивания" линии в 0 PORTn.x нужно записать 0, а в DDRn.х нужно записать 1, в результате линия порта будет настроена как выход (DDRn.х=1), а ее значение определится содержимым PORTn.x (0).
Если нужно отпустить шину, то в DDRn.х нужно записать 0, а в PORTn.x нужно записать 1, что настроит линию порта как вход (DDRn.х=0) и подключит подтягивающий резистор (PORTn.x =1) к ней.
2. Если используется внешний подтягивающий резистор, то тут все проще - в данном случае в PORTn.x нужно записать 0 и не трогать бит до конца работы с 1-W. Управление ведется с помощью DDRn.х
Если нужно "притянуть" шину к 0, то в DDRn.х записываем 1, т. о. линия порта настраивается на выход, а поскольку в PORTn.x 0, то она "притягивается" к 0.
Если нужно отпустить шину, то, как все уже догадались, нужно в DDRn.х записать 0, т. о. линия порта настраивается на вход, а поскольку в PORTn.x 0, то внутренний подтягивающий резистор отключен и линия переходит в высокоимпедансное состояние. К плюсу ее подтягивает внешний резистор.
Вобщем вроде бы так.
Прием соответсвенно ведется чтением PINn.x