Ferdinand Keil's

electronic notes

Apr 01, 2013

Ändern der I2C Adresse eines HYT-131 Sensors

Auf der Suche nach genauen und günstigen Sensoren für meine Humidor Steuerung bin ich auf den HYT-131 von B+B Sensors aufmerksam geworden. Für knapp 20 Euro inkl. MwSt. bekommt man einen maximal ±2,0%relF genauen, kombinierten Temperatur- und Feuchtigkeitssensor. Das ist deutlich günstiger als der Sensirion SHT15 mit vergleichbaren Werten. Ein weiterer Vorteil des Sensors ist, dass er über ein Standard I²C-Interface kommuniziert. Der I²C-Bus unterstützt bis zu 112 Geräte, vorausgesetzt diese haben unterschiedliche Adressen. Das Datenblatt des HYT-131 erwähnt zwar die Möglichkeit die voreingestellte Adresse zu ändern, erläutert aber nicht wie. Über einen Beitrag im Raspberry Pi Forum wurde ich dann darauf aufmerksam, dass der HYT-131 genauso wie der HYT-221 und HYT-271 auf einem IC von ZMDI basieren. Der IC heißt ZSSC3122, das Datenblatt habe ich angehängt. Im Datenblatt zu diesem IC finden sich allerhand Informationen, darunter wie die I²C-Adresse geändert werden kann. Der Ablauf ist wie folgt:

  1. Sobald der Sensor mit der Versorgungsspannung verbunden wurde muss innerhalb von 3-10 ms (abhängig von der internen Konfiguration) ein Befehl gesendet werden um in den Command Mode zu gelangen.
  2. In diesem Modus kann der interne EEPROM beschrieben werden, wobei die I²C-Adresse im Register Cust_Config hinterlegt ist.

Um diesen Vorgang automatisch und zuverlässig durchführen zu können habe ich eine Arduino Sketch geschrieben. Die bisherige (default 0x28) und neue Adresse werden über defines angegeben. Der Sensor wird mit dem Arduino verbunden und dieser mit der Sketch programmiert. Dann muss nur noch der Serielle Monitor gestartet und ein beliebiges Zeichen gesendet werden um den Prozess zu starten. Bei den Sensoren die mir von B+B Sensors geliefert worden sind war das Comm_lock Flag im Register ZMDI_Config nicht gesetzt. Dadurch antwortet der Sensor auf allen I²C-Adressen. Die Sketch setzt dieses Flag, da sonst nicht getestet werden kann ob die Änderung der Adresse erfolgreich war. Mit der enthaltenen Funktion changeCommLock(...) kann diese Änderung aber auch wieder rückgängig gemacht werden.

Hinweis: Falls ein Fehler auftritt ist der Sensor unter Umständen weder unter seiner alten noch unter der neuen Adresse ansprechbar. In diesem Fall hilft es den gesamten I²C-Adressraum zu durchlaufen und auf Geräte zu prüfen.

ZSSC3122_cLite_Data_Sheet_rev_1_30.pdf

hyt131_i2c_addr_change_release.ino