Go Down

Topic: Fehler in Wire.h? (Read 1 time) previous topic - next topic

kurgil

Hallo,

nachdem ich schon einige Erfahrungen mit der AVR-Programmierung in BASCOM gemacht habe, versuche ich mich seit einigen Tagen an einem Arduino Pro Mini.
An diesen habe ich testhalber per I2C-Bus den Portexpander PCF8574A angeschlossen.
Nach dem ich mehrfach erfolglos versuchte, den 8574 zur Mitarbeit zur Zusammenarbeit mit dem Arduino zu überreden, testete ich die Verkabelung auf dem Breadbord mit einem in Bascom programmierten ATMega48 und alles funktionierte perfekt.
Arduino wieder angeschlossen - nichts passiert :(.

Da ich glücklicherweise Zugriff auf ein Speicheroszi habe, habe ich mir mal angeschaut, was da eigentlich auf dem Bus passiert und festgestellt, dass der Arduino die Slave-Adresse des PCF8574A nicht korrekt überträgt.
Statt wie im Programm mittels

Wire.beginTransmission(0x70);

den Wert 70h zu senden, sendet er 0xE0!

Nachdem ich den Wert von 70h auf 38h geändert habe, sendet er den korrekten Wert 70h und die Schaltung tut das, was sie soll...

Ist dieses Verhalten normal oder ist das ein Bug? 

Viele Grüße
Kurt

farbtoaster

daran gedacht?
Quote
There are both 7- and 8-bit versions of I2C addresses. 7 bits identify the device, and the eighth bit determines if it's being written to or read from. The Wire library uses 7 bit addresses throughout.


Grüsse

rz259


daran gedacht?
Quote
There are both 7- and 8-bit versions of I2C addresses. 7 bits identify the device, and the eighth bit determines if it's being written to or read from. The Wire library uses 7 bit addresses throughout.


Grüsse



Aber wenn es sich um das höchste Bit handelte, dann müsste aus 0x70 ja eher 0xF0 werden. Und warum man anstelle von 0x70 den Wert 0x38 wählen muss, wird damit auch nicht erklärt... dann würde aus 0x38 ja 0xB8 werden - ich kann mir nicht vorstellen, dass es daran liegt.

Rudi

farbtoaster

Hm?
schon die 0x70 stimmen nicht, http://www.ti.com/lit/ds/symlink/pcf8574a.pdf (seite 4 oben)
Datenblatt sagt 0x38 und folgende
Irgendwo ne '0' verloren (MSB)???
auf dem Oszi taucht aber auch noch das letzte Bit auf (R/W) das nicht zur Adresse gezählt wird.
also wird aus dem 0111000 auf dem Bus ein 01110000.

Grüsse

kurgil

Danke für die Antworten.
Da gibt es offensichtlich einen Unterschied, wie der Bus in Bascom und in der Arduino-IDE  angesprochen wird.
In Bascom wird der 8574A nämlich mit 70h adressiert (funktioniert auch ;-)). Ich hätte vielleicht auch mal ins Datenblatt gucken sollen .... ;-). Aber das wäre ja zu einfach gewesen :D.

Viele Grüße
Kurt

Go Up