Comments 23
Вопрос не по софту, а по аппаратаной части, как вы крепите такие платы на основание?
Ардуино и logicLevelConverter можно распаять на зеленой макетке, если "по-быстрому". Расберри имеет штатные крепления. Платы между собой коннекторами DuPont
Штатные крепления отверстия это хорошо. И допустим ардуину распаяли, а дальше, воо есть платы с отверстиями, как их крепить в корпус? Дело в том что крепление по типу материнских плат на стойки очень непросто выполнить, ибо точность сверления под стойки должна быть ну очень высокой, ручным инструментом нормально не делается.
Да ну не придумывайте, нету ничего такого сложного. Тёмным маркером рисуете, потом поверх процарапываете разметку, где сверлить (можно циркулем, можно штангенциркулем), керном керните центры отверстий и дальше 3мм сверлом сверлите. Керном пользоваться обязательно, в этом секрет успеха.
Мне нужно закрепить несколько десятков плат, это пару сотен отверстий, слишком много усилий на такой метод, уже пробовал.
Платы одинаковые? Если да - то сделайте кондуктор хоть из фанеры и сверлите в удовольствие, повторяемость неплохая будет.
Нескольких разных типов. Да кондукторы вариант, скорее всего так и буду делать, но ещё рассматриваю вариант крепления в мягкое основание саморезами через дистанционные втулки. Вопрос технологичности производства. Странно что очень много информации как собрать схемы на соплях, как развести платы, а как доводить это до конечного устройства информации в разы меньше.
У меня есть лазерный резак по фанере 3д-принтер. Варианты:
Корпус из фанеры и крепление винтами(возможно пластик) через проставки
Корпус из пластика на принтере. Крепление саморезами с плоской шляпкой
Корпус из пластика и вплавление резьбовых вставок из латуни
Корпус из металла, тогда шаблон из фанеры и по нему сверлить, как уже выше предлагали
Да всё это включено в перечень рассматриваемых вариантов. Мне не нравится применение горючих материалов, и найти достаточно большие листы толстого негорючего пластика тоже сложно. Но спасибо, как минимум я понимаю что не только мне в голову пришли такие варианты и, похоже, каких-то очевидных варианов я не пропустил.
SPI так себе выбор. А что если слейву срочно захочется что-то сказать? Например, сообщить об ошибке, чтобы вся система максимально оперативно остановилась? Тут по всем параметрам лучше подойдет CAN, а если без дополнительного оборудования - UART.
Обычно вешают уже дополнительную линию в качестве прерывания с общей подтяжкой. Просто надо смотреть, какие скорости передачи нужны.
Слейв в данной конфигурации может опрашиваться постоянно и сообщать все, что угодно. Если в spi_send передать пустой список, то мы не передавая команд видим все, что хочет сказать ардуино.
Uart мне показался менее стабильным.
CAN-идея хорошая но штатно не поддерживается не распберри, не ардуино. Я-преподаватель и мне хочется делать достаточно простые в реализации решения.
Тогда уж I2C. Те же 2 провода, но не придется тянуть CS до каждого слейва. Плюс детекция отключения слейва от шины, когда он ACK в ответ на адрес не пришлет.
I2C, как вариант.
Я пока не разбирался, как arduino в режиме слейв работает. Но идея существует, да.
I2C в Ардуино реализовано, по принципу "абы как" и фатально тормозит главный цикл, внося задержки в несколько десятых секунды, даже при работе с двухстрочным дисплеем 1602 через PCF8574, а если I2C-слейв отвалится, то Ардуина вовсе зависнет в главном цикле, поскольку будет ждать ответа слейва. Сторожевой таймер тут особо не поможет, поскольку причина зависания никуда не исчезнет. Замечу это все на штатных библиотеках и штатных I2C-пинах.
Я бы не то что роботом, я бы котлом при таком раскладе управлять с помощью Ардуино, с чем то связанной по I2C не решился.
UART у Ардуино напротив работет весьма корректно.
Оба устройства работают по принципу: есть что сказать/спросить, переключаешься в мастера, говоришь/спрашиваешь, переключаешься в слейва, сидишь, ждёшь.
Вопрос снят :)
А как насчет трехпроводного SPI с двунаправленной шиной данных?
Есть идеи как это реализовать на Rasperry PI? Гугл говорит что задача не тривиальная.
Ну как же написать статью на тему электроники, транзисторов, пинов, уровней напряжения, и не вставить сюда упоминание Python-а... Вселенная же схлопнется...
Вот эта платка для согласования уровней идея так себе. Может с импульсами в сотни килогерц она еще и будет работать, но выше уже не годится. Нужны пуш-пульные схемы.
Интересно, у меня тоже были сомнения, но на скорости 1МГц прекрасно работает несколько таких сборок. Пока все стабильно
Магия на BSS138 и подобных работает, но вот заменить на 4-х канальный преобразователь логических уровней типа TXB0108PWR не получилось. Сигнал CLK превращается в один импульс. Даташиты винят подтяжку МК, и предлагают TXS посмотреть. Тоже без гарантии и с кучей компромиссов. По spi связываю два МК 2.8В и 5.0В
Такие преобразователи уровней сдуваются при частоте выше 12МГц .Как то подключал ленту на ws2801, дофига ошибок.
Уж лучше какой буфер или шмидт триггер.
Обмен данными по SPI между Raspberry Pi и Arduino