Just to wrap this up:-
.I have observed that each pin outputs a decreasing amount of voltage every time I activate another output pin.
The port expander used is the CY8C9540A, the data sheet says that a voltage high from any one pin is only guaranteed to be 1V when sourcing 10mA.
IOH = 10 mA for any one pin, Vdd = 4.75 to 5.25V.
40 mA maximum combined IOH for GPort0; GPort2_Bit3; GPort3; GPort5_Bit2, 3, 6, 7; GPort6.
40 mA maximum combined IOH for GPort1; GPort2_Bit0, 1, 2; GPort4; GPort5_Bit0, 1, 4, 5; GPort7.
80 mA maximum combined IOH.
On the other hand it is much better at sinking current, you can sink 25mA and still have the output voltage below 0.75V
IOL = 25 mA for any one pin, Vdd = 4.75 to 5.25V.
100 mA maximum combined IOL for GPort0; GPort2_Bit3; GPort3; GPort5_Bit2, 3, 6, 7; GPort6.
100 mA maximum combined IOL for GPort1; GPort2_Bit0, 1, 2; GPort4; GPort5_Bit0, 1, 4, 5; GPort7.
200 mA maximum combined IOL.
That chip is a poor choice for a hobbyist development board. Especially as it is I2C and runs only at 100KHz.
The new Galileo 2 uses a PCAL9555A chip which as the same current limits but on the high output the voltage will be 0.7 of the supply voltage ( for 5V that gives 3.5V ), so it is better but still poor.
It also can run faster but only at 400KHz so maximum toggle speed of an output has gone up from 200Hz to 800Hz.
The designers just don't get it, despite me telling them personally at the Rome Maker Fair last year that the I/O was far too slow to do anything interesting with the board.