Aber so kann es auch nicht funktionieren! Das wird vielleicht etwas klarer, wenn Du Dir mal genau vergegenwärtigst was wirklich passiert:
Am ersten Byte (&b01110000) erkennt der Chip, dass er gemeint ist.
Das zweite Byte (&b00000001) sagt ihm, welches Register er als erstes beschreiben soll.
Das dritte Byte (&b00000011) geht somit ins Decode Mode Register (Adresse 0x01).
Soweit, so gut. Aber danach geht´s schief:
Der MAX kann doch nicht wissen, dass das nächste Byte jetzt wieder eine Adresse sein soll! Er versteht auch dieses Byte (&b00010000) als Datenbyte und schreibt es automatisch ins nächste Register (0x02). Das ist das Helligkeits-Register, und &b00100000 bewirkt dort 32 von 64 Helligkeitsstufen, also 50%.
Der Wert von "Einer" geht dann an die Adresse 0x03, und "Zehner" an 0x04. Letzteres ist das Configuration Register, in dem allerlei Einstellungen festgelegt werden, die ich mir jetzt im Einzelnen nicht durchgelesen habe. Es könnte aber erklären, weshalb die beiden Nullen so unterschiedlich angezeigt werden, je nachdem was der Inhalt dieses Registers ist.
Die eigentlichen Digit-Register 0x20 und 0x21 werden aber überhaupt nicht erreicht - und deshalb werden Dir auch immer nur Nullen angezeigt!
Wie gesagt - wenn Du den Chip einmal angesprochen und ihm das erste Adress-Byte gesendet hast, schreibt er alle weiteren Bytes ganz stur in die folgenden Register! Für einen Adress-Sprung müsstest Du m.E. die Übertragung beenden (I2cstop) und mit der gewünschten Adresse neu starten (I2cstart, I2cwbyte &b01110000, I2cwbyte neue_Adresse, I2cwbyte Datenbyte_1, I2cwbyte Datenbyte_2...., I2cstop).
Die relevanten Register liegen ja in zwei Blöcken beieinander: Das Decode Mode Register (0x01) und das Helligkeitsregister (0x02), und dann die Digit-Register (0x20 und 0x21). Das müsste also in zwei I2c-Sequenzen machbar sein!
Lesezeichen