Дуплексом по уарту

Тема в разделе "Проводная и беспроводная связь", создана пользователем Рокки1945, 21 апр 2021.

  1. Рокки1945

    Рокки1945 Гуру

    Здравствуйте уважаемые форумчане!
    Мои поиски связать по уарту 10 устройств пока закончились на такой схеме из книжки Рюмика.
    Снимок.PNG
    Хотелось бы выслушать компетентного мнения по следующим пунктам:
    1. в протеусе не работает - почему?
    2. если все правильно понял, то связь от слейва к мастеру сможет инициировать и сам слейв...
    3. что делать с резистором 10 КОм если длина шины будет метров 10 - оставить номинал?
    4. каким сделать сопротивление номиналом 510 Ом при 15 слейвах - оставить какую роль оно играет?
    Спасибо!
     
  2. SergeiL

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

    Если нужен дуплекс то чем не подходит RS-422?
    Со стандартными драйверами?
     
  3. Рокки1945

    Рокки1945 Гуру

    подходит - отлично - но вот вышеуказанная схема в железе не работает:(
    что такое 1/Z - ?
     
  4. SergeiL

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

    Так она и не должна работать.
    На картинке "а)" диоды неправильно стоят.
     
  5. Рокки1945

    Рокки1945 Гуру

    а разве они не блокираторы - прошу подсказать как правильно?
     
  6. SergeiL

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

    Плюс на шине подтягивается резистором R2.
    "-" - от контроллеров. Вот как они притянут к минусу с такой схемотехникой?
    Диоды нужно наоборот ставить.
    UPD: и резистор на плюс нужно ставить ИМХО...
     
  7. Рокки1945

    Рокки1945 Гуру

    анодами на шину RX мастера, а катодами к TX - ?
     
  8. SergeiL

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

    Учим мат часть:
    0 - GND,
    1- PWR,
    Z- Высокоимпедансное состояние.
     
    Рокки1945 нравится это.
  9. Рокки1945

    Рокки1945 Гуру

    не работает и в железе и в протеусе
     

    Вложения:

  10. Igor68

    Igor68 Гуру

    Доброго времени суток!
    Про протеус трудно сказать(прочитайте про P-Spice это старый пакет, применяемый и в P-Cad, и в Proteus, и много ещё где), потому как ему надо моделировать сразу все 4 разных МК... но идея занятная - попытка реализовать идею RS422. И монтажное ИЛИ с применением диодов в купе с резистором подтяжки, тоже ничего. Я понимаю выходы TX на ведомых в режиме отрытый коллектор(ОК)... а для режиме SERIAL не получается перевести в ОК потому и диоды - тогда понятно зачем они.
    А почему не выходит? По идее должно работать. Попробуйте сделать что либо на обычной логике для контроля прохождения вместо МК. Типа по кольцу на двух узлах ВЕДУЩИЙ и ВЕДОМЫЙ... всего на двух узлах. Если уровни нормальные проходят то должно работать.
    PS! При увеличении числа ведомых резистор подтяжки надо уменьшать, а соответственно и ток выхода активного ведомого будет возрастать - даже RS485 имеет ограничение по этому параметру и надо ставить повторитель, хоть и ведомых по Modbus может быть более 200. Этой же болезнью страдает и I2C и SPI, хотя на практике там не так много устройств на шине.
     
    Рокки1945 нравится это.
  11. parovoZZ

    parovoZZ Гуру

    Сперва протокол общения разработай, потом берись за схемы.
    Приведённые схемы в принципе рабочие. Не понятно только, что от них хочешь.
     
  12. Рокки1945

    Рокки1945 Гуру

    Передал команду по TX - слейвам - потом они через зашитые в их программе тайминги шлют ответы мастеру. типа 1ОК 2ОК 3ОК
     
  13. Рокки1945

    Рокки1945 Гуру

    В протеусе заработало - когда R2 заменил на 4700 Ом - но в железе на макетке не хочет.
    По отдельности все работает - по схеме Сергея.
     
    Последнее редактирование модератором: 21 апр 2021
  14. Igor68

    Igor68 Гуру

    Поставьте резистор подтяжки последним по монтажу относительно мастера(дальше чем ведомый)... так же делают везде и на I2C и на SPI и вообще везде. Даже в RS485/422 резисторы(терминаторы) в крайних точках.
     
  15. Igor68

    Igor68 Гуру

    Да и сигнал типа TTL не тянут на мало-мальски большие расстояния. Даже RS232 не очень большой дистанции. На то и придуманы дифференциальные лини связи RS485 и прочие. Для опытов снизьте скорость обмена... больше расстояние - ниже скорость. Вы же TTL таскаете!
     
  16. Igor68

    Igor68 Гуру

    Кстати резистор R1 ведущий через него же передаёт всем ведомым - великоват! Имеет смысл для ведущего по выходу TX применить ту же идею. Вместо R1 диод направлением к TX и аналогичный резистор подтяжки расположив его дальним по монтажу (после последнего ведомого). Тогда будет такая вот "симметрия" по обеим линиям связи.
     
    Рокки1945 нравится это.
  17. Рокки1945

    Рокки1945 Гуру

    принято
     
  18. Рокки1945

    Рокки1945 Гуру

    Вообщем убрал совсем резистор R1 - и повесил на край терминатор - вроде заработал
     
  19. Igor68

    Igor68 Гуру

    В принципе на один TX несколько RX это нормально... но вообще-то сам я так не делаю, потому-что в момент включения МК не сразу переводить свои IO в режимы TX и RX, а в этот момент как раз и происходят конфликты (к примеру первый МК выдает "0" на ножку, а другой "1"). Вроде быстро и ничего такого... но я так не люблю делать принципиально и ограничиваю токи по возможности. А в подобных случаях стараюсь применять выходы ОК с подтяжкой на линии. Это полностью исключает аппаратный конфликт.
     
    Ariadna-on-Line нравится это.
  20. Ariadna-on-Line

    Ariadna-on-Line Гуру

    R1 совсем не нужен. Игорь прав - на каждом слейве на RxD должен стоять резистор 100 ом. Чтоб не попалить перетоками пины Ардуин, пока они конфигурируются при старте. Я надеюсь вы догадались в протоколе заложить адреса или имена по которым обращаетесь к конкретному слейву ? А в проге слейва заложен парсинг адреса или имени ? Если же команда типа общий вызов - Должны быть заложены таймауты на ответ. Иначе они все хором заорут. Идею протокола возьмите из Далласовского 1-Wire.
     
    Последнее редактирование: 21 апр 2021