Ich glaube das Problem ist, dass der MAX nicht wissen kann, dass &b00100000 und &b00100001 die Adressen der zu beschreibenden Register sind.
Im Datenblatt steht folgendes:
The address pointer in the MAX6958/MAX6959 autoincrements
after each data byte. If multiple data bytes
are transmitted before a STOP condition is detected,
these bytes are stored in subsequent MAX6958/
MAX6959 internal registers (Figure 8 ), unless the
address pointer has reached address 01111111. The
address pointer does not autoincrement once address
01111111 has been reached (Table 3).
Das heißt also, er schreibt den Wert "Zehner" noch korrekt in das Register &B00100000. Das nächste Byte (&b00100001) wird dann aber wieder als Datenbyte interpretiert und in das nächsthöhere Register geschrieben, und das Byte "Einer" in das wiederum nächsthöhere Register.
Andersrum gesagt würde ich es mal so versuchen, einfach nur das erste Digit-Register zu adressieren (also &b00100000), und dann beide Ziffern-Bytes nacheinander zu senden. Sie müssten dann von selbst in den beiden aufeinanderfolgenden Registern (00100000 und 0100001) landen.
Bleibt natürlich noch ein Problem: Das Decode-Mode-Register (0x01): Da steht beim Einschalten ´ne &b00000000 drin - also "no decode for digits 3-0".
Damit die Digits 0 und 1 angesteuert werden, muss da &b00000011 reingeschrieben werden. Dieses Register steht aber an einer ganz anderen Stelle als die anderen zu beschreibenden Register, so dass man das nicht unmittelbar hintereinander weg per automatischem Increment machen kann.
Ich würde also mal versuchen, zuerst das data decode register zu beschreiben, und dann in einem zweiten Teil die eigentlichen Ziffern in die Digit-Register:
I2cstart
I2cwbyte &b01110000
I2cwbyte &b00000001 (Adresse des Data Decode Registers)
I2cwbyte &b00000011 (=Digits 0 und 1)
I2cstop
I2cstart
I2cwbyte &b01110000
I2cwbyte &b00010000 (= 0x20, Adresse Digit 0)
I2cwbyte Einer
I2cwbyte Zehner (geht automatisch ins Register 0x21)
I2cstop
Lesezeichen