Mit dem beschreiben von Registern, z.B. den PCF8591 (AD-DA Wandler)habe
ich keine Probleme. Im oberen Beispiel habe ich bereits gezeigt, wie man
es machen kann. Je nach Anzahl der Register können noch mehrere Angaben
folgen.
Fragender Gast schrieb:
> i2c_start(TCS_w);
> i2c_write(0x1f); //Wert in Register
> i2c_stop();
Mache es z.B. bei einem Display so:
1 | i2c_start(slave_adresse_1);
|
2 | i2c_write(DC1); // DC1
|
3 | i2c_write(0x04); // 04
|
4 | i2c_write(ESC); // ESC
|
5 | i2c_write('Z'); // Z
|
6 | i2c_write('F'); // F
|
7 | i2c_write(a);
|
Im genannten Beispiel sind DC1, Z und F verschiedene Befehle zur
Darstellung von verschiedenen Fonts oder Rahmen.
Komme mit dem I2C bus schon soweit klar. Auch mit der Abfrage ob ein
Busteilnehmer vorhanden ist,z.B. so:
Fragender Gast schrieb:
> ret = i2c_start(MCP_w); // Start Lesen
> if (ret == 0)
> { // Wenn ?? ein OK sendet...
> msb_temp = i2c_readAck(); //...speichere oberes Bit
> lsb_temp = i2c_readNak(); //...speichere unteres Bit
> }
> else // Fehlererkennung
> { // Wenn ?? kein OK sendet
> lcd_command(LCD_CLEAR); // Leere Display
> lcd_printlc(1,13,"READ"); // "Lesevorgang"
> lcd_printlc(2,13,"NOK"); // "Nicht OK (NOK)"
> }
Es ist auch das auslesen einer 16 Bit Zahl dabei. Das Bitschieben habe
ich hier nicht drin. Die Auswertung ist wieder was anderes.
Komme also mit dem Bus klar. Versteh es bei diesem IC nicht.
Wahrscheinlich denke ich in die falsche Richtung und es fehlt nur ein
Anstoss zum Verständnis
LG frg