Инвертировать выходные пины в MCP23017

Nikomas

✩✩✩✩✩✩✩
25 Дек 2022
9
0
Друзья. Воюю сейчас с MCP23017, а вернее с его пинами. Пишем в loop:
C++:
....
    Wire.beginTransmission(chipAddr); // Start transmission to address 0x20
    Wire.write(GPIOA); // address bank A (0x12)
    Wire.write(0x00); // Turn ON all pins
    Wire.endTransmission(); // Stop transmission
....
и вместо логичного выключенного состояния пинов получаем включенное.

Ладно. В даташите написано:
OUTPUT LATCH REGISTER (OLAT) The OLAT register provides access to the output latches. A read from this register results in a read of the OLAT and not the port itself. A write to this register modifies the output latches that modify the pins configured as outputs.
OLAT – OUTPUT LATCH REGISTER 0 (ADDR 0x0A)
1 = Logic-high
0 = Logic-low
Добавляю в Setup:
C++:
....
Wire.write(0x0A);
Wire.write(0xff);
....
Но выходные пины не инвертируются.

Может кто из форумчан подскажет куда глядеть?
 

Nikomas

✩✩✩✩✩✩✩
25 Дек 2022
9
0
Логично же что, если прописываем 00000000, то хотелось бы на пинах иметь нули, а не единицы. :)

Костыль, то я нашел, но хотелось бы инвертировать. Входные пины инвертируются параметром 0x01 без проблем.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@Nikomas,
`
Writing to the GPIOn register actually causes a write to
the latches (OLATn). Writing to the OLATn register
forces the associated output drivers to drive to the level
in OLATn.
`
чипа под рукой нет, но судя по доке выходы не инвертируются. Включаете драйверы путем записи 0xff в защелку, а дальше пишете то что нужно в гпио регистр без инверсии.