Hallo zusammen,
ich muss ein Intersil X9119 über I2C ansprechen.
Dafür verwende ich einen Atmega48 und die I2C Lib von Peter Fleury.
I2C/TWI an sich funktioniert, ich kann einen anderen Chip der am selben
Bus hängt problemlos ansprechen. Aber der X9119 ist etwas seltsam.
Wie im Datanblatt auf Seite 8 zu sehen ist, erwartet er dass man ihm zum
lesen eines Registers die Slave Address mit Read bit schickt, dann den
Befehl zum lesen und dann 2 Bytes liest.
Normalerweise nutzt man ja den Master Transmit Mode um den Befehl zu
schicken, dann wechselt man in den Master Reciever Mode um die Antwort
zu lesen. Aber das funktioniert hier nicht (wie laut Datenblatt auch zu
erwarten war).
Mein Problem ist nun, dass mein Atmega nichts auf SDA schreiben will
während er im Master Reciver Mode ist. Und er geht automatisch in diesen
wenn ich das Read bit in der Slave Adresse setze...
Gibt es irgendeine Möglichkeit trotz Master Reciver Mode etwas auf SDA
zu schreiben?
Meine Funktion zum lesen sieht zur Zeit folgendermaßen aus:
1 | uint16_t readValue(uint8_t dev) {
|
2 | uint16_t ret;
|
3 | // Read WCR
|
4 | i2c_start_wait((X9119|(dev<<1))+I2C_READ);
|
5 | i2c_write(0b10000000);
|
6 | ret = ((i2c_readAck()&0x3)<<8);
|
7 | ret |= i2c_readNak();
|
8 | i2c_stop();
|
9 | return ret;
|
10 | }
|
Und das was raus kommt ist auf dem angehängten Screenshot zu sehen
(X9119-1.png).
Danke,
Thomas