toweroff 0 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба Добрый день Есть Allwinner H5 с Armbian. По I2C подключено несколько расширителей MCP23008 Пока был единичный ногодрыг, всё было прекрасно - экспортируем пин, настраиваем, используем Но встала необходимость одновременного изменения состояния всех 8 GPIO одного из расширителей. И упёрлись в стену (( Как правильно реализуется такое? Рулить на верхнем уровне этим всем будет питон Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 13 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба Какой интерфейс для управления gpio используете? Если актуальный gpio uapi + libgpiod, то смотрите на gpiod_line_set_value_bulk. С питоном не работаю, но пакеты, работающих с libgpiod есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба В общем ситуация следующая: расширитель использовался как простенький R-2R DAC. Но оказалось, что побитовое переключение может критично сказаться на результате В результате решено поставить (нужно быстро) готовый I2C DAC Но за наводку в любом случае спасибо, на будущее пригодится точно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 53 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 1 hour ago, toweroff said: Как правильно реализуется такое? Если расширители нужны только вашему ПО, то можно и через /dev/i2c крутить. Нет ничего зазорного в том, чтобы управлять периферией из userspace. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 2 часа назад, toweroff сказал: Но встала необходимость одновременного изменения состояния всех 8 GPIO одного из расширителей. Что-то не очень понятно. Там разве нет возможности байтовой записи? Пользовались более широким расширителем того же производителя. Там есть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 2 часа назад, toweroff сказал: Но встала необходимость одновременного изменения состояния всех 8 GPIO одного из расширителей. И упёрлись в стену (( чтобы пины дергались одновременно надо вместо i2c gpio expander-ов поставить либо груду регистров-защелок, сначала их загрузить, потом дать разрешение вывода либо если пинов мало в линуксе поставить на spi регистры с последовательной загрузкой.. i2c доступ не даст одновременное переключение в нескольких расширителях i2c в силу своей природы да, еще есть вариант между i2c расширителями и нагрузкой поставить буферы с разрешающим стробом, но это колхозный колхоз Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 53 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 4 minutes ago, Jury093 said: i2c доступ не даст одновременное переключение в нескольких расширителях i2c в силу своей природы Так речь идет об одном. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба Если использовать запись в регистр устройства I2C, то пины переключатся сразу Если же экспортировать ПИН как /sys/class/gpio/gpioXXX, то и дёргать можно за раз только его Или просто не нашли, как экспортировать всю MCP23008, чтобы записать в неё сразу байт Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tanya 4 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 17 минут назад, toweroff сказал: Или просто не нашли, как экспортировать всю MCP23008, чтобы записать в неё сразу байт Так у Вас проблема с библиотекой? А свою написать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 0 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 1 минуту назад, Tanya сказал: Так у Вас проблема с библиотекой? А свою написать? ну это да, но уже нашли DAC по I2C по 60р в sot23 (MCP4725A0T). Устройств-то будет всего пяток - быстрее купить готовое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 23 июля, 2020 Опубликовано 23 июля, 2020 · Жалоба 3 часа назад, aaarrr сказал: Так речь идет об одном. пардон, невнимательно прочитал и купился на "подключено несколько расширителей" впрочем, ТС свою проблему уже решил.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Tarbal 3 2 августа, 2020 Опубликовано 2 августа, 2020 · Жалоба On 7/23/2020 at 8:22 AM, Jury093 said: чтобы пины дергались одновременно надо вместо i2c gpio expander-ов поставить либо груду регистров-защелок, сначала их загрузить, потом дать разрешение вывода либо если пинов мало в линуксе поставить на spi регистры с последовательной загрузкой.. i2c доступ не даст одновременное переключение в нескольких расширителях i2c в силу своей природы да, еще есть вариант между i2c расширителями и нагрузкой поставить буферы с разрешающим стробом, но это колхозный колхоз Почему груду? Один. Можно по аналоговому каналу поставить. Называется устройство выборки хранения. Я в начале 90х работал с интерфейсной платой Labtender:https://scientific-solutions.com/products/labtender/labtender_index.html В ней 16 аналоговых выходов на одном цапе и 16 каналах выборки-хранения сделаны были. Единственное, что надо постоянно освежать выходы. On 7/23/2020 at 5:43 AM, toweroff said: Но встала необходимость одновременного изменения состояния всех 8 GPIO одного из расширителей. И упёрлись в стену (( Как правильно реализуется такое? Есть два способа. 1. Сделать вывод параллельным с контроллера 2. Записать последовательно в регистр сдвига и скопировать параллельно в защелку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться