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

Ähnliche Artikel

Aktuelle Ausgabe

06/2019
Home Improvement

Diese Ausgabe als PDF kaufen

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

Stellenmarkt

Neuigkeiten

  • Verschlungene Pfade

    Mit Schleifen, Fallunterscheidungen und Funktionen programmieren Sie komplexe Skripte auf einfache und elegante Weise.

  • Extrem genau

    Mit einem A/D-Wandler messen Sie bei Bedarf Spannungen. Der MCP3424 macht dabei konstruktionsbedingt eine gute Figur.

  • Verbindungsaufnahme

  • Süßer Wecker

    Dem RasPi fehlen sowohl eine Echtzeituhr als auch ein BIOS, ein zeitgesteuertes Wecken erfordert also Zusatzkomponenten. Hier springt der Witty Pi Mini in die Bresche, ein µHAT von UUGear.

  • Windows to go

    Das Aufsetzen zuverlässiger und sicherer Remote-Desktop-Lösungen erfordert einiges Know-how. Die RasPi-basierte Pinbox von Pintexx reduziert den Konfigurationsaufwand auf ein Minimum.

  • Prima Klima

    In Museen ist es Pflicht, zu Hause nützlich: das permanente Prüfen und zentrale Erfassen der Feuchtigkeit und Temperatur in Räumen.

  • Auf einen Blick

    Ein maßgeschneiderter Infoscreen auf RasPi-Basis mit stromsparendem E-Ink-Display zeigt Termine, Bilder, Mitteilungen und Wetterinformationen an.

  • Sanft berührt

    Mit einem RasPi und dem Controllermodul PiXtend lassen sich mühelos Roboterarme ansteuern und deren Bewegung automatisieren.

  • Popcorn-Kino

    Mit Kodi 18.0 unterstützt LibreELEC 9.0 jetzt die von vielen Streaming-Diensten genutzte DRM-Verschlüsselung. Die Integration von Netflix, Amazon und Co. erfordert allerdings Handarbeit.

  • So nah und doch so fern

    Der RasPi kommt häufig als Server oder Steuerrechner für spezielle Zwecke zum Einsatz. Mit Anydesk erhalten Sie dazu eine Steuersoftware mit grafischer Oberfläche.