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

Gast #6461164
Lesenswert?
• ▲
▼
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 #6461177
Lesenswert?
• ▲
▼
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);
#6461181
Lesenswert?
• ▲
▼
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 #6461189
Lesenswert?
• ▲
▼
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.
#6461420
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.