mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C mit ATMega und Wemos D1 Mini Pro


Autor: Tim Stadtmüller (elektrowiesel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich versuche 4 Datenbytes von einem ATMega8 mit der I2c-Bibliothek von 
Peter Fleury an einen ESP8266 auf dem Wemos-Board zu senden. 
Programmiert wird der ESP8266 mit der Arduino umgebung, also mit der 
Wire-Bibliothek.

Der Master(ATMega) funktioniert einwandfrei. Gemessen mit Logic 
Analyzer.

Der ESP Antwortet aber nicht. Außer "Start" gibt es keine Ausgaben.
Auch keine ACKs.

Ich nehme an, dass er vielleicht zu langsam sein könnte(?).
Oder ich habe das Beispiel falsch verstanden.

Code:

Master(Ausschnitt):
i2c_init();
i2c_start( 0x02 );  // Adresse = 1; R/W = 0 -> write
i2c_write( 0 );
i2c_write( 1 );
i2c_write( 2 );
i2c_write( 3 );
i2c_stop();

Slave:
#include <Wire.h>

void setup() {
  Serial.begin(9600);           
  Serial.println( "Start." );
  Wire.begin(1);                
  Wire.onReceive(receiveEvent);
}

void loop() {
  delay(100);
}


void receiveEvent(int howMany) {
  Serial.println( "Event." );
  while (1 < Wire.available()) {
    int c = Wire.read();
    Serial.print(c);
  }
  int x = Wire.read();
  Serial.println(x);
}

: Bearbeitet durch User
Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim S. schrieb:
> Der ESP Antwortet aber nicht. Außer "Start" gibt es keine Ausgaben.
> Auch keine ACKs.

Wenn ein Slave nicht antwortet liegt es meistens an der (falschen)
Adresse.

Autor: Tim Stadtmüller (elektrowiesel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach meinem Verständniss ist die Adresse des Slaves 1(siehe 
"Wire.begin(1)")
und diese wird auch vom Master angesprochen(siehe "i2c_start(0x02)").
Vorausgesetzt ich habe das mit der 7 bit Adresse nicht falsch gemacht.

Adresse = 1, also 0b0000001 und R/W bit = 0, also 0b00000010 als erstes 
Byte.

Autor: Frank Link (Firma: Flk Consulting UG) (flk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tim,

wie kommst Du auf diese I2C Adresse?

Gruß
Frank

Autor: Manfred (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim S. schrieb:
> Nach meinem Verständniss ist die Adresse des Slaves 1

I2C-Scanner besorgen, gucken, was sich wirklich meldet - nicht so 
schwer, oder?

Autor: Tim Stadtmüller (elektrowiesel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da der ESP als Slave keine feste Adresse hat wird ihm durch die 
Programmierung die Adresse 1 zugewiesen, oder geht das so nicht?

Zu überprüfen ob sich ein Gerät zurück meldet ist tatsächlich nicht 
schwer...

Deshalb habe ich ja geschrieben, dass kein ACK zurück kommt, oder?

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim S. schrieb:
> Da der ESP als Slave keine feste Adresse hat wird ihm durch die
> Programmierung die Adresse 1 zugewiesen, oder geht das so nicht?

Kannst du Arduino lesen? Dort steht:

----------------------------------------------------------
There are both 7- and 8-bit versions of I2C addresses. 7
bits identify the device, and the eighth bit determines if
it's being written to or read from. The Wire library uses
7 bit addresses throughout. If you have a datasheet or
sample code that uses 8 bit address, you'll want to drop
the low bit (i.e. shift the value one bit to the right),
yielding an address between 0 and 127. However the
addresses from 0 to 7 are not used because are reserved so
the first address that can be used is 8.
----------------------------------------------------------

Ich würde mir besonders den letzten Satz zu Herzen nehmen.
Und das Shift-Problem nicht ausser Acht lassen.

Autor: Frank Link (Firma: Flk Consulting UG) (flk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Tim,

ich glaube nicht, dass das so geht. Eine Slave, der keine Adresse hat, 
kann über I2C nicht angesprochen werden. Ich habe allerdings auch keine 
Doku zu diesem Board sodass ich es nicht genau sagen kann.

Wenn Du eine Doku hast, dann verlink diese doch bitte mal.

Gruß
Frank

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frank L. schrieb:
> Eine Slave, der keine Adresse hat,
> kann über I2C nicht angesprochen werden.

Sehe ich mittlerweile auch so, aber aus anderem Grund.

http://esp8266.github.io/Arduino/versions/2.0.0/do...

Dort ist zu lesen:

----------------------------------------------------
Wire library currently supports master mode up to
approximately 450KHz. Before using I2C, pins for SDA
and SCL need to be set by calling
Wire.begin(int sda, int scl), i.e. Wire.begin(0, 2)
----------------------------------------------------

Nachdem es keine Slave Adresse gibt die man setzen würde,
kann der Slave auch nicht angesprochen werden. Also
nur Master Mode.

Vielliecht gibt es neuere Docs und Libs wo dies anders ist.
Habe nicht weiter gesucht.

Autor: Tim Stadtmüller (elektrowiesel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also, ich habe jetzt mal die Adresse auf 8 geändert, aber es 
funktioniert immer noch nicht.

Es gibt eine überladene Version von Wire.begin die eine Adresse als int 
nimmt, daher glaube ich, dass Slave Modus funtionieren müsste...

: Bearbeitet durch User
Autor: Oliver S. (oliverso)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim S. schrieb:
> daher glaube ich, dass

.. RTFM jetzt mal angesagt wäre.

Oliver

Autor: Arduinoquäler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tim S. schrieb:
> daher glaube ich, dass Slave Modus funtionieren müsste

Suche doch einfach in den Online Docs ob es was neueres
dazu gibt. Wenn nicht dann gilt das bereits Zitierte:

Arduinoquäler schrieb:
> 
http://esp8266.github.io/Arduino/versions/2.0.0/do...
>
> Dort ist zu lesen:
> .....

Autor: Jan L. (ranzcopter)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Arduinoquäler schrieb:
> Tim S. schrieb:
>> daher glaube ich, dass Slave Modus funtionieren müsste
>
> Suche doch einfach in den Online Docs ob es was neueres
> dazu gibt. Wenn nicht dann gilt das bereits Zitierte:
>
> Arduinoquäler schrieb:
>>
> 
http://esp8266.github.io/Arduino/versions/2.0.0/do...
>>
>> Dort ist zu lesen:
>> .....

...und das gilt afaik noch immer; es gibt zwar länger schon einen 
Pull-Request mit einem Patch, der scheint aber problematisch zu sein...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.