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 :)
Powered by vBulletin® Version 4.1.7 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.