I2C. Sind PIN A4/A5 = SCL/SDA miteinander Verbunden?

Hallo Leute,

ich habe zwei Fragen.
Ist die Belegung der PINS am Zero und dem UNO genau gleich?

Man kann ja nicht an einem I2C mehrere Sensoren direkt anschließen aufgrund der Vorwiderstände.

Ich habe gelesen, dass am UNO A4 SCL und A5 SDA sein kann.
Weil die PINS SCL("PIN 17") und SDA ("PIN16") am UNO habe ich bereits belegt.

Kann ich also ein weiteren Sensor (BME280) an die PINS A4 und A5 anschließen?
Oder gibt es eine Brücke zwischen zwischen SDA und A5, SCL und A4?

Am Zero will ich keinen Fehler machen, da er schon kostspieliger ist. :slight_smile:

Danke im Voraus!

ocyplex:
Ist die Belegung der PINS am Zero und dem UNO genau gleich?

Zero und UNO sind sehr unterschiedliche Boards, auch wenn die Pinbelegung weitgehend kompatibel gestaltet ist. Ganz wichtig: Der Zero ist ein 3,3V Prozessor - das gilt dann natürlich auch für alle Pins.

ocyplex:
Man kann ja nicht an einem I2C mehrere Sensoren direkt anschließen aufgrund der Vorwiderstände.

I2C ist ein Bussystem. Da kann man durchaus mehrere Sonsoren anschließen, soweit man bei ihnen unterschiedliche I2C-Adressen einstellen kann. Sind bei den Sensoren die Pullup-Widerstände bereits vorhanden, dann kann es bei mehreren angeschlossenen Sensoren nötig sein, die bei einigen zu entfernen, damit das nicht zu niederohmig wird.

ocyplex:
Ich habe gelesen, dass am UNO A4 SCL und A5 SDA sein kann.
Weil die PINS SCL("PIN 17") und SDA ("PIN16") am UNO habe ich bereits belegt.

Am UNO sind SCL/A4 und SDA/A5 identisch. D.h. die Pins sind auf dem Board miteinander verbunden, und können nicht für unterschiedliche Aufgaben verwendet werden.
Auf dem Zero ist das nicht so, da sind das jeweils unterschiedliche I/Os am Prozessor.

Mit dem Zero habe ich keine eigene Erfahrung, aber aus dem Schaltbild geht das eindeutig hervor.

Grundsätzlich ist I2C ein Bus. Du kannst da immer mehrere Sensoren oder I2C-Clients anschließen. Die müssen sich nur in der I2C-Adresse unterscheiden.
Was du da mit den Vorwiderständen meinst, weiß ich nicht. Allerdings benötigt I2C Pullup-Widerstände an den Anschlüssen.
Teilweise sind die aber auf den jeweiligen Sensoren bzw. Boards schon mit drauf. Das solltest du vorher nachmessen.

Hallo,

da es sich bei i2c um einen Bus handelt kann man natürlich mehrere Geräte an den beiden pins anschliessen. Es könnte eventuell sein das Du Geräte mit 3,3V an einen UNO / Zero anschliessen willst und aus diesem Grund Widerstände verbaut sind. ich meine jetzt nich die Pullup´s. In dem Fall verwendest Du besser levelshifter für den I2c Bus.

ich denke nicht das der Zero die gleiche pin Belegung hat wie der UNOZero Plan

Heinz

Ich dachte PullUp-Widerstände sind Vorwiderstände.

@Rentner Ich habe mir den Plan angesehen, doch ich bin ein zu großer Amateur um dort den Durchblick zu haben.

Ich versuche noch eine leichtere Zeichnung zu finden. Wobei MicroBahner ja sagt, die seien getrennt.
Ich gebe euch Bescheid sobald ich näheres gefunden habe und es in die Praxis umgesetzt habe. :slight_smile:

ocyplex:
Ich dachte PullUp-Widerstände sind Vorwiderstände.

@Rentner Ich habe mir den Plan angesehen, doch ich bin ein zu großer Amateur um dort den Durchblick zu haben.

Ich versuche noch eine leichtere Zeichnung zu finden. Wobei MicroBahner ja sagt, die seien getrennt.
Ich gebe euch Bescheid sobald ich näheres gefunden habe und es in die Praxis umgesetzt habe. :slight_smile:

Suche einfach nach den jeweiligen Pinout.
Da kannst du die Unterschiede erkennen.

HotSystems:
Suche einfach nach den jeweiligen Pinout.
Da kannst du die Unterschiede erkennen.

Leider nein, denn zumindest ich bin irritiert.

ADC[4] PA05 A4 D18 und D18/SDA PA22 SDA

Für mich paßt das nicht zusammen. Oder?

So wie ich die Pinbelegung von agmues Bild verstehe. Sind A4 / A5 = Digital PIN18 / PIN 19.

Ok, der Unterschied ist tatsächlich nicht sehr groß.
Dieses Pinout hatte ich gesehen, da sieht es nur geringfügig anders aus.

ocyplex:
IWobei MicroBahner ja sagt, die seien getrennt

Ich habe mich dabei an das Schaltbild gehalten, aus dem eindeutig hervorgeht, dass das unterschiedliche IO's des Prozessors sind. Auch das Pinout, dass agmue zeigt ( von der Arduino Seite ) bennent da die gleichen (jeweils unterschiedlichen) IOs für A4/A5 bzw SCL/SDA. Das ist die Hardware.

Ein andere Frage ist, wie in der Software für das Board das Mapping der Pinnummern auf die Prozessor IO's gemacht wird. Die gleiche Pinnummer gleichzeitig auf unterschiedliche IOs zu mappen ist aber nicht möglich. Also kann das in dem Pinout nur ein Fehler sein. Aus Gründen der Kompatibilität gehe ich mal davon aus, Das A4/A5 auch als 18/19 angesprochen werden können ( wie beim UNO ). Wie das dann bei SCL/SDA ist, müsste man in der Software nachschauen. Die Software für das Zero Board habe ich aber derzeit nicht installiert ( hab' ja auch keins :wink: ).

So, das hat mich jetzt doch mal interessiert, und ich habe mir die Software in eine portabel Variante installiert.

Hier ein (Kommentar-)Auszug aus der Datei, in der die Zusammenhänge definiert werden. (...\packages\arduino\hardware\samd\1.8.11\variants\arduino_zero\variant.cpp)
Ist da alles sehr gut dokumentiert. Daraus geht hervor, dass beim Zero SDA/SCL als 20/21 ansprechbar sind:

/*
 * +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
 * + Pin number +  ZERO Board pin  |  PIN   | Label/Name      | Comments (* is for default peripheral in use)
 * +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
......
 * +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
 * |            | Analog Connector |        |                 |
 * +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
 * | 14         | A0               |  PA02  | A0              | EIC/EXTINT[2] *ADC/AIN[0]  DAC/VOUT  PTC/Y[0]
 * | 15         | A1               |  PB08  | A1              | EIC/EXTINT[8] *ADC/AIN[2]            PTC/Y[14] SERCOM4/PAD[0]                  TC4/WO[0]
 * | 16         | A2               |  PB09  | A2              | EIC/EXTINT[9] *ADC/AIN[3]            PTC/Y[15] SERCOM4/PAD[1]                  TC4/WO[1]
 * | 17         | A3               |  PA04  | A3              | EIC/EXTINT[4] *ADC/AIN[4]  AC/AIN[0] PTC/Y[2]  SERCOM0/PAD[0]                  TCC0/WO[0]
 * | 18         | A4               |  PA05  | A4              | EIC/EXTINT[5] *ADC/AIN[5]  AC/AIN[1] PTC/Y[5]  SERCOM0/PAD[1]                  TCC0/WO[1]
 * | 19         | A5               |  PB02  | A5              | EIC/EXTINT[2] *ADC/AIN[10]           PTC/Y[8]  SERCOM5/PAD[0]
 * +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
 * |            | Wire             |        |                 |
 * +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
 * | 20         | SDA              |  PA22  | SDA             | EIC/EXTINT[6]                        PTC/X[10] *SERCOM3/PAD[0] SERCOM5/PAD[0] TC4/WO[0] TCC0/WO[4]
 * | 21         | SCL              |  PA23  | SCL             | EIC/EXTINT[7]                        PTC/X[11] *SERCOM3/PAD[1] SERCOM5/PAD[1] TC4/WO[1] TCC0/WO[5]
 * +------------+------------------+--------+-----------------+--------------------------------------------------------------------------------------------------------
...
 */

Die ganze Tabelle ( und erst recht das const-Array mit den Info's für den Compiler :wink: ) ist zu lang für einen Post...

ocyplex:
Am Zero will ich keinen Fehler machen, da er schon kostspieliger ist. :slight_smile:

Laß doch mal A5 blinken und überprüfe, ob auch SCL blinkt. Wenn ja, dann verbunden, wenn nein, dann nicht verbunden.

Die Pins SDA und SCL am Ende der digitalen Pins in der Revision R3 dienen dazu den I2C Bus auf verschiedenen Arduino-Modellen mit verschiedenen Controllern, wo der I2C Bus auf verschiedenen Pins ist, auf die gleichen Pins zu haben, damit die Shields mit I2C auf allen Arduinomodellen funktionieren.

Verschiedene Arduino-Modelle mit der Anordnung der Pins, wie der UNO, haben verschiedene Controller:
UNO, Leonardo, MEGA2650, DUE, (TRE), Zero, YUN und YUN2. Weil der I2C Bus an verschiedenen Pins sind, könnte ein Shield für den UNO auf dem Leonardo oder MEGA nicht funktionieren. Dazu haben die Arduinos zusätzliche Pins wo für alle Modelle der I2C angeschlossen sind. Nicht alle Modelle haben diese Pins noch ein zweites mal herausgeführt.
Gleichzeitig gibt es das Pin IOREF das je nach Versorgungsspannung des Controllers 3,3V oder 5V führt. So kann ein Shield an einem 5V Arduino wie auch an einem 3,3V Arduino funktionieren.

Gleiches gilt für den SPI-Bus. Nur am ICSP Anschluß ist der SPI Bus bei allen Modellen vorhanden.

Pullup:
Damit alle Ausgänge der verschieden I2C Slaves zusammengeschaltet werden können ohne ein Ausgang kaputtgeht können diese Ausgänge den Ausgang nur auf Masse schalten. Für das HIGH Signal ist der Pullupwiderstand zuständig.

Grüeß Uwe

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.