Я хочу сделать так, чтобы ATTiny IC стал ведомым на 1-проводной шине с собственным S / N и списком команд для своих специфических функций.
Я хочу знать, могу ли я использовать однопроводную библиотеку с сайта arduino для отправки данных в качестве ведомого.
Например, в одной комнате может быть ведомое устройство с несколькими типами датчиков, которые будут сообщать мастеру запрашиваемую информацию, или мастер может сказать ему управлять чем-то вроде жалюзи.
Вопрос Должен ли я контролировать линию шины и отвечать на запрос от мастера, а также принимать во внимание то, как обычный датчик будет отправлять данные? На какой частоте должен работать подчиненный, чтобы получить наилучшую функциональность?
Я не буду использовать паразитическую силу, как примечание.
Ответы:
Насколько я знаю, 1-проводная библиотека, которую вы связали в своем вопросе, позволяет действовать только как мастер, а не как раб.
Я только что выпустил библиотеку, чтобы превратить плату Arduino в 1-проводное ведомое устройство, здесь:
https://github.com/neuoy/OneWireArduinoSlave(edit: перенесено сюда https://gitea.youb.fr/youen/OneWireArduinoSlave ). Я использую его в своей собственной системе домашней автоматизации, и она работает безупречно в моей настройке (1-проводный мастер, DS9490R, подключен к ноутбуку через USB, а также обеспечивает питание для Arduino, который является Arduino Uno). Библиотека обрабатывает детали низкого уровня: соответствие rom, отправка и получение байтов (что на самом деле довольно сложно сделать правильно, в основном невозможно без логического анализатора). Остальное зависит от тебя.Он полностью реализован с прерываниями, все коммуникации выполняются в фоновом режиме, вы можете выполнять другой код, как обычно, параллельно, и получать уведомления с помощью обратных вызовов при получении байтов и т. Д. Отправка байтов ведущему также выполняется асинхронно.
Я также знаю, что существует по крайней мере еще одна библиотека, https://github.com/MarkusLange/OneWireSlave , как прокомментировал выше Ryu_hayabusa. Это не сработало для меня (не знаю, из-за моей настройки оборудования или по другой причине), но определенно работает для других, так что стоит попробовать. Кажется, эта библиотека не реализована с прерываниями, поэтому ваша программа блокируется во время ожидания основной операции (что вполне приемлемо во многих сценариях).
источник