SMBus на ATTiny204
Поэтому я хочу подключить несколько светодиодных панелей с динамической адресацией к главному контроллеру. Похоже, SMBus должен быть в состоянии это сделать, однако я не нахожу никакой библиотеки для платформы Arduino. Требуется ли SMBus аппаратная реализация, и если она работает в программном обеспечении, есть ли для этого библиотека и работает ли она вообще на ATtiny?
@Christopher, 👍-1
Обсуждение1 ответ
Лучший ответ:
Микросхемам AVR не хватает аппаратной поддержки арбитража шины при работе в качестве подчиненного устройства в I2C, что требуется для его работы в качестве SMBus с ARP.
Вам придется написать свой собственный бит-битный драйвер, чтобы он действовал как подчиненный, отслеживая контакт SDA всякий раз, когда он передает данные для поиска столкновений с шинами.
Лучшим решением было бы выделить каждому устройству уникальный адрес, используя выбранное вами адресное пространство (чтобы дать вам достаточно адресов для уникальности) во время сборки / программирования. Шину некоторой конструкции (возможно, RS485 был бы хорошим выбором для этого) затем можно сканировать в поисках и каталогизации используемых адресов.
- I2C с ATtiny85 на частоте 8 МГц с использованием библиотеки TinyWireM
- ATtiny85 I2C ЖК
- Библиотека Wire.h работает на Uno, но не компилируется для ATtiny85
- Связь I2C между Attiny85 в качестве ведущего устройства и Arduino UNO в качестве ведомого устройства
- Связь AtTiny44 и AtTiny 85
- ATtiny85 LM75 I2C
- Digispark Rev. 3 Kickstarter ATtiny85 использует все 6 контактов
- Увеличение скорости датчиков Vl6180x
SMBus и I2C-это почти одно и то же. Всего несколько спецификаций между ними. Итак... почему SMBus, а не I2C, который гораздо более распространен?, @Majenko
@Majenko, потому что мне действительно нужна функция ARP SMBus, которая позволяет мне использовать динамическую адресацию. Если есть более простое решение для динамической адресации, я бы тоже хотел это услышать, @Christopher
Только арбитражный модуль ATmega TWI (afaict) работает в основном режиме. Таким образом, вам придется написать немного потрепанную эмуляцию подчиненного устройства со встроенным арбитражем. Выполнимо, но нехорошо., @Majenko
@Majenko итак, есть ли лучшее решение?, @Christopher
ARP-твой главный камень преткновения. Однако, поскольку вам все равно нужно выделить UUID для каждого устройства, вы могли бы просто выделить уникальный адрес I2C для каждого устройства вместо этого? Затем вы можете просканировать шину I2C в поисках существующих адресов I2C., @Majenko
@Majenko да, я думал об этом, но диапазон адресов 7 бит/10 бит слишком мал для моего приложения. Вероятность того, что у меня есть две или более панелей с одним и тем же идентификатором, слишком высока, @Christopher
Однажды я разработал систему, основанную на одном направлении передачи UART (TX->RX) и одной индикации одного импульса в ответ с 24-битными адресами. Это позволило получить 16 миллионов уникальных адресов, и я разработал древовидный метод сканирования, позволяющий довольно быстро находить все устройства, присутствовавшие в шине, без необходимости перебирать все 16 миллионов адресов. Вы можете ознакомиться с моими мыслями о протоколе здесь: https://github.com/MajenkoProjects/LIBus/blob/master/PROTOCOL.md, @Majenko
@Majenko Интересная идея, я думал об UART, но с заводским набором и доставленными QR-кодами, которые содержат адреса для Мастера. Я не был уверен, что multi TX к одному RX работает электрически с UART. Спасибо!, @Christopher
От нескольких tx до одного rx *можно* сделать, но это сложно. Если вы хотите, чтобы это было так, возможно, RS485 был бы лучшим выбором., @Majenko