MAX7311.C2 - Hilfe


Beschreibung

Einfügen als Systemmodul

Konstanten

Hinweise

Funktionen:

Konfiguration:
setDDRw()
setDDRb()
setDDRn()
setDDR()

getDDRw()
getDDRb()
getDDRn()
getDDR()

setPIw()
setPIb()
setPIn()
setPI()

getPIw()
getPIb()
getPIn()
getPI()

setReg()
getReg()

Ports Schreiben:
setw()
setb()
setn()
set()

toggle()
pulse()

Ports Lesen (Ausgänge):
getOutw()
getOutb()
getOutn()
getOut()


Ports Lesen (Eingänge):
getw()
getb()
getn()
get()


Beschreibung   Nach oben

Das Modul max7311.c2 ist ein Treiber für den 16Bit-I²C-Bus-Portexpander
MAX7311 und damit auch für den CCTools Baustein I2C-Port-16-HS



Einfügen als Systemmodul
   Nach oben

Die Datei max7311.c2 in das Verzeichnis .\CControl2\Lib der IDE
kopieren und in der Datei modules.txt die Zeile max7311.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[] =0x20,0x22,0x24,0x26,0x28,0x2A,0x2C,0x2E,//A0:GND/V+,A1:SCL/SDA,A2:GND/V+
              0x30,0x32,0x34,0x36,0x38,0x3A,0x3C,0x3E,//A0:GND/V+,A1:SCL/SDA,A2:SCL/SDA
              0x40,0x42,0x44,0x46,0x48,0x4A,0x4C,0x4E,//A0:GND/V+,A1:GND/V+,A2:GND/V+
              0x50,0x52,0x54,0x56,0x58,0x5A,0x5C,0x5E,//A0:GND/V+,A1:GND/V+,A2:SCL/SDA

              0xA0,0xA2,0xA4,0xA6,0xA8,0xAA,0xAC,0xAE,//A0:SCL/SDA,A1:SCL/SDA,A2:GND/V+
              0xB0,0xB2,0xB4,0xB6,0xB8,0xBA,0xBC,0xBE,//A0:SCL/SDA,A1:SCL/SDA,A2:SCL/SDA
              0xC0,0xC2,0xC4,0xC6,0xC8,0xCA,0xCC,0xCE,//A0:SCL/SDA,A1:GND/V+,A2:GND/V+
              0xD0,0xD2,0xD4,0xD6,0xD8,0xDA,0xDC,0xDE;//A0:SCL/SDA,A1:GND/V+,A2:SCL/SDA


const AddrR[]=0x21,0x23,0x25,0x27,0x29,0x2B,0x2D,0x2F,//A0:GND/V+,A1:SCL/SDA,A2:GND/V+
              0x31,0x33,0x35,0x37,0x39,0x3B,0x3D,0x3F,//A0:GND/V+,A1:SCL/SDA,A2:SCL/SDA
              0x41,0x43,0x45,0x47,0x49,0x4B,0x4D,0x4F,//A0:GND/V+,A1:GND/V+,A2:GND/V+
              0x51,0x53,0x55,0x57,0x59,0x5B,0x5D,0x5F,//A0:GND/V+,A1:GND/V+,A2:SCL/SDA

              0xA1,0xA3,0xA5,0xA7,0xA9,0xAB,0xAD,0xAF,//A0:SCL/SDA,A1:SCL/SDA,A2:GND/V+
              0xB1,0xB3,0xB5,0xB7,0xB9,0xBB,0xBD,0xBF,//A0:SCL/SDA,A1:SCL/SDA,A2:SCL/SDA
              0xC1,0xC3,0xC5,0xC7,0xC9,0xCB,0xCD,0xCF,//A0:SCL/SDA,A1:GND/V+,A2:GND/V+
              0xD1,0xD3,0xD5,0xD7,0xD9,0xDB,0xDD,0xDF;//A0:SCL/SDA,A1:GND/V+,A2:SCL/SDA

Dies sind die Schreib-und Leseadressen des MAX7311.
Diese werden über die drei Adressleitung AD0, AD1, AD2 am MAX7311 eingestellt.
Dabei gibt es vier verschiedene Zustände an einem Adresseingang. (Quads)
Somit sind 4³ = 64 Adressen möglich.
Die Adressen lassen sich in 8 Gruppen unterteilen:

Adressbereich Int.Addr. AD0 Low AD0 High AD1 Low AD1 High AD2 Low AD2 High
0x20 - 0x2F 0 - 7 GND V+ SCL SDA GND V+
0x30 - 0x3F 8 - 15 GND V+ SCL SDA SCL SDA
0x40 - 0x4F 16 - 23 GND V+ GND V+ GND V+
0x50 - 0x5F 24 - 31 GND V+ GND V+ SCL SDA
0xA0 - 0xAF 32 - 39 SCL SDA SCL SDA GND V+
0xB0 - 0xBF 40 - 47 SCL SDA SCL SDA SCL SDA
0xC0 - 0xCF 48 - 55 SCL SDA GND V+ GND V+
0xD0 - 0xDF 56 - 63 SCL SDA GND V+ SCL SDA

Bei den Funktionen wird lediglich die interne Adresse des Moduls (0-63) übergeben.
Bei der Wahl der Adresse ist zu beachten, daß sich viele Adressbereiche mit anderen I²C-Bus-Bausteinen
überschneiden.
Beispielsweise benutzt der Baustein PCF8574 ohne A den Bereich 0x40 bis 0x4F,
oder serielle EEProms und Uhrenbausteine den Bereich 0xA0 bis 0xAF (Uhrenbausteine nur bis 0xA3)

//-- Register ------------------------------------------------------------------
const InL     = 0x0;//Input-Port-Register Port 0 bis 7
const InH     = 0x1;
//Input-Port-Register Port 8 bis 15
const OutL    = 0x2;
//Ausgangs-Register Port 0 bis 7
const OutH    = 0x3;
//Ausgangs-Register Port 8 bis 15
const PolInvL = 0x4;
//Port-Invertierungs-Register für Eingänge Port 0 bis 7
const PolInvH = 0x5;
//Port-Invertierungs-Register für Eingänge Port 8 bis 15
const DDR_L   = 0x6;
//Data-Direction-Register Port 0 bis 7 (Datenrichtung)
const DDR_H   = 0x7;
//Data-Direction-Register Port 8 bis 15 (Datenrichtung)
const TO_Reg  = 0x8;
//Timeout-Register

Dies sind die Registeradressen für die internen Register des MAX7311.


Funktionen:


DDR - Data Direction Register setzen
  Nach oben

    function setDDRw(byte addr, int DDR) returns int
    function setDDRb(byte addr, byte Port, byte DDR) returns int
    function setDDRn(byte addr, byte Port, byte DDR) returns int
    function setDDR(byte addr, byte Port, int DDR) returns int

Mit diesen Funktionen kann die Datenrichtung (Eingang oder Ausgang) der Ports
bestimmt werden. Dies kann wordportweise (setDDRw()), byteportweise (setDDRb()),
nibbleportweise (setDDRn()) oder einzelportweise (setDDR()) geschehen.
Bevor ein Port als Ein- oder Ausgang benutzt werden kann, muß dieser mit einer dieser
Funktionen als solcher gesetzt werden.
Nach Power On sind alle Ports des MAX7311 als Eingänge konfiguriert.
Die Funktion gibt True(-1) zurück, wenn sich an der angegebenen Adresse ein
Baustein befindet, andernfalls False(0).

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
Port Portnummer:
setDDRb: 0 oder 1 für Ports 0-7 oder 8-15
setDDRn: 0 bis 3 für Ports 0-3, 4-7, 8-11 oder 12-15
setDDR: 0 bis 15  für Ports 0 bis 15
DDR Bitmuster für DDR-Register. High-Bit=Eingang, Low-Bit=Ausgang
Bei setDDR() 0=Ausgang, ungleich 0 =Eingang


DDR - Data Direction Register lesen
  Nach oben

    function getDDRw(byte addr) returns int
    function getDDRb(byte addr, byte Port) returns byte
    function getDDRn(byte addr, byte Port) returns byte
    function getDDR(byte addr, byte Port) returns int

Mit diesen Funktionen kann die konfigurierte Datenrichtung (Eingang oder Ausgang)
der Ports ausgelesen werden. Dies kann wordportweise (getDDRw()),
byteportweise (getDDRb()), nibbleportweise (getDDRn()) oder
einzelportweise (getDDR()) geschehen.
Das Bitmuster wird als Rückgabewert zurückgegeben. Bei getDDR() wird
True(-1) oder False(0) zurückgegeben.
Ein High-Bit bedeutet Eingang, ein Low-Bit Ausgang.

addr Baustein: 0-63 (siehe Tabelle bei den Konstanten)
Port Portnummer:
setDDRb: 0 oder 1 für Ports 0-7 oder 8-15
setDDRn: 0 bis 3 für Ports 0-3, 4-7, 8-11 oder 12-15
setDDR: 0 bis 15  für Ports 0 bis 15

Polarity Inversion Register setzen  Nach oben

    function setPIw(byte addr, int PI) returns int
    function setPIb(byte addr, byte Port, byte PI) returns int
    function setPIn(byte addr, byte Port, byte PI) returns int
    function setPI(byte addr, byte Port, int PI) returns int

Mit diesen Funktionen kann die Polarität der Einzlnen Ports, sofern diese als
Eingang definiert sind, invertiert werden. Dies ist z.B. sinnvoll, wenn
ein Low-Pegel an einem Eingang als True gewertet werden soll.
(z.B. Taster oder Schalter gegen GND)
Dies kann wordportweise (setDDRw()), byteportweise (setDDRb()),
nibbleportweise (setDDRn()) oder einzelportweise (setDDR()) konfiguriert werden.
Ist ein Port als Ausgang konfiguriert, so hat das PI-Register keinerlei Einfluß auf diesen.
Die Funktion gibt True(-1) zurück, wenn sich an der angegebenen Adresse ein
Baustein befindet, andernfalls False(0).

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
Port Portnummer:
setPIb: 0 oder 1 für Ports 0-7 oder 8-15
setPIn: 0 bis 3 für Ports 0-3, 4-7, 8-11 oder 12-15
setPI: 0 bis 15  für Ports 0 bis 15
PI Bitmuster für PI-Register. High-Bit=Invertiert, Low-Bit=Normal
Bei setPI() 0=Normal, ungleich 0 =Invertiert



Polarity Inversion Register lesen
  Nach oben

    function getPIw(byte addr) returns int
    function getPIb(byte addr, byte Port) returns byte
    function getPIn(byte addr, byte Port) returns byte
    function getPI(byte addr, byte Port) returns int

Mit diesen Funktionen kann das PI-Register augelesen werden.
Dies kann wordportweise (setDDRw()), byteportweise (setDDRb()),
nibbleportweise (setDDRn()) oder einzelportweise (setDDR()) geschehen.
Das Bitmuster wird als Rückgabewert zurückgegeben. Bei getPI() wird
True(-1) oder False(0) zurückgegeben.
Ein High-Bit bedeutet Invertiert, ein Low-Bit Normal.

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
Port Portnummer:
getPIb: 0 oder 1 für Ports 0-7 oder 8-15
getPIn: 0 bis 3 für Ports 0-3, 4-7, 8-11 oder 12-15
getPI: 0 bis 15  für Ports 0 bis 15



Register setzen
  Nach oben

    function setReg(byte addr, byte Reg, byte data) returns int

Mit setReg() kann jedes Register des MAX7311 gesetzt werden.
Die Funktionen der einzlenen Register können aus dem Datenblatt des MAX7311
entnommen werden.
Die Funktion gibt True(-1) zurück, wenn sich an der angegebenen Adresse ein
Baustein befindet, andernfalls False(0).

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
Reg Register 0 bis 8
data Datenbyte mit Bitmuster des Registers



Register lesen
  Nach oben

    function getReg(byte addr, byte Reg) returns byte

Mit getReg() kann jedes Register des MAX7311 ausgelesen werden.
Die Funktionen der einzlenen Register können aus dem Datenblatt des MAX7311
entnommen werden.
Das Bitmuster des zu lesenden Registers wird als Bytewert zurückgegeben.
Ein High-Bit bedeutet Invertiert, ein Low-Bit Normal.

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
Reg Register 0 bis 8


Setzen von Ports
   Nach oben

    function setw(byte addr, int state) returns int
    function setb(byte addr, byte port, byte state) returns int
    function setn(byte addr, byte port, byte state) returns int
    function set(byte addr, byte port, int state) returns int

Mit diesen Funktionen wird der Schaltzustand der einzelnen Ports bestimmt.
Es können Word-, Byte-, Nibble- oder Einzelports gesetzt werden.
Bevor ein Port als Ausgang verwendet werden kann, muß dieser mit einer
setDDR-Funktion einmal als solcher definiert werden.
Die Funktion gibt True(-1) zurück, wenn sich ein Baustein unter der angegebenen
Adresse befindet, ansonsten False(0).

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
port setb(): Port 0 bis 1
setn(): Port 0 bis 3
set(): Port 0 bis 15
state Schaltzustand
bei setw(), setb() und setn(): Bitmuster
bei set() 0=low, !=0 = high



toggle()
   Nach oben

    function toggle(byte addr, byte port) returns int

Mit der Funktion toggle() wird der Pegel des angegeben Ports, sofern dieser als Ausgang
konfiguriert ist, invertiert.
Die Funktion gibt True(-1) zurück, wenn sich ein Baustein unter der angegebenen
Adresse befindet, ansonsten False(0).

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
port Port 0 bis 15



pulse()   Nach oben

    function pulse(byte addr, byte port) returns int

Mit der Funktion pulse() wird am angegebenen Port, sofern dieser als Ausgang
konfiguriert ist, ein kurzer Nadelimpuls ausgegeben.(zweimaliges  invertieren).
Die Funktion gibt True(-1) zurück, wenn sich ein Baustein unter der angegebenen
Adresse befindet, ansonsten False(0).

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
port Port 0 bis 15



Ausgänge einlesen   Nach oben

    function getOutw(byte addr) returns int
    function getOutb(byte addr, byte port) returns int
    function getOutn(byte addr, byte port) returns int
    function getOut(byte addr, byte port) returns int

Mit diesen Funktionen können die Schaltzustände der Ausgänge (bzw. Ausgangsregister)
eingelesen werden. Es wird das Bitmuster bei getOutw(), getOutb() und getOutn() bzw.
True(-1) für high und False(0) für low bei getOut() zurückgegeben.

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
port setb(): Port 0 bis 1
setn(): Port 0 bis 3
set(): Port 0 bis 15



Eingänge einlesen   Nach oben

    function getw(byte addr) returns int
    function getb(byte addr, byte port) returns int
    function getn(byte addr, byte port) returns int
    function get(byte addr, byte port) returns int

Mit diesen Funktionen können die Pegel Eingänge eingelesen werden.
Es wird das Bitmuster bei getw(), getb() und getn() bzw.
True(-1) für high und False(0) für low bei get() zurückgegeben.
Bevor ein Port als Eingang verwendet werden kann, muß dieser als solcher
definiert sein. (setDDR)
Nach Power On sind alle Ports des MAX7311 als Eingänge konfiguriert.

addr Bausteinadresse 0-63 (siehe Tabelle bei den Konstanten)
port setb(): Port 0 bis 1
setn(): Port 0 bis 3
set(): Port 0 bis 15


Hinweise:

Allgemein:

Anders als bei der C-Control II, werden die Ports des MAX7311 nicht
automatisch als Ausgang gesetzt, wenn auf diese geschrieben wird.
Das konfigurieren der Ports als Ausgänge muß mit einer der setDDR-Funktionen
erfolgen.

Open-Drain-Ports:

Standardmäßig bietet der MAX7311 keine Opendrain-Ports. Jedoch lässt sich
dies sehr einfach bewerkstelligen, indem man den Port wechselweise als
Eingang und Ausgang schaltet. Dabei müssen zuvor einmalig die Ports,
die als Open-Drain-Ports verwendet werden sollen, mit einem Low-Pegel
beschrieben werden.
Anschließend kann man mit dem wechselweisen konfigurieren der Ports
als Eingänge und Ausgänge diese als Open-Drain-Ports verwenden.
Ist der Port als Eingang definiert, so entspricht dies einem High-Pegel.
Ist der Port als Ausgang definiert, so entspricht dies einem Low-Pegel.


Autor: André Helbig   Mail: andre.h@cc2net.de    Erstellt: 13.9.2003