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

Вопрос по USART'у

Всем привет!

 

В даташите на МК (все тот же AT90PWM3, у которого не работает SPI slave без SS:)) сказано, что при включенном режиме MPCM, приемник игнорирует все входящие данные (не помещает их буфер), если они не являются адресом. Т.е. slave контроллер, распознав свой адрес, отключает режим MPCM, и начинает принимать данный от master'а, а все остальные slave'ы по прежнему находятся в MPCM режиме и просто игнорируют эти посылки данных.

 

Так вот, могу ли я просто соединить все Tx выходы всех slave'ов в одну точку, которая будет подключена к Rx master'а, или же нужно на каждый Tx slave'а ставить по 2 транзистора перед соединением?

 

Просто в не MPCM режиме ведь Tx настроен как выход, и его ведь нельзя соединять с остальными Tx, настроенными также. Но в даташите сказано, что при включенном MPCM: "The Transmitter is unaffected by the MPCM setting". Т.е. как настроен Tx в данном случае, как input?

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


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

MPCM изменяет логику работу приёмника и ничего более. UART остаётся собой.:) и когда он включен Tx в 1. Если два Tx объединить они будут подсаживать друг друга. Можно конечно после передачи отключать Tx, но тогда логика работы сети должна исключать возможность включения двух Tx одновременно. Обычно для организации совместной работы нескольких UART используют драйверы интерфейса RS485, CAN и др.

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


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

Как известно, вывод TX становится TX только тогда, когда установлен флаг (бит) TXEN. Если TXEN не установлен, то вывод TX функционирует как обычный. И если он (этот вывод порта) установлен как "ВХОД", то сразу после снятия TXEN TX становится входом.

Далее, не согласен с тем, что установка MPCM меняет ТОЛЬКО логику работы приемника. Так же запрещается работа передатчика (повторю приведенную автором темы выдержку из datasheet): "...The Transmitter is unaffected by the MPCM setting, but has to be used differently when it is a part of a system utilizing the Multi-processor Communication mode...." (п.18.9).

То есть, как я понимаю, если в ведомом установлен бит MPCM, то настройка (in/out) вывода TX определяется пользователем, то есть бит TXEN сброшен. Как только ведомый принимает СВОЙ адрес, MPCM сбрасывается, а TXEN устанавливается.... и TX "становится" TX-ом.

К сожалению, документальных "свидетельств" описанного алгоритма я не нашел (кроме указанного выше), опыты не проводил (работал с 2-мя МК на шине , с 3-мя и более - нет). Но коль скоро, даже 51-я серия подключалась в мультипроц. режиме по ОДНОМУ проводу (TX и RX объединялись), то и AVR "обязаны" проблему подключения 3-х и более кристалов на шину решать без транзисторов.

....

Попробуйте, хотя бы в симуляторе... (Если появится свободное время, то в выходные поэкспериментирую сам)

...

Кстати, все рассмотренное выше распространяется на все AVR МК.

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


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

Спасибо Stas633, _Sam_.

 

Пока буду на транзисторах делать, а потом еще и без них попробую - поставлю джампер. Попробую еще и с симулятором разобраться...

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


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

Но коль скоро, даже 51-я серия подключалась в мультипроц. режиме по ОДНОМУ проводу (TX и RX объединялись), то и AVR "обязаны" проблему подключения 3-х и более кристалов на шину решать без транзисторов.

 

Не путайте с 51!

Там порты 1 и 3 не имеют пуш-пула на выходе. Т.е. нижний транзюк и подтяжка (типовое значение 8,2 кОм). Конечно, там очень просто соединить Rx & Tx. :biggrin:

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


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

Провел эксперимент...

Условия: м16, AVRStudio, JTAG ICE, осциллограф.

....

Итоги:

- _Sam _ абсолютно прав. От состояния бита MPCM зависит только будет ли принятый байт проверятmся на содержание признака адреса (9 бит или первый стоповый, если 8-битный режим). И если MPCM установлен в 1, то флаг об окончании приема байта (RXC) будет выставлен только если принят байт с признаком адреса ;

- "подтверждено", что сброс TXEN "возвращает" вывод к системным установкам.

 

Предложения:

- для объединения нескольких выводов TX пользоваться битом TXEN. Например так: 1.Вывод порта, совмещенный с TX, настроить как "вход", без подключения подтяг.резистора; 2.Программу работы МК дополнить двумя командами: - установкой бита TXEN после сброса бита MPCM; - сброса бита TXEN перед установкой MPCM. (Как вы понимаете, сброс и установка MPCM - это процедуры, которые в программе будут обязательно).

Ни каких дополнительных проверок, условий в "...логику работы сети..." вводить не нужно. В предложенном решении вероятность одновременного включения нескольких TX равна вероятности ошибочного определения адреса одним из МК как "своего", и не зависит от схемотехнического решения.

 

P.S. (OFFTOP)

"...The Transmitter is unaffected by the MPCM setting, but ...."

В данном контексте Transmitter - это не передающий блок SLAVE'а, и передатчик (источник сигнала) MASTER'а. (я поддался искушению и принял желаемое за действительное :) )

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


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

Чтоб не плодить темы.

Поясните пожалуйста работу с битом MPCM в режимах с количеством бит данных меньше чем девять.

И для премника и для передатчика.

Заранее спасибо.

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


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

Не рекомендую такую фигню использовать. Под виндой такое не пройдет. Как отлаживать будешь. В известных мне АРМах этот режим можно реализовать через ЖО*У. Непонятно, чем этот режим полезен. Типа, чтобы не дергать проц прерываниями по USART-у, когда он занят чем-то другим? Так, он ровно так же будет дергаться в случае прихода пакета по его адресу. Просто сбоить будет реже, если нет запаса по времени.

 

Всем привет!

 

В даташите на МК (все тот же AT90PWM3, у которого не работает SPI slave без SS:)) сказано, что при включенном режиме MPCM, приемник игнорирует все входящие данные (не помещает их буфер), если они не являются адресом. Т.е. slave контроллер, распознав свой адрес, отключает режим MPCM, и начинает принимать данный от master'а, а все остальные slave'ы по прежнему находятся в MPCM режиме и просто игнорируют эти посылки данных.

 

Так вот, могу ли я просто соединить все Tx выходы всех slave'ов в одну точку, которая будет подключена к Rx master'а, или же нужно на каждый Tx slave'а ставить по 2 транзистора перед соединением?

 

Просто в не MPCM режиме ведь Tx настроен как выход, и его ведь нельзя соединять с остальными Tx, настроенными также. Но в даташите сказано, что при включенном MPCM: "The Transmitter is unaffected by the MPCM setting". Т.е. как настроен Tx в данном случае, как input?

 

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


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

...Под виндой такое не пройдет. Как отлаживать будешь. ...будет дергаться в случае прихода пакета по его адресу....

 

Под виндой замечательно работает. Вы "не умете их готовить" :) Отлаживается точно так же как и обычный COM порт. Дёргается только на первый байт. При соединении через монтажное ИЛИ и одинаковости потенциала - можно соединять энное кол-во устройств (только софтверое ограничение).

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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