Hallo,

falls es noch für jemanden von Interesse ist: ich habe die I2C-Kommunikation mit dem Sensormodul mal in Bascom implementiert. Hier ist ein Beispielcode:

Code:
' kleines beispielprogramm zum auslesen des bma020
' malte ahlers 2010 
' weitere infos auf malteahlers.de
'
'
' compiler steuerung
$regfile = "m8def.dat"
$crystal = 1000000
$framesize = 64
$swstack = 64
$hwstack = 64
$baud = 9600
$lib "i2c_twi.lbx"
'
' hardware konfigurieren
' - taster
Config Pinb.6 = Input
Portb.6 = 1
Config Pinb.7 = Input
Portb.7 = 1
Config Pind.5 = Input
Portd.5 = 1
Taster1 Alias Pinb.6
Taster2 Alias Pinb.7
Taster3 Alias Pind.5
' - leds
Config Portd.7 = Output
Config Portd.6 = Output
Config Portb.0 = Output
Led_gl Alias Portd.7
Led_rt Alias Portd.6
Led_gr Alias Portb.0
' - I2C
Config Scl = Portc.5
Config Sda = Portc.4
'
' variablen dimensionieren
Dim V(6) As Byte
Dim Ax As Integer At V(1) Overlay
Dim Ay As Integer At V(3) Overlay
Dim Az As Integer At V(5) Overlay
Dim Acc_cntr As Byte
Dim I As Byte
Dim Acc_range As Byte
Dim D2g As Single
Dim S As Single
'
' konstanten
Const Acc_w = &H70
Const Acc_r = &H71
'
' subs
Declare Sub Set_acc_range(byval Range As Byte)
'
' hauptprogramm
Print "acc test!"
Wait 1
'
I2cinit
'
Call Set_acc_range(0)
' messbereich:
' Set_acc_range(0) -> +/- 2g (default)
' Set_acc_range(1) -> +/- 4g
' Set_acc_range(2) -> +/- 8g
'
Do
   I2cstart
   '
   ' sensor adressieren
   I2cwbyte Acc_w
   '
   ' acc datenregister adressieren
   I2cwbyte &H02
   '
   I2cstop
   '
   I2cstart
   '
   ' daten lesen
   I2cwbyte Acc_r
   '
   For I = 1 To 5
      I2crbyte V(i) , Ack
   Next I
   I2crbyte V(6) , Nack
   '
   I2cstop
   '
   ' format konvertieren
   Ax = Ax / 64
   Ay = Ay / 64
   Az = Az / 64
   '
   ' in beschleunigungen umrechnen & ausgeben
   S = Ax * D2g
   Print "a(x)= " ; S ;
   S = Ay * D2g
   Print "  a(y)= " ; S ;
   S = Az * D2g
   Print "  a(z)= " ; S
   '
   Toggle Led_rt
   Waitms 10
   '
Loop
'
End
'
Sub Set_acc_range(byval Range As Byte)
   I2cstart
   '
   ' sensor adressieren
   I2cwbyte Acc_w
   '
   ' kontrollregister adressieren
   I2cwbyte &H14
   '
   I2cstop
   '
   I2cstart
   ' kontrollregister lesen
   I2cwbyte Acc_r
   I2crbyte Acc_cntr , Nack
   '
   I2cstop
   '
   ' kontrollregister manipulieren
   Acc_cntr.3 = Range.0
   Acc_cntr.4 = Range.1
   '
   I2cstart
   '
   ' kontrollregister zurückschreiben
   I2cwbyte Acc_w
   I2cwbyte &H14
   I2cwbyte Acc_cntr
   '
   I2cstop
   '
   ' umrechnungsfaktor neu berechnen
   D2g = 2 ^ Range
   D2g = D2g * 2
   D2g = D2g / 512
   '
End Sub
Ich habe auf meiner Homepage noch ein paar zusätzliche Informationen zu dem Programm hinterlegt. Hier kann man nachlesen, wenn man mag: http://www.mtahlers.de/index.php?opt...d=32&Itemid=69

Gruß
Malte