РЕШЕНО Связь нескольких arduino по spi

Тема в разделе "Arduino & Shields", создана пользователем Irurnnen, 26 июл 2021.

  1. Irurnnen

    Irurnnen Нуб

    Вообщем мне нужно подключить примерно подключить 10-15 arduino по SPI. Одна из них будет опрашивать все остальные через какое-то время. Максимальное расстояние между arduino 2-4 метра. Хочу сделать передачу по проводам, только не знаю как подключать. Помогите!
     
  2. SergeiL

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

    А чего в гугле не вбить SPI?
    Куча картинок и статей
    Вот например:

    [​IMG]

    UPD: Только SPI как и I2C не предназначен для связи на метровых расстояниях.
     
    Последнее редактирование: 26 июл 2021
  3. Irurnnen

    Irurnnen Нуб

    Допустим, попробую. Спасибо
     
  4. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Не лучшее решение. Пинов хост-Ардуины не напасешся. Старайтесь сделать так, чтоб трех проводов хватило на всех. В примерах SPI есть скетч с использованием адресного байта - преамбулы перед данными.
     
  5. SergeiL

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

    Можно, Ну в уну, думаю, по памяти не влезет, судя по вопросам ТС, опыта у него немного, а тут еще и усложнение логики, а у меги пинов хватит.
    Тут проще RS-485 - всего три провода, но нужно что-то городить с драйвером.
    Ну и скорость можно снизить, чтобы подальше работало.
     
  6. parovoZZ

    parovoZZ Гуру

    А что, проблема сгородить драйвер 485 интерфейса? Там других проблем, в частности, софтовых будет не меньше.
     
  7. SergeiL

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

    Проблема в том, что нужна плата, желательно в форм-факторе шилда, на которой будет распаян драйвер.
    А по SPI можно просто воткнуть разъемы.
     
  8. parovoZZ

    parovoZZ Гуру

    Так и шилд можно просто воткнуть в разъем.
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Здесь аппаратная проблема конфликта выходов передатчиков периферийных устройств. Поэтому стандартное решение - все выхода последовательно с резистором 100ом. Но - придется усложнять алгоритм связи. Устройства услышавшие НЕ СВОй адрес - должны на некоторое время перевести выход передатчика в Z-состояние, чтобы не давить сигнал передатчика адресата. В протоколе SPI такой возможности скорее всего нет. Поэтому придется на время выключать SPI режим, и переводить пин передатчика в Z-состояние или в режим входа. А потом снова включать режим SPI и слушать линию приема, ожидая своего адреса. Программно здесь вроде бы ничего сложного нет.
    ПС. Возможно сигнал от хоста на линии #SS - будет маркером что шина свободна, и периферия может включать режим SPI на прием.
    А готовые существуют. или разрабатывать самосад ?
     
    Последнее редактирование: 28 июл 2021
  10. parovoZZ

    parovoZZ Гуру

    очень интересные заявления. ChipEnable просто так у SPI интерфейса или для чего-то всё же нужен?

    без малейшего представления. Если мне нужна будет такая связь, я возьму всё самое лучшее на данный момент и сделаю
    Но в реалиях квартиры/дома радиосвязь будет дешевле.
     
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Нужен для работы ПАРЫ - хоста и слейва, в простейшем аппаратном решении. А у нас - хост и куча слейвов на одной шине.
    Это не вписывается в техзадание ТСа.
     
    Последнее редактирование: 29 июл 2021
  12. parovoZZ

    parovoZZ Гуру

    всё верно. Хост работает только с тем устройством, которому на CE (или SS) подан разрешающий потенциал. Все остальные сидят (внимание!)
    У самой AVR всё наоборот. Правда, только в старых МК. При подаче нуля на аппаратный пин SS (если он сконфигурирован как вход), SPI тупо аппаратно переходит в SLAVE режим. В новых сериях МК это пофиксили.
    Поэтому если у вас SPI всегда мастер, то пин SS должен быть сконфигурирован как выход или же схемотехнически висеть на единице.