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.
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.
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.
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.
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.
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
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.
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.
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.
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
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.
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?
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
- 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?
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
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
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
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
>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
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
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.
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
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