Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Мультиплексирование UART
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
qwerty
Возникла такая задача. Есть atmega16, и ей нужно общаться с несколькими устройствами посредством UART на разных скоростях (поочередно). Можно ли для этого как-то мультиплексировать сигналы rxd и txd, и какой мультиплексор лучше использовать?
rezident
Вообще-то для общего случая UART для соединения точка-точка. Если все устройства расположены на одной плате и кормятся от одного питания, то можно объединить TXD и RXD у всех в один сигнал, но функцию пина TXD включать только на момент передачи. В остальное время TXD должен быть отключен, а устройства обязаны "слушать" линию через RXD. Естественно при такой конфигурации нужен какой-то протокол связи с адресацией устройств.
qwerty
Цитата(rezident @ Oct 4 2007, 04:31) *
Вообще-то для общего случая UART для соединения точка-точка. Если все устройства расположены на одной плате и кормятся от одного питания, то можно объединить TXD и RXD у всех в один сигнал, но функцию пина TXD включать только на момент передачи. В остальное время TXD должен быть отключен, а устройства обязаны "слушать" линию через RXD. Естественно при такой конфигурации нужен какой-то протокол связи с адресацией устройств.


Все устройства на одной плате, но скорость общения с каждым разная! Разве можно их объединить в одну шину?
prottoss
Цитата(qwerty @ Oct 4 2007, 19:35) *
Все устройства на одной плате, но скорость общения с каждым разная! Разве можно их объединить в одну шину?
Если устройства "интеллектуальные" , то их можно попробовать привести к одной, наименьшей и поддерживаемой скорости. После того, как нужной устройство услышало "свой" адрес, мастер и устройство переходят на максимальную требуемую скорость
rezident
Цитата(qwerty @ Oct 4 2007, 17:35) *
Все устройства на одной плате, но скорость общения с каждым разная! Разве можно их объединить в одну шину?

Пурква да не па? laughing.gif Устройство (слейв) будет отвечать только в том случае, если им правильно (без ошибок) принять весь пакет запроса и адрес в запросе совпадает с собственным сетевым адресом именно этого устройства.
P.S. только конечно же это для случая, когда слейвы тоже на МК сделаны и в них можно реализовать поддержку какого-нибудь сетевого протокола.
tyro
Цитата(qwerty @ Oct 4 2007, 14:35) *
Все устройства на одной плате, но скорость общения с каждым разная! Разве можно их объединить в одну шину?

Можно, если только одно устройство ведущее, а остальные ведомые.
qwerty
Цитата(prottoss @ Oct 4 2007, 04:42) *
Если устройства "интеллектуальные" , то их можно попробовать привести к одной, наименьшей и поддерживаемой скорости. После того, как нужной устройство услышало "свой" адрес, мастер и устройство переходят на максимальную требуемую скорость


Если бы так можно было сделать, я бы так и сделал. smile.gif
Проблема в том, что скорости слейвов менять не получится. Надо их развести физически...
wodya
Я использовал механическое реле, но у меня RS переключался один раз в начале работы.
iosifk
Цитата(qwerty @ Oct 4 2007, 15:24) *
Возникла такая задача. Есть atmega16, и ей нужно общаться с несколькими устройствами посредством UART на разных скоростях (поочередно). Можно ли для этого как-то мультиплексировать сигналы rxd и txd, и какой мультиплексор лучше использовать?

Посмотрите описание интерфейса LIN. Это очень похоже на Ваш случай. Если хотите, то у меня на сайте есть статьи про микроконтроллеры НЕК, там есть описание этого интерфейса...
Удачи!
qwerty
Цитата(rezident @ Oct 4 2007, 04:46) *
P.S. только конечно же это для случая, когда слейвы тоже на МК сделаны и в них можно реализовать поддержку какого-нибудь сетевого протокола.



ну в моем случае слейвы - это atmega8, gsm-модем, и rs-232 :-)
prottoss
Цитата(qwerty @ Oct 4 2007, 19:51) *
Если бы так можно было сделать, я бы так и сделал. smile.gif
Проблема в том, что скорости слейвов менять не получится. Надо их развести физически...
Может быть тогда есть возможность выделить отдельные линии для выбора мастером нужного устройства
rezident
Цитата(qwerty @ Oct 4 2007, 18:16) *
ну в моем случае слейвы - это atmega8, gsm-модем, и rs-232 :-)

Ну в таком случае и 74HC4052 думаю подойдет smile.gif Только pull-up на выходах сигналов RXD мультиплексора не забудьте.
qwerty
Цитата(rezident @ Oct 4 2007, 05:22) *
Ну в таком случае и 74HC4052 думаю подойдет smile.gif Только pull-up на выходах сигналов RXD мультиплексора не забудьте.


Спасибо! Я думаю, это как раз то, что надо! beer.gif
kolobok0
Цитата(qwerty @ Oct 4 2007, 16:34) *
Спасибо! Я думаю, это как раз то, что надо! beer.gif


Можно сделать по принципу шины, без всяких спец. переключений. Устройства должны сами диспетчиризировать направление передачи и адресацию. Физически достаточно поставить пару штук элементов 2и-не (если без преобразователя на 12в). Смысл прост до безобразия - выхода коммутируются так, что бы исключить прослушку себя же. Получаем логически - шинную топологию. Физически это будет выглядеть как наращиваемая звезда. Схема разработана Кирилюком Александром в 1991 году где то. ТЦ "Ритм"...

удачи Вам
(круглый)
vesago
Если вы хотите сделать, чтобы с компьютера иметь возможность общаться и с m8 и с модемом и m8 c модемом, можно сделать так. По тх rx PC соединить с rx tx модема и атмеги соответственно. Только на атмегу пускать через 4053. После подачи питания или программно или вручную 4053 коммутирует PC на m8. Если m8 должна работать с модемом, или она или джампером менять адрес дабы перевернуть сигналы. Только надо по TX поставить диоды и подтянуть ноги уартов.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.