Kann man echte I2C-Sensoren an den EV3 anschließen?
- Das I2C-Protokoll läuft wie im Bild "I2C-Protokoll" ab.
- LEGO's US-Sensor stellt sich jedoch wie im Bild Startsequenz bzw. Zyklus dar.
Nun stell ich mir die Frage, warum alle beim NXT/EV3 vom I2C-Protokoll sprechen? Auch ist die Übertragungsgeschwindigkeit von 58 Baud nicht geeignet für 1000 Messwerte / Sekunde. Das aber verspricht LEGO selbst. Ein Zyklus benötigt 0,1 Sekunde. Das ist ganz sicher keine SCL-Leitung. Gibt es vielleicht nur eine "ein Draht Verbindung" also nur SDA? Warum aber werden von LEGO in ihren eigenen Schaltplänen die Leitungen am Controller für SDA und SCL verwendet?
Viel zu viele Fragen.
Also jetzt mal von Anfang an. Ich habe inzwischen an vielen Stellen gelesen, das der EV3 Sensoren über das I2C-Protokoll einlesen kann. Nun wollte ich "meinen" Kindern aus dem Jugendzentrum der Gruppe "LEGO-Robotik" zeigen, dass man auch eigene Sensoren herstellen und anschließen kann. So versuchte ich den mir bekannten und bereits an anderer Stelle erfolgreich eingesetzten DS1721 (Temperatursensor) an den EV3 anzuschließen und auszulesen. Nach einigen Fehlschlägen habe ich die oben erwähnten Messungen vorgenommen und stehe jetzt vor mehr Fragen als Antworten.
- Kann mir jemand helfen?
- Wie kann ich ohne fremde Hardware/Schnittstellen von Drittanbietern z.B. den DS1721 an den EV3 anschließen?
- Hat jemand über das serielle Protokoll bereits einen Sensor im Eigenbau erfolgreich zum laufen bekommen? Und wenn ja, wie?
- Ist es richtig, dass man für das serielle Protokoll von LEGO PIN1 u. PIN3 brücken muss, damit der EV3 das Protokoll nutzt? Alle Sensoren mit dem LEGO-I2C-Protokoll haben diese Brücke. (Analoge Sensoren benötigen eine Brücke von PIN2 u. PIN3. Erfolgreich getestet.)
Schon einmal vielen Dank für jede Antwort. Für hilfreiche Antworten noch mehr Dank. Für Lösungen zusätzlich eine liebevolle Umarmung. :-)
citkid



3 Antworten
Hallo
gerade eingestellt und schon selbst eine Antwort auf eine meiner Fragen gefunden.
Der LEGO-Color-Sensor verwendet den STM8S103F3. Die Übertragung läuft dabei nicht über die SCL/SDA-Leitungen, die sind nicht einmal bestückt, sondern über UART1 RX/TX. Darüber läuft laut Datenblatt wohl eher das LIN-Protokoll. Dieses Protokoll ist ein One-Wire-Protokoll. Damit ist Zyklus falsch, die untere "Kurve" im Oszillogramm nicht zu verwenden. Die SCL-Leitung wird für die Übertragung möglicher weise nicht benötigt.
Es lässt sich also kein Sensor an den NXT/EV3 mit I2C-Protokoll übertragen.
Es bleibt die Frage wie man mit 58 Baud 1000 Messwerte / Sekunde hinbekommt? Bei 1000 Messwerten und 8 Bit-Daten sowie Start und Stop benötigt man 1000 Werte * 10 Bit = 10000 Baud. Entspricht 1 / 1000 Baud = 0,0001 Sek. (100nS) für ein Bit. - Hier habe ich mich vertan. Siehe Bild: ( 5 * 0,1mS ) / 15 Bit = 30000 Baud und damit 3 mal so schnell wie mindestens erforderlich.
Frage 3 u. 4 bleibt somit noch offen. Bei Frage 3 ist es wohl eher, welcher Sensor ist hierfür geeignet?
citkid

Deine Aufgabe sollte mit der erweiterten LEGO Education Software funktionieren. Ich könnte ein paar Sachen darüber schreiben allerdings sind die wahren Spezialisten im Spezialforum aktiv:
Außerdem gibt es einige UNIs, die speziell mit LEGO Sensoren I2C experimentieren allerdings dann auch mit alternativen Programmiersprachen.
Hallo
Ich werde hier noch einmal mir selbst antworten um meine Ergebnisse zum Thema zusammenzufassen.
- Der Ev3 kann mit dem I2C-Protokoll arbeiten.
- Der Sensor, der über das I2C-Protokoll angeschlossen ist, wird vom EV3 in der Regel im Abstand von 100 Millisekunden bei 4000 Baud abgefragt (10 mal je Sekunde im 1/4 Millisekunden-Takt). Das gilt aber nur für LEGO-Sensoren.
- LEGO hat klare Vorstellungen davon, dass bestimmte Informationen an vorbestimmten Adressen vorliegen.
- Das I2C-Protokoll kann für "unverarbeiteter Sensorwert" (nur LEGO-Sensoren), Small-Basic (Sensoren die ausschließlich über Register), oder eine andere Programmiersprache, die auch Befehle verarbeiten kann (alle I2C-Slaves = Sensoren und anderes), verwendet werden. Die Abfragegeschwindigkeit ist hier vom Programm abhängig.
- Für das I2C-Protokoll benötigt der EV3 die bereits bekannten 82kOhm-Widerstände am SDA- und SCL-Anschluss. Der Sensor wird mit 5V versorgt, aber mit 3,3V-Pegeln an den Anschlüssen betrieben.
- LEGO verwendet beim EV3 den Analogzugang, bzw. das LIN-Protokoll. Hier fragt der EV3 nach Aussage von LEGO, im Abstand von einer Millisekunde bei 30000 Baud ab (1000 mal je Sekunde).
Ich hoffe hiermit alle Fragen beantwortet zu haben, die jemand benötigt der auch einmal das I2C-Protokoll anwenden möchte.
Liebe Grüße an alle Bastler - citkid