|
|
  |
3 ATMega8 к 1 COM-порту ПК |
|
|
|
Jan 7 2007, 16:03
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(SasaVitebsk @ Jan 6 2007, 23:34)  Вы мне объясните, дураку. 1) Почему нельзя применить RS485? 2) Что это за интерфейс у Вас получится? 3) Как это всё механически будет выглядеть? 4) Чем хуже мой вариант? Так в чём дело? Кто-нибудь мне пояснит? Да Вы правы во всем! Конечно, RS485 лучше. Но... Я лично не стал советовать RS485 исходя из уровня знаний автора топика. Он программист на PC. Чтобы использовать RS485, ему нужно сделать следующие вещи в области, которой он не занимался: - подключить драйвер RS485 к микроконтроллеру - дописать управление направлением в программу микроконтроллера - изготовить переходник RS232-RS485 (взяв откуда-то 5В питания) - дописать управление направлением в программу микроконтроллера - столкнуться с неприятностями, которые создает Windows - смириться с этими неприятностями :-) Убедиться, что все равно получается левое решение (интрефейсы гальванически не развязаны со всеми вытекающими последствиями), в один момент сжечь порты компьютера или пару микроконтроллеров, не говоря уже о постоянных сбоях... Нет уж, пусть он попытается обойтись заранее простым решением.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jan 7 2007, 17:14
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 11-06-06
Пользователь №: 17 980

|
Цитата Почитайте даташит, сравните уровни напряжения, подумайте. Действительно, что-то я совсем обнаглел, вместо того чтобы описание почитать сразу готовый ответ захотел, извиняюсь  . Из описания ST485: Код Absolutle maximum ratings: Vcc: 12V RE, DE: 05V..Vcc+0.5V Vdi(DI):-0.5..Vcc+0.5V Vdo(A,B): +-14V Vri(A,B): +-14V Vro(RO): -0.5..Vcc+0.5V Значит наверное надо подключать так: COM-порт ПК к RS485:  ATMega8 к RS485:  Правильно? Цитата Нет уж, пусть он попытается обойтись заранее простым решением. Мы не ищем простых путей  . Хочу научиться делать как надо, а не лишь бы как. Вообще, обратившись на этот форум за помощью, я даже не ожидал, что получу столько советов, всем огромное спасибо.
Сообщение отредактировал li4 - Jan 7 2007, 17:15
|
|
|
|
|
Jan 7 2007, 19:12
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Dog Pawlowa @ Jan 7 2007, 17:03)  Да Вы правы во всем! Конечно, RS485 лучше. Но... Я лично не стал советовать RS485 исходя из уровня знаний автора топика. Он программист на PC. Чтобы использовать RS485, ему нужно сделать следующие вещи в области, которой он не занимался: - подключить драйвер RS485 к микроконтроллеру - дописать управление направлением в программу микроконтроллера - изготовить переходник RS232-RS485 (взяв откуда-то 5В питания) - дописать управление направлением в программу микроконтроллера - столкнуться с неприятностями, которые создает Windows - смириться с этими неприятностями :-) Убедиться, что все равно получается левое решение (интрефейсы гальванически не развязаны со всеми вытекающими последствиями), в один момент сжечь порты компьютера или пару микроконтроллеров, не говоря уже о постоянных сбоях... Нет уж, пусть он попытается обойтись заранее простым решением. Так я Вас не обвиняю. Я просто предложил своё. Пусть сам выбирает. - Драйвер RS485 подключается практически так же. - Программу (причём обе) скорее всего ему ломать всё равно придётся. Ваше будет аппаратное решение или моё - неважно. Вы то понимаете что три независимых устр-ва подключаются к одному порту! Тут как не крути придётся делать арбитраж или устранение коллизий. И то и другое - это изменение программы. - Я предложил на USB, но можно и на RS232. Питание в этом случае берётся так. Ч/з диоды с неиспользуемых выходов (DTR,RTS) снимается 12V и с него формируется 5V. Остальное также как и в моей схеме. - можно и автоматическое переключение, но я делаю програмное. На самом деле - три корооотеньких прерывания. - Да Винда, особенно если ч/з USB и VirtualComPort создали (для меня) неразрешимые проблемы, поэтому.... - я предложил действительно смирится и использовать аппаратное переключение направления от компа  А вот здесь я с Вами не соглашусь. Получается стандартное для такого случая решение. Драйвера поддерживают все мыслимые стандарты и я ни разу не видел "вышебленных" портов таким образом! Ну и я не знаю о каких сбоях Вы говорите. В моём последнем изделии я применил RS485 (надо была дальность большая) Правда мне хватает скорости 1200, но я предусмотрел 115200. Так я пробовал передавать на 305 метров (бухта сетевого кабеля) файлы 64Кб со скоростью 4800. Сбоев не было. Но люди в этом форуме пишут что работают на скорости 2Мбита по этому интерфейсу.
|
|
|
|
|
Jan 7 2007, 21:42
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(SasaVitebsk @ Jan 7 2007, 20:12)  ...Питание в этом случае берётся так. Ч/з диоды с неиспользуемых выходов (DTR,RTS) снимается 12V и с него формируется 5V... ... Ну и я не знаю о каких сбоях Вы говорите... Несколько уточнений... Если питание взять, как Вы предлагаете, это не будет настоящий RS485, потому что в этом случае не будет обеспечена нагрузочная способность драйвера. Это значит, что работать в принципе будет, но с оговорками по скорости и расстоянию. Ссылки на то, что у Вас все работало хорошо, не принимаются А про сбои... А фиг знает, как программист разведет питание  Заведет питание микроконтроллера на длинные провода наружу, потом будет жаловаться, что AVR непомехоустойчивый. А по доработке программы мой совет - не преодоление коллизий, а из исключение коллизий путем адресации контроллеров. Кроме того, по программированию RS485 есть масса тонкостей, касающихся работы в условиях помех. Например, програмисту нельзя рассчитывать на растяжку сигналов резисторами. Но не будем усложнять жизнь? Успехов всем
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Jan 8 2007, 01:34
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(prottoss @ Jan 7 2007, 22:02)  Я конечно извиняюсь, что влезаю в такую умную беседу, но зачем говорить о велосипеде и пытаться его изобретать? Или интерес ради "просто вумно поболтать" ?. Опять же о том же MODBUS. Это конечно не панацея от всех бед, но все же дефакто промышленный протокол, использующийся в разных формах практически повсюду... Вот Вам его кратенькое описание, еслиф кто не ф курсе))). Там и физический интерфейс и программный. Enjoy!!! Прошу прощения у автора топика что влезаю со своим вопросом, но надеюсь что он меня простит (ему это тоже очень понадобится, наверное...) Не встречал ли кто-нибудь библиотечки под PC (Win) на С++ которая реализует протокол MODBUS (PC, конечно клиент)? Минимальные/максимальные требования к библиотечке: 1. Работа на скоростях 9600/19200/115200 2. Управление направлением пердачи(не обязательно, есть модем с автоопределением) 3. CRC само собой (но это не вопрос) 4. Желательно минимальное количество классов (типа CSerial,CModbus и все) 5. Поддержка минимального набора функций (по сути интересен только запрос/ответ, остальное сам допишу) и вот теперь самое главное: 6. Контроль межбайтовых и межпакетных промежутков в пакетах Modbus (ну конечно на столько, на сколько это вообще возможно под Win) Прошу сильно не пинать, библиотек скачал уже много, но ни одной подходящей пока еще не нашел. P.S Да, все это должно работать со стандартным драйвером COM порта под Win Специальные serial modbus драйвера не предлагать
|
|
|
|
|
Jan 8 2007, 01:51
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(li4 @ Jan 7 2007, 16:14)  Из описания ST485: Код Absolutle maximum ratings: Vcc: 12V Это несколько не то. Это максимально возможные значения параметров при которых эта микросхема еще не сгорит (соседние уже могут  ). Ориентироваться надо на раздел Specifications, или его еще называют DC characteristics. Там указываются номинальные (типичные, рабочие) значения параметров. Цитата Значит наверное надо подключать так: COM-порт ПК к RS485: да, почти все правильно, только ноги земли и V- у ST232 попутаны и для переключения направления используется не CTS (это вход у компьютера) а DTR(или RTS, не помню точно а подсмотреть сейчас негде). Есть еще упоминавшийся вариант без специального сигнала для переключения направления. Посмотреть идею можно здесь: http://www.bb-elec.com/bb-elec/literature/485sd9r-3803ds.pdf. Активная передача только одного уровня (второй формируется резисторами подтяжки) снижает максимальную скорость и дальность, но в большинстве применений такое решение вполне работоспособно. Здесь http://electronix.ru/forum/index.php?s=&am...st&p=138444 я выкладывал схему с несколько лучшими парамтрами (там же объяснение за счет чего). Цитата ATMega8 к RS485: TxD на DI, на DE можно и ICP1, а можно и OCRх (тогда таймер сможет аппаратно выключать передачу). Или опять же взять идею автоматического переключения из схем по ссылкам. Резистор ставится не в каждом устройстве а только на концах линии (в документе который выложил prottoss про него расписано в разделе 3.4.5). Цитата Цитата Нет уж, пусть он попытается обойтись заранее простым решением. Мы не ищем простых путей  . Хочу научиться делать как надо, а не лишь бы как. Серьезная заявка на успех. Так держать!  Цитата(prottoss @ Jan 7 2007, 21:02)  Я конечно извиняюсь, что влезаю в такую умную беседу, но зачем говорить о велосипеде и пытаться его изобретать? Или интерес ради "просто вумно поболтать" . Любое изобретательство есть движение вперед. В сторону опыта (который сын ошибок трудных), например. За документ спасибо, очень познавательно.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Jan 8 2007, 02:08
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Граждане, а можно и мне свой пятачок вставить? Что если сделать так: TX условно первой меги подключаем к RX условно второй, TX второй - к RX третьей, TX третьей - ко входу микросхемы драйвера RS-232. Далее, RX первой меги подключаем ко выходу драйвера RS. Имеем "колбасу", по которой данные будут передаваться из одного МК в другой, для этого нужно только организовать простую очередь программными средствами, причём информация будет доходить до/из каждого из контроллеров совершенно естественным путём. Преимущества - нужен только один драйвер без всякого дополнительного "железа". Недостатки - МК должны быть расположены на одной плате, или, по крайней мере, близко друг к другу, чтобы обойтись без дополнительных драйверов. Будет работать?
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Jan 8 2007, 04:05
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Dog Pawlowa @ Jan 7 2007, 22:42)  Цитата(SasaVitebsk @ Jan 7 2007, 20:12)  ...Питание в этом случае берётся так. Ч/з диоды с неиспользуемых выходов (DTR,RTS) снимается 12V и с него формируется 5V... ... Ну и я не знаю о каких сбоях Вы говорите...
Несколько уточнений... Если питание взять, как Вы предлагаете, это не будет настоящий RS485, потому что в этом случае не будет обеспечена нагрузочная способность драйвера. Это значит, что работать в принципе будет, но с оговорками по скорости и расстоянию. Ссылки на то, что у Вас все работало хорошо, не принимаются А про сбои... А фиг знает, как программист разведет питание  Заведет питание микроконтроллера на длинные провода наружу, потом будет жаловаться, что AVR непомехоустойчивый. А по доработке программы мой совет - не преодоление коллизий, а из исключение коллизий путем адресации контроллеров. Кроме того, по программированию RS485 есть масса тонкостей, касающихся работы в условиях помех. Например, програмисту нельзя рассчитывать на растяжку сигналов резисторами. Но не будем усложнять жизнь? Успехов всем  Давайте не путать моё устр-во и его. В моём переходник USB<->RS485, так что с током у меня всё в поряде. Ну и с прогой тоже, хотя я и не совсем доволен. Но у меня пакеты с предопределённой длиной, запросы, ответы, таймауты, автоопределение и т.п. То есть не весь MODBUS, но принципиальные вопросы я решил. А по его устройству я исходил из того, что он планировал на RS232 работать, - а это 15 метров. Так что переходник RS232<->RS485 будет устойчиво работать от питания RS232. К тому же у него небольшие массивы передаваемых данных (как я понял). То есть можно выбрать скорость небольшую. Ну а насчёт коллизий, так я это просто к слову. Конечно предпочтительней адресовать запрос и получать ответ. Но просто с коллизиями возможно попробовать не переделывать прогу на PC. Или почти не переделывать. Цитата(Сергей Борщ @ Jan 7 2007, 22:42)  да, почти все правильно, только ноги земли и V- у ST232 попутаны и для переключения направления используется не CTS (это вход у компьютера) а DTR(или RTS, не помню точно а подсмотреть сейчас негде). Есть еще упоминавшийся вариант без специального сигнала для переключения направления. Обычно применяется RTS (что-то типа request to send), но я видел переключение и DTR. Но всё таки я очень рекомендую в PC применить "автомат". По типу приведённого Вами или мной. А то я провёл исследования и был крайне огорчён. Бывают случаи, когда комп банально дробит пакеты. Рвёт даже посередине. (На хорошей скорости и при применении VirtualComPort). При таком раскладе (причём я не уверен что начало передачи начинается сразу) трудно определить завершение пакета с подходящей точностью. Требуется вводить задержку.
|
|
|
|
|
Jan 8 2007, 04:52
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(singlskv @ Jan 8 2007, 05:34)  Прошу прощения у автора топика что влезаю со своим вопросом, но надеюсь что он меня простит (ему это тоже очень понадобится, наверное...)
Не встречал ли кто-нибудь библиотечки под PC (Win) на С++ которая реализует протокол MODBUS (PC, конечно клиент)? А что, сложно накропать самому? Вы вроде грамотный и вполне подкованный чел  Документик, который я выложил почитайте, там и для слэйва и для мастера алгоритмы расписаны, (или, если Вам угодно и для сервера и для клиента). На том же http://modbus.org есть бесплатные исходники (на Си естественно) ... под PIC правда, но HAL подменить, для Вас, я думаю не проблема.... Или проблемы с программированием под Win32???
--------------------
|
|
|
|
|
Jan 8 2007, 10:31
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(prottoss @ Jan 7 2007, 23:02)  Цитата(Dog Pawlowa @ Jan 8 2007, 01:42)  ... Я конечно извиняюсь, что влезаю в такую умную беседу, но зачем говорить о велосипеде и пытаться его изобретать? Или интерес ради "просто вумно поболтать" ?. Опять же о том же MODBUS. Это конечно не панацея от всех бед, но все же дефакто промышленный протокол, использующийся в разных формах практически повсюду... Вот Вам его кратенькое описание, еслиф кто не ф курсе))). Там и физический интерфейс и программный. Enjoy!!! За документ спасибо. Что касается велосипеда... Мне дело представляется по другому. Вы дали клиенту рыбу, а я пытался объяснить, как устроена удочка. Мой следующий шаг - напомнить, что, кроме Modbus, существует огромное количество протоколов (у меня на полочке стоят три папки с описанием более 40 протоколов заправочных систем), а Ваш следующий шаг ? Дать исходники проекта? Кстати, Modbus не использую. Не нравится.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|