Viel Ärger mit einem schlechten Steckbord.
Irgendwie habe ich mit dem Ding von Conrad in die S... gegriffen.
Da ich die vielzahl von Änderungen nicht mehr herauspusseln wollte habe ich kurzerhand das die Sensorabfrage in Spinn neu geschrieben.
Von der Verteilung auf mehrere COG's und Pinn's habe ich mich auch getrennt.
Code: Alles auswählen
CON
_clkmode = xtal1 + pll16x
_xinfreq = 5_000_000
#0, SCL 'pin 0 I2C SCL
SDA 'pin 1 I2C SDA
GPSTX 'pin 2 RS232
GPSRX 'pin 3
#8, BLC1TX 'pin 8 BLC1 - motor front right send
BLC1RX 'pin 9 BLC1 - motor front right empf
BLC2TX 'pin 10 BLC2 - motor front left send
BLC2RX 'pin 11 BLC2 - motor front left empf
BLC3TX 'pin 12 BLC3 - motor back right send
BLC3RX 'pin 13 BLC3 - motor back right empf
BLC4TX 'pin 14 BLC3 - motor back left send
BLC4RX 'pin 15 BLC3 - motor back left empf
#16, VGA_BASEPIN 'pin 16-24 VGA-Anschluß
#24,
#28, I2C_SCL_EPROM 'pin 28 BOOT-EEPROM
I2C_SDA_EPROM 'pin 29 BOOT-EEPROM
DEBUG_RS232_TX 'pin 30 DEBUG_RS232
DEBUG_RS232_RX 'pin 31 DEBUG_RS232
CON ' All the I2C registers for the ITG-3200 gyro I2C address maximum bus speed is 400kHz.
' ITG3200 = %1101_0010 '0xD0 if tied low, 0xD2 if tied high
ITG3200 = %1101_0000
ITG3200_WHO_AM_I = $00 {{R/W ID(6-1)}}
ITG3200_SMPLRT_DIV = $15 {{R/W SMPLRT_DIV(7-0)}}
ITG3200_DLPF_FS = $16 {{R/W FS_SEL(4-3) DLPF_CFG(2-0)}}
ITG3200_INT_CFG = $17 {{R/W ACTL(7) OPEN(6) LATCH_INT_EN(5) INT_ ANYRD_2CLEAR(4) ITG_RDY_EN(2) RAW_ RDY_ EN(0)}}
ITG3200_INT_STATUS = $1A {{R ITG_RDY(2) RAW_ DATA_ RDY(0)}}
ITG3200_TEMP_OUT_H = $1B {{R TEMP_OUT_H(7-0)}}
ITG3200_TEMP_OUT_L = $1C {{R TEMP_OUT_L(7-0)}}
ITG3200_GYRO_XOUT_H = $1D {{R GYRO_XOUT_H(7-0)}}
ITG3200_GYRO_XOUT_L = $1E {{R GYRO_XOUT_L(7-0)}}
ITG3200_GYRO_YOUT_H = $1F {{R GYRO_YOUT_H(7-0)}}
ITG3200_GYRO_YOUT_L = $20 {{R GYRO_YOUT_L(7-0)}}
ITG3200_GYRO_ZOUT_H = $21 {{R GYRO_ZOUT_H(7-0)}}
ITG3200_GYRO_ZOUT_L = $22 {{R GYRO_ZOUT_L(7-0)}}
ITG3200_PWR_MGM = $3E {{R/W H_RESET(7) SLEEP(6) STBY_XG(5) STBY_YG(4) STBY_ZG(3) CLK_SEL(2-1)}}
CON 'All the I2C registers for the ADXL345
' ADXL345 = %0011_1010 acc I2C address maximum bus speed is 100kHz.
ADXL345 = %1010_0110
ADXL345_ID = $00
ADXL345_BW_RATE = $2C
ADXL345_POWER_CTL = $2D
ADXL345_DATA_FORMAT = $31
ADXL345_OUTX_L = $32
ADXL345_OUTX = $33
ADXL345_OUTY_L = $34
ADXL345_OUTY = $35
ADXL345_OUTZ_L = $36
ADXL345_OUTZ = $37
ADXL345_FIFO_CTL = $38
CON 'All the I2C registers for the HMC5843 mag I2C address maximum bus speed is ???kHz.
HMC5843 = %0011_1100
HMC5843_CONFIG_A = $00
HMC5843_CONFIG_B = $01
HMC5843_MODE = $02
HMC5843_DATA_X_MSB = $03
HMC5843_DATA_X_LSB = $04
HMC5843_DATA_Y_MSB = $05
HMC5843_DATA_Y_LSB = $06
HMC5843_DATA_Z_MSB = $07
HMC5843_DATA_Z_LSB = $08
HMC5843_STATUS = $09
HMC5843_ID_A = $0A
HMC5843_ID_B = $0B
HMC5843_ID_C = $0C
OBJ '1 Cog here
vga : "vga_text"
DAT
TXT008 byte "ok ", 13, 0
TXT009 byte "failed", 13, 0
TXT010 byte "DEBUG: ITG-3200 HMC5843 ADXL345", 13, 0
TXT011 byte 1, "ITG-3200 init: ", 0
TXT012 byte "ADXL345 init: ", 0
TXT013 byte "HMC5843 init: ", 0
VAR
long XG, YG, ZG, TG 'Gyro
long XA, YA, ZA 'Acc
long XC, YC, ZC 'Compass
long time
PUB main | a, b, c
vga.start(VGA_BASEPIN)
' vga.str(@TXT010)
waitcnt(clkfreq + cnt) 'start-up delay
repeat
'******************************************************************************************************
' a := gyro.Initi(I2C_SCL1, I2C_SDA1, @XG, @YG, @ZG, @Temp) 'init itg3200
vga.str(@TXT011)
XG := YG := ZG := TG := 0
WriteLocation(ITG3200, ITG3200_PWR_MGM, %1000_0000) 'reset to defaults
waitcnt(clkfreq/200 + cnt) '5ms
WriteLocation(ITG3200, ITG3200_DLPF_FS, %0001_1010) '2000/sec, 1Khz, 98Hz low pass
WriteLocation(ITG3200, ITG3200_SMPLRT_DIV, %0000_0011) '4 samples per sample
WriteLocation(ITG3200, ITG3200_PWR_MGM, %0000_0001) 'PLL with X Gyro reference
WriteLocation(ITG3200, ITG3200_INT_CFG, %0000_0001) 'Enable data ready status
readLocation (ITG3200, ITG3200_INT_STATUS) 'reset data ready
if ((readLocation(ITG3200, ITG3200_WHO_AM_I)<<1)&$FC) == (ITG3200 & $FC) 'check device id
vga.str(@TXT008)
else
vga.str(@TXT009)
'******************************************************************************************************
' b := acc.Init(I2C_SCL2) 'init adxl345, default to ±16G
vga.str(@TXT012)
XA := YA := ZA := 0
if ReadLocation(ADXL345, ADXL345_ID) == %1110_0101
WriteLocation(ADXL345, ADXL345_POWER_CTL, %0000_0000) 'Standby mode
WriteLocation(ADXL345, ADXL345_POWER_CTL, %0000_1000) 'Measurement mode
WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1000) '±2G
' WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1001) '±4G
' WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1010) '±8G
' WriteLocation(ADXL345, ADXL345_DATA_FORMAT, %0000_1011) '±16G
WriteLocation(ADXL345, ADXL345_BW_RATE, %0000_1010) '100Hz
WriteLocation(ADXL345, ADXL345_POWER_CTL, %0000_1000)
WriteLocation(ADXL345, ADXL345_FIFO_CTL, %0000_0000) 'bypass mode
vga.str(@TXT008)
else
vga.str(@TXT009)
'******************************************************************************************************
' c := compass.Init(I2C_SCL3, I2C_SDA3, @XC, @YC, @ZC) 'init compass
vga.str(@TXT013)
' FourFive := _FourFive
writeValue(HMC5843, HMC5843_ID_A)
if readValue24(HMC5843) == $00483433'"H43"
vga.str(@TXT008)
else
vga.str(@TXT009)
writeLocation(HMC5843, HMC5843_CONFIG_A, $3C)
writeLocation(HMC5843, HMC5843_CONFIG_B, $02)
writeLocation(HMC5843, HMC5843_MODE, $00)
'******************************************************************************************************
if readLocation(ITG3200, ITG3200_INT_STATUS) & 1
XG := readLocation16(ITG3200, ITG3200_GYRO_XOUT_H)
vga.hex(XG,4)
vga.out(" ")
YG := readLocation16(ITG3200, ITG3200_GYRO_YOUT_H)
vga.hex(YG,4)
vga.out(" ")
ZG := readLocation16(ITG3200, ITG3200_GYRO_ZOUT_H)
vga.hex(ZG,4)
vga.out(" ")
TG := readLocation16(ITG3200, ITG3200_TEMP_OUT_H)
vga.hex(TG,4)
vga.out(" ")
vga.out($0D)
'******************************************************************************************************
XA := readLocation16(ADXL345, ADXL345_OUTX_L)
XA := (XA>>8 + XA <<8) & $FFFF ' H<>L
vga.hex(XA,4)
vga.out(" ")
YA := readLocation16(ADXL345, ADXL345_OUTY_L)
YA := (YA>>8 + YA <<8) & $FFFF ' H<>L
vga.hex(YA,4)
vga.out(" ")
ZA := readLocation16(ADXL345, ADXL345_OUTZ_L)
ZA := (ZA>>8 + ZA <<8) & $FFFF ' H<>L
vga.hex(ZA,4)
vga.out(" ")
vga.out($0D)
'******************************************************************************************************
XC := readLocation16(HMC5843, HMC5843_DATA_X_MSB)
vga.hex(XC,4)
vga.out(" ")
YC := readLocation16(HMC5843, HMC5843_DATA_Y_MSB)
vga.hex(YC,4)
vga.out(" ")
ZC := readLocation16(HMC5843, HMC5843_DATA_Z_MSB)
vga.hex(ZC,4)
vga.out(" ")
' hier i2c.spin einfügen