Danke für Eure Antworten!
@np rn
Die Taktfrequenz beträgt 3,33MHz. Das sollte also ok sein.
Ja, es ist eine blöde Idee sich in unbekannte Materie einarbeiten zu
wollen, wenn das Handwerkszeug nicht passt. Ich muss zugeben, mich für
die ATMegas der üblichen I2C-Libs bedient zu haben. Daher fehlt mir doch
I2C - Grundlagenwissen. Der Bus-Pirate scheint in dieser Hinsicht eine
sinnvolle Investition. Ich hatte eigentlich ein Dev-Board mit dem
MCP2221 im Sinn. Der Pirate ist aber universeller.
Wie dem auch sei, ich habe noch etwas mit dem Arduino getestet.
Dabei stellte sich heraus, daß wenn ich den Tiny817-Slave nur schreibend
anspreche (Adress-Bit 8 = 0) kann ich auf meinem "Serial-Debug-Terminal"
erkennen, daß im TWI-Interrupt die Adresse erkannt wird und mein
Datenbyte empfangen wird.
1 | i2c_start(0x70); // address + 0
|
2 | i2c_write(0x79); // data Byte 'y'
|
3 | i2c_stop();
|
Spreche ich den Slave mit Adress-Bit 8 = 1 an wird im TWI-Interrupt die
Stop - Condition erkannt. Das Datenbyte enthält jedoch den Wert der
Adresse. Die erste if-Abfrage im Interrupt, die Adresserkennug, wird
offensichtlich nicht durchlaufen.
1 | i2c_start(0x71); // address + 1
|
2 | i2c_write(0x79); // data Byte 'y'
|
3 | i2c_stop();
|
Mit folgender Sequenz:
1 | i2c_start(0x70); // address +0
|
2 | i2c_write(0x79); // data Byte 'y'
|
3 | i2c_rep_start(0x71); //repeat_start Address + 1
|
4 | i2c_stop();
|
werden alle 3 if-Bedingungen im TWI-Interrupt erfüllt und an meiner
Konsole erkenne ich, daß die Adresse korrekt erkannt, das Datenbyte
korrekt empfangen und die Stop-Condition erkannt wurde.
Die letzte, für mich unlogische, Sequenz erzeugt das, von mir, erwartete
Ergebnis.
Sobald ich neues Spielzeug, den Bus-Pirate, habe kann ich wohl etwas
sinnvoller weitermachen. Jetzt hat es etwas von im Nebel herumstochern.