I2C-Reichweite steigern mit dem P82B715

© Alexey Zarodov, 123RF

Fernverkehr

Zwar wurde I2C eigentlich für die interne Gerätekommunikation konzipiert, doch mithilfe geeigneter Extender-Bausteine überbrückt der Bus Distanzen bis zu 100 Metern.

Was beim I2C-Bus im Kleinen gut klappt, eignet sich nicht für die Fernkommunikation. Die begrenzte Reichweite des Busses liegt unter anderem daran, dass die maximale Kapazität mit allen Komponenten nicht mehr als 400 Picofarad betragen darf. Je nach Qualität der verwendeten Leitungen entsprechen diese 400 pF nur einigen Metern – das Verhalten langer elektrischen Leitungen ähnelt bekanntlich jenem von Kondensatoren: Zwischen parallel verlaufenden Leitungen baut sich immer ein elektrisches Feld auf, das wie ein kleiner Kondensator wirkt.

Die sogenannte Eigenkapazität der Leitung fällt nicht besonders hoch aus, steigt aber mit der Länge des Kabels stetig an. Übertragen Sie nun Signale über eine solche Leitung, kommt es im ungünstigen Fall zum kompletten Auslöschen der Signale. Der Baustein P82B715 verringert die Kapazität, die eine Leitung auf dem Bus verursacht, um den Faktor 10. Verwenden Sie hochwertige Leitungen mit einer geringen Eigenkapazität, holen Sie sogar noch etwas mehr Reichweite heraus. Senken Sie dann zusätzlich die Geschwindigkeit der Datenübertragung etwas ab, bekommen Sie wieder einige Meter mehr Reichweite geschenkt.

P82B715

Beim P82B715 handelt es sich um einen sogenannten I2C-Bus-Extender, was bedeuten soll, dass er sich dazu eignet, die Reichweite des Busses zu erweitern. Er kommt in einem für Bastler einfach zu handhabenden DIL8-Gehäuse. Abbildung 1 zeigt die Pinbelegung des Bausteins. Die folgende kleine Eselsbrücke hilft Ihnen unter Umständen, die Anschlüsse nicht zu verwechseln: Sx und Sy schließen Sie an den vorhandenen seriellen Bus an; Lx und Ly sind für die Leitung vorgesehen.

Abbildung 1: Da der P82B715 in der Regel in einem kompakten Gehäuse daherkommt, fällt es leicht, den Baustein in eigene Projekte zu integrieren.

Die zwei entsprechenden Buffer weisen denselben Aufbau auf – es ist daher gleichgültig, welchen von beiden Sie für Daten- (SDA) und Taktleitung (SCL) verwenden. Der P82B715 eignet sich für den Einsatz mit vielen seriellen Bussen und beschränkt sich keineswegs ausschließlich auf den I2C-Bus. Daher reicht seine Betriebsspannung von 3 bis 12 Volt, er unterstützt Busse mit bis zu 400 kHz Taktrate. Weitere Informationen finden sich auf den 23 Seiten des P82B715-Datenblatts [1].

Erste Versuche

Zunächst einmal benötigen Sie einen kleinen Testaufbau, mit dem Sie überprüfen, ob der I2C-Bus fehlerfrei arbeitet. In Teil 10 dieser Reihe [2] finden Sie eine entsprechende Vorlage – das Setup kommt in diesem Teil des Workshops wieder zum Einsatz.

Die Hardware, mit der Sie leicht prüfen, ob der I2C-Bus fehlerfrei arbeitet, besteht aus zwei PCA8574-Bausteinen (Abbildung 2). Wir haben die zwei Chips mit böser Absicht auf zwei Breadboards verteilt: So können wir später zum Testen des P82B715 rund 100 Meter Kabel zwischen die zwei Platinen schalten.

Abbildung 2: Ein erster Testaufbau beschränkt sich auf zwei Breadboards.

Abbildung 3 zeigt den dazugehörigen Schaltplan, den Sie auf der Heft-DVD im gEDA-Format finden. Die zwei PCA8574-Bausteine erhalten die I2C-Adressen 0x20 und 0x21. Ein Baustein arbeitet im Input-Betrieb, der andere übernimmt die Ausgabe. Auf dem Ausgabebaustein lassen wir über ein kleines Programm ein einfaches Lauflicht ausgeben.

Abbildung 3: Der Schaltplan zum Testaufbau aus Abbildung 2.

Bevor es ans Programmieren geht, sehen wir noch kurz mit I2cdetect auf dem Bus nach, ob sich unsere zwei PCA8574 auch ordentlich melden (Listing 1). Ist das nicht der Fall, müssen Sie den Hardware-Aufbau noch einmal überprüfen. Wir gehen im Folgenden davon aus, dass die Grundschaltung fehlerfrei arbeitet.

Listing 1

 

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 21 -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Unser Testprogramm liest den Wert vom Input-Baustein und gibt ihn zur Kontrolle auch auf der Konsole aus (Listing 2). Um für etwas Abwechslung zu sorgen, verwenden wir in diesem Teil des Workshops weder Java noch C, sondern ein schlichtes Bash-Skript. Es startet mit einer Endlosschleife für unser Lauflicht. Danach folgen zwei Schleifen: Die erste For-Schleife zählt hoch, die zweite wieder herunter. Um das Testskript zu beenden, müssen Sie es durch einen Druck auf [Strg]+[C] abbrechen.

Listing 2

 

#!/bin/bash
while [ 1 ]; do
  for((i=1; i<256; i=i*2)); do
    k=$(expr 255 - $i);
    i2cset -y 1 0x20 $k;
    i2cget -y 1 0x21;
    sleep 0.5;
  done
  for((i=64; i>1; i=i/2)); do
    k=$(expr 255 - $i);
    i2cset -y 1 0x20 $k;
    i2cget -y 1 0x21;
    sleep 0.5 ;
  done
done

In der Variablen k stecken die invertierten Werte der Zähler, da wir die Ausgänge des PCA8574 invertiert betreiben. Der Grund dafür wurde schon ausgiebig in Teil 8 dieser Reihe besprochen. Die Befehle i2cset und i2cget übertragen die Werte von den entsprechenden Halbleitern. Mehr gibt es über das kleine Skript eigentlich nicht zu sagen – höchste Zeit für eine erste Versuchsreihe.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 5 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Raspberry Pi Geek kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Aktuelle Ausgabe

10/2018
Weltweiter Empfang

Diese Ausgabe als PDF kaufen

Preis € 7,99
(inkl. 19% MwSt.)

Stellenmarkt

Neuigkeiten

  • Physiklabor

    Der Java-Dialekt Processing zielt auf interaktive Animationen ab und eignet sich auch für Programmiernovizen.

  • Abstand halten

    Der VL53L0X misst präzise Entfernungen bis zu zwei Metern. Das macht ihn zum passenden Kandidaten für RasPi-Projekte.

  • Tux-Funk

    Der SDR-Empfänger RSP2pro von SDRplay bringt Amateurfunk auf den Raspberry Pi.

  • Himbeersieb

    Die aus Österreich stammende Upribox auf Basis des Raspberry Pi schützt wirkungsvoll vor Gefahren aus dem Internet. Jetzt ist das System in der zweiten Version erschienen.

  • Unter Kontrolle

    Das programmierbare Steuermodul Controllino bietet mit seinen zahlreichen Ein- und Ausgängen vielfältige Möglichkeiten.

  • Dehnübungen

    Ein RasPi eignet sich bestens zum Steuern eines Fischertechnik-Roboters. Damit dabei kein Chaos entsteht, gilt es, die Steuerung genau zu programmieren.

  • Klangmaschine

    Der RasPi bringt genügend Performance mit, um als kleine DAW zu dienen. Mit Waveform 9 haben Sie die passende Software zur Hand.

  • Fremdgehen

    Nicht jedes Programm gibt es auch für die ARM-Architektur. Der kommerzielle Emulator Exagear Desktop fungiert als Übersetzer zwischen der ARM- und x86-Welt.

  • Ausfallsicher

    Eine selbst gebaute USV für den RasPi verschafft Ihnen die entscheidenden Sekunden, um bei unerwarteten Stromausfällen einem Datenverlust vorzubeugen.

  • Am laufenden Band

    Die Kombination aus einem Fischertechnik-Bausatz und dem Controllino-Modul bietet eine ideale Basis, um ein funktionierendes Industriemodell zu gestalten.