Страница 1 из 2

ATmega128, на один UART подключить 2 устройства

Добавлено: Сб янв 24, 2015 10:54:15
mzaliznyak
Добрый день!
На один УАРТ меги128 (второй УАРТ уже занят) необходимо подцепить два устройства. Решил сделать вариант поочередного подключения двух MAX232 к линиям RX, TX контроллера:
на вход четырехканального коммутатора сигналов HC4066 подключил Rx и Tx пины контроллера, выходы HC4066 соответственно на два 232 MAXа. Схема работает, но с одним глючком: после переключения MAX232 с одного на другой, тот MAX который отключил шлет дополнительный байт "мусора".
Подтяжки 1 кОм к входам MAX232 не решают проблему, я бы даже сказал они не влияют никак...
Какие есть мысли, коллеги? :)

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб янв 24, 2015 11:04:50
mas123
Что показывает осциллограф, подключенный на этот самый вход "отключаемого MAX232"?
Есть уверенность, что переключение MAX232 производится в момент неактивности UART? Т.е. в момент "сейчас ничего не передаётся".
mzaliznyak писал(а):Подтяжки 1 кОм к входам MAX232 не решают проблему, я бы даже сказал они не влияют никак...
Подтягивающий резистор подключен куда - к земле или к питанию?

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб янв 24, 2015 11:19:24
mzaliznyak
подтяжки пробовал и к питанию и к земле. Если к питанию никаних изменений, если к земле после каждого байта на комп приходит 0x00.
Относительно уверенности, тестовый алгоритм такой:
1. выбрал один MAX
2, выгрузил тест байт в UDR0
3. жду установки бита UDRE (UCSR0A)
4. + делаю задержку 1 сек.

5. выбрал другой MAX, повторяю 2-4 шаги

Осциллографом посмотреть смогу позже.

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб янв 24, 2015 11:48:44
mas123
mzaliznyak писал(а):Если к питанию никаних изменений, если к земле после каждого байта на комп приходит 0x00.
Ага, приход 0x00 - это правильное поведение. На выходе TX всё время держится "1", падающий фронт - начало передачи.

Продолжим фантазировать...
Надо определить виновника. Имхо один из:
- сам UART
- мультиплексор
- MAX232

В момент переключения на приём в контроллер ничего не "набегает"?
Чисто для опыта - можешь переключать ТОЛЬКО выход TX из контроллера, а RX оставить на одной линии, а то и для идеала - отключить от всех MAX232 и потдянуть к питанию.
На момент переключения выключать UART.

Попробовать другой мультиплексор!
Кстати! Что говорит даташит о времени перехода выхода в Z-состояние и времени восстановления из оного?
И зачем там вообще элементы с Z-состоянием, когда можно всё это сделать на обычной логике.
Да, хотелось бы взглянуть на схему всего этого дела.

Не конфигурировать UART, а ножку TX сконфичить как выход и установить там "1".
Затем попробовать переключать линии - будет приходить мусор?

Вариант с осциллом был бы идеальным. Ладно - есть возможность подцепить на входе MAX232 хотя бы другой контроллер с UART? Подслушать TTL-уровни сигнала.

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб янв 24, 2015 15:57:06
mzaliznyak
Что говорит даташит о времени перехода выхода в Z-состояние и времени восстановления из оного?
Очень сильный вопрос, спасибо!!! :)
Дело оказалось именно во времени переключения коммутатора. После того, как в алгоритм добавил задержу около 0,2 с после смены MAXa, мусор исчез.
Кстати, без резисторных подтяжек к +5В тоже работает стабильно, думаю, тех внутренних 400 кОм, которые тянут к питанию линии в MAX232 вполне достаточно.
Сейчас буду основной алгоритм пилить...

Относительно вопроса:
И зачем там вообще элементы с Z-состоянием, когда можно всё это сделать на обычной логике.
Как бы смешно не было: она просто была в моей шкатулке :) Ну а выбрал ее из-за рекламы в пдф-ке:
"The CD4066 is a quad bilateral switch intended for the transmission or multiplexing of analog or digital signals."

Кроме того, У HC4066 напряжение питания 3 В-15 В. При повышении питани все выгорит, а она буде переключать :))

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Ср янв 28, 2015 14:07:31
orinoko
А если использовать преобразователь SPI-to-UART? Есть микросхемы такие.

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Ср янв 28, 2015 14:43:55
eess9
Видимо вопрос цены. Преобразователь SPI-UART довольно дорогие. А тут mzaliznyak обошёлся тем, что было под рукой.

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Чт дек 24, 2015 17:06:18
mzaliznyak
Друзья! Важно, внутренние подтяжки 400кОм в MAX232 не справляются с помехами, когда пины передатчика висят в воздухе. Подтянул к +5В 4,7 кОМ

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Пт сен 07, 2018 22:39:36
RusikOk
[uquote="mas123",url="/forum/viewtopic.php?p=2252807#p2252807"][quote="mzaliznyak"]И зачем там вообще элементы с Z-состоянием, когда можно всё это сделать на обычной логике.[/uquote]подскажите какие. в идеале нудно коммутировать 4 UART? желательно чтобы микросхема управлялась двоичным кодом (2 линии)

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Пт сен 07, 2018 22:44:47
Albert_V
561КП1 (CD4052A)

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Пт сен 07, 2018 23:29:41
RusikOk
а почему они все аналоговые? и как они понимают где вход а где выход?

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб сен 08, 2018 00:58:18
Albert_V
RusikOk писал(а):...как они понимают где вход а где выход?
Приблизительно, как механический выключатель "понимает где вход и где выход". :)))
/уровни входных сигналов не должны выходить за границы питания 561КП1/

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб сен 08, 2018 01:00:39
RusikOk
я уже почитал. там используется особенность полевых транзисторов

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб сен 08, 2018 09:29:55
alex_
[uquote="RusikOk",url="/forum/viewtopic.php?p=3452653#p3452653"]в идеале нудно коммутировать 4 UART[/uquote]
А как насчёт посмотреть в сторону интерфейса rs485? используется всего 2 провода(но лучше 3) и можно устройств на эти два провода вешать кучу, микросхема при этом например max485 стоит не дорого и является переходником интерфейса UART-RS485. Из минусов: программное разделение устройств(надо мудрить с протоколом общения). Или можно использовать разрешающие входы данной микросхемы проключая её в необходимую вам сторону

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Сб сен 08, 2018 09:34:46
RusikOk
на одном из каналов будет 485 на всякий случай но мне нужна шина eBUS плюс на этот же юарт еще нужно поцепить esp8266 и еще пару устройств

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Вс сен 09, 2018 17:51:44
afz
Тогда может быть взять камешек посерьезнее? Тот же STM32F103RCT6 при тех же 64 ногах имеет на борту 3 USART'а плюс 2 UART'а, итого пять. Да еще и 256K Flash, 48K SRAM и кучу всякого вкусного. Оно, конечно, подороже будет, чем 128-я Мега, но некритично, процентов на 20-40.

Добавлено after 7 minutes 23 seconds:
Да, оно, правда, трехвольтовое, так, что придется ставить MAX3232, но это мелочи... :)

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Вс сен 09, 2018 18:24:47
RusikOk
я не ТС у меня и так стмка только навешал я на нее дальше некуда. переделывать все нет желания потому изобретаю костыли

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Пн сен 10, 2018 00:42:25
Albert_V
RusikOk писал(а):...потому изобретаю костыли
Не такой уж это и "костыль" с мультиплексором.
В частности, такое же решение мне попадалось в Inmarsat-овских "буях" (которые стоят на кораблях и передают координаты судна)...
/это к вопросу о надёжности (в т.ч., по климатике) таких решений/
Единственное о чём надо помнить: "замкнутый ключ" мультиплексора может, в худшем случае, иметь сопротивление порядка 200 Ом ("со всеми вытекающими" по схемотехнике, трассировке и монтажу)...
Для вашего применения, так же, подойдёт 74HC4052.

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Пн сен 10, 2018 04:03:28
afz
Albert_V писал(а):Не такой уж это и "костыль" с мультиплексором.
Угу. Если обмен будет идти строго под контролем МК. Конкретно - в случае, когда никто из абонентов, подключенных к этому USART'у через мультиплексор, ни при каком случае не будет ничего передавать в сторону МК по собственной инициативе - только и строго в ответ на запрос от МК. Тогда все просто: переключился на выбранного абонента, послал ему запрос-команду-данные, что там надо по протоколу, дождался ответа, завершил сеанс связи с этим абонентом, можно переключаться на другого. А вот если кому-то из абонентов может вдруг понадобиться передать что-то по собственной инициативе, тогда все намного сложнее - или городить отдельную схему приёма, опять же, отдельного сигнала "требую обслуживания" с запоминанием номера абонента, потребовавшего это, или переходить к 485, и тогда не нужны мультиплексоры, а разбирательство "с кем из абонентов работать" выносится на уровень протокола.
Albert_V писал(а):Для вашего применения, так же, подойдёт 74HC4052.
Угу, и это намного лучше, чем простая CD4052, поскольку у 74HC быстродействие намного выше, чем у CD40, особенно при низких напряжениях питания.

Re: ATmega128, на один UART подключить 2 устройства

Добавлено: Пн сен 10, 2018 09:32:20
RusikOk
не ну ставить 2-3 формирователя 485 интерфейса на одной плате это как по мне перебор костылей будет