Arduino в режиме ретранслятора

Тема в разделе "Arduino & Shields", создана пользователем Aspirine, 26 апр 2012.

  1. Aspirine

    Aspirine Нуб

    Добрый День!
    Есть два прибора(1 и 2) которые общаются между собой через интерфейс rs232. Хочу воткнуть туда между ними arduino c подключенным к ней модемом. Модем подключил по этой схеме http://www.flickr.com/photos/igorgm/447841403/in/photostream/ все работает. Теперь надо воткнуть провода от устройства 1 в arduino и к трем выходам провода от устройства 2. И написать скетч для всего этого, чтобы когда модем не обменивался данными с устройством 1 arduino спокойно ретранслировал запросы и ответы устройств.
    Может есть пример скетча какой-нибудь похожий?
    Спасибо
     
  2. Unixon

    Unixon Оракул Модератор

    Не могли бы вы пояснить суть всего устройства в комплексе?
     
  3. Aspirine

    Aspirine Нуб

    Суть такова.​
    Оно втыкается в между двумя устройствами и при звонке на мой модем arduino прерывает связь устройства с адаптером, опрашивает устройство и через модем шлет мне данные, когда опрос закончен, она восстанавливает связь между устройством и адаптером.​
    Схематично вот нарисовал.​
    [​IMG]
     
  4. Unixon

    Unixon Оракул Модератор

    Теперь понятно.
    Напрямую подключать эти устройства к ардуино нельзя, RS232 работает в уровнях напряжений +-12V, а ардуино в TTL уровнях 0..+5V. Вам нужен преобразователь уровней типа MAX232 с каждой стороны от ардуино.

    p.s. Могу сделать соответствующий вашей идее RS232 Re-translator Shield для ардуино. Если оно вас, конечно, интересует...
     
  5. Aspirine

    Aspirine Нуб

    Конечно интересует! давайте.
    У ардуины как я понял только один Serial Port есть как я понял это 1 и 2 цифровые ноги.
     
  6. Unixon

    Unixon Оракул Модератор

    Немного не так. Точнее, у ATmega328 (Arduino Uno/Mini/Nano etc) один аппаратный порт, у ATmega2560 (Arduino Mega) четыре аппаратных. Программных портов с библиотекой SoftSerial можете сделать сколько хотитие на других ногах.

    Я тут на досуге поразмыслил над схемой этого ретранслятора и пока что пришел к выводу, что это скорее всего будет схема на 3-4 чипах плюс обвязка, на шилд для Uno с разъемами DB9 влезает еле еле, но в принципе сделать можно. Преобразователи уровней TTL<->RS232 по видимому будут типа MAX3243 для ведомого устройства и модема и MAX3237/3248 для ведущего устройства + еще возможно какая-нибудь логика между преобразователями и портами ардуины.

    Сколько линий от RS232 у вас используют ведущее и ведомое устройства? Только TX/RX или полностью все сигнальные линии RS232 (TX,RX,DSR,DTR,CTS,RTS,DCD,RI) ?

    Обязательно ли использование DB9 разъемов (COM-порт PC) для RS232 или возможно использование скажем RJ12 (6 линий = 5 сигнальных + земля)/RJ45 (8 линий = 7 сигнальных + земля) для неполных портов?
     
  7. Aspirine

    Aspirine Нуб

    Ведущие и ведомое устройство используют только три линии Rx, Tx и GnD как на схеме которую я привел.
    В идеале хотелось бы конечно DB9, но в принципе можно обойтись и клеммными разъемами и не заморачивться с DB9.
     
  8. Unixon

    Unixon Оракул Модератор

    Сами разъемы DB9 на плату помещаются нормально, но они они перкрывают некоторые отверстия для крепежа и некоторые не особо нужные самому шилду выводы с одной стороны. Т.е. такой шидл будет только самым верхним, замыкающим. Наверх разъемы для шилдов просто так вывести не получится, если не менять формат платы. Если это не критично, то можно поставить все три разъема DB9, больше никаких проблем с этим нет.

    Разводка только двух сигнальных линий, конечно, сильно упрощает устройство, но вообще есть соблазн развести полный ретранслятор со всеми линиями. Что думаете по этому поводу? Если ограничиться двумя сигнальными линиями между ведущим и ведомым, можно использовать чипы попроще и поменьше, хотя обвязка у них останется примерно такой же.
     
  9. Aspirine

    Aspirine Нуб

    Вы имеете ввиду что перекроются аналоговые входы? Если да, то это совсем не критично, их я не планировал использовать совсем.

    Это тоже не критично, его основная задача это работа между этими двумя устройствами.


    Да так будет лучше всего я думаю.

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

    А вы хотите ее развести на чипах в Dip корпусах?
     
  10. Unixon

    Unixon Оракул Модератор

    Ну если быть точным, то у меня получилось разместить три DB9 по одному на сторону так, что перекрываются только RESET и GND в ряду с аналоговыми портами. Хотел сначала только с торцов разъемы поставить, но там они не помещаются по два на сторону.

    Корпуса чипов типа SO16 / SOIC20 / TSSOP28, в DIP этих микросхем либо просто нет, либо они вообще никуда не поместятся тогда. Вообще ожидаю довольно плотный монтаж и не совсем тривиальную разводку. Похожие схемы уже делал и представляю, что должно получиться.

    Есть еще один вопрос - на какие ноги ардуины выводить линии модема и ведомого устройства. Интересно как разработчики шилдов решают вопросы распределения ног между шилдами, чтобы обеспечить максимальную взаимную совместимость... Будь на плате много места (или двухэтажный шилд) - можно было бы поставить матрицу перемычек и сконфигурировать ими соединение шилда с ардуиной, но как то это слишком уж наворочено на мой взгляд.
     
  11. Aspirine

    Aspirine Нуб

    Линии модема я думаю надо выводить так же как здесь е http://www.flickr.com/photos/igorgm/447841403/in/photostream
    хотя это уже не принципиально если использовать max232. Важно я думаю то, чтобы ноги модема и ведомого устройства, не шли рядом, чтобы избежать случайных наводок.

    Да, согласен с вами. Двухэтажный - это уже чересчур :)
     
  12. Unixon

    Unixon Оракул Модератор

    Там не только RX/TX, но и остальные линии, полный RS232 со стороны ведущего устройства по отношению к ведомому или со стороны ардуино по отношению к модему выглядит как 3 выхода (TX,DTR,RTS) и 5 входов (RX,DCD,DSR,CTS,RI).

    ОК, я пока подумаю как лучше мультиплексировать линии модема и ведомого устройства на ноги ардуино и линии ведущего и ардуино на ведомое устройство с минимальным количеством деталей.
     
  13. Aspirine

    Aspirine Нуб

    По документация прибора говорит что модем надо подключать двум возможным схемам:
    1-я:
    [​IMG]

    2-я:
    [​IMG]

    Предпочтительней первая конечно, но есои предусмотривать и вторую, т.е. полный Rs232 придется делать со всех сторон:
    со стороны Arduino --> Главное устройство
    со стороны Arduino --> Модем
    со стороны Arduino --> Адаптер

    Если не предусматривать вторую схему подключения, то тогда со стороны Arduino--> модем можно обойтись четырьмя контактами.
     
  14. Unixon

    Unixon Оракул Модератор

    Я частично уже нарисовал схему, как закончу - выложу сюда. Поскольку приходится опираться на реально доступные детали, по ходу возникают различные вариации схемы. Вот блок-схема шилда:
     

    Вложения:

  15. Aspirine

    Aspirine Нуб

    Да, у вас получилось практически так же как и у меня в блок схеме. А почему вы решили использовать мультиплексеры? Я планировал выбирать активный сингнал с Arduino.
     
  16. Unixon

    Unixon Оракул Модератор

    У ардуино не так много ног, чтобы разводить порты независимо. Полный RS232будет занимать 8 ног (из них 2 это RX,TX и 6 на остальные сигналы) + 1 нога на управление ведомым (переключение ведомого между ведущим и ардуино) + 1 нога на управление портом (переключение ардуино между ведомым и модемом) + 1 нога (опционально) на селектор шилда, чтобы его можно было совмещать с другими шилдами. Итого 10-11 цифровых портов ардуино под этот шилд уйдет. Это если не использовать для экономии ног SPI экстендер или хотя бы пару регистров сдвига, а к таким решениям прибегать очень не хотелось бы - сложно и места крайне мало.

    Что вы имеете ввиду под "выбирать активный сингнал с Arduino" ?
     
  17. Aspirine

    Aspirine Нуб

    Я имею ввиду что с определенный момент только одно устройство может общаться с главным устройством, то есть когда модем обменивается с главным устройством данными, адаптер не должен подключаться к линии т.к. он будет создавать помехи, то есть порт по которому он будет посылать запрос на обмен должен быть закрыт.
     
  18. Unixon

    Unixon Оракул Модератор

    Естественно, для этого сигналальные линии и (де-)мультиплексируются, т.е. переключаются.

    Кажется, я понял, что вас могло запутать. Под понятием (де-)мультиплексирования в радиотехнике понимают существенно разные вещи. В данном случае имеется в виду примитивный цифровой переключатель линий.

    http://ru.wikipedia.org/wiki/Мультиплексор_(электроника)
    http://ru.wikipedia.org/wiki/Демультиплексор

    В схеме шилда такие блоки должны быть еще и обязательно с третьим (высокоомным) состоянием выходов. Соответствующую элементную базу я уже подобрал.
     
  19. Aspirine

    Aspirine Нуб

    а, все понял, спасибо)
     
  20. Unixon

    Unixon Оракул Модератор

    Разобрался с имеющимися деталями и начал разводить плату. Идет пока тяжело, места очень мало. Все (де-)мультиплексоры заменил на (двунаправленные) аналоговые ключи 2<->1, что несколько уменьшило количество деталей, но все равно в схеме уже получилось получилось 9 микросхем: 3 преобразователя уровней для RS232, по одному на порт, 2xMAX3243+1xMAX3237 + 6 строенных ключей 74HC4053.

    Мелькнула еще мысль поменять местами ключи и преобразователи уровня, оставить один MAX3243 прямо перед адруиной, но 74HC4053 не потянут уровни RS232, да и в надежности такого решения есть большие сомнения. Хотя, если подобрать другие ключи, схема даже проще будет, но пока оставлю это на будущее - сначала нужно довести до рабочего состояния текущий вариант.
     

    Вложения: