Forum: Mikrocontroller und Digitale Elektronik Tips für i2c?


von Georg (Gast)


Lesenswert?

Hi,

ich möchte über den I2Cbus, einige Sensoren wie Temperatur und 
Rel.Luftfeuchtigkeit abfragen, sowie Verbraucher ein und ausschalten. 
Das aus einem Grund, weil mir sonsts die Pins des Atmega 128 nicht 
ausreichen und aus dem anderen dass ich nich so viele Leitungen legen 
muss bzw. eine Erweiterungsmöglichkeit vorhanden ist.

Nun stehe ich vor eineigen Problemen.

1.  Wie steure ich Optokopler oder Transistoren (MOSFETs) über den I2C 
BUS?
Gibt es da module die auf der einen Seite an den I2C Bus angeklemmt 
werden und auf der anderen Seite Ausgänge wie am µc haben?

2.  Ich habe einige Luftfeuchtigkeitssensoren von Sensorik diese sind 
schon für einen 2 wire Bus gedacht. Allerdings besteht da das Problem 
dass ich nicht wie bei den Tem.Sensoren von Maxim o. Dalas die Adresse 
durch Beschaltung von Pins bestimmen kann. An den Feuchtesensoren ist 
die Adresse fest vergeben und zwar bei allen auf 000. Nun weiss ich 
nicht wie ich da mehrere an einen Bus hängen soll. Soll ich vielleicht 
nen AtTini nehmen und dem I2C beibringen? Oder gibt es da einfachere 
bzw. originellere und kostengünstigere Möglichkeiten?

Ich bedanke mich mal im vorraus.

Gruss.

Georg.

von crazy horse (Gast)


Lesenswert?

obs was fertiges gibt, weiß ich nicht, glaube aber eher nicht. Der 
I2C-Bus ist zum Datenaustausch auf der Platine vorgesehen und von den 
technischen Parametern darauf ausgelegt. Lange Leitungen sind da nicht 
vorgesehen (und funktionieren auch nicht). Was die Sache weiter 
erschwert, ist der bidirektionale Betreib.
Mein Rat, wenn du nicht gewaltige Klimmzüge in Sachen Störsicherheit 
machen willst, such dir ein Bussystem, das geeigneter ist.

von thkaiser (Gast)


Lesenswert?

PCF 8574 oder PCF 8574A

von Georg (Gast)


Lesenswert?

hi,

die IC's von philips sind genau dass was ich gesucht habe. Jetzt brauche 
ich nur etwas womit ich meinen Sensoren die alle die gleiche Adresse 
haben ein andere beibringen kann.

Was die Kabellänge bei i2c betrifft. Ist es meines erachtens kein so 
großes Problem. Mit Flachbandkabeln bei denen jede 2.Leitung auf Masse 
sitzt schaft man meherere Meter ohne Probleme.

Aber eventuell wird es eh ohen Kabel laufen. Mal schauen.

Danke.

Georg.

von thkaiser (Gast)


Lesenswert?

Prinzipiell stimmt das, was crazy horse schrieb.
Mit ein paar Tricks kann man dem I²C-Bus aber ein paar Meter 
herausleiern:
Bei vielen Anwendungen ist es gar nicht notwendig, die volle 
Geschwidigkeit zu nutzen. Je niedriger die Geschwindigkeit, umso länger 
darf der Bus werden.
Es gibt Bus-Repeater, einfache ICs. Ich muß mal die Nummer raussuchen, 
aber die machen dem I²C-Bus auch nochmal Beine.
So unsicher ist der I²C-Bus eigentlich garnicht:
- nicht zeitkritisch, da synchron
- Fehlertolerantes Protokoll (start,stop,acknowledge)

Mit Deinen Sensoren kann ich Dir leider nicht weiterhelfen. Lassen die 
sich evtl. per Bus anders adressieren (umprogrammieren)? So etwas habe 
ich auch schon gesehen. Die Adresse "0" ist eigentlich die "Broadcast" 
-Adresse.

von thkaiser (Gast)


Lesenswert?

Nachtrag:

Hier die Nummer des Bus-Repeaters:

82B715 (auch vom Philips)

Laut Autor des Buchs "I²C-Bus angewandt" (ISBN 3-928051-71-7, 
Elektor-Verlag) konnten damit 100 m Leitung überbrückt werden. 
Allerdings wird keine Aussage zur Übertragungsrate gemacht.

von Georg (Gast)


Lesenswert?

hi,

super danke.

Die Geschwindigkeit ist mir egal. Da die Temperaturregelung sowieso 
ziemlich träge ist.

Im datenblatt von den Feuchtesensoren habe ich nichts gefungden was auf 
eine Adressänderung per Bus ermöglicht.

Werde mal weitersuchen.

Danke euch allen.

Georg

von Georg (Gast)


Lesenswert?

hi,


kennte einer von euch Adressmultiplexer?

Wurde mir heute mal vorgeschlagen einen Adressmultiplexer zu nehmen. Ich 
weis allerdings nicht was er genau macht und wo ich welche bekommmen 
kann.


Gruss und danke.

von thkaiser (Gast)


Lesenswert?

Adressmultiplexer kenne ich nur von parallelen Adressbussen. Bei I²C ist 
mir so etwas noch nicht untergekommen.
Was vorstellbar wäre: Einen Chip vor die Sensoren, der die Adresse 
umwandelt - Also die Anfrage nur dann an den entsprechenden Sensor 
weiterleitet, wenn er auch angesprochen werden soll.

von Olli B. (Gast)


Lesenswert?

Hi Georg,
unter http://www.philipslogic.com/products/i2cmuxes/
gibt's was zu I2C-MUXES und -SWITCHES!!!

von Georg (Gast)


Lesenswert?

hi,

das ist ja super. Genau dass ist die lösung. Ganau nach so was habe ich 
gesucht. Ein i2c bus switch.

Vielen dank. Jetzt ist mein Projet doch noch gerettet.

Ich dachte schon im muss einen anderen buss nehmen und wieder auf 
Sensorsuche gehen.

Vielen vielen dank. Jupiii.

Jetzt noch die letzten Prüfungen schreiben und dann kann mich nichts 
mehr aufhalten.

Gruss Georg.

von thkaiser (Gast)


Lesenswert?

Olli: Guter Tipp! Es gibt nix, was es nicht gibt.

von Felix Ruess (Gast)


Lesenswert?

Die Sensoren sind nicht zufällig diese SHT11?
Die gibs nämlich als kostenlose Muster und haben auch alle die gleiche 
(noch) unveränderbare Adresse 000:
http://www.sensirion.com/de/sensors/humidity/default.htm
Die sind zwar für einen 2-Draht Bus ausgelegt, aber nicht zu I2C 
kompatibel!
Ansonsten würde ich es wie vorgeschlagen machen und einfach z.B. noch 
einen tiny nehmen (die sind ja nicht teuer). Man kann ja auch mehrere an 
einen mc anschließen, man muss nur für jeden Sensor praktisch einen 
extra Bus machen und die dann einfach nacheinnander auslesen.

So long, Felix

von Georg (Gast)


Lesenswert?

Es sind die SHT11 Sensoren.

Was nicht kompatibel ist wird komatibel gemacht.

Aber ich denke dass müsste gehen.

Gruss.

von Georg (Gast)


Lesenswert?

hi,

Habe 2 von den Sensoren. Oder habt ihr ne andere idee luftfeuchte über 
den i2C Bus zu messen.

Georg.

von Georg (Gast)


Lesenswert?

Also,

ich habe das so vor.

Da der STH11 Start und Endbits etwas anders handeln. Kommt eine I2C 
Porterweiterung davor und der rest wird über den µC geregelt.

Sowas ähnliches hat da jemand schon gemacht:

http://www.emesystems.com/OL2sht1x.htm

Da es mir nicht auf die Geschwindigkeit sondern auf die Daten ankommt 
auch wenn diese nur jede minute abgefragt werden. Das reicht.

Na was meint ihr? Wird es so funzen oder nicht?

Ich denke schon.

Georg.

von Raplh Raudszus (Gast)


Lesenswert?

Hallo,

ich möchte den Uhrenbaustein PCF 8583 benutzen, hat zufällig jemand 
einen fertigen Treiber in Assembler dazu?

Zu den vorigen Beiträgen habe ich 8 Temperatursensoren Typ DS 1621 auf 
dem I2C Bus jedoch treten nach ca. 1 Stunde Laufzeit immer wieder Fehler 
auf diese werden durch die Programmroutine aufgefanngen. Zur Länge die 8 
Sensoren sind an Telefonkabel 8 x 0,6 mm auf ca. 5 Meter angeschlossen.
Zur Porterweiterung kann der PCF 8574 genutz werden. Achtung Lowaktiver 
Ausgang an dem LEDs direkt angeschlossen werden können (30 mA 
Ausgangsstrom). Es gibt den PCF 8574 und PCF 8574 A somit hat man an 
einem Bus 128 Ein- bzw. Ausgänge verwalten.
Bei wem gibt es den oben erwähnten Feuchtigkeitssensor zu erwerben?

von Georg (Gast)


Lesenswert?

hi,

bei www.sensirion.com

kostet ca 15.$ ist ne schweizer firma.

Da kriegst du auch 1 als musterstück.

Danke für die Tips.

von bäri (Gast)


Lesenswert?

Hi,

hätte mir jemand nen Assembler Quell Code für den SHT11 für µVision von 
Keil!?

Sind nämlich grad am rumprbieren und bekommen den Sensor nicht zum 
laufen, er sendet uns einfach kein ACK!

mfg
bäri

von thkaiser (Gast)


Lesenswert?

- ist SDA auf Eingang, wenn das ACK-Bit abgefragt wird?
 - ist die Adresse richtig?
 - stimmt das Datenrichtungs-Bit?
 - Start-Kondition richtig gesendet? (Oszilloskop hilfreich)
 - Pull-Ups an SDA/SCL?

von bäri (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

also im Anhang unser Assembler Quellcode für µVision von Keil!
(ist en Bissel aufgebläht, sind auch noch andere I2C Unterprogramme 
drinnen....!)


Haben nur an der SDA Leitung en Pull Up von 2k dran gehabt, laut 
Blockschaltbild vom SHT11 reicht das.. Brauchen wir für beide Leitungen 
einen Pullup!?!? Wenn ja, mit wieviel kOhm sollen wir diese gegen die 
Versorgungsspannung schalten!?!?

Die Adresse steht auf 000, müsste also schon stimmen!

kannst du evt einen fehler in unserem programm finden!?!?

lg
bäri

von Olli B. (Gast)


Lesenswert?

Hi bäri, versuchs mal mit 'nem "clr SCL" vor dem Return
in der Routine "wait_bus_start"!

von Olli B. (Gast)


Angehängte Dateien:

Lesenswert?

Hab grad bei Sensirion ein vollständiges C-File für die
SHTxx-Sensoren gefunden!

von bäri (Gast)


Lesenswert?

Also der wait_bus_start den Führt er ja noch komplett aus, habe ja extra 
mit SENDADEZ immer nach jedem aufruf eines Unterprogramms einen Wert 
ausgeben lassen, also über V24, aber beim wait_ack da bleibt er eben 
hängen .. :-(
werde es trotzdem mal versuchen!

Den C Code habe ich auch schon gesehen, aber leider läuft der net mit 
der alten µVision version, oder liege ich da falsch!?

lg
bäri

von Olli B. (Gast)


Angehängte Dateien:

Lesenswert?

Hi bäri, das überarbeitete Programm ist im Anhang und sollte jetzt 
laufen.
Konnte nur die Ausgabe über V24 nicht testen.
1. SCL auf Low ist für die Transmission Start Bedingung erforderlich
2. Nach der Befehlssequenz musst du auf das Ende der ADU warten
3. Wenn die CRC nicht benötigt wird, muss das letzte übertragene Byte 
mit ACK=High bestätigt werden

von bäri (Gast)


Lesenswert?

hi Olli,
vielen Dank für deine Bemühungen, das Programm läuft jetzt!
Habe aber noch ein paar kleine schwierigkeiten, und zwar hängt sich das 
Programm nach ein paar durchläufen auf, manchmal sind es 10, aber es war 
auch schon nach einem!

Muss man nach jedem durchlauf einen Soft Reset auslösen!?

Und dann habe ich noch das Problem, wie ich die Werte umrechne! Also ich 
habe jetzt ja 2 x 8Bit Werte vom SHT11 bekommen, einmal das MSB und 
einmal das LSB, wie bekomme ich jetzt die aus den 2x8Bit werten die 14 
Bit herraus!?
Kann ich einfach die Dezimalwerte von dem MSB und LSB zusammen zählen 
und dann mit der Formel für z.B. die Temperatur (steht ja im Datenblatt) 
die Temp. ausrechnen!?!?

Danke schon mal im voraus...

lg
bäri

von Olli B. (Gast)


Lesenswert?

>und zwar hängt sich das Programm nach ein paar durchläufen auf<
Versuchs mal mit einer gewissen Zeitverzögerung nach jedem Durchlauf

>Muss man nach jedem durchlauf einen Soft Reset auslösen!?<
Ist nicht notwendig

>wie bekomme ich jetzt die aus den 2x8Bit werten die 14 Bit herraus!?<
MSB * 256 + LSB und dann in die Formel einsetzen, z.B.:
MSB=0x1Eh=30dez, LSB=0x75h=117dez
T=(30*256+117)*0.01-40=37.97°C

von bäri (Gast)


Lesenswert?

Hallo Olli,
nochmals vielen vielen Dank für deine Hilfe, funktioniert jetzt alles 
bestens, leider nur wenn ich den SHT11 direkt am µC angeschlossen 
habe...!
Wenn ich ein Kabel, ca. 3m zwischen den Controller und dem Sensor 
verwende, dann geht es leider nicht mehr, bekomme dann immer nur 255 255 
als MSB/LSB vom Sensor!
Die Versorgungsspannung beträgt auch am Ende der Leitung noch ca. 5V, an 
dem kann es also nicht liegen!

evt. weißt du ja auch hier weiter!

liebe grüße
bäri

von Olli B. (Gast)


Lesenswert?

Hi bäri,
die Überbrückung größerer Entfernungen kannst du beim I²C-Bus eigentl. 
nur mit
entsprechenden Treibern realisieren, z.B.:
P82B715 I²C-Bus Extender
PCA9515 I²C-Bus Repeater
Mit dem SHT11 habe ich (durch die Verringerung des Pull-Ups an SDA auf 
1k) aber
auch schon Messwerte über ca. 2m Flachbandkabel übertragen.

von drehud (Gast)


Lesenswert?

Dein Beitrag ist schon eine Tage alt. Kannst Du mir das Ergebnis 
mitteilen.
Ich möchte meine Orchideenvitrine mit c-control regeln und finde keine 
passenden Feuchtesensoren. I2C kann c-control ja auch.

danke im Voraus

von Berufskollegschüler (Gast)


Lesenswert?

Mein Gott...
Wie kann man so scheiße sein und den dreck tatsache hobbymäßig machen??!

wir müssen den siff inner schule machen und es is zum kotzen...

ihr seid so arm!
musste mal gesagt werden

mfg xD

von Duden (Gast)


Lesenswert?

geh weg und mach BWL.

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
Noch kein Account? Hier anmelden.