Hallo Forum, ich versuche derzeit ein HTU21D an einem STM32F103 anzusprechen. Leider meldet er sich nicht auf meine I²C Anfrage. Er ist der einzige Teilnehmer am I²C Bus. Die Leitungen sind kleiner 3cm. CLK & DAT sind jeweils mit 4,7k gegen VCC gelegt. VCC ist ebenfalls ein einfacher GPIO des STM, da ich nur eine Messung alle 5 Minuten machen möchte und ihn damit dann einfach abschalte kann. Als Frequenz I²C Frequenz bin ich bereits auf 5KHz runter gegangen. Im Anhang habe ich den Trace der Anfrage, sowie auszüge aus Schaltplan und Board angehängt. Legende: CH1 (Gelb): VCC CH2 (Blau): Data CH3 (Lila): Clock Ein zweites Board habe ich ebenfalls getestet (gleiches Resultat). Beide Boards kommen vom professionellen Bestücker. Bauteil wurde entsprechend der SolderMask auch richtigrum platziert. Vielen Dank für eure Hilfe!
Ich würde sagen, dass die Adresse falsch ist. Ich sehe da eine 8'b01000000 was eine I2C Adresse von 0x20 entspricht.
Hallo Michael, im Datenblatt http://www.amsys.de/sheets/amsys.de.htu21d.pdf auf S.10/22 findest Du unter der Überschrift "HTU21D(F) SENSOR LIST OF COMMANDS AND REGISTER ADRESSES" einen Abschnitt "Sending a command". Dort steht:
1 | After sending the start condition, the subsequent I²C header consist |
2 | of a 7-bit I²C device address 0x40 and a DATA direction bit (‘0’ for |
3 | Write access : 0x80). The HTU21D(F) sensor indicates the proper |
4 | reception of a byte by pulling the DATA pin low (ACK bit) after |
5 | the falling edge of the 8th SCK clock. |
Laut Oszi-Bild sendest Du "01000000" an den Sensor. Im Datenblatt steht jedoch "7-bit I2C device address 0x40". Deine Bitfolge sollte sich somit wie folgt zusammensetzen: "1000000" (=0x40 in 7-bit) + "0/1" (="0" für Schreiben, "1" für Lesen). In Summe also z.B. "10000000" (=0x80) um einen folgenden Schreib-Befehl anzukündigen. Seite 11/22 dokumentiert ebenfalls nochmals schön die Bitfolgen, die Du senden mußt. Viele Grüße Josef2
Vielen Dank auch zwei!! Die Adresse scheint tatsächlich falsch zu sein. Ich habe den ersten Puls als Starbedingung interpretiert, weshalb ich davon ausging, dass das erste Bit 1 ist. In einem anderen Thread hier, hat ein Mitglied auch seine Datenkommunikation gepostet (https://www.mikrocontroller.net/attachment/286536/atmega_htu21d.png). Diese hatte sein Rigol auch mit 0x40 dekodiert, weshalb ich intuitiv davon ausgegangen bin, dass es bei mir richtig sei. Allerdings hat er wahrscheinlich im Dekoder eine andere Adressbreite angegeben, was auf den Screenshots nicht zu sehen ist. Ich werde es heute Abend gleich ausprobieren, bedanke mich aber schon einmal recht herzlich für die Mühe! Michael
> Ich werde es heute Abend gleich ausprobieren
Und?
Vielen Dank für den Tipp - das war's! - Funktioniert nun alles :) Michael
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.



