Последовательная шина Raspberry Pi для нескольких AVR

Предыстория: я пытаюсь заменить электронику на хоккейном табло. У старой электроники были следующие проблемы:

  • Это перестанет работать. С тех пор я обнаружил, что пара диодов и конденсаторов сгорели.
  • Контроллер был проводным. Мы хотим избавиться от провода, идущего по всей длине катка.
  • Разъемы для контроллера вызвали много вопросов. Мне приходилось перепаивать их бесчисленное количество раз.

Фото табло

Размер табло примерно 3,5 метра в поперечнике.

Я планирую воткнуть Raspberry Pi в табло. Я планирую поставить USB-ключ Wi-Fi, поддерживающий режим AP, и запустить hostapd. Затем счетчики могут подключиться к Raspberry Pi через веб-интерфейс с планшета/ноутбука.

Планирую заменить лампы накаливания на светодиоды, возможно OSRAM LR G5AP-BZCZ .

Изначально я планировал использовать удлинители i2c GPIO. Но с тех пор я узнал, что проводка для шины i2c должна быть как можно короче. Это означало бы, что мне понадобится много кабелей от gpios до светодиодов. Отсюда я прихожу к своему вопросу.

Вопрос: Я хотел бы иметь микропроцессор AVR для каждых 7 сегментов или каждых 2 7 сегментов, работа которых является удлинителем GPIO. Они будут размещены физически рядом со светодиодами. Я хотел бы общаться от Raspberry Pi к нескольким микропроцессорам AVR через общую последовательную шину.

Я читал, что RS-485 может иметь несколько хостов на шине. И поскольку мое общение происходит в одном направлении (выход от Raspberry Pi), я надеюсь, что это может упростить решение.

Могут ли Raspberry Pi и AVR использовать RS-485, используя существующие последовательные интерфейсы? Какая схема нужна для этого?

Почему бы не сделать этот интерфейс беспроводным? Только полушутя...
Вы можете использовать ATmega32u4, у которых есть встроенный USB, и подключить их к Raspberry Pi с помощью USB-концентратора с питанием.

Ответы (3)

Доступны стандартные микросхемы приемопередатчиков RS422/RS485.

Здесь вы найдете много страниц, посвященных микросхемам, связанным с RS485, на сайте Digikey.

При желании вы можете использовать стандартные асинхронные последовательные данные с использованием RS485. «Создание собственного» многостанционного кода не должно быть слишком сложным [tm], но это часто изобретаемое колесо — многие люди уже предлагают программное обеспечение (в основном бесплатное), которое делает это.

Шина CAN работает поверх RS485, но, вероятно, избыточна для того, что вы хотите.


Превосходная заметка о применении

AN-218 Реализация многоабонентской сети RS-485

Это предназначено для ZBASIC, но может иметь прямое отношение к вашему приложению.

  • В этих указаниях по применению описывается, как подключить устройства ZX к многоабонентской сети RS-485. Сети RS-485 используются многими промышленными приложениями, включая управление процессами, автоматизацию зданий и даже управление освещением на концерте. Плата заголовка RS-485 и пример подключения приведены для объяснения простого оборудования, необходимого для начала работы с сетевыми устройствами ZX. Программное обеспечение, включенное в это руководство по применению, представляет собой образец приложения и многоразовый набор API для отправки и получения сообщений в сети RS-485. Вот оглавление, чтобы помочь с навигацией по документу.

Здесь вы найдете ...

Схема многоточечной проводки RS485 и сравнение RS232 и RS485

Они говорят -

  • RS485 иногда называют многоточечной локальной сетью RS485, поскольку он может соединять несколько устройств в сетевой среде локальной сети. Все эти устройства подключены к одной паре проводов. Передача и прием используют одни и те же два провода.

  • Официально спецификация RS485 допускает только 32 узла (устройства) в локальной сети. Однако производители интегральных схем разработали драйверы RS485, способные поддерживать от 128 до 255 узлов в локальной сети RS485. Мы используем эти драйверы RS485 следующего поколения в наших продуктах. Это означает, что вы можете использовать наши преобразователи и устройства удаленного ввода-вывода в более сложных ситуациях.

введите описание изображения здесь


Полезный учебник Wikipedia - RS485

Здесь много идей из поиска изображений G.

Вероятно, это правильная категория подхода, однако я хотел бы отметить, что приемопередатчики RS485 на самом деле могут не понадобиться для этих расстояний. Даже если бы он был двунаправленным, ресиверы AVR могли бы использовать три состояния своих выводов последовательной передачи, а расстояние и скорость передачи данных были бы не такими уж высокими. Однако если в качестве потенциального источника помех рассматривать сами осветительные элементы, то дифференциальные приемопередатчики добавляют запас прочности.

Пока другие отвечают на заданный вами вопрос, я хочу обсудить ваши опасения по поводу i2c. 3,5 метра — это чуть меньше 11,5 футов. Глядя на доску, можно увидеть, что от самой правой цифры до самой левой цифры всего 10 футов (3 м). Теперь учтите, что вы можете поместить RPi в мертвую точку, и мастер i2c не обязательно должен находиться в начале физической шины, это действительно 5 футов по обе стороны от шины. Откровенно говоря, любая шина I2C может работать на 3 м сама по себе. Я лично сделал 10м. И это без удлинителей шины. Вы можете получить километры и мили , используя буферы i2c, или даже удвоить / утроить обычную шину с мультиплексорами i2c.

При подключении RPI посередине шины у вас не возникнет проблем с падением напряжения на высоте 1,5 м. Можно использовать витую пару (ethernet cat 5/5e), но вы можете добиться еще большей производительности с помощью cat 6 (экранированная витая пара). В лучшем случае вам, возможно, придется замедлить шину, но для вашего приложения? Вам не нужно обновлять какую-либо конкретную вещь более одного или двух раз в секунду (часы времени).

Более того, модель RPI Model B, Rev 2 (последняя) имеет две настоящие шины i2c. Вы также можете получить доступ ко второму автобусу.

Короче говоря, вы можете использовать i2c без единой проблемы. (Черт возьми, в зависимости от того, как подключены существующие светильники, вам, вероятно, даже не нужно запускать шину i2c по всей длине платы.) Конечно, это дешевле или сложнее, чем использование нескольких микроконтроллеров и реализация RS485.

Поскольку ваша связь осуществляется только от Raspberry Pi к AVR, вы можете использовать RS-232. Передатчик RS-232 может без проблем питать несколько приемников RS-232. Возможно, вы также могли бы просто использовать логические уровни напрямую от UART Pi к UART AVR, хотя использование уровней RS-232 может упростить отладку.