Перейти к содержанию
    

Объединение двух TXD в UART

Добрый день.

Хочу посадить два устройства на одну линию TXD и завести на RXD AVR. Передачу данных будут проводить одновременно.

Можно ли будет "услышать" обоих по очереди, если скорости взять допустим 9600 и 57600?

Или все-таки будет мусор в регистре чтения UART и надо чтобы устройства писали по одному?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если посылки будут накладываться, не различить никак. Если один RxD, надо еще знать, на какой скорости будет очередная посылка, и заранее переключаться.

Вариант - запараллелить 2 порта, настроенные на разные скорости. И сбрасывать флаги ошибок. Но постоянные ошибки могут привести к частичной потере данных в моменты переключения скоростей.

В общем, неправильно это...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Разрешается ситуация по другому. Просто опрашиваем эти устройства по очереди - делаем из master slave ами. И никаких конфликтов не будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам нужно определиться:

или

Передачу данных будут проводить одновременно.

или

Можно ли будет "услышать" обоих по очереди

Так как данные на приемном конце существуют только в момент передачи, то возможна либо передача одновременно (и, соответственно прием одновременно), или передача по очереди (и, соответственно прием по очереди).

При одновременной передаче эта задача не решается в общем случае (может быть решена с кучей дополнительных условий для конкретного частного случая), при последовательной передаче- придется немного постараться, но совершенно ничего сложного нет. Но, разумеется, никакой аппаратный UART с этой кашей не справится, все ручками.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я хотел использовать МК с 2-мя UART'ами, но из-за неверных параметров на сайте Атмела, я купил AVR с один UART'ом.

Об этом "кидалове" я писал здесь. Теперь приходиться выкручиваться.

надо еще знать, на какой скорости будет очередная посылка, и заранее переключаться
Да, это известно.

Разрешается ситуация по другому. Просто опрашиваем эти устройства по очереди - делаем из master slave ами. И никаких конфликтов не будет.
У меня 1 МК и два устройства, которые "тупо" шлют в уарт определенные данные, т.е. master/slave здесь не прокатит.

Вам нужно определиться
Я имел ввиду, что читать мне нужно по очереди, но шлют устройства инфу почти без перерывов. Т.е. вопрос заключался, будут ли портиться данные если скорости использовать максимально различные (типа UART на 9600 просто не замечает 115200 и наоборот)

Может попробовать коммутировать чем-нибудь?

Изменено пользователем Alt.F4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если передатчики друг друга не слышат, данные будут портиться всегда. Т.е. есть вероятность принять верный байт, но посылку из нескольких байт подряд - гораздо меньше. И есть вероятность при получении байта на другой скорости не поиметь ошибок типа frame error или overrun error и принять за свой переданный другому байт.

Если в вашем распоряжении мало проводов, переходите на RS485 или его программный аналог на RS232, чтобы все слышали всех, встраивайте в посылки адресную информацию и передавайте все на одной скорости. Перед передачей проверяя занятость линии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моем случае будет проще переключать линию RXD МК с одного устройства на другое.

Вопрос чем. Реле? Ненадежно и долго...

 

Чуть позже:

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

Там с их включением бывают какие-либо проблемы?

Спасибо.

Изменено пользователем Alt.F4

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моем случае будет проще переключать линию RXD МК с одного устройства на другое.

 

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

Если они одновременно не шлют, то зачем такие сложности? Достаточно логического элемента "И", можно даже на 2-х диодах и резисторе (по кр. мере, если скорость невысокая)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем ясно. Если ведется только прием данных, т.е. без запросов, значит рано или поздно настанет момент одновременного поступления данных с обоих устройств. Но т.к. одно из устройств использует скорость 9600, то организовать софтовый юарт - самое то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а может второй 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...