Hallo allerseits! Ich beschäftige mich gerade mit dem HYT 271 und habe ein etwas kurioses Problem: Wenn ich per I2C an die Adresse 0x28 (Sensoradresse) schreibe, bleibt der gesamte Bus hängen. Der HYT scheint den SDA dauerhaft auf Masse zu ziehen. Die Adresse wird korrekt übertragen und der ACK wird vom Sensor gesendet, aber halt nur "unendlich lange". Wenn ich den Pin abnehme, läuft der Bus weiter. Wenn ich eine andere Adresse beschreibe, läuft auch Alles. Da Lesen funktioniert auch, nur die Werte passen logischerweise nicht. Hat da jemand eine Idee woran das liegen könnte? Ich nutze den MSP430F2112 mit 10kOhm auf SDA und SCL. Viele Grüße Frank
Hast Du noch einen HYT271, dann teste das mal mit dem, um einen Bauteildefekt auszuschließen. Ansonsten tippe ich eher auf fehlerhafte I2C-Kommunikation mit dem Baustein, so dass dieser hängen bleibt und den Bus blockiert. Woher weisst Du, dass das Addressieren sauber funktioniert? Das Lesen scheint ja auch nicht zu funktionieren. Was hier sehr helfen würde, wäre ein Oszilloskop mit I2C-Analyser. Aber das wirst Du wahrscheinich nicht zur Verfügung haben. Ich hatte auch mal ein ähnliches Problem und mit dem Oszilloskop konnte man sofort die Protokollfehler sehen und der Fehler nach insgesamt einer Stunde behoben werden. Mit Ausprobieren hatte ich mich zwei Tage lang geärgert und damit mein Wochenende versaut...
Wenn das ein 3V3-I2C-Bus ist, dann würde ich übrigens eher 1k5-Widerstände als PullUp empfehlen. Laut I2C-Spezifikation sind noch 100Ohm-Widerstände zu allen Busteilnehmern empfohlen (wahrscheinlich sogar wärmstens empfohlen oder vorgeschrieben).
Das Datenblatt vom Hersteller ist auch sehr dürftig. Da steht noch nicht mal drin, wie man mit dem Ding über I2C kommuniziert. 0x28 soll die I2C-Adresse sein = 101000b. Gehen wir mal davon aus, dass das Teil eine normale 7-Bit-Adresse hat, gibt es jetzt dummerweise insgesamt vier Möglichkeiten, was gemeint ist. Laut Nomenklatur wäre dann die Adresse plus R/W-Bit: 1a) 1010000b = Adresse plus 0 für Schreibzugriff 1b) 1010001b = Adresse plus 1 für Lesezugriff oder falsch gemeint: 2a) 101000b = inklusive 0 für Schreibzugriff 2b) 101001b = inklusive 1 für Lesezugriff. Gehen wir mal erst von Möglichkeit 1a und 1b aus. Sowas erwarte ich in einem ordentlichen Datenblatt beschrieben zu haben. Schön bunt ist das ja, es fehlt aber einiges, vor allem in Richtung Kommunikation.
Hallo allerseits! Ich habe den Fehler mittlerweile gefunden: Meine CPU hatte schlicht eine Macke weg. Mit einer identischen Austausch-CPU geht es. Die hat beim ACK vom Sensor den SCK gestoppt. Die Möglichkeit ist im MSP430 vorgesehen, ich hatte die Option aber deaktiviert. Nur scheint da das Bit im entsprechenden Register in der CPU "festzuhängen". Egal, neue CPU und es geht! Vielen Dank für die Hilfe! Viele Grüße Frank
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.