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

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

post-53214-1304892554_thumb.png

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


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

Это будет суперкомпьютер на 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ка, выполнившая команду, дает по кругу подтвержение о выполнении, целостность кольца подтверждается автоматически.

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


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

Почитайте про про алгоритмическую структуру интерфейсов I2C, CAN, ETHERHET, как организуют запросы. Или используте подход MASTER SLAVE и передачу пакетов.

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


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

Это будет суперкомпьютер на AVR! :)

=======

Можно пойти и по альтернативному пути, хотя он более юмористический - соединить AVRка поездом, как вагончики.

=======

Что в нем особо юмористического? для тестов поезд уже применял на шине RS485 :)

Поезд был логический, конец передачи модуля был командой для старта следующего.

 

Сейчас как вариант рассматриваю именно поезд.

Имею, измерительные блоки гальванически развязаны через ADUM1201.

Варианты:

1) входа блоков вместе, выхода через логику "И".

2) паровоз, достоинства паровоза, достижима большая плотность данных при той же скорости.

блоки могут самостоятельно начинать передачу.

Нумерация блоков не проблема, на нее отдельная команда блок читает номер увеличивает и передает следующему.

основной блок в итоге знает длину цепи.

еще одно достоинство, не придется переразводить существующие платы.

 

другие варианты в данной задаче не рассматриваю.

 

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


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

Действительно, ничего юмористического. Вот есть у нас блочки, живущие на RS-485 кучкой или на RS-232 по одному. Соответственно все пакеты уже под сеть заточены, с адресацией, ответами и т.п.

 

В один прекрасный момент приходит заказчик с чемоданчиком сами понимаете чего и говорит "хочу такие же N-штук, но у меня только RS-232". Ну ладно, цепляем "паровозиком", в прерывание приёма байта по UART добавляем команду отправки его же по UART и всё. Все блочки, включая и управляющее устройство, пакеты адресованные не ему откидывают по умолчанию.

 

Надёжность такого решения чисто теоретически ниже, но на практике устройства, блокирующие правильную шину встречались, а порванный паровозик ещё нет. Хотя и применяли его считанные разы.

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


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

===

В один прекрасный момент приходит заказчик с чемоданчиком сами понимаете чего и говорит "хочу такие же N-штук, но у меня только RS-232". Ну ладно, цепляем "паровозиком", в прерывание приёма байта по UART добавляем команду отправки его же по UART и всё.

===

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

а по надежности, - все блоки внутри одного ящика. это внутренний интерфейс.

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


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

... Тогда все они окажутся как бы повешенными на одну шину, с которой будут читать команды от PC (понятно, что линии передачи TX AVRок соединять между собой нельзя).

TXы AVRов надо соединять через диоды.

а по-хорошему, как уже сказали - шина 485, совсем хоршо если с физическим уровнем от CAN чтобы направлением передачи не греть голову.

 

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


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

Вагончики... паровозики... кольцо... -- а если я скажу "Token Ring", то камни в кого полетят: в меня или в Ксению?

Идея, конечно забавная. Так сказать кольцо без маркера доступа. Работать, разумеется, будет, но как мне кажется, это не самый лучший вариант решения. Там же куча потенциальных проблем. К стати, а где топик-стартер? Или ему все равно?

 

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


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

Там же куча потенциальных проблем. К стати, а где топик-стартер? Или ему все равно?

Мне надо настроить блоки, и получать с них данные по мере поступления.

блоки,- низкоскоростные АЦП 1...10SPS.

Возможно что то типа маркера сделаю, пока не вся железная часть готова.

Пакет опроса, "маркер-контейнер", в хвост которому каждый блок дописывает свои новые данные, или ставит метку пусто.

При работе без маркера, у блока, должна быть очередь сообщений.

С программной стороны для такой работы уже все в наличии.

С пакетом - контейнером, блок должен принять и передать достаточно большой пакет данных.

Дальше для экономии памяти, в длинной цепочке, напрашивается вариант контейнера с диапазоном адресов.

Во всех случаях рассчитываем на худший вариант, у всех есть данные.

С такой задачей опрашивать каждый блок отдельно, неинтересно.

 

PS. и где проблемы, особенно куча? за камнями обращаться в личку.

Девушкам цветы дарят.

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


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

А в чем проблема использовать RS-232, параллельно соединив все ведомые девайсы ?

Тем более, у мегаАВР есть такая штука как Multi-processor Communication Mode. По порядку опрашиваем какждый адрес, необходимый контроллер при ответе включает USART TX и отдает данные, потом выключает TX.

 

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


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

А в чем проблема использовать RS-232, параллельно соединив все ведомые девайсы ?

Тем более, у мегаАВР есть такая штука как Multi-processor Communication Mode. По порядку опрашиваем какждый адрес, необходимый контроллер при ответе включает USART TX и отдает данные, потом выключает TX.

Параллельно соединять RS-232 нельзя! На выходе этого интерфейса (линия TX) может быть или +10 или -10 вольт (вольтаж приблизительный), но отсутствует возможность отключится от линии. Поэтому если один из паралельно подключенных RS-232 начнет что-то передавать, а параллельно ему подключеный останется молчать, то будет коза :) - напряжения разной полярности на выходе попадут на одну и ту же линию.

 

Свой USART микропроцессор еще может отключить (т.е. перевести соотвествующие порты в высокоимпендансное состояние), но с RS-232 этот фокус не пройдет.

 

Хотя... Автор топика не говорил, что у него RS-232, а только USART, а это значит, что идея Клима может быть использована.

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


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

Параллельно соединять RS-232 нельзя! На выходе этого интерфейса (линия TX) может быть или +10 или -10 вольт (вольтаж приблизительный), но отсутствует возможность отключится от линии. Поэтому если один из паралельно подключенных RS-232 начнет что-то передавать, а параллельно ему подключеный останется молчать, то будет коза :) - напряжения разной полярности на выходе попадут на одну и ту же линию.

вот поэтому их и надо параллелить через диоды.

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


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

Параллельно соединять RS-232 нельзя!

Да чё нельзя-то сразу? -- Можно! Пусть соединяет :) (подмигиваю Ксю левым глазом).

Сказано жеж "и где проблемы, особенно куча?"

 

Только я правда не совсем догоняю, топикстатртер -- это antosh? Или antosh и e-serg -- это одно и то же лицо?

 

Хотя... Автор топика не говорил, что у него RS-232, а только USART, а это значит, что идея Клима может быть использована.

Э-э! Не-не! У топикстартера на рисунке указано -- RS232.

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


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

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

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

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

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

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

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

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

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

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