|
i2c_init |
Ruhe: Keine
Aktivität auf dem Bus |
|
i2c_start |
Start-Bedingung:
Data fällt, während Clock high ist |
|
i2c_stop |
Stop-Bedingung:
Data steigt, während Clock high ist |
|
i2c_w1 |
Eine Eins
übertragen: Data ist High während eines Clock-Impulses. |
|
i2c_w0 |
Eine Null
übertragen: Data ist Low während eines Clock-Impulses. |
|
i2c_w(4C) d=i2c_rack d=i2c_rnak |
Acknowledge:
Nach acht Datenbits folgt das ACK-Bit |
|
i2c_start |
Erfolgreiche Übertragung des Datenbytes 0011 1100 an den Baustein 0110 1110 |
mit Quelltext für Linux in C (26.8 kB) bzw Windos/Delphi 4 (39.6 kB)
|
Befehl |
Hinweise |
Ergebniss |
|
i2cdevls |
Listet die verfügbaren I2C-Bausteine auf! |
40 41 48 49 4A
4B 9E 9F |
|
i2cadrda |
Aufruf: i2cadrda adr dat Sendet an den Baustein mit der Adresse adr das
Datenbyte dat |
OK |
|
i2cr8591 |
Initalisiert den Oszi-Baustein PCF 8591 und fragt die 4 AD-Wandler ab i2cr8591 adr mod da |
OK 13 5A
B4 D3 |

|
· Digital OUT |
Ansteuerung von Leuchtdioden |
|
· Digital IN |
Abfrage von Kipp-Schaltern |
|
· Analog OUT |
Funktionsgenerator fuer E-Funktion |
|
· Analog IN |
|
PCF 8574
|
|
|
mit
Pascal(DOS)/Delphi(Win) |
mit Visual Basic(Win) |
mit C bzw
C++(Linux) |
uses iic_tools;..iic_port:=iic_autocfg;if iic_port=0 then fehler('I2C Bus nicht da');..iic_start; iic_w($40); iic_w(data);iic_stop;.. |
Module
iic_tools.bas geladen! ..iic_Port=iic_autocfgif iic_port=0 then fehler 'I2C Bus nicht da'..iic_start iic_w(&H40) iic_w(data)iic_stop.. |
Kernel-Module
i2c geladen # include "i2c.h";..int I2C=fopen("/dev/i2c0","r+");if (I2C=0) {fehler("I2C-Bus nicht da");}..ioctl(I2C,I2C_SLAVE,0x20);write(I2C,data,1);fclose(I2C); |
Damit die Datenbytes richtig eingelesen werden können wird
zunächst an alle Pins eine Eins ausgegeben!
Diese Eins(+5V) darf jedoch auf Masse gelegt werden. Dann wird eine Null
eingelesen, wenn die ursprünglich angelegte Eins jedoch noch vorhanden ist ,
wird wieder eine Eins eingelesen!
|
mit Pascal(DOS)/Delphi(Win) |
mit Visual Basic(Win) |
mit C bzw
C++(Linux) |
uses iic_tools;..iic_port:=iic_autocfg;if iic_port=0 then fehler('I2C Bus nicht da!');..iic_start; iic_w($40); iic_w($FF);iic_stop;iic_start; iic_w($41); data:=iic_rack;iic_stop; |
Module
iic_tools.bas geladen! ..iic_Port=iic_autocfgif iic_port=0 then fehler 'I2C Bus nicht da'..iic_start iic_w(&H40) iic_w(&HFF)iic_stopiic_start iic_w(&H41) data=iic_rack(&HFF)iic_stop |
Kernel-Module
i2c geladen # include "i2c.h";..int I2C=fopen("/dev/i2c0","r+");if (I2C=0) {fehler("I2C-Bus nicht da");}..ioctl(I2C,I2C_SLAVE,0x20); /*nur 7 Bit Adresse noetig!*/write(I2C,0xFF,1);read (I2C,data,1); fclose(I2C); |
|
PCF 8591 · 4 Kanal AD mit 8 Bit Auflösung · 1 Kanal DA mit 8 Bit
Auflösung
|
|
Configuration des PCF8591: 
|
mit Pascal(DOS)/Delphi(Win) |
mit Visual Basic(Win) |
mit C bzw
C++(Linux) |
uses iic_tools;..iic_port:=iic_autocfg;if iic_port=0 then fehler('I2C Bus nicht da');..iic_start; iic_w($90); iic_w(cfg); iic_w(dawert);iic_stop;.. |
Module iic_tools.bas geladen! ..iic_Port=iic_autocfgif iic_port=0 then fehler 'I2C Bus nicht da'..iic_start iic_w(&H90) iic_w(cfg) iic_w(da-wert)iic_stop .. |
Kernel-Module
i2c geladen # include "i2c.h";..int I2C=fopen("/dev/i2c0","r+");if (I2C=0) {fehler("I2C-Bus nicht da");}..ioctl(I2C,I2C_SLAVE,0x48);write(I2C,cfg,1);write(I2C,dawert,1);fclose(I2C); |
Damit die Datenbytes richtig eingelesen werden können wird
zunächst an alle Pins eine Eins ausgegeben!
Diese Eins(+5V) darf jedoch auf Masse gelegt werden. Dann wird eine Null
eingelesen, wenn die ursprünglich angelegte Eins jedoch noch vorhanden ist ,
wird wieder eine Eins eingelesen!
|
mit Pascal(DOS)/Delphi(Win) |
mit Visual Basic(Win) |
mit C bzw
C++(Linux) |
uses iic_tools;..iic_port:=iic_autocfg;if iic_port=0 then fehler('I2C Bus nicht da!');..iic_start; iic_w($90); iic_w($44);iic_w($FF);iic_stop;iic_start; iic_w($91); dummy:=iic_rack; k1 :=iic_rack; k2 :=iic_rack; k3 :=iic_rack; k4 :=iic_rack; dummy:=iic_rnak;iic_stop; |
Module
iic_tools.bas geladen! ..iic_Port=iic_autocfgif iic_port=0 then fehler 'I2C Bus nicht da'..iic_start iic_w(&H40) iic_w(&H44) iic_w(&HFF)iic_stopiic_start iic_w(&H41) dummy=iic_rack k1=iic_rack k2=iic_rack k3=iic_rack k4=iic_rack dummy=iic_rnakiic_stop |
Kernel-Module
i2c geladen # include "i2c.h";..int I2C=fopen("/dev/i2c0","r+");if (I2C=0) {fehler("I2C-Bus nicht da");}..ioctl(I2C,I2C_SLAVE,0x48); /*nur 7 Bit Adresse noetig!*/write(I2C,0x44,1);write(I2C,0xFF,1);read (I2C,dummy,1);read (I2C,k1,1);read (I2C,k2,1);read (I2C,k3,1);read (I2C,k4,1);fclose(I2C); |
Dank an:
Robert-Bosch-Schule Ulm
Abt. Elektrotechnik, Datentechnik, Programmiersprachen