Страница 1 из 1

Bascom-AVR и RS-485

Добавлено: Вт янв 14, 2014 16:42:04
AlekseyV
Доброго времени, Коты!
Подскажите пожалуйста коды программ МК (для Bascom-AVR) для связи двух устройств по RS-485, к примеру, ATMega8 <> RS-485 <> ATMega16.
Заранее благодарю.

Re: Bascom-AVR и RS-485

Добавлено: Вт янв 14, 2014 18:27:42
GARMIN
Я вас понимаю, сам пол года назад ничего не понимал в AVR. Если понимаете, или хотите понимать Си, то поставьте CodeVision AVR, он сам вам примеры кода выпишет, мне очень помогло.

Re: Bascom-AVR и RS-485

Добавлено: Вт янв 14, 2014 22:03:38
Мурик
GARMIN вы не знаете в чем разница между Bascom-AVR и CodeVision? :shock: :facepalm:

По теме. http://bascomavr.3bb.ru/viewtopic.php?id=690
http://bascomavr.3bb.ru/viewtopic.php?id=683

Re: Bascom-AVR и RS-485

Добавлено: Пт янв 17, 2014 21:16:19
AlekseyV
Мурик,
Спасибо за ссылки, полезного нашел не мало - работа с кадрами собственного формата (очень интересно). Но не понял какие команды/операции отвечают конкретно за отправку и прием по RS-485. Если вам известно - пожалуйста, не могли бы вы показать, объяснить?

Re: Bascom-AVR и RS-485

Добавлено: Пт янв 17, 2014 21:21:53
BCluster
Что за бред? RS-485 это стандарт физического уровня. Причем тут баском или кодвижн вообще неясно. RS-485 не описывает никаких протоколов и прочей требухи. Для работы AVR с RS-485 нужно использовать преобразователь уровней.
http://avrhelp.mcselec.com/index.html?using_rs485.htm
Кстати баском

Re: Bascom-AVR и RS-485

Добавлено: Пт янв 17, 2014 21:54:26
AlekseyV
BCluster,
Вы не так поняли. Посмотрите: http://members.home.nl/bzijlstra/softwa ... Benbus.htm Человек сам написал свой кадр общения между устройствами формата:
Спойлер' {<dd>#<ss>#<cmd>#<crcl><crch>}

' || || || || |
' || || || || --- End of line
' || || || ||
' || || || | --------------- Checksum (CRC16 CCITT)
' || || || |
' || || || ---------------- Seperator
' || || ||
' || || | --------------------- Cmd
' || || |
' || || ---------------------- Seperator
' || ||
' || | -------------------------- Source address
' || |
' || --------------------------- Seperator
' ||
' | ------------------------------- Destination Address
' |
' -------------------------------- Start Of Line

Re: Bascom-AVR и RS-485

Добавлено: Пт янв 17, 2014 23:20:08
mrFox
RS-485 это физический уровень - электрические характеристики, схема соединения
на уровне подрыгать ножкой это обычно USART
еще выше идет уровень пакетов - проверка на ошибки и передача данных
вот например на основе UNIX SLIP протокол WAKE

Re: Bascom-AVR и RS-485

Добавлено: Сб янв 18, 2014 13:29:18
Мурик
ZN-GAME писал(а):Но не понял какие команды/операции отвечают конкретно за отправку и прием по RS-485.
Те же что и через USART.

Re: Bascom-AVR и RS-485

Добавлено: Вс янв 19, 2014 18:41:53
AlekseyV
Мурик,
Спасибо, разобрался!

Re: Bascom-AVR и RS-485

Добавлено: Пн янв 20, 2014 22:45:02
mrFox
Мурик писал(а):Те же что и через USART.
не обязательно - можно поставить на выход поставить 2 передатчика и гнать SPI :)

Re: Bascom-AVR и RS-485

Добавлено: Сб янв 25, 2014 15:24:46
AlekseyV
Принимать/отправлять по RS-485 на теории научился.
Подскажите пожалуйста, допустим у меня сообщение содержит 24 символа ASCII. При передаче Print #1, S и приеме Input #1, S оно примется своим объемом или нужно через какую-либо другую операцию извлекать сообщение из буфера именно 24 символа?
Благодарю за помощь!

Re: Bascom-AVR и RS-485

Добавлено: Сб янв 25, 2014 21:44:02
mrFox
на самом низком уровне прием/передача по 1 байту
передавать лучше пакетами см. протокол WAKE (UNIX SLIP)
в пакете сколько хошь стока байт и отправляй

Re: Bascom-AVR и RS-485

Добавлено: Вт май 20, 2014 20:19:35
AlekseyV
Доброго времени, котаны!
Размышляю над способом реализации общения между устройствами, соединенными между собой по RS-485 - как согласовать временные интервалы отправки пакетов? К примеру, кол-во подключаемых устройств периодически меняется, сегодня 5 устройств, завтра 30. Мастер отправил пакет (бродкаст) и чтобы все одновременно не начали отправлять обратный ответ, а поочередно. Можно было бы прописать в каждом отдельном устройстве ожидание по определенному времени, а на главном самое большое время ожидания ответа от всех, но нет, сеть должна быть динамическая.
Благодарю за любые мысли и советы!

Re: Bascom-AVR и RS-485

Добавлено: Вт май 20, 2014 21:18:12
Alkul
AlekseyV писал(а):Размышляю над способом реализации общения между устройствами, соединенными между собой по RS-485 - как согласовать временные интервалы отправки пакетов?
Как правило, по технологии RS-485 строят сети, в которых есть одно ведущее устройство (master) и несколько ведомых (slave), и обмен выглядит так - master послал запрос конкретному slave, обращаясь к нему по уникальному адресу. Этот запрос получают все slave сети, но отвечает только тот, чей адрес совпадет с адресом, указанным в пакете запроса. Только при такой реализации сети не встает проблема арбитража.
На физическом уровне в сетях RS-485 арбитраж не реализован вообще, поэтому при наличии в сети нескольких master'ов (устройств, могущих инициировать обмен данными) проблему арбитража придется решать средствами протокола. На аппаратном уровне при этом передающему master'у придется "слушать сеть", то есть, принимать свой собственный пакет и сравнивать его с тем, что передавалось. Если пакет принялся с искажениями, значит, имела место коллизия - одновременная передача в сеть несколькими устройствами. В этом случае, например, устройство должно прекратить передачу и начать её снова после временнОго интервала случайной длительности.
В общем, все это сложно для новичка, поэтому лучше строить сеть с одним master'ом и несколькими slave'ми.
AlekseyV писал(а):К примеру, кол-во подключаемых устройств периодически меняется, сегодня 5 устройств, завтра 30.
В этом случае master последовательным опросом всех возможных адресов должен определить наличие устройств в сети. Ввести в протокол обмена короткую команду инициализации или что-то в этом роде, которую посылает master, и на которую slave должен дать короткий ответ.
Master создает в своей памяти таблицу занятых адресов из всего адресного пространства, можно тут же указать идентификаторы устройств, если они есть. И периодически проверять "свободные" адреса на предмет появления новых устройств с такими адресами.
Или можно сделать так, чтобы после подключения или отключения новых устройств давать master'у команду на обновление таблицы адресов.
AlekseyV писал(а):Мастер отправил пакет (бродкаст) и чтобы все одновременно не начали отправлять обратный ответ, а поочередно.
Бродкастовыми пакетами лучше делать те, на которые не нужно отвечать. Например, команда установки времени. Её можно сделать бродкастовой, ответ на неё не требуется. Или какая-нибудь команда начала измерения.
А для подтверждения того, что ведомые приняли команду, можно после посылки бродкастовой команды последовательно опросить всех ведомых и проверить, выполняют ли они полученную команду.
Вообще, в такой сети лучше не злоупотреблять бродкастовыми командами. Только необходимый минимум. А самое лучшее - вообще обойтись без них.

Как-то так. Найдите описание протокола ModBus, он как раз и реализует такую логику обмена. Никто не мешает также "допилить" этот протокол под свои требования.

Re: Bascom-AVR и RS-485

Добавлено: Вт май 20, 2014 21:24:07
Леонид Иванович
Более свежая реализация Wake с исходниками здесь: http://digit-el.com/files/open/wake/wake.html

Re: Bascom-AVR и RS-485

Добавлено: Вт май 20, 2014 22:00:48
AlekseyV
Alkul писал(а):Ввести в протокол обмена короткую команду инициализации или что-то в этом роде, которую посылает master, и на которую slave должен дать короткий ответ.
Master создает в своей памяти таблицу занятых адресов из всего адресного пространства, можно тут же указать идентификаторы устройств, если они есть. И периодически проверять "свободные" адреса на предмет появления новых устройств с такими адресами.
Пожалуй, то, что мне и нужно.
Благодарю за помощь!