Heute mal wieder was Hardwarebastelei ;)
Es geht um den I2C-Bus den der BananaPI zur Verfügung stellt. Das ist ein 2-adriges Bussystem an dem man maximal 8 Teilnehmer anschließen darf.
Hardware:
Als allererstes eine Warnung! Viele I2C-Module sind für 5 Volt gebaut, der BananaPi kann aber nur 3,3 Volt Signale verarbeiten. Für den Betrieb der 5V-Module an 3,3V-Geräten gibt es preiswerte Wandler. Eine Nichtbeachtung kann zur Zerstörung des BananaPis führen!
Der Adapter ist bestellt, aber ich hatte von der Fa. Wenzel Systems die I2C-Switch-Bar hier liegen und man will das ja ausprobieren. Da bin ich über einen Tipp im Netz gestolpert. Auf dem Board sind zwei Abschlußwiderstände auf den Bus geschaltet. Diese kann man entfernen, dafür sind auf dem Board zwei Lötbrücken SJ1 und SJ2. Das Lötzinn entfernt, nachgemessen das die Verbindung nicht mehr besteht und angeschlossen.
Der Anschluß an einen BananaPi sieht wie folgt aus:
- Switch-Bar BPi
- +5V CON3 / P02
- GND CON3 / P06
- SDA CON3 / P03
- SCL CON3 / P05
Wenn ich das alles richtig verstanden habe, dient die Leitung SCL für die Zeitsignale (Clock) und SDA für die Daten (Data). Die beiden Leitungen bilden den Bus, die anderen beiden dienen der Stromversorgung der Switch-Bar.
Software:
Als Betriebssystem setze ich ein Raspbian ein. Als erstes brauchen wir mal das Programm für den I2C-Bus.
sudo apt-get install i2c-tools
Damit werden dann folgende Programme installiert.
- libi2c-dev
- python-smbus
- i2c-tools
Mein erster Versuch den Bus abzusuchen:
sudo i2cdetect -y 1
Ausgabe:
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Hmm, da sieht man keine Adresse, also ist an dem Bus kein Teilnehmer angeschlossen. Nächster Versuch:
sudo i2cdetect -y 2
Ausgabe:
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Da ist die Switch-Bar :) Die Adresse lautet 0x3e. Wenn ich nun alle acht Schalter der Switch-Bar auf ON stelle, werden alle Signalleitungen auf GND geschaltet. Hier der Schaltplan. Nun lesen wir den Wert über den Bus aus.
sudo i2cget -y 2 0x3e
Ausgabe:
0x00
Nun stellen wir den Schalter Nr. 1 auf OFF.
sudo i2cget -y 2 0x3e
Ausgabe:
0x01
usw.
Man kann auch sehr einfach über den Bus Werte in die Geräte schreiben, dafür nimmt man dann folgenden Befehl:
i2cset
Es gibt viele verschiedene Module, die man an den I2C-Bus anschliessen kann. Einfach mal in der Bucht "I2C" eingeben und sich umschauen. Ich habe da schon einige interessante Module gesehen, einige sind auf dem Weg zu mir.
Viel Spaß beim Ausprobieren.
Quellen:
Schaltplan Switch-Bar