Funktionen:
Beschreibung Nach oben
Das Modul i2cmux8.c2 ist ein Treiber für den I²C-Multiplexer
PCA9548A
- z.B. für den CCTools
Baustein I2C-MUX8 HS -, als auch PCA9547,
PCA9546A, PCA9545A, PCA9544A, PCA9543A, PCA9542A, PA9540B,
um zwischen mehreren Sub-Bussen umschalten zu können.
Einfügen als Systemmodul
Nach oben
Die Datei i2cmux8.c2 in das Verzeichnis .\CControl2\Lib
der IDE
kopieren und in der Datei modules.txt die Zeile i2cmux8.c2
unterhalb von i2c.c2 einfügen.
Ein zusätzliches Ausrufezeichen unmittelbar nach einem Modulnamen in modules.txt
bestimmt,
daß das Modul in jedem neuen Projekt von Anfang an aktiviert wird.
Konstanten Nach oben
Busadressen:
const
Addr[] =0xE0,0xE2,0xE4,0xE6,0xE8,0xEA,0xEC,0xED;
const
AddrR[]=0xE0,0xE2,0xE4,0xE6,0xE8,0xEA,0xEC,0xED;
Diese Adressen entsprechen allen oben aufgeführten ICs mit 3
Adressleitungen.
ICs mit weniger Adressleitungen nutzen nur einen Teil dieser Adressen.
(Ist nur A0 und A1 vorhanden, so sind nur die Indizies 0-3 möglich.)
Funktionen:
Control-Rgister setzen Nach oben
function set(byte addr, byte controlregister) returns int
Mit dieser Funktion wird der Bus über das Controlregister festgelegt.
Bei den ICs PCA9548A, PCA9545A und PCA9543A können so auch
über Bitmuster mehrere Sub-Busse gleichzeitig gewählt werden.
Bei allen anderen Multiplexer-ICs wird der Busindex entsprechend der Angabe
im Datenblatt gewählt.
Die Funktion gibt True(-1) zurück, wenn sich an der angegebenen Adresse
ein Baustein befindet, andernfalls False(0).
addr | Baustein 0-7 entsprechend A0,A1,A2 |
controlregister | Control-Register |
Bus schalten Nach oben
function switch(byte addr, int bus) returns int
Nur bei ICs PCA9548A, PCA9545A und PCA9543A möglich.
Mit dieser Funktion wird der Bus festgelegt, welcher durchgeschalten werden
soll.
Es wird immer nur der angegebene Sub-Bus durchgeschaltet. Die restlichen
Sub-Busse
werden abgeschaltet.
Die Funktion gibt True(-1) zurück, wenn sich an der angegebenen Adresse
ein Baustein befindet, andernfalls False(0).
addr | Baustein 0-7 entsprechend A0,A1,A2 |
bus | Bus: -1 = kein Bus 0 bis 7 = Bus 0 bis Bus 7 |
Bus abfragen Nach oben
function get(byte addr) returns int
Mit get() wird der aktuelle Wert des Control-Register zurückgegeben.
addr | Baustein 0-7 entsprechend A0,A1,A2 |
Hinweise:
Wichtig bei Multithreading:
Wird der I²C-Multiplexer von mehreren Threads angesprochen, so müssen
die Routinen mit einem eigenem Capture mit einem gemeinsamen Flag gecaptured
werden.
Hierfür ist eine Flag-Variable im Modul bereits definiert.
Es gilt dann für jeden Thread folgendes Schema:
-Capture setzen
-I²C-MUX ansprechen
-I²C-Bus Bausteine hinter MUX ansprechen
-Captrure lösen
Autor: André Helbig
Erstellt: 24.02.2008 ©www.CC2Net.de