пример кода, документы на MCP23017 (16-контактный удлинитель ввода-вывода, I2C) в виде 7-сегментного драйвера ЖК-дисплея - PullRequest
0 голосов
/ 24 августа 2010

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

1 Ответ

0 голосов
/ 13 октября 2011

Попробуйте посмотреть сигналы SCL и SDA с помощью осциллографа или логического анализатора, чтобы проверить синхронизацию и данные, чтобы убедиться, что вы отправляете расширителю ввода-вывода значения, которые вы считаете нужными.

...