I2C-Bus an jedem Arduino-Pin

Standardmässig steht der I2C-Bus beim Duemilanove an den analogen Pins 4 (SDA) und 5 (SCL) zur Verfügung. Sind diese Ports für analoge Anwendungen bereits in Verwendung, kann der I2C-Bus an diesen Ports nicht verwendet werden. Mit der SoftI2CMaster-Bibliothek von Tod E. Kurt kann man jeden Arduino-Port als I2C-Busleitung verwenden.

Im Sketch werden die Pins für SDA und SCL definiert.

const byte sdaPin = 7;
const byte sclPin = 6;

Anschliessend kann die Buskommunikation ähnlich der Wire-Bibliothek eingesetzt werden.

#include "SoftI2CMaster.h"
const byte sdaPin = 7;
const byte sclPin = 6;
SoftI2CMaster i2c = SoftI2CMaster( sdaPin,sclPin );

i2c.beginTransmission(9);  // send to address 9
i2c.send('c');
i2c.send(255);
i2c.send(0);
i2c.send(200);
i2c.endTransmission();

Man beachte, dass diese Bibliothek noch in der Entwicklungsphase ist.

Neben der Verwendung des I2C-Bus an wählbaren Pins hat der Entwickler mit dieser Bibliothek zusätzlich erreicht, dass längere Signalleitungen verwendet werden können.
Die SoftI2CMaster-Bibliothek ist im Gegensatz zur Wire-Library fehlertoleranter, Störungen oder unsaubere Bussignale machen weniger aus, und ermöglicht darum Anwendungen mit längeren Busleitungen als die Standardbibliothek.


2 Responses to “I2C-Bus an jedem Arduino-Pin”  

  1. 1 Kretschmar Bernd

    Ich habe das tauschen von PINs versucht. Funktioniert aber nicht.

    Ich möchte eine Ds1307 oder DS3231 mit einem TFT LCD Shield 3,95″ MCUFriend benutzen.
    Das Shield benötigt aber den PIN A4.

    Ich habe dann versucht die PINs 0 und 1 zu benutzen aber kein Erfolg.

    Was mache ich falsch?

  2. 2 ap-admin

    Hallo Bernd,

    wenn das Shield die Standard-I2C-Pins (A4 und A5) verwendet, musst du diese verwenden.
    Gibt es denn einen Grund wieso du auf andere Pins umschalten willst?

    Gruss Thomas

Leave a Reply



Kategorien