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 Arduino Due
06.10.2015, 10:36
Beitrag #1
I2C Arduino Due
Hallo,

ich versuche zwei Arduino Due per I2C miteinander kommunizieren zulassen. Dabei nutze ich am master die Pins SCL1, SDA1 und am Slave SCL, SDA. Leider scheiint irgendetwas noch nicht zu funktionieren. Übrigens auch nicht wenn ich an beiden die Pins SCL, SDA nutze.
Hier ist mal der Master Quellcode:

Code:
#include <Wire.h>

void setup()
{
  Wire1.begin();
  Serial.begin(9600);
}
  
void loop()
{
  byte address=0x08;
  byte x=100;

  Wire1.beginTransmission(address);
  Wire1.write(x);
  Wire1.endTransmission();
  delay(100);
}

und den Slave Quellcode:
Code:
#include <Wire.h>

byte x;

void setup() {
  Serial.begin(9600);
  Wire.onReceive(empfangen);
  Wire.begin(8);
}

void loop() {
  Serial.println(x);
  delay(100);
}

void empfangen (int numBytes)
{
  while(Wire.available())
  {
   x = Wire.read();
  }
}
[/code]
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 10:45
Beitrag #2
RE: I2C Arduino Due
das ist interessant - ich stehe vor demselben Problem mit einem Due als Slave und einem anderen i2c-Master.
Wire hat übrigens wohl eingebaute Pullups, Wire1 wohl nicht...

wenn du hier nicht weiterkommst:
poste es auch mal in Arduino github!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 11:03
Beitrag #3
RE: I2C Arduino Due
Zitat:das ist interessant - ich stehe vor demselben Problem mit einem Due als Slave und einem anderen i2c-Master.
Wire hat übrigens wohl eingebaute Pullups, Wire1 wohl nicht...

Es müsste doch genügen, wenn an einem der beiden Geräte die Pull-ups vorhanden sind oder irre ich mich da?

Also es ist z.B. möglich mit dem oben gezeigten Beispiel vom Slave die Adresse mit dem I2C Scanner Sketch auszulesen:

Code:
oid setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");

      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknow error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000);           // wait 5 seconds for next scan
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 11:21 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2015 11:24 von HaWe.)
Beitrag #4
RE: I2C Arduino Due
ich bin da nicht sicher mit den pullups, vermutlich aber stimmt es, wenn gegenseitig Masse verbunden ist und einer von beiden die pullups hat.
Nicht mehr (gefühlsmäßig), wenn beide Pullups haben, denn dann liegen sie ja parallel und halbieren sich quasi, das kann u.U. eng werden.

Bin aber selber nicht der richtige Ansprechpartner zur Lösung, denn bei mir klappt es ja auch nicht, und die Technik und Elektrik dahinter ist nicht meine Baustelle.... Undecided

(ps
beim mega kann man die eingebauten Pullups in twi.c disablen, das liegt aber im avr subdir und betrifft daher wschl den DUE (ARM) gar nicht; ich habe sie standardmäßig schon disabled, und es klappt ja wie gesagt auch dann immer noch nicht.)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 11:47 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2015 12:38 von chhec.)
Beitrag #5
RE: I2C Arduino Due
Ok dann haben wir ja ziemlich ähnliche Probleme. Vielleicht meldet sich ja noch jemand der dieses Problem bereits gelöst hat noch zu wort

Ok das Problem hat sich gerade gelöst. Wenn ich bei beiden die Wire und nicht Wire1 nutze funktionierts jetzt

Wie verhält es sich jetzt wenn ich noch ein drittes und viertes Board dazu nehme? wobei nur ein Slave und mehrere Master umgesetzt werden sollen.
Was passiert wenn zwei Master gleichzeitig an den Slave senden wollen?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 13:43 (Dieser Beitrag wurde zuletzt bearbeitet: 06.10.2015 13:48 von HaWe.)
Beitrag #6
RE: I2C Arduino Due
erst mal: Multi-Master, kann ich mich dunkel erinnern, ist bei der Wire lib nicht ganz einfach (wenn überhaupt)...

Multi-Slave natürlich kein Problem, dazu ist es ja da.

Aber nochmal ne Frage zu deinen Dues:

Wire zu Wire geht, aber Wire zu Wire1 nicht?
Und dabei definitiv richtig gepolt (SDA1 und SCL1 liegen in umgekehrter Reihenfolge!) und Masse verbunden? (nur um ganz sicher zugehen)?
Auch nicht mit Wire1=Master und Wire=Slave?

Das wär ja ein Ding!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 14:17
Beitrag #7
RE: I2C Arduino Due
Zitat:Wire zu Wire geht, aber Wire zu Wire1 nicht?
Und dabei definitiv richtig gepolt (SDA1 und SCL1 liegen in umgekehrter Reihenfolge!) und Masse verbunden? (nur um ganz sicher zugehen)?
Auch nicht mit Wire1=Master und Wire=Slave?

Ja definitiv richtig gepolt und auch die Massen verbunden. Was ich allerdings nicht ausprobiert habe ist ob es mit einem Pullup funktionieren würde.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.10.2015, 14:33
Beitrag #8
RE: I2C Arduino Due
pullups dürfen kein Thema sein, wenn mindestens 1er von beiden auf Wire läuft.
Die Pullups von Wire gelten dann ja für dn gesamten Bus.

Viel wichtiger aber: Hast du die beiden Möglichkeiten getestet

Wire-Master + Wire1-Slave
und
Wire1-Master + Wire-Slave ?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino Ethernet mit USB 2 Serial Converter/Welche Einstellungen im Arduino-Sketch lociluke 1 1.113 05.05.2015 13:40
Letzter Beitrag: Bitklopfer
  Arduino Mega-Projekt mit EEPROM auf Arduino Due portieren Foto-Ralf 17 3.143 16.03.2015 12:06
Letzter Beitrag: Foto-Ralf

Gehe zu:


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