Zahl von einem Arduino Nano zum andern Arduino Nano mit I2C übertragen

Gast #6461164
Hallo,
ich mache grade erste Gehversuche mit Arduino und möchte eine 16bit-Zahl 
über den I2C-Port von einem Arduino Nano Board (als Master) zu einem 
anderen Arduino Nano Board (als Slave) übertragen.
Weiß jemand, welche Lib man dafür gut verwenden kann?

Beim Suchen stößt man auf viele I2C-Libs für Displays, Tastaturen usw., 
habe aber bisher nichts gefunden, womit man zwei Boards verbinden kann. 
Auch unter "TWI" nicht.
Gast
Fabian schrieb:
> Weiß jemand, welche Lib man dafür gut verwenden kann?

Für I²C Kommunikation ist die Wire.h zuständig.
https://www.arduino.cc/en/Reference/Wire

Und da gibt es sogar ein Beispiel:
https://www.arduino.cc/en/Tutorial/LibraryExamples/MasterWriter

Da du allerdings keine Bytes sondern 16bit Werte übertragen willst, 
nutzt du anstelle von Wire.write() am besten Wire.send():

uint16_t i=12345;
Wire.send(&i,2);
Fabian schrieb:
> Beim Suchen stößt man auf viele I2C-Libs für Displays, Tastaturen usw.,
> habe aber bisher nichts gefunden, womit man zwei Boards verbinden kann.
> Auch unter "TWI" nicht.

Das macht man eher selten, da Slave-Mode komplizierter ist als Master. 
Für Slave muß man schon ISR benutzen, sonst wird Controller die ganze 
Zeit nur TWI überprüfen und sonst nichts machen.
Gast
Maxim B. schrieb:
> Für Slave muß man schon ISR benutzen, sonst wird Controller die ganze
> Zeit nur TWI überprüfen und sonst nichts machen.

Genau das macht Arduino ja. Die Daten werden in einen Puffer empfangen 
und danach wird eine callback-Funktion aufgerufen.

32 Bytes (die Adresse nicht mit gezählt) ist dort übrigens das Limit für 
I²C Transaktionen.
Gast
Maxim B. schrieb:
> Das ist nicht zu schwer. Es geht praktisch nur um switch-case in
> ISR.Aber man macht das selten, schwer zu sagen, warum.

Mit der ISR verwirrst du ihn bloß.

Fabian, schau dir das Beispiel von Arduino an, dann siehst du wie es 
geht.
Prinzipiell möglich ist es, einfach nur 2 Bytes rauszurotzen.
Meistens will man aber mehr Komfort, d.h. ein Protokoll, mit dem man 
mehrere Parameter auswählen und lesen/schreiben kann. Zum besseren 
Debuggen nimmt man vorzugsweise ein Textprotokoll. Ein 2Byte Wert wird 
dann als 4 Hex-Ziffern oder Dezimalzahl übertragen.
Auch ein Firmwareupdate kann man damit übertragen (Bootloader).

Die Hauptfrage ist aber erstmal, braucht man überhaupt 2 MCs oder kann 
nicht alles bequemer von einem erledigt werden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.