Arduino I2C

yogi149

#1 Arduino I2C

Beitrag von yogi149 »

Hi

ich mal wieder. :roll:
Für mein Homecockpit Projekt möchte ich die Tasten vom Cyclic-Stick über einen Arduino Nano und I2C Bus an das größere Zentral Mega2560 anbinden.
Auch sollen nachher die mechanischen Einzelinstrumente jeweils über I2C dran gehängt werden.
Also möchte ich schon mal die Möglichkeiten für den Bus sammeln.

Gewünschte Funktionalität:

Tastenfeld über Bus anbinden

und

Instrumente über Bus mit den Werten versorgen und autonom z.B. die Stepper für die Zeiger fahren. Incl. Nullstellung über eine kleine Reflexlichtschranke.

Erste Quelle wäre z.B. das hier: Wire

Tipps und Programmschnipsel wären dann hier gerne gesehen. :bounce:
Benutzeravatar
Husi
Beiträge: 2808
Registriert: 19.03.2007 20:06:17
Wohnort: Darmstadt
Kontaktdaten:

#2 Re: Arduino I2C

Beitrag von Husi »

Moin Jürgen,
yogi149 hat geschrieben:... über einen Arduino Nano und I2C Bus an das größere Zentral Mega2560 anbinden.
Auch sollen nachher die mechanischen Einzelinstrumente jeweils über I2C dran gehängt werden.
In ca. 2 Wochen habe ich ein sehr ähnliches Thema auf dem Tisch. Dabei möchte ich externe Sensoren evtl. sogar eine SD-Karte via I2C an meinen Arduino anbinden. Zuerst muß ich jedoch die Stromversorgung mittels externem Netzteil erstellen, ein Arduino Montagebrett herstellen etc.

Viele Grüße
Mirko
Bild Bild Bild Bild
Benutzeravatar
the-fallen
Beiträge: 1976
Registriert: 07.03.2011 14:20:47
Wohnort: zwischen Augsburg und Landsberg a.L.

#3 Re: Arduino I2C

Beitrag von the-fallen »

Hast du denn schon was Genaueres wo man ansetzen kann mit den Tipps?
Ansonsten fällt mir zu dem was du gepostet hast nichts ein, denn i2c ist für vieles gut geeignet. Wenn man das Allgemeine Problem mit der Kabellänge beachtet gibts so eigentlich keine Probleme zu erwarten.

Der Bus lässt sich bei gemeinsamer Spannungsversorgung prima auf einen Draht reduzieren :-)
  • Prôtos FBL -stretched- a un motor 5+4D 1.13mm 14P de torro [V-Stabi]|[V-Gov] | [YGE90LV] | [UweG-Taumelscheibe] | [ZyclicMod]
  • SuziJanis 700 UltraLight 3570g Abfluggewicht
  • Besessen: T-Rex 250SE, T-Rex 450L, T-Rex600EFL, TDR, Blade mSRX
  • nur Gebaut und eingeflogen: Blade700, Goblin500, TRex150 RKH, Blade 130X RKH, Vibe90
  • Heizkoffersteuerung "HeatBox"

[" 99 little bugs in the code | 99 little bugs in the code | Take one down, patch it around | 117 little bugs in the code "] - Alex Shchepetilnikov
yogi149

#4 Re: Arduino I2C

Beitrag von yogi149 »

Moin,

so richtig habe ich mich damit noch nicht beschäftigt, sind bis jetzt noch "nur Ideen" um eben die Instrumente fürs Cockpit dezentral und autonom zu realisieren.

Z.B. das war mir jetzt noch nicht bekannt :oops:
the-fallen hat geschrieben:das Allgemeine Problem mit der Kabellänge beachtet
Welche Einschränkungen gibt es denn da?
Oder ist die Länge von der Kabelbeschaffenheit abhängig, so wie geschirmt oder ungeschirmt?

Zum Grundsätzlichen von I2C: wieviele Teilnehmer dürfen denn im Bus überhaupt mitfahren?
Benutzeravatar
the-fallen
Beiträge: 1976
Registriert: 07.03.2011 14:20:47
Wohnort: zwischen Augsburg und Landsberg a.L.

#5 Re: Arduino I2C

Beitrag von the-fallen »

Die Länge beschränkt sich auf wenige Meter. Einen genauen Wert gibt es nicht. Das Problem liegt (nebst dem Innenwiderstand der Leitung) in der Kapazitiven Wirkung langer Leitungen. Ein HIGH Wert erreicht dann eventuell nicht schnell genug den LOW Wert so dass das Signal am anderen Ende unverständlich wird. Abhilfe schafft ggf ein PullDown Widerstand (Probieren, zwischen 10kOhm und 1kOhm) und die Reduktion der Geschwindigkeit.

Abschirmung nach Aussen ist natürlich ebenso von Bedeutung bei langen Leitungen. Da i2c aber nur eine Signalleitung hat muss man nicht noch die einzelnen Adern schirmen.

Für die Adressierung sind 7Bit verfügbar. Es passen also 112 Slaves in einen Bus. Das Achte Bit in dem Byte beschreibt den BusMaster. Sollte also reichen.
  • Prôtos FBL -stretched- a un motor 5+4D 1.13mm 14P de torro [V-Stabi]|[V-Gov] | [YGE90LV] | [UweG-Taumelscheibe] | [ZyclicMod]
  • SuziJanis 700 UltraLight 3570g Abfluggewicht
  • Besessen: T-Rex 250SE, T-Rex 450L, T-Rex600EFL, TDR, Blade mSRX
  • nur Gebaut und eingeflogen: Blade700, Goblin500, TRex150 RKH, Blade 130X RKH, Vibe90
  • Heizkoffersteuerung "HeatBox"

[" 99 little bugs in the code | 99 little bugs in the code | Take one down, patch it around | 117 little bugs in the code "] - Alex Shchepetilnikov
yogi149

#6 Re: Arduino I2C

Beitrag von yogi149 »

ok,

wenige Meter Gesamtbuslänge nehme ich dann mal an.
Gibt es irgendwo Einschränkungen oder Erfahrungen, was Sinnvoller ist: kurzer Bus und etwas längere Leitung zwischen Knoten oder etwas längerer Bus aber dafür den Teilnehmer direkt auf den Knoten?
I2C-Bus.PNG
I2C-Bus.PNG (4.55 KiB) 1505 mal betrachtet
Also eher einen Verteiler Knoten oder einen großen Ring durch das Cockpit?
Benutzeravatar
the-fallen
Beiträge: 1976
Registriert: 07.03.2011 14:20:47
Wohnort: zwischen Augsburg und Landsberg a.L.

#7 Re: Arduino I2C

Beitrag von the-fallen »

Ja, wenige Meter Gesamtlänge.
Bezüglich der Verknotung habe ich keine Erfahrung.

Es gibt aber Bus-Treiber ICs als Signalaufbereiter um die Länge zu erweitern und auch andere Chips die aus i2c irgendwas anderes mit höheren Spannungen macht und am anderen Ende wieder i2c (http://www.horter.de/i2c/i2c-extender/i ... der_1.html).

Wie viele Meter erwartest du denn als Bus-Länge? Wenn du ja "nur" Taster und Lämpchen ansteuern willst kann man ja auch die langsamste Übertragungsgeschwindigkeit wählen und mal testen wie viele Meter machbar sind.
  • Prôtos FBL -stretched- a un motor 5+4D 1.13mm 14P de torro [V-Stabi]|[V-Gov] | [YGE90LV] | [UweG-Taumelscheibe] | [ZyclicMod]
  • SuziJanis 700 UltraLight 3570g Abfluggewicht
  • Besessen: T-Rex 250SE, T-Rex 450L, T-Rex600EFL, TDR, Blade mSRX
  • nur Gebaut und eingeflogen: Blade700, Goblin500, TRex150 RKH, Blade 130X RKH, Vibe90
  • Heizkoffersteuerung "HeatBox"

[" 99 little bugs in the code | 99 little bugs in the code | Take one down, patch it around | 117 little bugs in the code "] - Alex Shchepetilnikov
yogi149

#8 Re: Arduino I2C

Beitrag von yogi149 »

Hi,

da "mein" EC-120 Cockpit ja eher klein ist, werde ich bei mir mit max. 5m Bus (incl. Knotenverbindern) hin kommen.
Aber es sollen ja nicht nur Taster und Lämpchen gesteuert werden.
Hauptsächlich sollen aber die Instrumente mit den darzustellenden Werten versorgt werden.
Wie schnell da die Daten fließen müssen könnte Thomas sagen, eine 3-fach Drehzahlanzeige hat er ja schon.
Benutzeravatar
the-fallen
Beiträge: 1976
Registriert: 07.03.2011 14:20:47
Wohnort: zwischen Augsburg und Landsberg a.L.

#9 Re: Arduino I2C

Beitrag von the-fallen »

Dann müsste man das einfach probieren. Ein Signalaufbereiter kann man ja immer dazwischen klemmen.

Bei der Ansteuerung der Displays käme es ja auch drauf an, ob nur der Wert über tragen wird und ein kleiner Mikroprozessor vor Ort die restliche Steuerung (also die Darstellung) übernimmt, oder ob du immer den gesamten Displayinhalt eines Grafikdisplays im 100ms-Intervall über tragen willst.
  • Prôtos FBL -stretched- a un motor 5+4D 1.13mm 14P de torro [V-Stabi]|[V-Gov] | [YGE90LV] | [UweG-Taumelscheibe] | [ZyclicMod]
  • SuziJanis 700 UltraLight 3570g Abfluggewicht
  • Besessen: T-Rex 250SE, T-Rex 450L, T-Rex600EFL, TDR, Blade mSRX
  • nur Gebaut und eingeflogen: Blade700, Goblin500, TRex150 RKH, Blade 130X RKH, Vibe90
  • Heizkoffersteuerung "HeatBox"

[" 99 little bugs in the code | 99 little bugs in the code | Take one down, patch it around | 117 little bugs in the code "] - Alex Shchepetilnikov
yogi149

#10 Re: Arduino I2C

Beitrag von yogi149 »

Hi,

nö, da geht es um mechanische Instrumente. 8)


Die Displays würden wir mit Rasberry oder Banana Pis via Ethernet machen.
D.H. hohes Datenaufkommen ist auf dem Bus eher nicht.
Benutzeravatar
the-fallen
Beiträge: 1976
Registriert: 07.03.2011 14:20:47
Wohnort: zwischen Augsburg und Landsberg a.L.

#11 Re: Arduino I2C

Beitrag von the-fallen »

Na das sollte wirklich gehen. In dem anderen Thread habe ich gesehen, dass du das Ethernet-Shield hast. Wenn das Partout nicht mit i2c geht und du Überfall Raspberrys hast, dann kannst du die Messwerte ja auch per ETH verschicken.
  • Prôtos FBL -stretched- a un motor 5+4D 1.13mm 14P de torro [V-Stabi]|[V-Gov] | [YGE90LV] | [UweG-Taumelscheibe] | [ZyclicMod]
  • SuziJanis 700 UltraLight 3570g Abfluggewicht
  • Besessen: T-Rex 250SE, T-Rex 450L, T-Rex600EFL, TDR, Blade mSRX
  • nur Gebaut und eingeflogen: Blade700, Goblin500, TRex150 RKH, Blade 130X RKH, Vibe90
  • Heizkoffersteuerung "HeatBox"

[" 99 little bugs in the code | 99 little bugs in the code | Take one down, patch it around | 117 little bugs in the code "] - Alex Shchepetilnikov
Benutzeravatar
AM0K
Beiträge: 230
Registriert: 21.02.2008 12:07:02
Wohnort: Aachen
Kontaktdaten:

#12 Re: Arduino I2C

Beitrag von AM0K »

Per ETH funktioniert das ja im Video schon.
Das bedingt aber einen relativ großen Arduino hinter einem kleinen Instrument.
Daher ja Jürgens Idee, da was mit kleinen Nanos über I2C zu machen.

Zur Geschwindigkeit, ... bei dem Video habe ich die Werte alle 10ms gesendet/Empfangen.
Die Anzahl der Werte ist ja abhängig vom jeweiligen Instrument. Für das im Video brauchte ich 3 Werte, welche als Float gesendet werden.
Das Problem hierbei ist, dass man nicht auswählen kann, welche Werte z.B. der X-Plane sendet. Der sendet halt alle aktiven Datarefs.
Also muss man erst mal alles entgegen nehmen, filtern und die richtigen Werte dann an die richtigen Instrumente verteilen.

Sind denn die 100Hz mit denen ich da gearbeitet habe schon zu viel für I2C?
Projekt: Home-Cockpit | Projekt: Christoph Europa 1 | Projekt: Stabi-DB | Info: KDS Innova Seite | Info: Flugbuch
Benutzeravatar
the-fallen
Beiträge: 1976
Registriert: 07.03.2011 14:20:47
Wohnort: zwischen Augsburg und Landsberg a.L.

#13 Re: Arduino I2C

Beitrag von the-fallen »

Ich glaube die AVR-Prozessoren können alle bis 400kbps (im Zweifel nach den verwendeten Prozessoren googlen). Das macht also 50kByte pro Sekunde im gesamten Bus abzüglich Overhead für das Protokoll.
Es gibt auch schnelleres i2c mit bis zu 1MBit und dann auch 10Bit Adressierung, aber da weiß ich aus dem Kopf nicht welche Prozessoren das können.

Vielleicht wertet ihr die Daten des Flugsimulator per Software am PC oder hinter geschalteten Raspberry aus bevor ihr alles in den Bus übertragt. Wenn das denn möglich ist.

Oder ihr nutzt mehrere i2c Busse. Oder ihr verteilt die Daten per LAN im gesamten Cockpit und verteilt dann Lokal per i2c an nachgeschaltete Arduinos.
  • Prôtos FBL -stretched- a un motor 5+4D 1.13mm 14P de torro [V-Stabi]|[V-Gov] | [YGE90LV] | [UweG-Taumelscheibe] | [ZyclicMod]
  • SuziJanis 700 UltraLight 3570g Abfluggewicht
  • Besessen: T-Rex 250SE, T-Rex 450L, T-Rex600EFL, TDR, Blade mSRX
  • nur Gebaut und eingeflogen: Blade700, Goblin500, TRex150 RKH, Blade 130X RKH, Vibe90
  • Heizkoffersteuerung "HeatBox"

[" 99 little bugs in the code | 99 little bugs in the code | Take one down, patch it around | 117 little bugs in the code "] - Alex Shchepetilnikov
Benutzeravatar
AM0K
Beiträge: 230
Registriert: 21.02.2008 12:07:02
Wohnort: Aachen
Kontaktdaten:

#14 Re: Arduino I2C

Beitrag von AM0K »

Ja, so hatte Jürgen sich das ja gedacht:
- der Xplane sendet alle seine Datarefs über UDP an einen Arduino (Mega) mit Ethernet Shield
- dieser arbeitet gleichzeitig als Mutliplexer für andere Geräte, welche ebenfalls über das Netzwerk (WLAN) erreichbar sind (er sendet also alles was er bekommt auch einfach über UDP weiter an definierte Stationen)
- außerdem sendet er ausgewählte Werte über I2C an kleinere Arduiono (Nano), welche dann z.B. das Zeigerinstrument im Video (oder ähnliche) ansteuern

Auf den Nanos läuft also nur ein "mini" Programm, welches die Stepper ansteuert auf Basis von Daten, welche über I2C kommen.
So bleibt die zu übertragende Datenmenge im überschaubaren Rahmen und jedes "Instrument" bekommt auch nur das, was es benötigt.

Wenn ich das X-Plane Schema zur Übermittlung der Float-Werte beibehalte, kann ich mit 4 Byte einen Wert übertragen, keine Ahnung ob es anders noch performanter geht, aber bei 50 kByte / Sekunde wären das dann ca. 12800 Werte die ich pro Sekunde übermitteln könnte (wenn ich das jetzt gerade richtig überschlagen habe...).
Selbst wenn das Protokoll noch von den 50 kB/s abgezogen werden muss, bleibt da glaube ich genug Platz...

Ich werde mal eine einfache I2C Kommunikation aufbauen ... vielleicht direkt mit dem Gauge aus dem Video ... dann sehe ich ja ob die Werte schnell genug kommen oder ob das Instrument zu sehr hinterher hinkt.
Aber vorher muss ich mir erst mal ansehen, wie ich mit Arduino Multithread-basiert arbeiten kann, denn sonst blockiert sich hier später u.U. alles zu sehr gegenseitig...
Projekt: Home-Cockpit | Projekt: Christoph Europa 1 | Projekt: Stabi-DB | Info: KDS Innova Seite | Info: Flugbuch
Benutzeravatar
Crizz
Beiträge: 27061
Registriert: 12.04.2007 17:44:22
Wohnort: Haiger
Kontaktdaten:

#15 Re: Arduino I2C

Beitrag von Crizz »

hm.... ich hab zwar nicht sooo viel Ahnung von der Proggerei, aber mit der HW-Seite mehr zu tun. Bei I2C beträgt die maximale Leitungskapazität 400 pF , das kann je nach Kabel sehr schnell tricky werden. Oder man puffert den Bus , z.b. PCA9515, dann sind bis zu 100 m Kabellänge machbar. Egal wie, es geht auf jeden Fall nur twisted pair, einfache Leiter mit parallelen Leitern erreichen zu schnell die zulässige Maximalkapazität. Wobei SPI noch empfindlicher ist.
_________________________________________________________________________________
"Leben ist das, was passiert, während du etwas ganz anderes planst" ... ( John Lennon )

! REVOLECTRIX-Distributor ! -> Ladeequipment / Akkus : -> HaDi-RC.de

Alle Projektberichte für den VTH-Verlag als PDF zum Download unter http://www.CrizzD.de !
Antworten

Zurück zu „Arduino Tipps & Hilfe“