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

04/2019
TV & Multimedia

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Finger weg

    Ein Temperatursensor verrät, ob Sie einen Gegenstand gefahrlos berühren dürfen. Beim Messen brauchen Sie dabei noch nicht einmal Kontakt zum Objekt.

  • Aus einer Hand

    Um einen Mikrocontroller zu programmieren, genügt ein Raspberry Pi. Wir zeigen, was Sie dazu noch benötigen.

  • Im Gleichtakt

    Synchronisierte Live-Loops und selbst erstellte Funktionen helfen dabei, Sonic Pi wie ein Live-Instrument zu spielen.

  • Mach mal

    Das Ftduino-Modul schlägt die Brücke zu Fischertechnik und ermöglicht es unter anderem, einen Drei-Achsen-Roboter anzusteuern.

  • Eleganter Diener

    Jeden Morgen dieselben Handgriffe, um zu sehen, ob die S-Bahn fährt und wie das Wetter wird? Ein cleverer Infoscreen auf RasPi-Basis automatisiert den Vorgang.

  • Bienenflüsterer

    Bienenzüchter, die ihre Völker besser kennenlernen möchten, müssen die fleißigen Insekten nicht pausenlos stören. Mit einem Raspberry Pi und verschiedenen Sensoren überwachen sie Temperatur, Luftfeuchtigkeit und bald auch das Gewicht des Bienenstocks.

  • Beerige Musik

    Für echten Hi-Fi-Sound braucht es mehr als einen kleinen Bluetooth-Brüllwürfel. Mit Volumio und einem Raspberry Pi rüsten Sie Ihre klassische Hi-Fi-Anlage mit smarten Funktionen auf.

  • Ton ab!

    Auf den ersten Blick erscheint der RasPi zu schwachbrüstig für den Betrieb leistungshungriger DAW-Software. Doch der Schein trügt.

  • Himbeer-TV

    Der DVB TV µHAT rüstet den Raspberry Pi mit einem DVB-T/T2-Tuner auf. Die deutsche TV-Landschaft schränkt dessen Möglichkeiten allerdings ein.

  • Git à la RasPi

    Mit wenigen Handgriffen zum Git-Hoster: Die dezentrale Arbeitsweise von Git erleichtert in Kombination mit der Netzwerkfähigkeit des RasPi das Verwalten von Quellcode.