Перейти к содержанию
    

MCP23008 I2C GPIO

Добрый день

Есть Allwinner H5 с Armbian. По I2C подключено несколько расширителей MCP23008
Пока был единичный ногодрыг, всё было прекрасно - экспортируем пин, настраиваем, используем
Но встала необходимость одновременного изменения состояния всех 8 GPIO одного из расширителей. И упёрлись в стену ((
Как правильно реализуется такое?
Рулить на верхнем уровне этим всем будет питон

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой интерфейс для управления gpio используете? Если актуальный gpio uapi + libgpiod, то смотрите на gpiod_line_set_value_bulk.  С питоном не работаю, но пакеты, работающих с libgpiod есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В общем ситуация следующая: расширитель использовался как простенький R-2R DAC. Но оказалось, что побитовое переключение может критично сказаться на результате
В результате решено поставить (нужно быстро) готовый I2C DAC
Но за наводку в любом случае спасибо, на будущее пригодится точно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, toweroff said:

Как правильно реализуется такое?

Если расширители нужны только вашему ПО, то можно и через /dev/i2c крутить. Нет ничего зазорного в том, чтобы управлять периферией из userspace.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, toweroff сказал:

Но встала необходимость одновременного изменения состояния всех 8 GPIO одного из расширителей.

Что-то не очень понятно. Там разве нет возможности байтовой записи? Пользовались более широким расширителем того же производителя. Там есть...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, toweroff сказал:

Но встала необходимость одновременного изменения состояния всех 8 GPIO одного из расширителей. И упёрлись в стену ((

чтобы пины дергались одновременно надо вместо i2c gpio expander-ов поставить либо груду регистров-защелок, сначала их загрузить, потом дать разрешение вывода

либо если пинов мало в линуксе поставить на spi регистры с последовательной загрузкой..

i2c доступ не даст одновременное переключение в нескольких расширителях i2c в силу своей природы

да, еще есть вариант между i2c расширителями и нагрузкой поставить буферы с разрешающим стробом, но это колхозный колхоз

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, Jury093 said:

i2c доступ не даст одновременное переключение в нескольких расширителях i2c в силу своей природы

Так речь идет об одном.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если использовать запись в регистр устройства I2C, то пины переключатся сразу
Если же экспортировать ПИН как /sys/class/gpio/gpioXXX, то и дёргать можно за раз только его
Или просто не нашли, как экспортировать всю MCP23008, чтобы записать в неё сразу байт

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, toweroff сказал:


Или просто не нашли, как экспортировать всю MCP23008, чтобы записать в неё сразу байт

Так у Вас проблема с библиотекой? А свою написать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

1 минуту назад, Tanya сказал:

Так у Вас проблема с библиотекой? А свою написать?

ну это да, но уже нашли DAC по I2C по 60р в sot23 (MCP4725A0T). Устройств-то будет всего пяток - быстрее купить готовое

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, aaarrr сказал:

Так речь идет об одном.

пардон, невнимательно прочитал и купился на "подключено несколько расширителей"

впрочем, ТС свою проблему уже решил..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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. Записать последовательно в регистр сдвига и скопировать параллельно в защелку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...