Wieder ein wenig weiter....
Habe mal ein Bild von der Übertragen vom Master aus angehängt. SCL liegt
bei ca. 1KHz. Daten sehen recht sauber aus. Habe es mal mit Bleistift
makiert wo die Adresse und das Datenbyte gesendet wird. Hoffe man
erkennt es einigermaßen. Was ich jetzt sehe ist, dass der Slave kein Ack
zurückgibt sondern ein NotAck (SDA ist im neunten Bit auf "1" und nicht
auf "0".
Woran kann das liegen? Die Startkondition sowie Slaveadresse+Write kommt
ja genau richtig an - das sieht man ja nun auf dem Oszi. Wieso sendet
der Slave kein Ack?
Hier nochmal die zwei Zeilen aus dem Slave (die ja eigentlich für ein
Ack nach der Adresse ausreichen sollten, oder etwa nicht?!)
1 | int SLAVEADR = 0b0100111;
|
2 |
|
3 | void twi_init(void) {
|
4 |
|
5 | TWAR = (SLAVEADR<<1)|(1<<TWGCE) ; //Slaveadr....
|
6 | TWCR = (1<<TWEN) | (1<<TWINT) | (1<<TWEA) | (1<<TWIE); //Global Interrupt on
|
7 |
|
8 | }
|
Müsen die Pins SDA und SCL als Dateneingang oder Ausgang definiert sein?
Für SCL macht ja Slaveseitig ein Eingang sinn. Nur bei SDA wird ja
emfangen und gesendet (für Ack/NotAck. Hierzu finde ich nichts im
Datenblatt. Regelt die TWI Hardware die SCL und SDA Datenrichtungen
automatisch?
Vielen Dank!