|
|
  |
Сеть из AVR |
|
|
|
May 8 2011, 22:11
|
Группа: Новичок
Сообщений: 1
Регистрация: 26-10-09
Пользователь №: 53 214

|
Нужен совет. Хочу создать сеть из нескольких AVR по USART. Кто нибудь сделал такое. На рисунке нарисовал примерную схему. Все будет управляться от компа, скажем хочу включить какую то ножку на AVR2, как должен выставлять адреса. С одним AVR-ом практика есть, а вот с несколькими... увы не могу разобраться. Заранее спасибо.
|
|
|
|
|
May 9 2011, 06:07
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Это будет суперкомпьютер на AVR!  Вообще-то, если задача сводится ТОЛЬКО к передаче управляющей команды от PC к AVRкам, а обратную информацию от AVRок в PC принимать не планируется, то допустимо все входы RX UART AVRок присоединить к одному и тому выходу TX UART PC, предварительно сделав этот сигнал более мощным. Тогда все они окажутся как бы повешенными на одну шину, с которой будут читать команды от PC (понятно, что линии передачи TX AVRок соединять между собой нельзя). Остальное дело программирования - сделать так, чтобы каждая AVRка знала свой номер и выполняла тольку ту команду, которая адресована ней, а на чужие внимания не обращала. Можно пойти и по альтернативному пути, хотя он более юмористический - соединить AVRка поездом, как вагончики. При этом TX UART PC поступает на RX UART 1-ой AVRки, ее TX соединяется с RX UART 2-ой AVRки, и т.д. Тогда алгоритм будет такой - если команда не тебе, то передай ее дальше. В последнем случае можно замкнуть КОЛЬЦО - выход последней AVRки в поезде присоединить к RX UART PC. В такой системе PC сможет получать и ответы от AVRок. При этом каждая AVRка, желающая ответить на поступившую команду (например, подтвердить ее выполнение), пускает по кольцу одностороннего движения информационную посылку, имеющую формат команды, только адресованную 0-му номеру, т.е. PC. Здесь PC может также легко проверить целостность состава, если пошлет по кругу команду ... самой себе, т.е. адресованную нулевому номеру или слишком большому номеру, которого к составе нет - тогда команда должна будет вернуться назад, как эхо, не найдя адресата. В системе, когда каждая AVRка, выполнившая команду, дает по кругу подтвержение о выполнении, целостность кольца подтверждается автоматически.
|
|
|
|
|
May 9 2011, 06:51
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180

|
Цитата(Xenia @ May 9 2011, 15:07)  Это будет суперкомпьютер на AVR!  ======= Можно пойти и по альтернативному пути, хотя он более юмористический - соединить AVRка поездом, как вагончики. ======= Что в нем особо юмористического? для тестов поезд уже применял на шине RS485  Поезд был логический, конец передачи модуля был командой для старта следующего. Сейчас как вариант рассматриваю именно поезд. Имею, измерительные блоки гальванически развязаны через ADUM1201. Варианты: 1) входа блоков вместе, выхода через логику "И". 2) паровоз, достоинства паровоза, достижима большая плотность данных при той же скорости. блоки могут самостоятельно начинать передачу. Нумерация блоков не проблема, на нее отдельная команда блок читает номер увеличивает и передает следующему. основной блок в итоге знает длину цепи. еще одно достоинство, не придется переразводить существующие платы. другие варианты в данной задаче не рассматриваю.
|
|
|
|
|
May 9 2011, 07:15
|
Местный
  
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140

|
Действительно, ничего юмористического. Вот есть у нас блочки, живущие на RS-485 кучкой или на RS-232 по одному. Соответственно все пакеты уже под сеть заточены, с адресацией, ответами и т.п.
В один прекрасный момент приходит заказчик с чемоданчиком сами понимаете чего и говорит "хочу такие же N-штук, но у меня только RS-232". Ну ладно, цепляем "паровозиком", в прерывание приёма байта по UART добавляем команду отправки его же по UART и всё. Все блочки, включая и управляющее устройство, пакеты адресованные не ему откидывают по умолчанию.
Надёжность такого решения чисто теоретически ниже, но на практике устройства, блокирующие правильную шину встречались, а порванный паровозик ещё нет. Хотя и применяли его считанные разы.
|
|
|
|
|
May 9 2011, 07:39
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180

|
Цитата(VladislavS @ May 9 2011, 16:15)  === В один прекрасный момент приходит заказчик с чемоданчиком сами понимаете чего и говорит "хочу такие же N-штук, но у меня только RS-232". Ну ладно, цепляем "паровозиком", в прерывание приёма байта по UART добавляем команду отправки его же по UART и всё. === чуть сложнее, сделаю это на уровне пакетов а не байт. пакет не мой транслируем на передачу. прямая трансляция не позволит использовать автонумерацию, и не только ее. а по надежности, - все блоки внутри одного ящика. это внутренний интерфейс.
|
|
|
|
|
May 10 2011, 09:21
|
Частый гость
 
Группа: Участник
Сообщений: 97
Регистрация: 24-07-08
Из: Иркутск
Пользователь №: 39 180

|
Цитата(zhevak @ May 10 2011, 02:42)  Там же куча потенциальных проблем. К стати, а где топик-стартер? Или ему все равно? Мне надо настроить блоки, и получать с них данные по мере поступления. блоки,- низкоскоростные АЦП 1...10SPS. Возможно что то типа маркера сделаю, пока не вся железная часть готова. Пакет опроса, "маркер-контейнер", в хвост которому каждый блок дописывает свои новые данные, или ставит метку пусто. При работе без маркера, у блока, должна быть очередь сообщений. С программной стороны для такой работы уже все в наличии. С пакетом - контейнером, блок должен принять и передать достаточно большой пакет данных. Дальше для экономии памяти, в длинной цепочке, напрашивается вариант контейнера с диапазоном адресов. Во всех случаях рассчитываем на худший вариант, у всех есть данные. С такой задачей опрашивать каждый блок отдельно, неинтересно. PS. и где проблемы, особенно куча? за камнями обращаться в личку. Девушкам цветы дарят.
|
|
|
|
|
May 10 2011, 15:23
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Клим @ May 10 2011, 18:23)  А в чем проблема использовать RS-232, параллельно соединив все ведомые девайсы ? Тем более, у мегаАВР есть такая штука как Multi-processor Communication Mode. По порядку опрашиваем какждый адрес, необходимый контроллер при ответе включает USART TX и отдает данные, потом выключает TX. Параллельно соединять RS-232 нельзя! На выходе этого интерфейса (линия TX) может быть или +10 или -10 вольт (вольтаж приблизительный), но отсутствует возможность отключится от линии. Поэтому если один из паралельно подключенных RS-232 начнет что-то передавать, а параллельно ему подключеный останется молчать, то будет коза  - напряжения разной полярности на выходе попадут на одну и ту же линию. Свой USART микропроцессор еще может отключить (т.е. перевести соотвествующие порты в высокоимпендансное состояние), но с RS-232 этот фокус не пройдет. Хотя... Автор топика не говорил, что у него RS-232, а только USART, а это значит, что идея Клима может быть использована.
|
|
|
|
|
May 10 2011, 17:21
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(Xenia @ May 10 2011, 21:23)  Параллельно соединять RS-232 нельзя! Да чё нельзя-то сразу? -- Можно! Пусть соединяет  (подмигиваю Ксю левым глазом). Сказано жеж "и где проблемы, особенно куча?" Только я правда не совсем догоняю, топикстатртер -- это antosh? Или antosh и e-serg -- это одно и то же лицо? Цитата Хотя... Автор топика не говорил, что у него RS-232, а только USART, а это значит, что идея Клима может быть использована. Э-э! Не-не! У топикстартера на рисунке указано -- RS232.
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|