Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi Klimacontroller Mycodo


von Jannik H. (hexxar)



Lesenswert?

Hallo,

ich baue mir gerade einen KlimaController für meine Edelpilzzucht.

Nun habe ich ein Problem. Und zwar Funktioniert alles soweit ganz gut. 
Der Raspberry liest die Daten des HTU21 wie erwartet. Allerdings nur 
wenn der 16x2 Lcd Display aus ist. Wenn der besagte Display an ist 
produziert der Sensor den "remote i/o error erno 121". Ich weiß der I2C 
Bus ist für kurze Distanzen und nicht für 2m Kabellänge geeignet. 
Allerdings würde ich gerne verstehen was genau den Error auslöst!? Liegt 
es überhaupt am langen Kabel ?

Im meinem Fritzing Sketch ist der TCA98 mit 5,5V angeschlossen. 3,3v 
funktioniert leider garnicht.

Mag mir da jemand erfahrenes bei Helfen ?


Mit Freundlichen Grüßen

von Oliver S. (phetty)


Lesenswert?

Der Rasperry langweilt sich mit der Aufgabe doch zu Tode.
Nimm doch einen einfachen/besseren Mikrocontroller.

von Jannik H. (hexxar)


Lesenswert?

Ja Da gebe ich dir Recht. Allerdings habe ich den hier noch liegen und 
zweitens basiert die Software "Mycodo" auf ihm.

von MockUp (Gast)


Lesenswert?

Naja du könntest ja beim auslesen oder der Kommunikation (Dazu hast du 
ja nichts weiter geschrieben) beim TCA9548A wenn der Sensor ausgelesen 
wird das Display vom Bus trennen und danach wieder zuschalten.

Weiterhin nutzt I2C normalerweise passive Widerstände um den High Pegel 
zu erreichen.
Wenn die zu klein gewählt sind, kommt der High Pegel bedingt durch die 
Kabelkapazitäten nicht mehr schnell genug zustande und das Signal ist 
verschliffen. Das kann man mit einem Oszilloskope sich anschauen und 
kontrollieren.
Gehe ich aber recht in der Annahme, dass du keins hast und auch 
niemanden kennst der eins hat?

Eine weitere Möglichkeit ist es, die I2C Geschwindigkeit herabzusetzen.

* Also erstmal kontrollieren wie groß die Pull-Up Widerstände an SCL und 
SDA am I2C Kanal sind. Die sitzen endweder auf der 
Sensor-/Displayplatine oder dem TCA9548A-Board. Du kannst als Test 
einfach einen anderen Parallelschalten um den gewünschten Widerstand zu 
erreichen. In einem Produkt bei mir ohne 2m Kabel bin ich schon bei max 
2KOhm. Mit dem Kabel sollte man das weiter reduzieren. Aus dem Bauch 
heraus würde ich 1KOhm testen.
* Eventuell die I2C Geschwindigkeit auf 100KHz absenken und testen. Im 
Fast-Modus sind es normalerweise 400KHz.

Gruß
John-Eric

von MockUp (Gast)


Lesenswert?

"Wenn die zu klein gewählt sind..." das sollte "zu groß" heißen und ist 
da falsch.

von Zeno (Gast)


Lesenswert?

Oliver S. schrieb:
> Der Rasperry langweilt sich mit der Aufgabe doch zu Tode.
> Nimm doch einen einfachen/besseren Mikrocontroller.
Frage des TO perfekt beantwortet. Es ist doch völlig egal ob sich der 
RasPi mit dieser Aufgabe langweilt oder nicht. Wenn's bei dem bleibt was 
der TO hier aufgezeigt hat, dann wird sich jeder µC mehr als langweilen.
Einfach mal die Griffeln still halten, wenn man zum eigentlichen Thema 
nix zu sagen hat.

@TO
Der TCA9548 sollte auch mit 3,3V problemlos laufen - er ist von 1,65V 
bis 5,5V spezifiziert.
Was bei dem von Dir verwendeten Baustein allerdingszu beachten ist, ist 
das die Ausgangangskanäle keine Pullupwiderstände haben, d.h. Du mußt 
für jede anzuschließende Baugruppe Pullup's vorsehen. Bei Dinem Sensor 
scheinen ja welche da zu sein. Wie sieht es denn bei der Anzeige aus?

Wie hast Du die Adresseingänge des TCA9548 beschaltet? Wenn kein 
Adresspin beschaltet ist, dann wird der Baustein mit 0x70 angesprochen.

Der Rest ist eigentlich Software. Das Ganze läuft im Wesentlichen so ab:
1. TCA ansprechen
2. aktiven Kanal des TCA wählen
3. Kommunikation mit dem Kanal angeschlossenen Baustein
4. Am Ende aktiven Kanal schließen
5. dto. mit weiteren Bausteinen

Eine ganz gute Beschreibung wie so etwas abläuft ist hier 
https://wolles-elektronikkiste.de/tca9548a-i2c-multiplexer zu finden.
Ist allerdings für den Arduino, aber das Prinzip läßt sich auch auf den 
RasPi übertragen, man muß nur die Funktionsweise verstehen.
Ansonsten studiere das Dabla des TCA.

von Zeno (Gast)


Lesenswert?

MockUp schrieb:
> Eine weitere Möglichkeit ist es, die I2C Geschwindigkeit herabzusetzen.
Nein das ist nicht erforderlich.
Wichtig ist eigentlich nur das für jeden an den TCA angeschlossenen 
Baustein Pullup's vorgesehen werden. Der Rest ist schlichtweg SW. Wie 
hierbei der Ablauf ist hatte ich im letzten Post beschrieben bzw. auch 
ein Beispiel verlinkt wo man sich das anschauen kann.
Da das Beispiel für den Arduino ist muß man sich für den RasPi selbst 
Gedanken machen oder eben eine für den RasPi passende Lib benutzen. Dann 
braucht es eigentlich nur das Dabla des TCA und der angeschlossenen 
Module, damit man sich seine Befehlssequenzen zusammen bauen kann.

Ja das ist mühsam und Weg kann recht steinig sein, aber es lohnt sich. 
Ich habe so etwas für den DS8224-800 (i2c >> 8x 1-Wire) gemacht, da 
läuft das so ähnlich. Da ich das nicht jeden Tag mache habe ich auch ne 
Weile gebraucht, da muß man sich halt durch beißen.

von Jannik H. (hexxar)



Lesenswert?

Also ersteinmal vielen Lieben dank für 99,9% konstruktive Antworten ;)

Das der TCA am "Ausgang" keine Pullups wusste ich schon. Ich dachte aber 
der Pullup im HTU21 würde reichen. Der Display wird mit einem HW-061 
betrieben wofür ich leider kein für mich verständliches Schema gefunden 
habe und somit nicht weiß ob er Pullups besitzt.

Der TCA läuft wie in dem Schema zu sehen mit 0x70 Adresse.

Ich habe nun von dem LTC4311 gelesen der das Signal verstärkt und I2C 
somit ermöglicht über längere Distanzen zu kommunizieren. Diesen habe 
ich mir mal bestellt und teste ihn. Was denkt ihr? Müsste ich dann den 
Pullup vom HTU21 entfernen?

: Bearbeitet durch User
von Zeno (Gast)


Lesenswert?

Jannik H. schrieb:
> Ich habe nun von dem LTC4311 gelesen der das Signal verstärkt und I2C
> somit ermöglicht über längere Distanzen zu kommunizieren.

Wozu soll das gut sein? i2c kommt auch mit den 2m Draht zurecht. Du 
kannst ja mal zum Testen an Stelle der 2m Leitung eine kurze nehmen, so 
wie zu Deinem Display.
Ich bin mir ziemlich sicher das da ein SW-Problem ist.

Ich hoffe das Dir klar ist das Du auch das Display über eine vorher zu 
sendente Adresse ansprechen mußt.

Bei dem SHT15 wird die normale Kommunikation via i2c nicht 
funktionieren. Lt. Datenblatt (S.5) unterstützt dieser Sensor nicht das 
i2c Protokoll, zumindest nicht die Adressierung. Im Datenblatt steht: 
"The sensor cannot be addressed by I2C protocol; however, the sensor can 
be connected to an I2C bus without interference with other devices 
connected to the bus. The controller must switch between the protocols."

von Wolfgang (Gast)


Lesenswert?

Jannik H. schrieb:
> Im meinem Fritzing Sketch ...

Zeig doch dazu mal einen Schaltplan, der diese Bezeichnung verdient.
Wer soll sich denn durch den Fritzing "Stecken-nach-Farben"-Kram 
durchhangeln?

von Jannik H. (hexxar)


Lesenswert?

Zeno schrieb:
> Jannik H. schrieb:
>> Ich habe nun von dem LTC4311 gelesen der das Signal verstärkt und I2C
>> somit ermöglicht über längere Distanzen zu kommunizieren.
>
> Wozu soll das gut sein? i2c kommt auch mit den 2m Draht zurecht. Du
> kannst ja mal zum Testen an Stelle der 2m Leitung eine kurze nehmen, so
> wie zu Deinem Display.
> Ich bin mir ziemlich sicher das da ein SW-Problem ist.
>
> Ich hoffe das Dir klar ist das Du auch das Display über eine vorher zu
> sendente Adresse ansprechen mußt.
>
> Bei dem SHT15 wird die normale Kommunikation via i2c nicht
> funktionieren. Lt. Datenblatt (S.5) unterstützt dieser Sensor nicht das
> i2c Protokoll, zumindest nicht die Adressierung. Im Datenblatt steht:
> "The sensor cannot be addressed by I2C protocol; however, the sensor can
> be connected to an I2C bus without interference with other devices
> connected to the bus. The controller must switch between the protocols."

Ich denke schon über längere Leitungen nach. Aber mein "Problem" ist 
gelöst. Bei dem HTU21D muss der Pullup erst verlötet werden.... Stand 
bei dem Shop nicht dabei...

Ich danke euch für eure Unterstützung wieder eine Menge gelernt. Ich 
wünsche euch alles Gute in dieser seltsamen Zeit.

Wir lesen sicher nochmal voneinander.

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.