fks
Posts: 7
Joined: Mon Dec 10, 2012 3:34 pm

i2c-Adresse ändern (HYT-221)

Sat Jan 26, 2013 1:07 pm

Hallo!

Folgendes Problem, aus dem ich nicht schlau werde :(
Ich habe zwei HYT-221 Sensoren (http://www.hygrochip.com/index.php?id=3833). Der Sensor funktioniert wunderbar und hat die Adresse 0x28. Nun möchte ich jedoch auch einen zweiten (Innen/Außen) an meinen Raspi anschließen. Jetzt ist mir klar, dass ich bei diesem Sensor die Adresse ändern muss zB auf 0x29.
Der Sensor kann das auch, nur leider gibt es nirgendwo ein (für mich) verständliches Tool, mit dem das geht (mit i2cset -y 1 0x28 ... werde ich wohl nicht weit kommen, oder?).
Ich habe sowohl eine Protokollbeschreibung für den Sensor als auch einen Python-Code gefunden (der mir jedoch unverständlich ist, und noch dazu für die Serielle Schnittstelle ist).

Hatte jemand schon mal so ein Problem, bzw. kann mir jemand weiterhelfen?

Danke euch! :)

diru
Posts: 9
Joined: Fri Jan 11, 2013 3:06 pm

Re: i2c-Adresse ändern (HYT-221)

Sat Jan 26, 2013 5:08 pm

Hey,

das Datenblatt gibt nicht viel her, aber im verlinkten Beitrag, sowie im Skript, findet sich die eigentliche Bezeichnung des Chips. Dank google findet man dann dieses Datenblatt http://www.zmdi.com/sites/default/files ... v_1_30.pdf.

Aus diesem geht hervor (Seite 21), dass 3-10ms nach dem Start ein spezielles Kommando gesendet werden muss um den Chip in den Command-Mode zu versetzen. Dieser ist dann im Abschnitt 4 beschrieben. Im Command-Mode hat man dann die Möglichkeit den internen EEPROM zu beschreiben. Die genaue Auflistung, was wo zu finden ist steht im Datenblattabschnitt 5. Für dich interessant wäre die Adresse 1C (Custom_Config), da die 6 LSB dieses Registers der I²C-Adresse entsprechen. (Seite 50).

Zusammengefasst musst du folgendes tun (ob in c oder in python bleibt dir überlassen)

Code: Select all

1. Start Command-Mode (3-10ms nach POR)
2. Schreibe die neue Adresse ins EEPROM an die Adresse 0x5C
Gruß,
Dirk

fks
Posts: 7
Joined: Mon Dec 10, 2012 3:34 pm

Re: i2c-Adresse ändern (HYT-221)

Sun Jan 27, 2013 9:37 pm

Hallo Dirk!
Zuerst mal vielen Dank für die hilfreichen Infos!
Die Logik dahinter ist mir jetzt (als Laien) klar. Die Frage ist jetzt die Umsetzung.

Ich glaube, das mit den 10ms bekomm ich hin, wenn ich die VCC des Sensors an zB einen mcp23008 hänge und dann über Python den Pin auf HIGH schalte. Gut, und gleich danach muss ich den Command Mode aufrufen und die Adresse ändern. Ich hab derweil nur Python Grundkenntnisse, also versuch ich's damit. Den Expander spreche ich mit smbus an, so wie den Sensor.
Nur, geht es so naiv (ja, es gibt definitv blöde fragen!), wie ich mir das vorstelle?

Code: Select all

import smbus

addr = 0x28
new_addr = 0x29
hyt = smbus.SMBus(1)

# vcc ON
.......

# start command mode
hyt.write_i2c_block_data(addr,0xA0,[0x00]) 
# write new address
hyt.write_i2c_block_data(addr,0x5C,[0x29]) 
# end command mode
hyt.write_i2c_block_data(addr,0x80,[0x00]) 
Das mit dem end command mode habe ich von hier: http://www.ibrutech.ch/Change_Address.pdf

Danke für deine Hilfe und Geduld! :)

diru
Posts: 9
Joined: Fri Jan 11, 2013 3:06 pm

Re: i2c-Adresse ändern (HYT-221)

Sun Jan 27, 2013 10:49 pm

Bei den Scheiboperationen musst du vorsichtig sein. Probier erstmal den entsprechenden Konfigurationsregister auszulesen. (Tabelle 4.1 Read von Adresse 0x1C).

Dazu solltest du wissen, dass die Schreibopertaion aus 4 Byte besteht:

Code: Select all

[StartBit] + [Addr+R/W] + [CMD] + [DATA1] + [DATA2]
(Siehe Seite 41)

Das bedeutet, dass du mit deinem Kommando jede Menege verstellen würdest. Du musst also vorher die 2 Byte an der Adresse 0x1C auslesen, anschließend deine neue Adresse in die Bitfolge einfügen und dann erst schreiben:

Code: Select all

Lese von 0x1C: xxxx xxxx xx01 0100b
Maskieren der Adresse: xxxx xxxx xx01 0100b & 1111 1111 1100 0000b (0xFFC0)
Setzen der neuen Adresse: xxxx xxxx xx00 0000b | 0000 0000 0010 1001b (0x0029)
Schreiben des neuen Registers
Dazu kommt, dass du nach dem Start_CM mal den Status prüfen solltest... wer weiß ob du wirklich im CM bist.

Gruß,
Dirk

kilmarnock
Posts: 3
Joined: Sun Mar 03, 2013 1:28 pm

Re: i2c-Adresse ändern (HYT-221)

Sun Mar 03, 2013 2:28 pm

Hast Du das jemals hinbekommen?
Ich hänge daran seit mehreren Tagen, ohne Erfolg.
Jede Hilfe ist willkommen.
Danke
Felix

kilmarnock
Posts: 3
Joined: Sun Mar 03, 2013 1:28 pm

Re: i2c-Adresse ändern (HYT-221)

Sat Mar 09, 2013 12:54 pm

Vielleicht beschreibe ich mein Problem genauer.
Ich beziehe mich auf das Datenblatt des Sensor-Kommunikationsbausteins:
https://www.google.de/url?sa=t&rct=j&q= ... 7494,d.Yms

Ich bekomme, egal was ich tue, immer die selbe Antwort. Da die Antwort, die ich bekomme, auch als Fehler gedeutet werden könnte (Sensor defekt) poste ich hier mein Vorgehen:

Am Anfang initialisiere ich den chip (haengt an einem gpio pin). Dann fuehre ich 100 mal die folgende Sequenz aus:

Das Absetzen von
self.hyt.read_byte_data(self.add,0)
soll einen write ermöglichen.
response = self.hyt.read_i2c_block_data(self.add, 0xA00000, 4)
soll mir das Kommando absetzten, mit 2 leeren Databits und 4 bytes auslesen.
print "response to the start of the command mode " + " bin: "+ str(bin(response[0]))
zeigt mir immer
0b1010101

Zurückgeben sollte er ein byte, das codiert ist als
Status Diagnostics Response
[7:6] [5:2] [1:0]
(The upper two status bits will always be 10 to represent Command Mode)

Wenn ich davon ausgehe, das bin() das erste bit wegnimmt, und somit 01010101 die Antwort ist und der bit index von rechts nach links gelesen wird, ist der status also 01 und nicht 10.

Wenn die bits 2:5 eine 1 enthalten, sinalisiert dies einen eeprom Fehler.
Das Setzen der Adresse hat also nicht funktioniert?
Der Sensor ist defekt?

Wann muss ich i2c_read resp. i2c_write nehmen?

Grüße
Felix

Yggdrasil
Posts: 138
Joined: Sun Aug 26, 2012 8:45 pm

Re: i2c-Adresse ändern (HYT-221)

Sat Mar 09, 2013 2:19 pm

Hallo,

ich kenne mich mit i2c nicht so auf, aber habe gesehen, dass man auf dem RPi ja zwei Devices hat: /dev/i2c-0 und /dev/i2c-1. Könnte man die Sensoren mit gleicher Adresse nicht auf diese beiden verteilen?

Gruß Yggdrasil

fks
Posts: 7
Joined: Mon Dec 10, 2012 3:34 pm

Re: i2c-Adresse ändern (HYT-221)

Fri Mar 22, 2013 1:52 pm

Hallo Felix,

ich bin länger nicht dazugekommen, weiter zu basteln und habe leider noch keien Lösung.
Ich fürchte, ich bin hier etwas verloren. Ich verstehe zwar alles (rein theoretisch), was Dirk gemeint hat, bin aber ehrlich gesagt "etwas" mit der Umsetzung überfordert.
Sollte irgendjemand eine Lösung haben, dann bitte auch hier mitteilen.

Villeicht hilft ja das hier weiter: http://ibrieger.de/?q=node/43
werde meine ELV irgendwann mal ausgraben und schauen, ob ichs hinbekomm!

fks
Posts: 7
Joined: Mon Dec 10, 2012 3:34 pm

Re: i2c-Adresse ändern (HYT-221)

Fri Mar 22, 2013 6:08 pm

hallo nochmal,

hatte jetzt mal kurz zeit es noch einmal auszuprobieren und siehe da... funktioniert tadellos. (war jetzt unter Windows unterwegs, ist hier gerade einfacher).
Man nehme: http://www.elv.at/usb-i2c-interface-kom ... kabel.html löte das Ding zusammen oder kaufe gleich das fertige (teurer).
Anschließen, Windows erkennt jetzt einen "Anschluss (COM & LPT) --> Silicon Labs UART Bridge. Eigenschaften. Datenbits auf 7, Bits pro Sekunde auf 115200. Parität/Flusssteuerung:Keine. Stoppbits:1. Unter "Erweitert" auf Com4 setzen (das jedenfalls merken).

Jetzt Python installieren und zusätzlich das hier: http://sourceforge.net/projects/pyseria ... t/download

Jetzt den Sensor auf einem Breadboard anschließen.
Das Python-Script von http://ibrieger.de/?q=node/43 herunterladen.
Dort die Zeile

Code: Select all

ser = serial.Serial("/dev/" + sys.argv[1], 115200, timeout=0.1)
in

Code: Select all

ser = serial.Serial('com4', 115200, timeout=0.1)
bzw, anpassen, wenn du einen anderen com genommen hast.

Das Python-Script in der CMD mit zb:

Code: Select all

c:\python27\python.exe c:\temp\hyt_address.py
aufrufen.
Achtung: Der Sensor ist noch dabei noch nicht angeschlossen.
Jetzt kommt ein Countdown, und danach steckst du relativ gemütlich deinen Sensor an (hast ca. 5 Sek Zeit). Achtung: Danach keinesfalls abziehen oder ähnliches. Dann ist er nämlich kaputt.
Es dauert dann ein paar Sekunden und Schwups, hat er jene Adresse, die du zu Beginn des Python-Scripts definiert hast.

Viel Spaß damit! :)
(und Danke Dirk!)

mmi
Posts: 85
Joined: Sun Feb 24, 2013 3:53 am
Location: Bavaria-Germany

Re: i2c-Adresse ändern (HYT-221)

Sat Mar 23, 2013 1:50 am

Yggdrasil wrote:Hallo,

ich kenne mich mit i2c nicht so auf, aber habe gesehen, dass man auf dem RPi ja zwei Devices hat: /dev/i2c-0 und /dev/i2c-1. Könnte man die Sensoren mit gleicher Adresse nicht auf diese beiden verteilen?

Gruß Yggdrasil
Man könnte schon, "i2c-0" ist aber nicht an der 26-pol Buchse verfügbar, da gibt es nur "i2c-1". Ob es sinnvoll ist, dafür extra eine andere Schnittstelle anzuzapfen? Ich würde es in diesem Fall nicht machen.

Gruß, mmi.

mjanich
Posts: 1
Joined: Tue Oct 08, 2013 8:27 am

Re: i2c-Adresse ändern (HYT-221)

Tue Oct 08, 2013 8:29 am

Tip: Kaufen einen HIH6120, der ist sehr aehnlich und von Honeywell. Er hat addresse 0x27.

-M

Return to “Deutsch”

Who is online

Users browsing this forum: No registered users and 3 guests