turi79
30.10.2007, 20:02
Guten Tag Allerseits,
ich beschäftige mich momentan mit der Programmierung der CMPS-Nx und BASCOM.
Der Link für den Kompass von Mindsensors ist:
http://www.mindsensors.com/index.php?module=documents&JAS_DocumentManager_op=viewDocument&JAS_Document_id=5
Ich bekomme immer die Zahl 255 vom Kompass egal in welcher Richtung ich den Kompass bewege. Kann jemand mir Helfe leisten. Ich wäre ihm dankbar. Die Ausgabe von "Print #4 , Err" gibt immer 1.
Wie kann ich die Err auf Null ändern? Was mache ich falsch bei der Kommunikation über I2C?
Vielen Dank
Ich habe folgender Source Code dafür geschrieben:
'################################################# ##
'Autor: HELP FIRST
'################################################# #############
'Diese Anweisung setzt die Fusebits automatisch korrekt (Syntax $PROG LB, FB , FBH , FBX )
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
Declare Sub Command(byval A As Byte)
Const Cmpsid = &H02
Const Cmpscommandreg = &H41
Const Cmpsreadresult = &H42
Const Cmpsreadheading = &H49
Const Cmpscal = &H43
Const Cmpsendcal = &H44
Const Cmpssampleus = &H55
Const Cmpssampleeu = &H45
Const Cmpsauto = &H41
'Const Cmpsport S1 ' Connect Cmps Sensorto This Port!!
Config Scl = Portd.0 'Ports fuer IIC-Bus
Config Sda = Portd.1
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4
Dim Value As Byte 'dim byte
Dim N As Integer
Wait 3
N = 0 'Warte 3 Sekunde
I2cinit
Print #4 , "Testprogramm "
Do
Print #4 , "START"
Wait 1
Call Read_eeprom(cmpsid , Value) : Print #4 , Value
'Call Command(cmpscal)
'Print #4 , "SEKUNDEN: " ; N
'N = N + 1
'If N = 20 Then
' Exit Do
'End If
Loop
End
Sub Command(byval A As Byte)
I2cinit
I2cstart
I2csend Cmpsid , 3
Print #4 , Err
I2cwbyte Cmpsid
Print #4 , Err
I2csend Cmpsid , Cmpscommandreg
Print #4 , Err
I2csend Cmpsid , A
Print #4 , Err
I2cstop
End Sub
'sample of reading a byte from EEPROM AT2404
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart 'generate start
I2cwbyte 3 'slave adsress
I2cwbyte Adres 'address of EEPROM 'repeated start
I2cwbyte Cmpscommandreg 'address of EEPROM 'repeated start
I2cwbyte Cmpsreadheading 'address of EEPROM 'repeated start
Waitms 10
I2cwbyte 2
I2cwbyte Adres
I2cwbyte Cmpsreadresult 'slave address (read)
I2crbyte Value , Nack 'read byte
I2cstop 'generate stop
End Sub
ich beschäftige mich momentan mit der Programmierung der CMPS-Nx und BASCOM.
Der Link für den Kompass von Mindsensors ist:
http://www.mindsensors.com/index.php?module=documents&JAS_DocumentManager_op=viewDocument&JAS_Document_id=5
Ich bekomme immer die Zahl 255 vom Kompass egal in welcher Richtung ich den Kompass bewege. Kann jemand mir Helfe leisten. Ich wäre ihm dankbar. Die Ausgabe von "Print #4 , Err" gibt immer 1.
Wie kann ich die Err auf Null ändern? Was mache ich falsch bei der Kommunikation über I2C?
Vielen Dank
Ich habe folgender Source Code dafür geschrieben:
'################################################# ##
'Autor: HELP FIRST
'################################################# #############
'Diese Anweisung setzt die Fusebits automatisch korrekt (Syntax $PROG LB, FB , FBH , FBX )
$prog , 255 , &B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
Declare Sub Command(byval A As Byte)
Const Cmpsid = &H02
Const Cmpscommandreg = &H41
Const Cmpsreadresult = &H42
Const Cmpsreadheading = &H49
Const Cmpscal = &H43
Const Cmpsendcal = &H44
Const Cmpssampleus = &H55
Const Cmpssampleeu = &H45
Const Cmpsauto = &H41
'Const Cmpsport S1 ' Connect Cmps Sensorto This Port!!
Config Scl = Portd.0 'Ports fuer IIC-Bus
Config Sda = Portd.1
Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com4:" For Binary As #4
Dim Value As Byte 'dim byte
Dim N As Integer
Wait 3
N = 0 'Warte 3 Sekunde
I2cinit
Print #4 , "Testprogramm "
Do
Print #4 , "START"
Wait 1
Call Read_eeprom(cmpsid , Value) : Print #4 , Value
'Call Command(cmpscal)
'Print #4 , "SEKUNDEN: " ; N
'N = N + 1
'If N = 20 Then
' Exit Do
'End If
Loop
End
Sub Command(byval A As Byte)
I2cinit
I2cstart
I2csend Cmpsid , 3
Print #4 , Err
I2cwbyte Cmpsid
Print #4 , Err
I2csend Cmpsid , Cmpscommandreg
Print #4 , Err
I2csend Cmpsid , A
Print #4 , Err
I2cstop
End Sub
'sample of reading a byte from EEPROM AT2404
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart 'generate start
I2cwbyte 3 'slave adsress
I2cwbyte Adres 'address of EEPROM 'repeated start
I2cwbyte Cmpscommandreg 'address of EEPROM 'repeated start
I2cwbyte Cmpsreadheading 'address of EEPROM 'repeated start
Waitms 10
I2cwbyte 2
I2cwbyte Adres
I2cwbyte Cmpsreadresult 'slave address (read)
I2crbyte Value , Nack 'read byte
I2cstop 'generate stop
End Sub