Hallo Michel,

zu dem Thema, habe ich das gleiche Ausgangsprogramm in einem Thread eines italienischen Forums gefunden:
http://www.xar.it/mars/topic.asp?TOP...rkIII+e+CMPS03

In einem Posting kam dann übrigens genau die von mir vorgeschlagene Zeile, allerdings bin ich des italienischen nicht mächtig, deshalb verstehe ich die Begründung nicht, warum es nicht ging, evtl. hängt das mit dem I2C Bus Timing zusammen (Einstellung des 100kHz Bustakts bei 20MHz CPU?).

Jedenfalls gibt es auch ein angeblich funktionstüchtiges Programm (für 4MHz Clock), was ich hier mal kopiere:

http://on1djj.rug.ac.be/Grasmaaier/Compass.bas

////////////////////////
Clear

Define OSC 4 ' Set Xtal Frequency

Red_LED Var PortB.1 ' Assign the green LED to this pin
Green_LED Var PortB.2 ' Assign the red LED to this pin
' IR_Sensor Var PortB.4 ' Assign the IR Sensor to this pin
SCL VAR PortB.0 ' I²C Clock
SDA VAR PORTB.7 ' I²C Data
Compass CON $C0 ' I²C adres van compas
Reg1 CON 1 ' Adres register 1 : Byte
Reg2 CON 2 ' Begin adres register 2 : Word
RegCalibrate CON 15 ' Calibrate adres (write 255 to caibrate)
BearingReg VAR Word
Teller VAR Byte


Pause 500

High Red_LED
Pause 100
Low Red_LED
High Green_LED
Pause 100
Low Green_LED


'PIN mode with 4-bit
'Set LCD Data port
DEFINE LCD_DREG PORTA
'Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_DBIT 0
'Set REGISTER Select port
DEFINE LCD_RSREG PORTB
' Set LCD Register Select bit
DEFINE LCD_RSBIT 5
' Set LCD Enable port
DEFINE LCD_EREG PORTB
' Set LCD Enable bit
DEFINE LCD_EBIT 6
' Set LCD bus size (4 or 8 bits)
DEFINE LCD_BITS 4
' Set number of lines on LCD
DEFINE LCD_LINES 2

@ bcf LCDinitFlag

Symbol Cmd = $FE
Symbol ClearLCD = 1
Symbol Home = 2
Symbol Line2 = $C0
Symbol CursorOff = $0C
Symbol LineOn = $0E
Symbol BlinkOn = $0F
Symbol Left = $10
Symbol Right = $14
Symbol Procent = $25
Symbol ShiftLeft = $08

I2CREAD SDA,SCL,Compass,0,[teller] ' Reg0 software version CMPS03
LCDOUT Cmd, ClearLCD, "Compass TEST v", dec teller


Loop:

I2CREAD SDA,SCL,Compass,Reg2,[BearingReg] ' 16 bit
'LCDOUT Cmd, Line2, dec BearingReg dig 3, dec BearingReg dig 2, dec BearingReg dig 1, ".", dec BearingReg dig 0
LCDOUT Cmd, Line2, dec3 BearingReg/10, ".", dec1 BearingReg//10, $DF ' 000.0° - 359.9°


' I2CREAD SDA,SCL,Compass,Reg1,[Teller] ' 8 bit
' LCDOUT Cmd, Line2, dec teller dig 2, dec teller dig 1, dec teller dig 0

Pause 100

Goto Loop

Calibrate:

For Teller = 1 to 4
LCDOUT Cmd, ClearLCD, "kwadrant", dec Teller
' Wacht op gebruiker (IR-remote)
I2CWRITE SDA,SCL,Compass,RegCalibrate,[255]
Next
/////////////////////


Hoffe das hilft jetzt wirklich, ein schönes Weihnachtsfest und
Viele Grüße
Jörg