Связь 1-Wire Serial со стандартными последовательными портами RX/TX в микроконтроллерах

Я просто хочу начать с того, что я относительно новичок в электротехнике в целом, поэтому, если я кажусь абсолютно отсталым, пожалуйста, потерпите меня.

В рамках учебного проекта я работаю с несколькими датчиками цвета, в частности с Parallax ColorPAL 28380s , и у меня есть Arduino Uno и Arduino Mega 2560, чтобы собирать данные с них. Я возился со спецификой этого проекта на Arduino SE.но я полагаю, что этот вопрос может быть для любого микроконтроллера в целом. Эти датчики используют метод связи, известный как 1-Wire/MicroLAN, в котором они используют только один контакт для передачи и приема в зависимости от состояния контакта, к которому они подключены, среди нескольких других особенностей. Теперь у меня их три, и моя конечная цель состоит в том, чтобы иметь возможность многократно собирать данные со всех из них в один и тот же момент времени, чтобы я мог отправлять данные в какую-то другую программу, которую я пишу для запуска алгоритма. . Проблема в том, что используемый пример основан на эмулированном последовательном порте на Arduino, который не любит работать с несколькими экземплярами.

Теперь в Mega 2560 встроено три набора для последовательной связи, что было бы идеально... только если бы я мог отделить RX и TX от 1-Wire. Пользователь Arduino SE предложил мне использовать транзистор для его разделения. Назовите меня глупым, но у меня нет запасных, поэтому я скоро пойду протестировать его, как только смогу сходить в ближайший магазин электроники. Тем не менее, просматривая Интернет, я прочитал, что 1-Wires никогда не следует подключать к собственным последовательным портам из-за того, как они работают с состояниями.

Таким образом, могут ли датчики 1-Wire обмениваться данными с собственными последовательными портами в микроконтроллерах, если я создам схему для разделения сигналов? И если это возможно, то в чем особенности такой схемы?

Ответы (1)

  • Приложив некоторые усилия к программному обеспечению, вы можете считывать информацию со всех трех датчиков по одному и тому же проводу: периферийные устройства 1-wire имеют уникальный идентификатор.

  • Dallas 1-wire — это особый протокол связи, и использование оборудования UART для связи с устройством 1-wire похоже на использование бензопилы для поворота винта? Лучше поищите библиотеку 1-wire, которая просто перебивает протокол. Таких библиотек должно быть много, либо для Arduino, либо для голой Mega 2560.

  • Если вы действительно хотите «разделить» одну линию (UART), вы можете использовать аналоговый мультиплексор.

Ладно, как-то глупо их гонять родным UART. Я смог управлять одним датчиком с помощью библиотеки, так что эту часть я могу понять. Что касается вашего первого пункта, вы говорите мне, что я могу просто выполнить сброс всех датчиков одновременно по одному и тому же проводу, переключить состояние вывода на вход и циклически переключаться между идентификаторами с прерываниями/используя конечный автомат для иметь возможность читать входы по отдельности?
Почитайте о протоколе 1-wire, он должен быть объяснен в паспорте ваших датчиков. Существуют команды, нацеленные на конкретное периферийное устройство (идентифицируемое по его идентификатору).
Проанализировав таблицу данных немного дольше, я попробую использовать некоторые команды прямо там и поиграю с ними, используя ваше предложение. Я буду расширяться, если найду что-нибудь еще, но я думаю, что команда +nn может быть полезна в случае с 28380, хотя в таблице данных указано иное. Я расскажу об особенностях Arduino SE, если заставлю его работать.