Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Объединение двух TXD в UART
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Alt.F4
Добрый день.
Хочу посадить два устройства на одну линию TXD и завести на RXD AVR. Передачу данных будут проводить одновременно.
Можно ли будет "услышать" обоих по очереди, если скорости взять допустим 9600 и 57600?
Или все-таки будет мусор в регистре чтения UART и надо чтобы устройства писали по одному?
Спасибо.
V_G
Если посылки будут накладываться, не различить никак. Если один RxD, надо еще знать, на какой скорости будет очередная посылка, и заранее переключаться.
Вариант - запараллелить 2 порта, настроенные на разные скорости. И сбрасывать флаги ошибок. Но постоянные ошибки могут привести к частичной потере данных в моменты переключения скоростей.
В общем, неправильно это...
firstvald
Разрешается ситуация по другому. Просто опрашиваем эти устройства по очереди - делаем из master slave ами. И никаких конфликтов не будет.
Ruslan1
Вам нужно определиться:
или
Цитата(Alt.F4 @ May 1 2011, 12:16) *
Передачу данных будут проводить одновременно.

или
Цитата(Alt.F4 @ May 1 2011, 12:16) *
Можно ли будет "услышать" обоих по очереди

Так как данные на приемном конце существуют только в момент передачи, то возможна либо передача одновременно (и, соответственно прием одновременно), или передача по очереди (и, соответственно прием по очереди).
При одновременной передаче эта задача не решается в общем случае (может быть решена с кучей дополнительных условий для конкретного частного случая), при последовательной передаче- придется немного постараться, но совершенно ничего сложного нет. Но, разумеется, никакой аппаратный UART с этой кашей не справится, все ручками.
Alt.F4
Я хотел использовать МК с 2-мя UART'ами, но из-за неверных параметров на сайте Атмела, я купил AVR с один UART'ом.
Об этом "кидалове" я писал здесь. Теперь приходиться выкручиваться.
Цитата
надо еще знать, на какой скорости будет очередная посылка, и заранее переключаться
Да, это известно.
Цитата
Разрешается ситуация по другому. Просто опрашиваем эти устройства по очереди - делаем из master slave ами. И никаких конфликтов не будет.
У меня 1 МК и два устройства, которые "тупо" шлют в уарт определенные данные, т.е. master/slave здесь не прокатит.
Цитата
Вам нужно определиться
Я имел ввиду, что читать мне нужно по очереди, но шлют устройства инфу почти без перерывов. Т.е. вопрос заключался, будут ли портиться данные если скорости использовать максимально различные (типа UART на 9600 просто не замечает 115200 и наоборот)
Может попробовать коммутировать чем-нибудь?
V_G
Если передатчики друг друга не слышат, данные будут портиться всегда. Т.е. есть вероятность принять верный байт, но посылку из нескольких байт подряд - гораздо меньше. И есть вероятность при получении байта на другой скорости не поиметь ошибок типа frame error или overrun error и принять за свой переданный другому байт.
Если в вашем распоряжении мало проводов, переходите на RS485 или его программный аналог на RS232, чтобы все слышали всех, встраивайте в посылки адресную информацию и передавайте все на одной скорости. Перед передачей проверяя занятость линии.
Alt.F4
В моем случае будет проще переключать линию RXD МК с одного устройства на другое.
Вопрос чем. Реле? Ненадежно и долго...

Чуть позже:
Опа. Возьму мультиплексор ADG839.
Там с их включением бывают какие-либо проблемы?
Спасибо.
Diusha
Цитата(Alt.F4 @ May 1 2011, 13:58) *
В моем случае будет проще переключать линию RXD МК с одного устройства на другое.

Опа. Возьму мультиплексор ADG839.

Если они одновременно не шлют, то зачем такие сложности? Достаточно логического элемента "И", можно даже на 2-х диодах и резисторе (по кр. мере, если скорость невысокая)
Sirko
Не совсем ясно. Если ведется только прием данных, т.е. без запросов, значит рано или поздно настанет момент одновременного поступления данных с обоих устройств. Но т.к. одно из устройств использует скорость 9600, то организовать софтовый юарт - самое то.
Rimid
а может второй UART сделать программным способом?
AVR274: Single-wire Software UART on tinyAVR and megaAVR devices
AVR304: Half Duplex Interrupt Driven Software UART on tinyAVR and megaAVR devices
AVR307: Half Duplex UART Using the USI Module on tinyAVR and megaAVR devices
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.