Не стал плодить темы, решил написать о своих затруднениях здесь.
Итак. Имеется несколько дуин. Одна генерирует произвольное число в заданном диапазоне. Вторая принимает. В качестве индикатора - рулевая машинка. Просто и наглядно. Дуинки связаны по UART проводной связью - все работает, машинка жужжит, вертится туда-сюда.
Подключаю конвертеры RS-485 как указано в предыдущем посте. Вношу изменения в скетчи - для управлением режимом "прием-передача". Не работает. Подтягиваю "вручную" к "единице" передаюший и к "земле" RE и DE - толку ноль.
скока больт дает эта команда на 13 ноге? т.к. туда обычно прицеплен светодиод, и там может быть при 1 не более 1,5В, т.е. что HIGH, что LOW вход драйвера будет воспринимать как ноль.
Но страдаете вы фигней, было же сказано ... проверить ноликами, единичками ... не .... нада куда-то лезть в дебри, еще не разобравшись с работой самого драйвера.
Кроме того, переключение режимов "приём"/"передача" (для скетча, который и принимает, и передаёт,) должно происходить динамически, а не один раз в setup(). RS-485 не может говорить и слушать одновременно, Вы должны переключать режим.
Две дуинки, одна генерирует данные, другая принимает. Пока порты соедимнены проводками - все ОК. Ну не может же весь десяток драйверов быть бракованным?
Когда я осваивал RS-485, был такой казус - на скорости 115200 работало как надо (и по сей день работает), когда пробовал снижать скорость (в том числе и до 9600), связь пропадала. Попробуйте, интереса ради, 115200, а вдруг ?
И ещё попробуйте пакеты подлиннее посылать, вместо
Cтрока 20 в скетче приемника внесена на предмет посмотреть, что именно прилетело, если оно таки прилетело...
Спасибо за подсказку по скорости... Действительно, казусная ситуация. Курил даташиты к МАХ485 - суть несколько компараторов... По идее, даже без контроллера, если "притянуть" управляющие пины куда нужно - можно "генерировать" данные хоть телеграфным ключом - и на выходе приемника получим исходную последовательность....
По идее, даже без контроллера, если "притянуть" управляющие пины куда нужно - можно "генерировать" данные хоть телеграфным ключом - и на выходе приемника получим исходную последовательность....
ну о чем и речь
сначала проверить работу буфера, потом уже все остальные телодвижения с контроллером
Телодвижения от того, что я сначала попробовал гонять данные из порта в порт. Для меня это было впервые и вновь. А с адаптером РС-485, ввиду кажущейся простоты и отсутствия постов об утыках - затруднений не ожидал и прицепил к тому, что уже работало до того. В результате получил бабаловку совсем не там, где ожидал.
Кстати, господа знающие коллеги. С терминирующими резисторами на инии, длиной до 100 метров заморачиваться стоит?
Никогда не было проблем с 485. Для проверки плат на одной DE RE замыкаете на массу на второй на +5. А-А В-В . Получите сквозной канал в одну сторону. Точно так же как Rx Tx соединять. Если так прогнать данные получится, то платы исправны. Подключаете замкнутые DE RE к ноге управления направлением передачи.
Тоже сталкивался с данной проблемой, соединение к дуине трехпроводное ( RO,DI, DE и RE вместе соединены), не было передачи данных от дуины, так вот подумал что max485 не успевает переключить режим передача/прием, и вписал delay после подачи сигнала на соответствующую ногу.
DE/RE на третьей ноге.
digitalWrite(3,HIGH);
delay(35); //запас, если сообщение длинное
Serial.print("message");
delay(35);
digitalWrite(3,LOW);
Можете еще принудительно de/re подтянуть к земле, и коснутся пальцем до контакта A или B, светодиод приема на плате должен начать тускло гореть, если так, то max485 целая, ну точнее ее приемник
Собрал на макетке простейшую схему. Два RS-485. Один в качестве передатчика, второй - приемник. Управляющие пины притянул соответственно к единице и нулю. На вход передатчика была подана последовательность нулей и единичек, сгенерированная всем известным скетчем "Blink". На выходе приемника исправно заморгал светодиод. Протестировал все наличествующие конвертеры как в роли приемника, так и передатчика. Проблем нет. Сквозной канал должен работать.
Подключаю к портам UART. Из 10 имеющихся конвертеров 2 заработали на скорости 115200, 9600, 14400 и 57600.
Для исключения возможных задержек на переключение режима "прием-передача", упомянутых несколькими постами выше - управляющие пины опять-таки "вручную" притянул к нужным потенциалам.
В какую сторону думать? Играться с параметрами линии?
После двадцатилетнего простоя был извлечен с антресолей старый добрый С1-94. Начал отслеживать сигналы на шине и сравнивать с указанными в даташите. Не хватало 0,12-0,22 вольта для переключения компаратора. Соответственно, сингал был выдан в двухпроводную шину, но оттуда не снят. На низких частотах переключение происходило уверенно. А когда пошли крутые фронты при передаче данных по UART - на этапе трансляции в ТТЛ - сигнал потерялся.
При восьмикратном увеличении на платах были найдены следы недомытого флюса, плохо различимые невооруженным глазом. Располагались они в таких "интимных" местах, как под резисторами, по корпусом микросхемы. После пятнадцатиминутного купания плат в горячем спирту и последующей продувки сжатым воздухом - все заработало как часы.
https://www.google.com/search?q=rs485+arduino&espv=2&biw=1680&bih=920&so...
Уважаемые коллеги!
Не стал плодить темы, решил написать о своих затруднениях здесь.
Итак. Имеется несколько дуин. Одна генерирует произвольное число в заданном диапазоне. Вторая принимает. В качестве индикатора - рулевая машинка. Просто и наглядно. Дуинки связаны по UART проводной связью - все работает, машинка жужжит, вертится туда-сюда.
Подключаю конвертеры RS-485 как указано в предыдущем посте. Вношу изменения в скетчи - для управлением режимом "прием-передача". Не работает. Подтягиваю "вручную" к "единице" передаюший и к "земле" RE и DE - толку ноль.
Где я мог что-то просмотреть?
минимум - рисуйте свою схему
полная альтернатива UART это RS-422, может строиться на буферах RS-485 только требует 2 2х проводные линии связи
Подключено согласно таблице:
Конвертирующий модуль
Управление режимом "прием-передача" посредством пина D10 прописано следующим образом: HIGH - передача, LOW - прием.
похоже на правду
Разрешите прием ~RE, разрешите передачу DE , линию не подключайте
передавайте сигнал по ТХ и сразу принимайте его на RX этим же процем
для начала можно просто устанвливать нолики и единичка в выходной порт.
как с этим разберетесь. двигайтесь дальше
Я должен, по-сути, получить интерфейс-петлю?
Попробовал. Не получается. Данные не приходят.
Вот скетч. Может, захожу не с той двери?
digitalWrite(13, HIGH);
скока больт дает эта команда на 13 ноге? т.к. туда обычно прицеплен светодиод, и там может быть при 1 не более 1,5В, т.е. что HIGH, что LOW вход драйвера будет воспринимать как ноль.
Но страдаете вы фигней, было же сказано ... проверить ноликами, единичками ... не .... нада куда-то лезть в дебри, еще не разобравшись с работой самого драйвера.
ВН, обратите внимание, пин 13 в данном случае ни к чему не подключен, а используется для управления встроенным светодиодом (строка 12 скетча выше).
Кот Баюн, в скетче я не вижу myservo.attach(), без этого вряд ли серва будет работать.
13 нога работает исключительно на прилагаемый светодиод. Управление драйвером через 10 и 11 пины.
А обвязка с сервой - осталась с предыдущего этапа, когда порты двух дуин соединял проводками.
Спасибо за ответ. Серва работает.
Кроме того, переключение режимов "приём"/"передача" (для скетча, который и принимает, и передаёт,) должно происходить динамически, а не один раз в setup(). RS-485 не может говорить и слушать одновременно, Вы должны переключать режим.
А ещё проще подключить по такой схеме
и рулить одним пином : 0-слушаем, 1-говорим.
Да, так тоже коммутировал.
Две дуинки, одна генерирует данные, другая принимает. Пока порты соедимнены проводками - все ОК. Ну не может же весь десяток драйверов быть бракованным?
Приемник:
ВН, обратите внимание, пин 13 в данном случае ни к чему не подключен, а используется для управления встроенным светодиодом (строка 12 скетча выше).
Ага, спасибо!
На работе "галопом по европам" =)
Пока порты соедимнены проводками - все ОК.
Эта фраза мне непонятна.
Для проверки работы данные с пина TX передатчика передавал на пин RX приемника посредством провода в обход адаптера RS-485 для локализации места сбоя.
Когда я осваивал RS-485, был такой казус - на скорости 115200 работало как надо (и по сей день работает), когда пробовал снижать скорость (в том числе и до 9600), связь пропадала. Попробуйте, интереса ради, 115200, а вдруг ?
И ещё попробуйте пакеты подлиннее посылать, вместо
попосылайте, например,
и понаблюдайте, будет ли мигать светодиод на приёмнике.
И еще, строка 20 в скетче приёмника мне кажется бессмысленной.
Cтрока 20 в скетче приемника внесена на предмет посмотреть, что именно прилетело, если оно таки прилетело...
Спасибо за подсказку по скорости... Действительно, казусная ситуация. Курил даташиты к МАХ485 - суть несколько компараторов... По идее, даже без контроллера, если "притянуть" управляющие пины куда нужно - можно "генерировать" данные хоть телеграфным ключом - и на выходе приемника получим исходную последовательность....
ну о чем и речь
сначала проверить работу буфера, потом уже все остальные телодвижения с контроллером
Телодвижения от того, что я сначала попробовал гонять данные из порта в порт. Для меня это было впервые и вновь. А с адаптером РС-485, ввиду кажущейся простоты и отсутствия постов об утыках - затруднений не ожидал и прицепил к тому, что уже работало до того. В результате получил бабаловку совсем не там, где ожидал.
Кстати, господа знающие коллеги. С терминирующими резисторами на инии, длиной до 100 метров заморачиваться стоит?
Никогда не было проблем с 485. Для проверки плат на одной DE RE замыкаете на массу на второй на +5. А-А В-В . Получите сквозной канал в одну сторону. Точно так же как Rx Tx соединять. Если так прогнать данные получится, то платы исправны. Подключаете замкнутые DE RE к ноге управления направлением передачи.
Тоже сталкивался с данной проблемой, соединение к дуине трехпроводное ( RO,DI, DE и RE вместе соединены), не было передачи данных от дуины, так вот подумал что max485 не успевает переключить режим передача/прием, и вписал delay после подачи сигнала на соответствующую ногу.
DE/RE на третьей ноге.
digitalWrite(3,HIGH);
delay(35); //запас, если сообщение длинное
Serial.print("message");
delay(35);
digitalWrite(3,LOW);
Можете еще принудительно de/re подтянуть к земле, и коснутся пальцем до контакта A или B, светодиод приема на плате должен начать тускло гореть, если так, то max485 целая, ну точнее ее приемник
В даташите на микросхему написано что время переключения in-out 30 наносекунд. Как она может не успеть?
Докладываю, господа, по сути проведенных тестов.
Собрал на макетке простейшую схему. Два RS-485. Один в качестве передатчика, второй - приемник. Управляющие пины притянул соответственно к единице и нулю. На вход передатчика была подана последовательность нулей и единичек, сгенерированная всем известным скетчем "Blink". На выходе приемника исправно заморгал светодиод. Протестировал все наличествующие конвертеры как в роли приемника, так и передатчика. Проблем нет. Сквозной канал должен работать.
Подключаю к портам UART. Из 10 имеющихся конвертеров 2 заработали на скорости 115200, 9600, 14400 и 57600.
Для исключения возможных задержек на переключение режима "прием-передача", упомянутых несколькими постами выше - управляющие пины опять-таки "вручную" притянул к нужным потенциалам.
В какую сторону думать? Играться с параметрами линии?
Пробовал посылать пакеты подлиннее, как рекомендовал уважаемый Araris. Без эффекта.
Всем откликнувшимся спасибо. Проблема решена.
Проблема заключалась в китайском дядюшке Ляо.
После двадцатилетнего простоя был извлечен с антресолей старый добрый С1-94. Начал отслеживать сигналы на шине и сравнивать с указанными в даташите. Не хватало 0,12-0,22 вольта для переключения компаратора. Соответственно, сингал был выдан в двухпроводную шину, но оттуда не снят. На низких частотах переключение происходило уверенно. А когда пошли крутые фронты при передаче данных по UART - на этапе трансляции в ТТЛ - сигнал потерялся.
При восьмикратном увеличении на платах были найдены следы недомытого флюса, плохо различимые невооруженным глазом. Располагались они в таких "интимных" местах, как под резисторами, по корпусом микросхемы. После пятнадцатиминутного купания плат в горячем спирту и последующей продувки сжатым воздухом - все заработало как часы.
Еще раз всем спасибо.
Мои поздравления )) Купание в горячем спирте - способствует !