For Bean or anyone that uses PROPBASIC...

Having trouble with I2C in PROPBASIC with the HMC6352 compass from Sparkfun. In PBASIC I do this, and it works.
The problem I'm having in PROPBASIC is joining the HIGHBYTE and LOWBYTE, as seen in the code below: Adding "heading1" and "heading2" does not work.
Any words of wisdom. I am using the FLIP module..thanks to all
HMC6352: (Not all GOSUB's are displayed.
'first read
GOSUB I2C_Start ' Start communications on the I2C buss
I2C_DATA = HMC6352_WRITE
GOSUB I2C_Write ' Address the HMC6352 in write mode
I2C_DATA = GET_HEADING_command
GOSUB I2C_Write ' Send the get rawHeading command
PAUSE 10
GOSUB I2C_Stop ' End communications on the I2C buss
PAUSE 10
GOSUB I2C_Start ' Start communications on the I2C buss
I2C_DATA = HMC6352_READ
GOSUB I2C_Write ' Address the HMC6352 in read mode
PAUSE 10 ' Give the HMC6352 time to calculate the rawHeading
GOSUB I2C_Read
rawHeading.HIGHBYTE = I2C_DATA ' Read in the high byte
GOSUB I2C_ACK
GOSUB I2C_Read
rawHeading.LOWBYTE = I2C_DATA ' Read in the low byte
GOSUB I2C_NACK
GOSUB I2C_Stop ' End communications on the I2C buss
PAUSE 10
rawHeading = rawHeading / 10 'whole degrees
' DEBUG DEC4 ? rawheading
RETURN
The problem I'm having in PROPBASIC is joining the HIGHBYTE and LOWBYTE, as seen in the code below: Adding "heading1" and "heading2" does not work.
SUB compass_get_heading
I2CSPEED 1
I2CSTART HMC6352_data,HMC6352_clk
I2CWRITE HMC6352_data, HMC6352_clk, HMC6352_WRITE
PAUSE 10
I2CWRITE HMC6352_data, HMC6352_clk, GET_HEADING
PAUSE 10
I2CSTOP HMC6352_data, HMC6352_clk
PAUSE 10
I2CSTART HMC6352_data,HMC6352_clk
I2CWRITE HMC6352_data, HMC6352_clk, HMC6352_READ
PAUSE 10
I2CREAD HMC6352_data, HMC6352_clk, heading_HIGH_byte, 0
PAUSE 10 ' Give the HMC6352 time to calculate the rawHeading
I2CREAD HMC6352_data, HMC6352_clk, heading_LOW_byte, 1
PAUSE 10
I2CSTOP HMC6352_data, HMC6352_clk
PAUSE 10
heading1 = heading_LOW_byte
heading2 = heading_HIGH_byte
ENDSUB
Any words of wisdom. I am using the FLIP module..thanks to all
Comments
heading2 = heading2 * 256
heading1 = heading1 + heading2
heading1 should now contain the correct value.
Bean
What does the I2CSPEED do exactly. Do I really need the "PAUSE 10's" in the SUB routine?
TASK HMC6352compass LMM 'RUNNING IN COG 2 HMC6352_data PIN 0 HMC6352_clk PIN 1 heading VAR LONG heading_HIGH_byte VAR LONG heading_LOW_byte VAR LONG heading1 VAR LONG heading2 VAR LONG heading3 VAR LONG valueSTR_3 HUB string (3) compass_get_heading SUB '---------[Main Routine]--------------- '================================HMC6352 COMPASS ROUTINE===================================== DO GOSUB compass_get_heading SEROUT 30, baud2, 13 SEROUT 30, baud2, 10 SEROUT 30, baud2, "heading " SEROUT 30, baud2, valueSTR_3 PAUSE 50 LOOP' SUB compass_get_heading I2CSPEED .5 I2CSTART HMC6352_data,HMC6352_clk I2CWRITE HMC6352_data, HMC6352_clk, HMC6352_WRITE PAUSE 10 I2CWRITE HMC6352_data, HMC6352_clk, GET_HEADING PAUSE 10 I2CSTOP HMC6352_data, HMC6352_clk PAUSE 10 I2CSTART HMC6352_data,HMC6352_clk I2CWRITE HMC6352_data, HMC6352_clk, HMC6352_READ PAUSE 10 I2CREAD HMC6352_data, HMC6352_clk, heading_HIGH_byte, 0 PAUSE 10 ' Give the HMC6352 time to calculate the rawHeading I2CREAD HMC6352_data, HMC6352_clk, heading_LOW_byte, 1 PAUSE 10 I2CSTOP HMC6352_data, HMC6352_clk PAUSE 10 heading1 = heading_LOW_byte heading2 = heading_HIGH_byte heading2 = heading2 * 256 heading3 = heading1 + heading2 heading3 = heading3 / 10 ''''to get whole degrees.. valueSTR_3 = STR heading3,4,5 WRLONG heading3_location, heading3 ENDSUB ENDTASK ''''''HMC6352
Anyone got a HMC6352 for sale....?