Log in

View Full Version : Need help for reading I2C Sensor



Omalik
- 31st May 2008, 15:24
Hello *

This is my first time i do somthing with I2C. I tray to read a digital pressure transducers from Sensor Technics. I use the CSDX Series.


the code is:

I2C_data var PORTB.1 ' I2C Daten Leitung
I2C_clock var PORTA.4 ' I2C Clock Leitung



Main:


I2CRead I2C_data,I2C_clock,$F1,0,druck,druck2 ' Read string from slave
Pause 10

lcdout $FE,$D4,"Druck ",dec druck, "mbar" ,dec druck2'

pause 10

goto main


on the display nothing is changing.


Thanks for your help.


Rolf





The Data Sheet is under :

http://www.sensortechnics.com/index.php?ge=2504b13d9ab0502d77d8001f609f6ec7&fid=300&fpar=YToxOntzOjQ6InBjaWQiO3M6MzoiMTczIjt9&isSSL=0&aps=0&blub=5c4acd01785490150591f3ec91b908bd

mat janssen
- 31st May 2008, 17:12
Try this!!
I2CRead I2C_data,I2C_clock,$F1,0,[druck,druck2]
Manual page 82-85
And I hope you did'n forget the pullup resistors for the i2c lines

skimask
- 1st June 2008, 01:02
Or even if the circuit is operating or not in the first place...heartbeat LED...

Omalik
- 1st June 2008, 17:13
I will tray out the new code on Monday. Can you tell me for what is the [ ] ?
The Pull Up resistors are on the board.

Thanks

skimask
- 1st June 2008, 19:37
I will tray out the new code on Monday. Can you tell me for what is the [ ] ?

It's in the manual...

PJALM
- 6th June 2008, 18:27
Here is an example of how I use I2C with an EEPROM and the I/O Expander, I hope it helps.

<code>

DEFINE I2C_HOLD 1

Address VAR WORD
SCL VAR PORTC.3 ' I2C Clock pin
SDA VAR PORTC.4 ' I2C Data pin

Address = 0



'------------------------------------------------------------------------------------------------
' Read Password from EEPROM
'------------------------------------------------------------------------------------------------
ReadPassword:
Address = 0
I2CREAD SDA,SCL,$A0,Address,[Password[1],Password[2],Password[3],Password[4]]
Return
'------------------------------------------------------------------------------------------------



'------------------------------------------------------------------------------------------------
' Save Password to EEPROM
'------------------------------------------------------------------------------------------------
SavePassword:
Address = 0
I2CWRITE SDA,SCL,$A0,Address,[Password[1],Password[2],Password[3],Password[4]]
Return
'------------------------------------------------------------------------------------------------



'------------------------------------------------------------------------------------------------
' Subroutine to handle I2C errors
'------------------------------------------------------------------------------------------------
I2CError:
LCDOut $fe,1
LCDOut $fe,2, "I2C Bus Timed Out" ' I2C command timed out
Pause 1000

GoTo loop
'------------------------------------------------------------------------------------------------



'------------------------------------------------------------------------------------------------
' Setup I2C I/O Expander
'------------------------------------------------------------------------------------------------
SetupIOExpander:
'*** Setup I/O Expander PortA as Output, PortB as Input ***
I2CWrite SDA,SCL,$40,[6,0,31], I2CError
Pause 150

'*** Set the Interrupt Capture Rate to Fast ***
'I2CWrite SDA,SCL,$40,[11,1], I2CError
'Pause 150

'*** Set I/O Expander PortA Outputs to LOW ***
I2CWrite SDA,SCL,$40,[0,0], I2CError
Pause 150

RESUME
'------------------------------------------------------------------------------------------------

</code>

Omalik
- 6th June 2008, 21:48
I tray out

I2CRead I2C_data,I2C_clock,$F1,0,[druck,druck2]

but it does not work at all. I find a lot of examples for Eeprom but not one for the sensor I use.

does some have any idea ?

Thanks

PJALM
- 7th June 2008, 12:47
I tray out

I2CRead I2C_data,I2C_clock,$F1,0,[druck,druck2]

but it does not work at all. I find a lot of examples for Eeprom but not one for the sensor I use.

does some have any idea ?

Thanks

From what I can see in the data sheet you should be using this:

I2CRead I2C_data,I2C_clock,$F1,[druck,druck2]

I don't know what the 0 you had there was for but the R/W bit is set by the I2CRead/I2CWrite command, you don't need to set it.

also check what you have druck and druck2 declared as, byte or word.

skimask
- 7th June 2008, 22:24
From what I can see in the data sheet you should be using this:
I2CRead I2C_data,I2C_clock,$F1,[druck,druck2]
I don't know what the 0 you had there was for but the R/W bit is set by the I2CRead/I2CWrite command, you don't need to set it.
Probably should be using $F0 instead of $F1 also.

Omalik
- 8th June 2008, 17:41
i did a picture on the KO.
blue is clock and red are data.

and i can not read the sensor.

Omalik
- 8th June 2008, 17:43
Probably should be using $F0 instead of $F1 also.


see datasheet

skimask
- 8th June 2008, 21:08
see datasheet

Right...and PBP handles the R/W bit for you...as stated a few posts above.

Omalik
- 9th June 2008, 22:14
Now the sensor is working well

Thanks for all your help

The code I use is:



I2CRead I2C_data,I2C_clock,$F1,[druck]

an to calculate the mbar:

IF druck > 1999 then ' nur positive Druck auswerten

druck = ((druck - 2000) * 6) + ((druck - 2000) /4) ' * 25 / 100

else
druck = 0

endif
see also the printscreen from the I2C bus.

PJALM
- 10th June 2008, 04:24
I am glad to see that you got it working :)