dringender Hilferuf !! I2C - 3 boards - 14 sensore

Hallo alle zusammen,

ich bin ein absoluter neuling--- und muss trotzdem schnellst möglich mein kleines projekt fertig bekommen.

Ich habe ein topologisches Objekt gestaltet in dem 14 Photoresistoren eingebaut sind, im inneren des ganzen sind drei arduinos ( 2xfunnel fio und ein mini pro), ein xbee und die Stromversorgung untergebracht.

diese 3 boards habe ich über I2C verbunden, über sda/scl - analog 4/5.
das als master fungierende board (fio) soll dann die gesammelten daten per x bee versenden.

aktuell habe ich aber noch ein Problem mit der I2C verbindung -- wie kann ich mehrere sensorwerte einlesen und verschicken , so das ich sie auf dem master board auch wieder als einzelne werte auslesen kann?!?

habt ihr vll eine idee?!

annalena

Öhm, warum hast Du drei Arduinos eingebaut und nicht nur einen der alles macht?

Funktioniert die generelle Kommunikation zwischen den drei Arduinos schon?

Aus Platzgründen -- brauche für die sensoren 14 analog pins + 6 analog pins für die I2C Verbindung- mein bauraum ist nur 8x4x4 cm groß !!

Die generelle Kommunikation scheint in meinen Augen zu funktionieren - jedenfalls konnte ich von jedem Slave auf dem Master einen Wert auslesen - komischer Weise kommt er aber deutlich kleiner an -- sensorWert auf Slave ca 400 - gesendet auf den master nur noch 120 ...

Gesendet und empfangen habe ich mit der Wire(h) lib - allerdings nur für einen sensorWert - einlesen muss ich aber wie schon erwähnt 14 (davon 8 von den slaves)

Für solche Anwendungen gibts spezielle Portexpandern, z.B. den PCF8574, der arbeitet auch mit I²C. :slight_smile:

Hmm... Ist Deine Anwendung Timing-empfindlich?
Würde es auch reichen, wenn Du immer nur 4 Photoresistoren gleichzeitig auslesen würdest...? Also, immer 4 aus ein Mal im Millisekundenabstand, aber eben nicht alle 14 gleichzeitig?
Weil, wenn nämlich nicht, dann wüsste ich vielleicht einen Weg, wie Du das Ganze mit einem FIO alleine und ohne weitere Chips machen könntest... :wink:

Was genau soll Dein topologisches Objekt machen?

...und warum brauchst Du 6 analog pins für die I2C Verbindung? Wie hast Du das Ganze verdrahtet?

Ich schon wieder. :wink:

Wenn Du Dir z.B. so eine Matrix aufbauen würdest, dann kämst Du mit vier digitalen Ausgängen und vier analogen Eingängen klar. :slight_smile:

Du könntest über einen digitalen Ausgang immer vier Photowiderstände unter Strom setzen und die Spannung dann an den vier analogen Eingängen abgreifen.

Was meinst Du?

Hallo Joghurt

Die I2C Schnittstelle ist auf den pins 4 und 5 analog implementiert. Bei 3 Arduinos sind das dann 6 analog pins in Summe.

Ein Portexpander hilft bei dieser Konfiguration nichts, Du liest Analogwerte. Was helfen würde wäre ein AD-Wandler mit I2C Schnittstelle. Da bräuchte es nur 1 Arduino und zB 2 ADCs.
Arduino Playground - InterfacingWithHardware unter ADC/DAC
Arduino Playground - MCP3208

@annalenak
Hast Du Probeme mit dem Meßwert. Der Analogeingang gibt einen 10 Bit-wert. Überträgst Du nur 8 bit davon? Ist der Unterschied vom gelesenen Wert und Übertragenen wert ein Vielfaches von 256?

Ein weitere Möglichkeit ist daß Du einen analogen Eingang mit einem Analogmultiplexer auf die 14 Meßwerte multiplext. ( das ist das selbe das der Arduino intern mit den Analogeingängen macht.) Das Problem dabei ist, daß Du eine negative Versorgungspannung brauchst (ich habe Keinen Analogmultiplexer gefunden, der nur mit einer positiven Versorgungsspannung auskommt.).

Grüße Uwe

Nachtrag auf letzten Beitrag von Joghurt

Die Schaltung müßte Funktionieren; der einzige Nachteil ist, daß alle Fotowiderstände gleich sein müssen und keine individuelle Anpassung durch Angleichung der Vorwiderstände möglich ist.

Ein Portexpander hilft bei dieser Konfiguration nichts, Du liest Analogwerte.

Stimmt. Mist. :wink:

und keine individuelle Anpassung durch Angleichung der Vorwiderstände möglich ist.

...was sich aber softwaremäßig relativ einfach ausgleichen lassen müsste, sofern überhaupt gewünscht. Wäre so auf jeden Fall weniger Zirkus (und auch weniger verbauten Raum) als mit drei Arduinos und I²C etc... :slight_smile:

und keine individuelle Anpassung durch Angleichung der Vorwiderstände möglich ist.

In den meisten Fällen schon, aber nicht immer.
Das mit dem verbautem Raum stimmt. Alternative wäre externer AD- Converter mit i2c Schnittstelle.

Grüße Uwe

In den meisten Fällen schon, aber nicht immer.

Ich wage mal zu behaupten, dass es immer möglich ist, es sei denn, die nach der Korrektur resultierende Auflösung wäre geringer als in der Anforderung gefordert.

Außerdem kann man softwaremäßig auch gleich die Messkurve korrigieren, was per Widerstand nicht geht. :wink:

Ich glaube man könnte man bei der Joghurtvariante auch noch die Dioden sein lassen. Und die digitalen Ausgänge auf (bis auf den Spannunggebenden) auf Eingang schalten. Dann wären sie ja hochohmig, und es entsteht nicht der Spannungsteiler.

Hört sich gefährlich an, Du hättest dann die ganzen LDR-Netzwerke parallel auf den analogen Eingängen...

Dann würden die Pegel auf den Ax-Leitungen versuchen, sich über die (in dem Moment eigentlich unbenutzten) LDRs auszugleiche, was jetzt durch die Dioden verhindert wird. Das müsste Dir eigentlich voll die Messung versauen...

Oder hab ich was übersehen...?

Nein Joghurt, Hast nichts übersehen.
Bei der Joghurt-Variante :sunglasses: braucht es die Dioden.
Grüße Uwe

Joa, diese Problematik habe ich übersehen. Gut dass ich "ich glaube" schrieb. Stehe ich etwas weniger doof da... ;D