I2C Slave Schnittstelle

Hallo,

ich brauche dringend Hilfe. Und zwar brauche ich eine I2C Schnittstelle, die als Slave arbeitet.
Ich habe einen Stellantrieb (Master) und einen simulierten Sensor (Slave). Der Sensor wird mittels LabVIEW durch erstellte Register mit verschiedenen Adressen simuliert. Folglich soll der "Sensor" dem Stellantrieb Daten vermitteln. Beispielweise soll ein Volumenstrom, der in dem Register des "Sensors" steht an den Stellantrieb gesendet werden.
Da ich noch nie mit Arduino gearbeitet habe und auch in den Foren bis jetzt noch nichts brauchbares gefunden habe, hoff ich, dass mir hier jemand helfen kann.

Vielen Dank im Vorraus!!

Auch eine Union aus einem struct und einem Array ist möglich wenn man verschiedene Datentypen übertragen muss

Verstehe ich das richtig, daß die Simulation mit LabVIEW auf den Arduino gebracht werden soll?

Welchen Arduino verwendest Du?

agmue:
Verstehe ich das richtig, daß die Simulation mit LabVIEW auf den Arduino gebracht werden soll?

Welchen Arduino verwendest Du?

Also es ist so, dass ich einen Sensor (Slave) habe, der Daten an einen Stellantrieb (Master) sendet. Beispielsweise einen gewissen Volumenstrom. Jetzt soll der Sensor jedoch durch ein SubVI mit verschiedenen Cases, die je nach Adresse eine andere Aktion ausführen. Und genau diese Daten der Aktionen sollen an den Stellantrieb übergeben werden.
Ich kenn mich mit Arduino leider noch garnicht aus. Ich habe jetzt einmal einen Arduino Uno und ein I2C/TWI Anschlussmodul für 1602 LCD Display, da das das Einzigste ist, was meiner Meinung nach dafür geeignet ist.

noiasca:
verstehe ich dich richtig, du willst einen Slave der je nach übergebenen Register andere Werte rückmeldet?

Ja genau. Ich habe dafür jetzt eben einmal den Arduiono Uno und einen I2C/TWI Anschlussmodul für 1602 LCD Display bestellt.
Ich weiß nur nicht, ob das Anschlussmodul allgemein für I2C Verbindungen geht oder ob man das nur für das LCD Display verwenden kann.

Das Modul ist um ein HD44780 kompatibles LCD Display über I2C ansteuern zu können.
Grüße Uwe

sarah_gru:
Ja genau. Ich habe dafür jetzt eben einmal den Arduiono Uno und einen I2C/TWI Anschlussmodul für 1602 LCD Display bestellt.
Ich weiß nur nicht, ob das Anschlussmodul allgemein für I2C Verbindungen geht oder ob man das nur für das LCD Display verwenden kann.

Die Frage ist, was genau willst du mit dem Modul machen ?

Wie Uwe schon schrieb, dieses Modul ist in erster Linie dafür gedacht, ein LCD mit I2C zu verbinden.
Mit etwas Geschick und elektronischen Kenntnissen kannst du dieses Modul auch für andere Zwecke verwenden.
Auch würden dir hier Kenntnisse vom I2C sehr hilfreich sein.

Dein Problem ist weder Arduino noch I2C, sondern die Umsetzung Deiner Beschreibung in ausführbaren Code. Meistens kommt man selber auf eine Lösung, wenn man sein Problem nur richtig verständlich erklärt, und keine Details wegläßt.

Jeder Arduino hat I2C eingebaut (SCL, SDA), dafür brauchst Du keine extra Hardware. In der IDE findest Du Beispiele für I2C Slaves. Setze die Adresse auf den erwarteten Wert, lade den Sketch und schließe den Master an. Testhalber können Ausgaben über USB an den Serial Monitor geschickt werden, und auch Daten eingelesen werden.

DrDiettrich:
Dein Problem ist weder Arduino noch I2C, sondern die Umsetzung Deiner Beschreibung in ausführbaren Code. Meistens kommt man selber auf eine Lösung, wenn man sein Problem nur richtig verständlich erklärt, und keine Details wegläßt.

Jeder Arduino hat I2C eingebaut (SCL, SDA), dafür brauchst Du keine extra Hardware. In der IDE findest Du Beispiele für I2C Slaves. Setze die Adresse auf den erwarteten Wert, lade den Sketch und schließe den Master an. Testhalber können Ausgaben über USB an den Serial Monitor geschickt werden, und auch Daten eingelesen werden.

Achso okey umso besser!
Dankeschön, das hat mir schon mal sehr weitergeholfen!!
Ich habe jetzt meine SCL, SDA und die Ground Leitung meines Stellantriebes angeschlossen. Was mach ich aber jetzt mit meiner 5V Versorgung? also schließ ich das "5V-Kabel" vom Stellantrieb an AREF an?

sarah_gru:

Ich habe jetzt meine SCL, SDA und die Ground Leitung meines Stellantriebes angeschlossen. Was mach ich aber jetzt mit meiner 5V Versorgung? also schließ ich das “5V-Kabel” vom Stellantrieb an AREF an?

Du solltest aber auch mal auf andere Fragen hier in deinem Thread eingehen.

Ich verstehe immer noch nicht, was genau du machen willst.

Und klar brauchen alle beteiligten Module eine Spannung, in deinem fall sind es 5 Volt sowie GND.
Das hat nichts mit AREF zu tun.
Du solltest dir mal das Datenblatt des Arduino ansehen, was genau die einzelnen Anschlüsse bedeuten.

Beide Module können separat versorgt werden. Wenn der Stellantrieb einen sauberen 5V Ausgang hat, kann der an die 5V des Arduino angeschlossen werden - zumindest wenn der Arduino nicht gleichzeitig über USB versorgt wird.

Sicherer wird es, wenn der Arduino über seine Buchse mit Spannung versorgt wird, mit 7-12V (möglichst wenig), so daß der eingebaute Regler Spannungsschwankungen und eventuelle Störungen ausfiltern kann.

sarah_gru:
Achso okey umso besser!
Dankeschön, das hat mir schon mal sehr weitergeholfen!!
Ich habe jetzt meine SCL, SDA und die Ground Leitung meines Stellantriebes angeschlossen. Was mach ich aber jetzt mit meiner 5V Versorgung? also schließ ich das "5V-Kabel" vom Stellantrieb an AREF an?

Die 5V sind nicht zwingend erforderlich. Die Hardware muß aber irgendwie mit Strom versorgt werden.

Jetzt mußt Du den Arduino als Slave programmieren damit er auf bestimmte Anfragen mit bestimmten Antworten/Daten antwortet.

Grüße Uwe

HotSystems:
Du solltest aber auch mal auf andere Fragen hier in deinem Thread eingehen.

Ich verstehe immer noch nicht, was genau du machen willst.

Und klar brauchen alle beteiligten Module eine Spannung, in deinem fall sind es 5 Volt sowie GND.
Das hat nichts mit AREF zu tun.
Du solltest dir mal das Datenblatt des Arduino ansehen, was genau die einzelnen Anschlüsse bedeuten.

Ich probiers einfach nochmal :slight_smile:
Also ich habe einen Stellantrieb und eine LabVIEW Software die einen Sensor simuliert mittels verschiedener Register. Die Daten aus dem Register sollen jetzt mittels Arduino an den Master (Stellantrieb) gesendet werden.
Mein Stellantrieb ist mit dem Arduino mit einem RJ45 Kabel verbunden. Hat also eine SCL, SDA, Ground und eine 5V Leitung zum Arduino.
Der Arduino wird dann mittels USB an den Computer gehangen und wird somit mit der notwenigen Versorgungsspannung versorgt.

Ich habe jetzt einen Arduino Uno. Ich würde jetzt meine SCL, SDA und Groundleitung neben den Digitalen Anschlüssen anschließen. Und laut Datenblatt ist die AREF die Referenzspannung (0 bis 5V) aber eben für die Analogen Eingänge. Aber ich habe ja bei den Analogen Eingängen keine eindeutigen SCL und SDA Leitungen - ich habe nur online etwas gefunden, dass jemand A4 und A5 dafür verwendet.
Gerade verstehe ich noch nicht, ob ich jetzt meinen Stellantrieb an den festen SCL ... Anschlüssen anschließen muss oder an den Analogen Eingängen A4 und A5.

sarah_gru:
.....
Mein Stellantrieb ist mit dem Arduino mit einem RJ45 Kabel verbunden. Hat also eine SCL, SDA, Ground und eine 5V Leitung zum Arduino.
.....
Ich habe jetzt einen Arduino Uno. Ich würde jetzt meine SCL, SDA und Groundleitung neben den Digitalen Anschlüssen anschließen. Und laut Datenblatt ist die AREF die Referenzspannung (0 bis 5V) aber eben für die Analogen Eingänge. Aber ich habe ja bei den Analogen Eingängen keine eindeutigen SCL und SDA Leitungen - ich habe nur online etwas gefunden, dass jemand A4 und A5 dafür verwendet.
Gerade verstehe ich noch nicht, ob ich jetzt meinen Stellantrieb an den festen SCL ... Anschlüssen anschließen muss oder an den Analogen Eingängen A4 und A5.

Ich gehe jetzt erst mal auf I2C ein, das andere Thema muss ich mir nochmal in Ruhe ansehen.

Was hat I2C mit dem RJ45-Kabel zu tun ? Ich hoffe du verwechselst hier nicht einiges.

Und wenn du das Kabel für I2C verwendest, ok.....aber mache es nicht zu Lang. Höchstens wenige cm !

Und an deinem Uno ist A4 und A5 analog, sowie wenn verwendet auch I2C.
Das erledigt der nötige Treiber (Wire.h). Die meisten Unos haben I2C jeweils auf den genannten Pins und zusätzlich noch auf 2 weiteren Pins die auch direkt mit SDA und SCL benannt sind.
Und vergiss in diesem Zusammenhang AREF, das benötigst du hier nicht.

Und wie schon geschrieben wurde, wenn du den Uno am PC angeschlossen hast, solltest du besser keine weitere Spannung (5 Volt) am Uno anschließen.

DrDiettrich:
Beide Module können separat versorgt werden. Wenn der Stellantrieb einen sauberen 5V Ausgang hat, kann der an die 5V des Arduino angeschlossen werden - zumindest wenn der Arduino nicht gleichzeitig über USB versorgt wird.

Sicherer wird es, wenn der Arduino über seine Buchse mit Spannung versorgt wird, mit 7-12V (möglichst wenig), so daß der eingebaute Regler Spannungsschwankungen und eventuelle Störungen ausfiltern kann.

Also würde es reichen, wenn ich nur die SCL, SDA und die Groundleitungen von meinem Stellantrieb mit dem Arduino verbinde und die 5V Leitung weglasse?
Ich versorge meinen Arduino ja von Anfang an mittels USB.

sarah_gru:
Also würde es reichen, wenn ich nur die SCL, SDA und die Groundleitungen von meinem Stellantrieb mit dem Arduino verbinde und die 5V Leitung weglasse?
Ich versorge meinen Arduino ja von Anfang an mittels USB.

Das hatte ich dir im Post #14 geschrieben.

HotSystems:
Ich gehe jetzt erst mal auf I2C ein, das andere Thema muss ich mir nochmal in Ruhe ansehen.

Was hat I2C mit dem RJ45-Kabel zu tun ? Ich hoffe du verwechselst hier nicht einiges.

Und wenn du das Kabel für I2C verwendest, ok.....aber mache es nicht zu Lang. Höchstens wenige cm !

Und an deinem Uno ist A4 und A5 analog, sowie wenn verwendet auch I2C.
Das erledigt der nötige Treiber (Wire.h). Die meisten Unos haben I2C jeweils auf den genannten Pins und zusätzlich noch auf 2 weiteren Pins die auch direkt mit SDA und SCL benannt sind.

Mein RJ45 Kabel ist einfach nur die Verbindung zwischen dem Arduino und dem Stellantrieb, da der Stellantrieb den Anschluss eines RJ45 Kabels hat. Der Sensor, welcher ja jetzt simuliert wird war eben immer über einen solchen Stecker mit dem Stellantrieb verbunden.

Also kann ich meine SCL, SDA und das Ground an die jeweils fest beschrifteten Anschlüsse neben den Digitalen-Pins anschließen oder lieg ich da jetzt falsch? weil ich benötige ja nur jeweils eine SCL und SDA Leitung. Genau und die 5V Verbindung zwischen dem Stellantrieb und meinem Arduino lass ich ja einfach komplett weg, da der ja über USB Versorgt wird (hatte es vorhin ausversehen überlesen :slight_smile: )

Schau ins Schaltbild oder Datenblatt, dann siehst Du daß A4/A5 und SCL/SDA am gleichen Pin hängen. Beim Mega hängen SCL und SDA an anderen Pins, d.h. ein I2C Bus sollte immer an die mit SCL und SDA beschrifteten Pins angeschlossen werden. Viele AVR Pins haben so eine Mehrfachbelegung, von denen natürlich immer nur eine Funktion eingeschaltet sein kann. Wenn A4/A5 für I2C benutzt werden, ist ihnen die AREF Spannung egal, die wird wirklich nur zum Betrieb des eingebauten ADC verwendet.

Also die 5V am Stecker unbenutzt lassen, wenn der Arduino über USB versorgt wird.

sarah_gru:
Mein RJ45 Kabel ist einfach nur die Verbindung zwischen dem Arduino und dem Stellantrieb, da der Stellantrieb den Anschluss eines RJ45 Kabels hat. Der Sensor, welcher ja jetzt simuliert wird war eben immer über einen solchen Stecker mit dem Stellantrieb verbunden.

Also kann ich meine SCL, SDA und das Ground an die jeweils fest beschrifteten Anschlüsse neben den Digitalen-Pins anschließen oder lieg ich da jetzt falsch? weil ich benötige ja nur jeweils eine SCL und SDA Leitung. Genau und die 5V Verbindung zwischen dem Stellantrieb und meinem Arduino lass ich ja einfach komplett weg, da der ja über USB Versorgt wird (hatte es vorhin ausversehen überlesen :slight_smile: )

Ja, die SCL und SDA-Anschlüsse kannst du auch verwenden. Dann aber die analogen A4 und A5 nicht mehr als analoge Pins.

Und schreibe nochmal, wie lang dein Kabel ist und ob es Pullups für den I2C-Bus gibt.

DrDiettrich:
Schau ins Schaltbild oder Datenblatt, dann siehst Du daß A4/A5 und SCL/SDA am gleichen Pin hängen. Beim Mega hängen SCL und SDA an anderen Pins, d.h. ein I2C Bus sollte immer an die mit SCL und SDA beschrifteten Pins angeschlossen werden. Viele AVR Pins haben so eine Mehrfachbelegung, von denen natürlich immer nur eine Funktion eingeschaltet sein kann. Wenn A4/A5 für I2C benutzt werden, ist ihnen die AREF Spannung egal, die wird wirklich nur zum Betrieb des eingebauten ADC verwendet.

Also die 5V am Stecker unbenutzt lassen, wenn der Arduino über USB versorgt wird.

Super danke!
Habe jetzt alles so angeschlossen. Mein Stellantrieb meldet jetzt nur, dass ein Kommunikationsfehler zwischen Slave und Master besteht. Kann das einfach daran liegen, weil ich noch kein Arduino Interface in LabVIEW erstellt habe?
Die Software werde ich jetzt mal schreiben.

HotSystems:
Ja, die SCL und SDA-Anschlüsse kannst du auch verwenden. Dann aber die analogen A4 und A5 nicht mehr als analoge Pins.

Und schreibe nochmal, wie lang dein Kabel ist und ob es Pullups für den I2C-Bus gibt.

Das Kabel ist ca. 40cm lang. Mein Stellantrieb meldet, falls keine Pullups da sind, eine Fehlermeldung da er dann kein Kabel sieht. Jedoch ist die Fehlermeldung nicht gekommen, folglich habe ich Pullups (ich bin da leider noch komplett ein Amateur was das angeht - ich hoffe das beantwortet deine Frage mit den Pullups)