реклама на сайте
подробности

 
 
> Организация сетевого обмена на AT90S8515, Построение локальной сети микроконтроллеров
nelord
сообщение Jun 2 2008, 13:20
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068



Здравствуйте!
Подскажите как лучше реализовать сетевой обмен между МК, если имеется следующие требования:
- обмен по последовательному каналу (планирую использовать UART + MAX232);
- число абонентов от 1 до 16;
- возможность горячего подключения/отключения абонентов;
- длина передаваемого сообщения данных / команд не более 64 байт.

Сетевой обмен будет макетироваться на STK500 и моделироваться в Proteus'е.
Есть ряд вопросов по реализации:
- следует ли реализовывать некое подобие Ethernet, TokenRing, HDLC?
- как следует осуществлять квитирование? (для связи будет использоваться нуль-модемный кабель (RS-232C, COM (DB-9M)))
- будут ли программно доступны линии спецификации RS-232C (9-контактов), кроме TxD/RxD/GND? Есть подозрения, что они будут недоступны. Поясню, планировал использовать ряд линий как запрос на конфигурирование сети и быстрый ответ на передачу данных (принято без/с ошибками), без них же будет затруднительно это реализовать.

Полагаю использовать преамбулу в 2 байта + 2 байта, определяющие тип передачи, + 2 байта CRC16. Думаю, что имеет смысл реализовать некоторый набор стандартных команд-пакетов, например опрос статуса и т.д. По-началу хотел реализовать детерминированный доступ к каналу - в духе TokenRing, однако сейчас в недоумении, как организовать выбор монитора (резервного монитора) из всех МК, а также организовать обход абонента, которому нечего передавать и/или передача адресована не ему, - это для сокращения временных задержек, связанных с приемом, а затем перепередачей данных. Сейчас же в раздумьях, как это можно сделать, чтобы потом была возможность выполнить макетирование на STK500.

Подскажите, пожалуйста, как решить вышеописанные вопросы. Заранее благодарен.

В догонку, есть еще одно требование - реализовать "средства (аппаратные и программные), обеспечивающие контроль работы канала связи с помощью пульта оператора в режиме диагностики, предусмотрев централизованное управление всеми транзакциями по командам оператора", следует ли на этой плате ставить дополнительную ИМС памяти (для приемного буфера), если да, то какого объема лучше? Для индикации будет использован цифро-буквенный ЖКИ типа LM041L/LM044L.

P.S.: также было высказано "требование-пожелание" - программы должны быть написаны на ассемблере (это несколько огорчило... smile3009.gif ).
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3 >  
Start new topic
Ответов (15 - 29)
MrYuran
сообщение Jun 3 2008, 11:00
Сообщение #16


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Огласите пжалста, весь список!
То есть, задание поподробней.
Что за сеть, кому, куда, между чем.
Может, достаточно режима master-slave?
тогда Modbus с одним ведущим. Все проблемы коллизий и им подобные отпадают на раз, т.к. без спросу никто ничего не пискнет.
Если произвольный доступ - тогда нужно прослушивать линию и анализировать коллизии. Ваши BUSY - это изврат. Плюсов никаких, минус - как минимум лишняя линия.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 3 2008, 11:11
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Kuzmi4 @ Jun 3 2008, 13:56) *
2 Dog Pawlowa - с его проводом занятости просто надо чтоб дЫвайсы рандомное кол-во времени ждали(на таймер чтоли какой нить повесить или чтото такого), но это дополнительные провода , своя логика, есчё какие либо качели непредвиденные...

Так то-то и оно. Если по коллизии запускать случайный таймер, то на зачем тогда специальный сигнал?
Уж проще тогда маркером делить время.
Короче, не изучено все, что накопило человечество. Даже книжки не прочитаны.
Но как 1/4 доцента думаю - а может и лучше предложить что-то ошибочное, чем скачать стандартное smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
nelord
сообщение Jun 3 2008, 11:35
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068



Цитата(Kuzmi4 @ Jun 3 2008, 14:56) *
2 nelord - зачем вам заново изобретать велосипед ?


Хотел как проще, а получилось ли... не знаю.
Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит.

Цитата(Kuzmi4 @ Jun 3 2008, 14:56) *
2 nelord - зачем вам заново изобретать велосипед ?


Хотел как проще, а получилось ли... не знаю.
Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит.
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jun 3 2008, 11:35
Сообщение #19


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(Dog Pawlowa @ Jun 3 2008, 14:46) *
Послушайте.
Тысячи людей, поумнее чем Вы и я, во всем мире, лет сорок уже, работали над созданием локальных сетей. И кое-что придумали.

Например CAN, где проблеммы мультимастерности решены способом очень похожим на то, что предложил 'nelord'.

2 'nelord'. Если вам эта тема действительно интересна. В смысле не как курсач сдать, а как хобби что-ли, то рекомендую сделать следующее: использовать вместо приёмопередатчиков RS485 приёмопередатчики CAN (или LIN). У них есть рецессивный и доминантный уровень, и если 100 передатчиков передают рецессивный (1), а один доминантный уровень (0) на линии будет доминантный уровень (0). И если передатчик будет слушать свою передачу, то он сможет распознать коллизию (в отличие от использования приёмопередатчиков RS485). В это случае линия BUSY не будет нужна.
А вообще почитайте и про CAN и про LIN. Я сделал мультимастерную сеть на базе USART с приёмопередатчиками CAN - всё замечательно работало. По крайней мере гораздо эффективнее MODBAS. Единственный недостаток - нестандартность.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jun 3 2008, 11:35
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Упс - два раза вставилось..

Сообщение отредактировал Qwertty - Jun 3 2008, 12:05
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Jun 3 2008, 11:35
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Просто мысль - для курсовика экономика не важна, можно тупо применить CAN. Полностью "ложится" под задание и избавляет от всех проблем разом. Арбитраж, горячее подключение и т.д получатся автоматом. Хотя MCP2515 не такая уж и дорогая. smile.gif
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 3 2008, 12:00
Сообщение #22


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(galjoen @ Jun 3 2008, 14:35) *
Например CAN, где проблеммы мультимастерности решены способом очень похожим на то, что предложил 'nelord'.

Нисколько непохожи. В CAN нет никаких доп линий "занятности" канала. Конфликт разрешается "отвалом" группы мастеров-лузеров с рецессивным уровнем сигнала. Т.о. возможна ситуация когда опеределенный мастер вообще никогда не получит шанса "пообщаться".
Идея CAN'a - это I2C с PHY пригодным для подключения на большие расстояния.

nelord предлагает некое подобие CSMA-CD, за тем исключением, что CSMA-CD обходится без доп линий, а использует прослушку и преамбулу для выявления конфликта, плюс случайный таймаут. Его доп. линия - это потеря надежности ровно на 50%. Заглюч какое-то из устройств или оборвись эта линия - и вся система сдохла.
Go to the top of the page
 
+Quote Post
nelord
сообщение Jun 3 2008, 12:01
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068



Цитата(Kuzmi4 @ Jun 3 2008, 14:56) *
2 nelord - зачем вам заново изобретать велосипед ?


Хотел как проще, а получилось ли... не знаю.
Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит.
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 3 2008, 12:13
Сообщение #24


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(nelord @ Jun 3 2008, 15:01) *
Хотел как проще, а получилось ли... не знаю.
Да, при возникновении коллизий аля Ethernet - думал, что их CRC16 отловит.

Отловит, но уже поздно - несколько фреймов может быть потеряно и нескольким девайсам надо делать перепосылку, тобиш "разрулить" ситуацию по CRC16 - сложно и накладно для линии.

В Ethernet'е используется преамбула фрейма скважностью 2.
В момент посылки преамбулы прослушивается линия, и если скважность импульсов в линии будет отличаться от 2 - посылка фрейма откладывается, т.е. конфликт обнаруживается до отправки фрейма, а не после как в случае с CRC.
Go to the top of the page
 
+Quote Post
nelord
сообщение Jun 3 2008, 12:20
Сообщение #25


Участник
*

Группа: Новичок
Сообщений: 29
Регистрация: 5-11-07
Пользователь №: 32 068



Спасибо большое за помощь. С этим я разобрался, но на досуге надо будет почитать про Can и подобное ему.
PS: Описанное ранее я попытался сконструировать основываясь на методах борьбы с перегрузкой буферов портов в коммутаторах и технологией CSMA/CA.

PPS: был бы крайне признателен, если бы кто-нибудь поделился материалом по подключению цифро-алфавитного LCD индикатора, а именно программой на ассемблере. Понимаю, что это не пишут на ассемблере, на С уже есть все готовое, однако в задании именно АССЕМБЛЕР.

2 defunct, спасибо, это я полагал тоже учесть, если посмотреть ранний пост.

Цитата(nelord @ Jun 2 2008, 17:20) *
Полагаю использовать преамбулу в 2 байта + 2 байта, определяющие тип передачи, +данные+ 2 байта CRC16.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jun 3 2008, 12:20
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 nelord - а здесь пробовали искать
http://electronix.ru/forum/index.php?showtopic=10934
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 3 2008, 12:26
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(nelord @ Jun 3 2008, 15:20) *
Спасибо большое за помощь. С этим я разобрался, но на досуге надо будет почитать про Can и подобное ему.

Кстати, использование драйверов CAN, предложенное galjoen (конечно же a14.gif ), действительно имеет смысл и при построении сети на USART - получается правильнее по уровням физических сигналов в линии. Драйверы RS485 действительно могут неоднозначно отрабатывать коллизии.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
galjoen
сообщение Jun 3 2008, 12:45
Сообщение #28


Знающий
****

Группа: Свой
Сообщений: 841
Регистрация: 10-05-07
Из: Чебоксары (Россия)
Пользователь №: 27 640



Цитата(defunct @ Jun 3 2008, 16:00) *
Нисколько непохожи. В CAN нет никаких доп линий "занятности" канала. Конфликт разрешается "отвалом" группы мастеров-лузеров с рецессивным уровнем сигнала. Т.о. возможна ситуация когда опеределенный мастер вообще никогда не получит шанса "пообщаться".
Идея CAN'a - это I2C с PHY пригодным для подключения на большие расстояния.

Я имел ввиду, что похоже не по физической реализации, а по методологии. Конечно в CAN нет никакой доп. линии, но имеется РАВНОПРАВНАЯ мультимастерность (в отличие от I2C с его адресами устройств). А ситуация, когда мастер не сможет пообщатся в CAN невозможна (при физической исправности). Возможна только ситуация, когда определённый мастер не сможет никогда отправить сообщение с НИЗКИМ приоритетом. Но никто не мешает ему в случае таймаута этот приоритет поднять - сеть-то совершенно равноправная.

2 'Dog Pawlowa'. Вообще то это я предложил 'nelord' использовать драйвера CAN. Примерно год назад это обсуждали. Это первая моя тема на этом форуме была.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 3 2008, 13:16
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(galjoen @ Jun 3 2008, 15:45) *
2 'Dog Pawlowa'. Вообще то это я предложил 'nelord' использовать драйвера CAN. Примерно год назад это обсуждали. Это первая моя тема на этом форуме была.

Да-да, простите. 05.gif
Идея хорошая и скрашивающая натянутость использования USART в данном случае. smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
fmdost
сообщение Jun 5 2008, 20:33
Сообщение #30


Местный
***

Группа: Свой
Сообщений: 479
Регистрация: 8-05-07
Из: г. Ставрополь. Северный Кавказ. Россия
Пользователь №: 27 606



Цитата(galjoen @ Jun 3 2008, 15:35) *
А вообще почитайте и про CAN и про LIN. Я сделал мультимастерную сеть на базе USART с приёмопередатчиками CAN - всё замечательно работало. По крайней мере гораздо эффективнее MODBAS. Единственный недостаток - нестандартность.

То-же задумывался. А какая дальность прогнозировалась и какая получилась?
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01477 секунд с 7
ELECTRONIX ©2004-2016