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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren