Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Atmel, PIC, VEX, Fischertechnik

Moderator: Moderatoren

tito
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 13. Okt 2011 11:56

Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon tito » 3. Apr 2015 09:58

hallo,
ich bin zufällig auf diesen Link gestoßen:

https://rostrich.wordpress.com/2010/05/ ... ng-rs-485/

hier wird ein Mini-Arduino für 3-4 EUR per UART (RS485-RS232) mit einem NXT verwendet.
Eine Möglichkeit, I2C für die Bricks zu verwenden, wurde ja bereits von HaWe vorgestellt
Meine Idee:
Da die Mini-Arduinos nur 1 UART und nur 1 I2C Port besitzen, könnte man aber doch jetzt den Arduino per I2C mit dem 2.Brick verbinden, und schon hätte man einen Host, der NXT und EV3 miteinander verbindet.
Ich würde es aber eventuell sogar andersherum lösen:

UART zum EV3, I2C zum NXT.

Ich habe beide Varianten noch nicht ausprobiert, Hawes I2C zu NXT wäre aber doch schon einmal fertig (oder?), nur UART zum EV3 würde noch fehlen:

Können hier die Spezialisten (Hawe mit NXC? cOpperdragon mit EV3Basic ?) so ein doppeltes Interface-Programm auf die Beine stellen?

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon c0pperdragon » 3. Apr 2015 14:09

Hi!

Der Gedanke, diese beiden Interfaces eines kleinen Arduino (UART für die EV3-Seite und I2C für die NXT-Seite) ist mir auch schon gekommen. Ich habe derzeit sogar einen Arduino Uno und einen Arduini Micro zum experimentieren. Wenn ich mich richtig erinnere, dann könnte man die I2C-Geschwindigkeit am NXT sogar relativ hoch raufdrehen und die UART-Geschwindigkeit am EV3 ist sowieso auch explizit für höhere Übertragungsraten konzipiert.
Klarerweise liegt der Teufel im Detail: Wenn man am EV3 die Standard-VM verwenden will (und das will für für EV3-Basic auf jeden Fall), dann kommt man nicht so direkt an den nackten UART ran. Die Firmware besteht darauf, dass das auch ein korrekter Sensor ist, bevor da irgendeine Kommunikation stattfinden darf. Einerseits ist die ganze automatische Konfiguration ja sehr praktisch, weil man da fast nichts mehr falsch machen kann, andererseits kann man nicht so einfach quer dazwischen reinfunken, wie man will. Beim I2C am EV3 gehts ja sogar, weil man da auch ohne Autokonfiguration selbst wildeste Kommandos rausschicken kann, beim UART muss man da raffinierter vorgehen. Ich glaube, man könnte den Arduino so programmieren, dass er sich als Lego-Kompatibler Sensor ausgibt damit er von der Firmware akzeptiert wird. Wenn die Verbindung dann da ist, gibt es sogar Befehle in der VM mit dem beliebige Binärdaten zumindest zum Sensor geschickt werden können. Die Daten vom Sensor runter müssten zwar immer noch irgendwie einem Messwerte-Format entsprechen, aber da könnte man schon seine Nutzdaten reinpacken.
Also: Man müsste vor allem mal rausbekommen, wie der Sensor korrekt mit dem EV3 zu sprechen hat. Da habe ich aber bisher außer ein paar allgemeinen Formulierungen nicht viel gefunden. Vielleicht muss man die Info von Lego bestellen, schließlich müssen das alle Sensor-Hersteller auch irgendwie erfahren haben.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon HaWe » 3. Apr 2015 14:28

hallo,
i2c geht mit der NXC-EFW wegen Bitbang nur mit wenig mehr als mit 9.6k, mit Java und nxtOSEK geht es deutlich schneller (an die 110k).
Auch die Bandbreite ist größer (64 bytes wenn ich mich recht erinnere, statt 14).

leider programmiere ich selber den NXT ausschließlich in NXC, also bleibt für mich nur die lahmere Variante.

Der Mega hat allerdings 2 UART und 1 I2C,
der Due sogar 2 UART plus 2 I2C.

Aber:
NXT-RS485-UART geht bis rund 400 kHz, und EV3-RS232-UART ebenfalls. da ist also deutlich mehr drin. Aber UART ist für mich leider komplett noch ein Buch mit 7 Siegeln... ;)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon c0pperdragon » 3. Apr 2015 15:16

Ich kenne mich mit dem Zeug auch überhaupt nicht aus. Wusste bislang gar nicht, dass der NXT überhaupt irgendeinen UART für die Sensor-Ports verwendet. Wenn das nämlich wirklich so wäre, dann könnte man ja echt vielleicht sogar eine noch wesentlich elegantere Lösung als das mit dem Arduino bauen. Nämlich wie oben erwähnt direkt die UARTs koppeln. Wenn man am NXT da (vorzugsweise über NXC) schon tief in die Steuerung reinkommt, dann könnte man dem EV3 direkt einen Sensor vorpielen mit dem entsprechend kommunizieren kann. Aber wie man das genau hinkriegen kann, ist natürlich noch sehr fraglich.
Ist so ein oben erwähnter Pegelwandler echt nötig? Die Interface-Bauteile sind doch normalerweise sehr tolerant.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon HaWe » 3. Apr 2015 15:49

nein, direkt geht auf keinen Fall!
ich las mal der NXT hat 20V (!) UART Signal Levels (FB Gruppe?), der EV3 nur 3,3 - der wird damit gebraten. Aber mit Levelshifter dazwischen und einem MAX485 geht es bestimmt!
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon c0pperdragon » 3. Apr 2015 16:24

Ich habe mir jetzt mal das elektronische Schema vom NXT runtergeladen, und der Interfacebaustein, der für den UART (nur auf Port4) zuständig ist, hängt eigentlich nur auf einer 5V - Versorgung. Glaube nicht, dass der mit höheren Spannungen rausfunkt. Intern gibt es einen Level-Shifter, weil die ARM-CPU nur 3.3V fährt, aber das interessiert mich für das Signal außen ja nicht.
Es hat auch den Anschein, als ob die Enhanced Firmware Zugriff darauf bietet, in welchem Modus dieser Interfacebaustein läuft, und er könnte vielleicht sogar ein ganz normales RS-232-Signal erzeugen (anstatt dieses Half-Duplex-RS485-Signals über Twisted-Pairs). Wenn das ginge, wär es echt fein - und das müsste ich mir echt mal ansehen. Habe mir ja jetzt schon so schöne Breadboard-Adapterkabel gebastelt...

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon HaWe » 3. Apr 2015 17:42

ps, ich glaube, das mit den 20V war Quatsch. sind wschl max. 5V. Aber ein Levelshifter muss dann trotzdem dazwischen, der EV3 verträgt keine 5 V auf Signalleitungen, und für den NXT sind 3.3 wschl zu wenig.
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon c0pperdragon » 3. Apr 2015 18:18

Genau weiß ich es auch nicht wie das mit den Signalpegeln aussieht. Muss ich echt mal durchmessen...

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon HaWe » 3. Apr 2015 18:30

habe gerade von David Lechner das Datenblatt vom RS485 Chip bekommen :)

5V stimmt!

http://www.premier-electric.com/files/STM/pdf/ST485.pdf
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

tito
Schreibt ab und zu
Schreibt ab und zu
Beiträge: 41
Registriert: 13. Okt 2011 11:56

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon tito » 3. Apr 2015 19:01

klingt alles ein wenig komplizierter als es auf den 1. Blick den Anschein hatte :?

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon c0pperdragon » 4. Apr 2015 07:03

Mit diesem Differenzsignal kann man eahrscheinlich so ziemlich auf Pegelwandler verzichten, allerdings gibt es da wahrscheinlich wirklich nur Halfduplex-Kommunikation. Wenn man das direkt an den EV3 stecken will, muss man irgendwie dafür sorgen, dass immer nur einer gleichzeitig sendet. Vielleicht gehts, wenn der NXT ausschließlich auf explizite Anfragen antwortet. Möglicherweise wäre das Protokoll vom EV3 damit irgendwie vereinbar.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5399
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon HaWe » 4. Apr 2015 11:43

Viele arbeiten aber hier mit dem MAXIM MAX485 (s. auch tito's Link ganz oben im TOP !)
Matthew Richardson (ehemals "mattallen37" im Mindboards-Forum) arbeitet schon ewig mit UART und schrieb bei FB, dass die MAX485-Level auch bei 5V mit dem EV3 verträglich wären, wenn ich es richtig verstanden habe.

Ich habe die Bilder aus Titos Post mal hier verlinkt:

Bild

Bild

Aber ich versteh davon nichts, ich bin da raus ;)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Benutzeravatar
c0pperdragon
Schreibt viel
Schreibt viel
Beiträge: 231
Registriert: 9. Feb 2015 00:29

Re: Arduino-I2C+UART-Host: NXT <-> Arduino <-> EV3 ?

Beitragvon c0pperdragon » 6. Apr 2015 11:18

Hi!

Habe jetzt länger wegen dem RS485-Interface herumgegrübelt. Irgendwie ist das schon was arg spezielles und passt weder mi den Signalpegeln, noch mit der ganzen restlichen Ansteuerung mit einem "normalen" UART zusammen. Vor allem dieses ganzen Probleme mit dem Halb-Duplex haut einem jede einfache Lösung zusammen. Im obigen Schaltungsaufbau muss der Arduino dafür ja auch die nötigen Steuerleitungen für den MAX485 bedienen, und das ganze Protokoll muss total darauf abgestimmt werden, dass immer nur einer gleichzeitig senden darf.

So schön eine direkte bidirektionale Verbindung von EV3 zu NXT auch wäre, ich glaube nicht mehr, dass das wirklich geht.

Die obige Arduino-Lösung (mit MAX485) ist wahrscheinlich noch am einfachsten. Zum EV3 ginge dann eine I2C-Verbindung. Die kann man recht einfach ansteuern. Bei der Standardfirmware am EV3 sind die UARTs eigentlich nur für den Betrieb von Sensoren ausgelegt und eine andere Verwendung kriegt man da eher schwer rein.


Zurück zu „allgemeine / Nicht-Lego-Robotik und Elektronik“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss