MCP23017 от Microchip представляет собой 16-контактный удлинитель ввода-вывода на базе I2C. Я был в состоянии настроить устройство один раз (установить направление и значения контактов), но после этого я не могу изменить значения, как ожидалось, пока я не перезапустил / выключил и включил устройство. это код, который я использовал, чтобы инициализировать его и установить контакты в первый раз:
I2C_Start();
I2C_Write(0x40); // slave address
I2C_Write(0x00); // address register
... (sequential mode so next 10 are set to I2C_Write(0x00);
I2C_Write(0x08); // IOCON: HAEN=1
I2C_Write(0x08); // IOCON: HAEN=1
... (sequential mode so next 6 are set to I2C_Write(0x00);
I2C_Write(0xFEu); // GPIOA
I2C_Write(0x01u); // GPIOB
I2C_Stop();
после этого я хотел бы иметь возможность переключать выходные значения (0xFE <-> 0x01).
Я попытался этот код:
I2C_Start();
I2C_Write(0x40); // slave address
I2C_Write(0x12); // address register
I2C_Write(0x01u); // GPIOA
I2C_Write(0xFEu); // GPIOB
I2C_Stop();
в этот момент кажется, что он выходит на ланч, контакты кажутся случайными по значению (входной сигнал против выходного, выходной высокий против низкого). Если кто-нибудь использовал этот I2C IO Extender, пожалуйста, помогите мне. даже если вы не до конца уверены, что более чем приветствуем комментировать. ПРИМЕЧАНИЕ: API I2C, показанный здесь, является алгоритмом побитовой синхронизации, все тактовые циклы имеют приблизительно. 1 мс между ними.
полезные документы (вид): http://ww1.microchip.com/downloads/en/DeviceDoc/21952b.pdf