mikrocontroller.net

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


Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
PCF 8574 oder PCF 8574A

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Olli B. (Gast)
Datum:

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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: thkaiser (Gast)
Datum:

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

Autor: Felix Ruess (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es sind die SHT11 Sensoren.

Was nicht kompatibel ist wird komatibel gemacht.

Aber ich denke dass müsste gehen.

Gruss.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi,

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

Georg.

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Raplh Raudszus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Georg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: bäri (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: thkaiser (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: bäri (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Olli B. (Gast)
Datum:

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

Autor: Olli B. (Gast)
Datum:
Angehängte Dateien:

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

Autor: bäri (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olli B. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: bäri (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olli B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bäri (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olli B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: drehud (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Berufskollegschüler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Duden (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
geh weg und mach BWL.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.