INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
I2C Bytes lesen Master Reader/Slave Sender
08.07.2014, 13:49 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2014 13:53 von andre35.)
Beitrag #1
I2C Bytes lesen Master Reader/Slave Sender
Hallo,

ich vesuche mich an der I2C Kommunikation und möchte mehrere Bytes vom Slave lesen.

----- Master (Uno) --------
#include <Wire.h>
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin(9600); // start serial for output
}
void loop()
{
Wire.requestFrom(2, 2); // request 2 bytes from slave device #2
while(Wire.available()) // slave may send less than requested
{
Serial.println(Wire.available());
int x = Wire.read(); // receive byte as an integer
Serial.println(x); // print the integer
}
delay(500);
}

----- Slave (Nano) --------
#include <Wire.h>
void setup()
{
Wire.begin(2); // join i2c bus with address #2
Wire.onRequest(requestEvent); // register event
}
void loop()
{
delay(100);
}
byte x = 0;
byte y = 10;
void requestEvent()
{
Wire.write(x);
Wire.write(y);
x++; // sends one byte
}

Als Ergebnis bekomme ich im Serial Momitor.
2
10
1
255
2
10
1
255
u.s.w.

Es sieht aus, als wird nur ein Byte erkannt.
Wo liegt mein Denkfehler.

Im Master Sender/Slave Reader Modus funktioniert es.

Danke für jeden Hinweis!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.07.2014, 17:48
Beitrag #2
RE: I2C Bytes lesen Master Reader/Slave Sender
Inzwischen habe ich eine Lösung gefunden:

----- Slave (Nano) --------
.....
byte x = 0;
byte y = 10;
uint8_t data[2];
void requestEvent()
{
data[0] = x;
data[1] = y;
Wire.write(data, (size_t)2);
x++; // sends one byte
}

Das sieht erstmal so aus, als könnte man nur ein Wire.write() im Slave haben.
Ist das wirklich eine Restriktion?
Habe ich bis jetzt eigentlich noch nirgendwo so gelesen!

Hat jemand Erfahrungen oder einen Link zu diesem Punkt?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.07.2014, 10:05
Beitrag #3
RE: I2C Bytes lesen Master Reader/Slave Sender
Moin,

steht eigentlich ganz genau hier:
Zitat:Syntax
Wire.write(value)
Wire.write(string)
Wire.write(data, length)
Parameters
value: a value to send as a single byte -> 1
string: a string to send as a series of bytes
data: an array of data to send as bytes -> 2
length: the number of bytes to transmit
Bei deinem ersten Code hast du die Datenvariable nur als Byte deklariert, also trifft 1 zu.
Bei deinem zweiten Code hast du die Bytes vor dem Senden noch in ein Array gepackt und dann das Array gesendet, da trifft dann 2 zu.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.07.2014, 16:29 (Dieser Beitrag wurde zuletzt bearbeitet: 09.07.2014 16:29 von andre35.)
Beitrag #4
RE: I2C Bytes lesen Master Reader/Slave Sender
Hallo Ricardo,
danke für deine Antwort.
Was du zitirst ist ja eine Beschreibung, mit welchen Daten man Wire.write() benutzen kann. Das sagt noch nichts darüber aus, dass man es (aus meiner Sicht - siehe Beispiele) offensichtlich im Mode Master Reader/Slave Sender nur einmal, also nicht mehrmals hintereinander, aufrufen kann.

Wenn ich im Slave

Wire.write(10);
Wire.write("Zehn");

verwende (im Master werden 5 Zeichen erwartet - requestFrom), bekomme ich als Ausgabe

zehnÿ

Es sieht so aus, als würde das Wire.write(10) nicht erkannt und das letzte Byte, weil ja 5 vom Master gelesen werden, aus dem "Nichts" gelesen wird.
Meine Frage ist: Ist im Mode Master Reader/Slave Sender generell nur ein Wire. write erlaubt, wenn ja wo steht das, oder mache ich noch was falsch??

Gruß Andre
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.07.2014, 12:02
Beitrag #5
RE: I2C Bytes lesen Master Reader/Slave Sender
Schade, dass mir zu dieser Frage keiner weiterhelfen kann!!
Ist das so was Exotisches was ich da mache?
Oder ist es unklar beschrieben?

Andre
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
19.07.2014, 12:23
Beitrag #6
RE: I2C Bytes lesen Master Reader/Slave Sender
Moin,
Zitat:Writes data from a slave device in response to a request from a master, or queues bytes for transmission from a master to slave device (in-between calls to beginTransmission() and endTransmission()).
In deutsch:
Schreibt Daten von einem Slave Device als Antwort auf eine Anforderung durch den Master oder sammelt Bytes für eine Übertragung vom Master zum Slave (eingekapselt in die Anweisungen beginTransmission() und endTransmission()"
Mit Daten ist in diesem Fall als Möglichkeit ein Byte-Array gemeint. Mit Bytes eben einzelne Bytes. Wenn du also mehrere Zeichen vom Slave zum Master schreiben möchtest, solltest du nicht wire.write(Byte) mehrfach nutzen, sondern alle Zeichen vorher in einem Byte-Array sammeln und dann das Array schreiben: wire.write(byteArray,Länge_des_Arrays).
Grüße RK

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.07.2014, 14:42
Beitrag #7
RE: I2C Bytes lesen Master Reader/Slave Sender
Hallo Ricardo,

vielen Dank für deine Antwort mit den Erklärungsversuchen.
Wenn ich sie richtig verstanden habe, beantwortet sie meine Frage, ob man im Master Reader/Slave Sender Modus nur e i n Wire.write() einsetzten kann mit "ja".
Wenn dass so ist interessiert mich natürlich die Frage warum, wenn man im Modus Master Sender/Slave/Reader meherer Wire.write() (zwischen Transmission Begin /- End) verwenden kann.
Werde das mal versuchen herauszubekommen, wenn etwas Zeit ist, und das Ergebnis hier kundtun.

Gruß Andre
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Adafruit SD-master / logger shield: Fehler beim 2. Kompilieren kl-ing 3 329 06.06.2016 16:07
Letzter Beitrag: Bitklopfer
  RFID-Reader an Analog Pins inski 9 650 02.03.2016 12:43
Letzter Beitrag: ArdHolger
  Ins eeprom schreiben/lesen anwo 10 1.779 07.02.2016 20:05
Letzter Beitrag: rpt007
  Pro Mini ADC Kanal 8 lesen Bitklopfer 8 615 30.12.2015 20:27
Letzter Beitrag: Bitklopfer
  Sender 315 Mhz bergfrei 3 620 23.09.2015 16:55
Letzter Beitrag: hotsystems
  DMX Sender fraju 5 2.007 29.05.2015 09:10
Letzter Beitrag: fraju
  Variablen Typ double, char, long aus ext. EEPROM lesen SternGucker 8 1.528 02.04.2015 08:10
Letzter Beitrag: SternGucker
  Daten von File auf SD Card (formatiert) schreiben+lesen u.a.m. HaWe 19 3.638 16.02.2015 19:50
Letzter Beitrag: HaWe
  Serielle Schnittstelle lesen - merkwürdiges Problem Waishon 6 1.764 16.12.2014 08:47
Letzter Beitrag: Corvus
  Zum DS1307RTC weiteren I2C Slave anschliessen? DL1AKP 3 591 03.12.2014 10:12
Letzter Beitrag: DL1AKP

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste