Пятница, 17.05.2024, 13:36
Приветствую Вас Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » 2012 » Декабрь » 30 » Колесная робоплатформа. часть 3а — мультимодульный usart. теория.
07:08
 

Колесная робоплатформа. часть 3а — мультимодульный usart. теория.

Колесная робоплатформа. Часть 3а — Мультимодульный USART. Теория.

Удивительно мало написано про такой простой и удобный инструмент, как связь по USART нескольких модулей. Эта тема требует отдельного рассмотрения физической, протокольной и программной части. Поскольку я в конце 2007 года увлекся микроконтроллерами фирмы Atmel, связывать мы будем по их методике. Тут существуют и промышленные решения, к примеру RS-485 или его дуплексные близнецы, но они совершенно не подходят для мобильной робототехники. Там обычно к каждому узлу ставится свой блок, одной стороной подключенный к общей шине, другой к приемопередатчику. Сейчас я хочу описать свой вариант связи нескольких устройств по USART.

В целом.

Как я уже упоминал, требуется определить физический уровень, протокол передачи и программную часть. Если про последнюю еще сказано в документации Atmel, то про две предыдущие гугл дает только разбитые, разрозненные данные. Про USART можно много что прочитать в интернете, в той же документации на контроллеры AVR и даже в . Что же, начнем изобретать.

Физический уровень.

Итак, нам нужно соединить несколько передатчиков и приемников. С приемниками все просто — это входные линии, как я понимаю, высокоомные, поэтому ничего не мешает просто взять и соединить приемники вместе. Передатчики, само собой так соединять нельзя. Оно и понятно. Пока один передатчик находится в режиме ожидания, он выставляет высокий уровень сигнала на линии. Если другой передатчик попытается что-то передать… Ток хлынет большой, и кто-то откинется первым. Первое, что можно сделать — соединить приемники, подтянуть к плюсу, а передатчики закинуть на транзисторы, которые будут тянуть линию к земле. Так вполне можно делать.



Теперь у нас есть некий хаб, коммутирующий устройства. Всем он хорош, да вот завалялось у меня на полке несколько микросхем стандартной логики, воспользуюсь-ка я ими. Это же по большому счету реализация элемента И на транзисторах с высоким уровнем на входах по умолчанию. Получается нечто такое:



Вот и добро не пропадает и работать должно как следует. Только завалялась у меня HEF4081, в которой четыре отдельных элемента И с двумя входами у каждой. Не дела. Придется их каскадировать. Самый рациональный способ, который я знаю выглядит так:



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

Протокол.

Atmel в своей документации предлагает простой протокол для мультимодульной связи, который аппаратно поддерживается AVR контроллерами. А я надеюсь, что читатель уже в курсе того, каким бывает UART и что в нем летает. Если нет — читать. Это полезно. Выглядит он так:



Как видно из диаграммы, фрейм адреса от фрейма данных отличается девятым битом: адресный — высокий уровень, данные — низкий. Так вот если переключить приемопередатчик в мультипроцессорный режим, то он будет аппаратно отсеивать все фреймы данных, пока не получит адресный фрейм. Получив адресный фрейм, данные из него можно будет прочитать, сравнить с адресом устройства, и если адрес совпадет, принимать все данные дальше, до тех пор, пока не встретится другой адресный фрейм. Или если адрес не совпадет — то и не нам говорят. Ждем дальше. Это со стороны приемника. Со стороны передатчика мы шлем адресный фрейм получателя, а затем просто отправляем данные как обычно во фреймах данных. И так до тех пор, пока не потребуется обратиться к другому устройству. Тогда снова отправляем адрес, затем данные.
Это не единственный вариант реализации мультимодульного режима связи, но и рекомендуемый в документации и просто самый удобный. Можно слать меньше бит, тогда шестой или к примеру восьмой бит будет выполнять роль адресного флага. Это совсем не удобно по двум причинам: читать придется за раз меньше байта, а также выковыривать адресный флаг из принятых данных. В девятибитном режиме данные принимаются также, как и при связи двух устройств, а адресный флаг находится в отдельном бите RX8 регистра управления и статуса (UCSRB для AtMega8).

Содержание серии:



3а — Мультимодульный USART. Теория.
3б — Мультимодульный USART. Реализация.
Просмотров: 365 | Добавил: hignothou | Рейтинг: 0.0/0
Всего комментариев: 0
Поиск
Календарь
«  Декабрь 2012  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
24252627282930
31
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Copyright MyCorp © 2024Создать бесплатный сайт с uCoz