Ich habe eine sehr einfache I2C-Bit-Banging-Bibliothek für ATTINY85.I2C-Sensorwert lesen (Bit-Banging)
Ich kann erfolgreich auf I2C ohne Probleme schreiben. Ich habe diesen Code mit SSD1306 und LC2404B getestet und alles funktioniert gut, sogar die Zeitmessung, wenn VCC auf 4,2 V eingestellt ist.
i2c_init();
i2c_start();
i2c_write(0xA0);
i2c_write(0x01);
i2c_write(0x13);
i2c_stop();
Während Schriftfelter perfekt funktioniert, kann ich nicht in der Lage sein scheinen keine meiner I2C Module mit ATtiny85 auslösen mir einen Wert zurückgeben, die ich später lesen kann.
Ich Himbeere und GY-521 Sensor verbunden (da es Wert zurückgibt, auch wenn interne Adresse nicht eingestellt ist). Ich kann den Sensor erfassen und einen Wert von ihm mit Himbeer die folgende Art und Weise lesen:
i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
i2cget -y 1 0x68
0x02
Dies ist die Ausgabe auf dem Oszilloskop ist:
kann ich die Sensordaten zu ändern sehen. Das Problem ist, ich kann nicht scheinen, die gleiche Anfrage von ATTINY85 auf den Sensor zu replizieren. Der Sensor antwortet einfach nicht mit dem Wert. Ich kann nicht zu verstehen, wenn das letzte Bit im ersten Byte ein ACK oder 'READ' Indikator Bit ist, also habe ich verschiedene Adressen ausprobiert.
i2c_start();
i2c_write( 0b11010001); // address: 0xD1
i2c_start();
i2c_write( 0b11010000); // address: 0xD0
i2c_start();
i2c_write( 0b10100001); // address: 0xA1
i2c_start();
i2c_write( 0b10100000); // address: 0xA0
aber egal auf welcher Adresse ich, der Sensor einfach nicht reagiert (im oscioloscope) und die SDA-Leitung bleibt hoch, nachdem ich den Adress-Byte senden. Ich habe auch versucht, eine andere Start() Bedingung anzufügen, nachdem ich die Adresse gesendet habe, aber immer noch kein Glück. Irgendwelche Hinweise darauf, wo ich falsch liege? Ich möchte einfach den Sensor auf die Leseanforderung ATTINY85 reagieren lassen, damit ich später den Wert lesen kann. Vielen Dank!
"Sie müssen auch die Uhr angeben, für die der Slave Daten ausgibt." Das war's! Vielen Dank! – Kristian