So, jetzt hab ich aufgeholt und bin wieder auf dem Laufenden.
Daß du Meinungen und Codeschnipsel Dritter zitiert hast, fördert bei mir nicht gerade den Eindruck ernsthafter Eigenbemühungen. War nicht böse gemeint, nur ehrlich
. Jetzt also konstruktiv weiter.
Die Chipadresse ist aus Figure 1-2 im Abschnitt 1.4 abzulesen: beginnend mit dem MSBit: 0100, dann die drei HW-Aresspins/-bits, danach das R/W-Bit.
Je nachdem, in welchen Format die Adresse anzugeben ist, variiert diese auch: als Adresse OHNE R/W-Bit ist es eben 0100 000, also 0x20, dazu das R/W-Bit.
Zählt man aber das R/W-Bit zur Adresse dazu, dann ist die Leseadresse des Chips 0100 000 0, also 0x40, die Schreibadresse 0100 000 1, also 0x41. (Die Leerzeichen sind nur zur Strukturierung eingefügt, haben keine Bedeutung!)
Aus Table 1-5 und 1-6 ist abzulesen, dass der Wert des IOCON.BANK-Bits nach dem Reset gleich "0" ist. Das ist, wie bereits gesagt, wichtig für die richtige Registeradressierung.
Byte Mode, Sequential Mode - ich gestehe, ich krieg die speziellen Sachen auch nicht mehr aus dem Ärmel geschüttelt, habe aber vor ein, zwei Jahren eine Pin-sparende Grafik-LCD-Ansteuerung via MCP23017 nach Datenblatt zum laufen gekriegt. Da steht schon alles drin was man zu diesem Chip wissen muss.
Prüfe doch einfach bei den Lib-Funktionen mal nach, ob du nicht doch das ACK bzw. NACK abwarten musst. Das ist im Grunde anzunehmen.
Ich hab selbst schon mal Code Produziert, der nicht I2C-konform war, aber trotzdem funktionierte, weil damals der Controller diesen Fehler kaschierte, sein Nachfolger aber nicht mehr ...
Das sind jedenfalls schon mal die richtigen Registeradressen nach einem Reset.
Lesezeichen