I2c Help please
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
I2c Help please
Hi guys,
I am trying to work out how i2c works and I have a TSL2561 light sensor to mess with, to power on the device via i2c I must as the data sheet says, send a 03h to the 0h register, but what is a 03h it isn't Hex ?
cheers
Acestu
I am trying to work out how i2c works and I have a TSL2561 light sensor to mess with, to power on the device via i2c I must as the data sheet says, send a 03h to the 0h register, but what is a 03h it isn't Hex ?
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
-
- Valued Contributor
- Posts: 2045
- Joined: Wed Aug 27, 2008 10:31 pm
- Location: Netherlands
- Has thanked: 553 times
- Been thanked: 1081 times
- Contact:
Re: I2c Help please
An 'h' after a number (number is 0-9, a-f) means a hex number, so 0x03 for Flowcode.
“Integrity is doing the right thing, even when no one is watching.”
― C.S. Lewis
― C.S. Lewis
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi Kersing,
So it is just another way of saying that it is a Hex number, I was on the understanding that 0x suggested a Hex number as you say,
Thanks
Acestu
So it is just another way of saying that it is a Hex number, I was on the understanding that 0x suggested a Hex number as you say,
Thanks
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi,
I found this conversion table online, but how do you convert a Hex to Binary if it stats with a zero ie 03h ?
thanks
Acestu
I found this conversion table online, but how do you convert a Hex to Binary if it stats with a zero ie 03h ?
thanks
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi,
I have just found some more info on line, would i be right in thinking that you take the zero and convert to binary, and then take the three and convert to binary and put the resulting binary numbers togethor ?
cheers
Acestu
EDIT: So 03h would be 0000 0011
I have just found some more info on line, would i be right in thinking that you take the zero and convert to binary, and then take the three and convert to binary and put the resulting binary numbers togethor ?
cheers
Acestu
EDIT: So 03h would be 0000 0011
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
-
- Valued Contributor
- Posts: 2045
- Joined: Wed Aug 27, 2008 10:31 pm
- Location: Netherlands
- Has thanked: 553 times
- Been thanked: 1081 times
- Contact:
Re: I2c Help please
Zero hex is binary 0000, so 03h would be 0b00000011. The easiest way to convert hex to binary is to take the individual hex digits starting at the front and use the table below to convert, concatenating the results:
So 0x1f6 would be 0b0001 1111 0110 (without the spaces, I just inserted them for readability in the example)
Code: Select all
Hex Bin
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001
A 1010
B 1011
C 1100
D 1101
E 1110
F 1111
“Integrity is doing the right thing, even when no one is watching.”
― C.S. Lewis
― C.S. Lewis
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi Kersing,
I have got that not, just need to figure out how to send to the control register, it will keep me busy over xmas
cheers
Acestu
I have got that not, just need to figure out how to send to the control register, it will keep me busy over xmas
![Laughing :lol:](./images/smilies/icon_lol.gif)
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
-
- Posts: 170
- Joined: Sat Dec 10, 2011 7:21 pm
- Location: Canada
- Has thanked: 20 times
- Been thanked: 52 times
- Contact:
Re: I2c Help please
Or if you are lazy, there are online conversion tools: http://www.binaryhexconverter.com/
Merry Christmas!
Grant
Edit: Or just use Windows Calculator in programming mode:
Merry Christmas!
Grant
Edit: Or just use Windows Calculator in programming mode:
- Attachments
-
- calculator.jpg
- (120.13 KiB) Downloaded 3333 times
Last edited by GTF on Sat Dec 28, 2013 3:09 pm, edited 1 time in total.
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi,
So if I wanted to send (value 03h) to the control register (internal address 0h) of an i2c slave address of 0x39 , is this how I would do it ?
only I don't reall understand the AddH and AddL in Flowcode
cheers
Acestu
So if I wanted to send (value 03h) to the control register (internal address 0h) of an i2c slave address of 0x39 , is this how I would do it ?
only I don't reall understand the AddH and AddL in Flowcode
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
-
- Valued Contributor
- Posts: 2045
- Joined: Wed Aug 27, 2008 10:31 pm
- Location: Netherlands
- Has thanked: 553 times
- Been thanked: 1081 times
- Contact:
Re: I2c Help please
I don't think it will work. The transaction macros are used for memory devices, not generic devices. The TransmitByte macro is the one to use.
Start communications with Start, then Use TransmitByte multiple times with arguments:
Address of slave shifted one to the left and last bit set to one (see page 12 of data sheet)
Byte 0x80 (command register, bit 7 must be set)
Byte 3 ( value)
The macro has a second argument to signal end of transaction if I recall correctly, set it for end at the last byte (3).
Finish with Stop.
To get bytes, use ReceiveByte. Don't forget to use SendByte macros to tell the slave what you want to receive.
Of course, at the start of you program, call Initialise as well.
Good luck!
Edit: check the c code at https://github.com/adafruit/Adafruit_TSL2561 for sequences.
Start communications with Start, then Use TransmitByte multiple times with arguments:
Address of slave shifted one to the left and last bit set to one (see page 12 of data sheet)
Byte 0x80 (command register, bit 7 must be set)
Byte 3 ( value)
The macro has a second argument to signal end of transaction if I recall correctly, set it for end at the last byte (3).
Finish with Stop.
To get bytes, use ReceiveByte. Don't forget to use SendByte macros to tell the slave what you want to receive.
Of course, at the start of you program, call Initialise as well.
Good luck!
Edit: check the c code at https://github.com/adafruit/Adafruit_TSL2561 for sequences.
“Integrity is doing the right thing, even when no one is watching.”
― C.S. Lewis
― C.S. Lewis
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi Kersing,
Thanks for your valued advice, I will take a look at your link now....
Acestu
Thanks for your valued advice, I will take a look at your link now....
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
- JohnCrow
- Valued Contributor
- Posts: 1367
- Joined: Wed Sep 19, 2007 1:21 pm
- Location: Lincolnshire
- Has thanked: 364 times
- Been thanked: 716 times
- Contact:
Re: I2c Help please
Hi Stu
I've attached some I2C tutorial files. Hope they might be useful
I found I was banging my head against a brick wall with I2C when I first used it, then as if by magic (the shopkeeper appeared ) and it all became clear
![Laughing :lol:](./images/smilies/icon_lol.gif)
I've attached some I2C tutorial files. Hope they might be useful
I found I was banging my head against a brick wall with I2C when I first used it, then as if by magic (the shopkeeper appeared ) and it all became clear
![Very Happy :D](./images/smilies/icon_biggrin.gif)
![Laughing :lol:](./images/smilies/icon_lol.gif)
1 in 10 people understand binary, the other one doesn't !
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi Kersing,
I had a look at the link but it appears to be code for an Arduino,
I read the documents and found the section below:
Enables the device
*/
/**************************************************************************/
void Adafruit_TSL2561_Unified::enable(void)
{
/* Enable the device by setting the control bit to 0x03 */
write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWERON);
I haven't done this before but I would imagine that the clue would be in library files or defines so I had another search and found these:
#define TSL2561_COMMAND_BIT (0x80) // Must be 1
TSL2561_REGISTER_CONTROL = 0x00,
#define TSL2561_CONTROL_POWERON (0x03)
But I am not sure about the Write8 at the beginning because this is only 6 bits ie 80h,00h,03h
thanks
Acestu
EDIT: or does it mean that each hex number is 8 binary bits, and there is 3 different write commands ?
I had a look at the link but it appears to be code for an Arduino,
I read the documents and found the section below:
Enables the device
*/
/**************************************************************************/
void Adafruit_TSL2561_Unified::enable(void)
{
/* Enable the device by setting the control bit to 0x03 */
write8(TSL2561_COMMAND_BIT | TSL2561_REGISTER_CONTROL, TSL2561_CONTROL_POWERON);
I haven't done this before but I would imagine that the clue would be in library files or defines so I had another search and found these:
#define TSL2561_COMMAND_BIT (0x80) // Must be 1
TSL2561_REGISTER_CONTROL = 0x00,
#define TSL2561_CONTROL_POWERON (0x03)
But I am not sure about the Write8 at the beginning because this is only 6 bits ie 80h,00h,03h
thanks
Acestu
EDIT: or does it mean that each hex number is 8 binary bits, and there is 3 different write commands ?
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi John,
Thanks for the files, I will have a read now..........
cheers
Acestu
Thanks for the files, I will have a read now..........
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
-
- Valued Contributor
- Posts: 2045
- Joined: Wed Aug 27, 2008 10:31 pm
- Location: Netherlands
- Has thanked: 553 times
- Been thanked: 1081 times
- Contact:
Re: I2c Help please
Hi Stu,
You are supposed to write three bytes to start the sensor. Each byte has 8 bits, write8 (defined in the same file you found the other code) writes the address (byte), the command (byte) and the data (byte). That equals writing three bytes of 8 bits.
Jac
You are supposed to write three bytes to start the sensor. Each byte has 8 bits, write8 (defined in the same file you found the other code) writes the address (byte), the command (byte) and the data (byte). That equals writing three bytes of 8 bits.
Jac
“Integrity is doing the right thing, even when no one is watching.”
― C.S. Lewis
― C.S. Lewis
-
- Posts: 170
- Joined: Sat Dec 10, 2011 7:21 pm
- Location: Canada
- Has thanked: 20 times
- Been thanked: 52 times
- Contact:
Re: I2c Help please
Hi,
I'm just a beginner with this myself but this is my understanding after reading the datasheet found
here: http://www.adafruit.com/datasheets/TSL2561.pdf
If the address select terminal is floating (page 9 of datasheet):
Slave address (7 bits) is 0111001
Add a 0 for the 8th bit if you are sending or writing to the device.
So the first byte(8 bits) sent after Start will be: 01110010 = 0x72 hex
If receiving or reading from the device the last bit will be 1, so the first byte sent
after Start will be 01110011 = 0x73 hex.
The next byte can either be data if sending or receiving (Figures 8 and 9),
or a Command byte if writing or reading(Figures 10 and 11) to or from a device register address.
The most significant bit in a Command byte is always "1". (1XXXXXXX)
The lower 4 bits are chosen from table 2 for the register you are writing to.
So for the Control register they would be 0000 (1XXX0000). Bits 6,5,4 are set according to table 3. Default values are 0.
For a basic power up the Command byte would be 10000000.
For a power up the next byte will be what you are writing to the Control register(Table 4), 03h or 00000011 for power up.
0h or 00000000 for power down.
So for a powerup the bytes sent would be 01110010 10000000 00000011 or 0x72, 0x80, 0x03
In FC:
I2C Init
I2C Start
I2c Transmit Byte 0x72
I2C Transmit Byte 0x80
I2c Transmit Byte 0x03
I2C Stop
For Power down the 3rd byte sent is 0x00.
Grant
I'm just a beginner with this myself but this is my understanding after reading the datasheet found
here: http://www.adafruit.com/datasheets/TSL2561.pdf
If the address select terminal is floating (page 9 of datasheet):
Slave address (7 bits) is 0111001
Add a 0 for the 8th bit if you are sending or writing to the device.
So the first byte(8 bits) sent after Start will be: 01110010 = 0x72 hex
If receiving or reading from the device the last bit will be 1, so the first byte sent
after Start will be 01110011 = 0x73 hex.
The next byte can either be data if sending or receiving (Figures 8 and 9),
or a Command byte if writing or reading(Figures 10 and 11) to or from a device register address.
The most significant bit in a Command byte is always "1". (1XXXXXXX)
The lower 4 bits are chosen from table 2 for the register you are writing to.
So for the Control register they would be 0000 (1XXX0000). Bits 6,5,4 are set according to table 3. Default values are 0.
For a basic power up the Command byte would be 10000000.
For a power up the next byte will be what you are writing to the Control register(Table 4), 03h or 00000011 for power up.
0h or 00000000 for power down.
So for a powerup the bytes sent would be 01110010 10000000 00000011 or 0x72, 0x80, 0x03
In FC:
I2C Init
I2C Start
I2c Transmit Byte 0x72
I2C Transmit Byte 0x80
I2c Transmit Byte 0x03
I2C Stop
For Power down the 3rd byte sent is 0x00.
Grant
Last edited by GTF on Thu Dec 26, 2013 4:50 pm, edited 3 times in total.
-
- Valued Contributor
- Posts: 2045
- Joined: Wed Aug 27, 2008 10:31 pm
- Location: Netherlands
- Has thanked: 553 times
- Been thanked: 1081 times
- Contact:
Re: I2c Help please
Hi Grant,
Small correction, the value for power up is 03h (00000011) as you mention earlier in your message, not 0x01 or 00000010 (0x02). So the third byte should be 0x03, not 0x01.
Jac
Small correction, the value for power up is 03h (00000011) as you mention earlier in your message, not 0x01 or 00000010 (0x02). So the third byte should be 0x03, not 0x01.
Jac
“Integrity is doing the right thing, even when no one is watching.”
― C.S. Lewis
― C.S. Lewis
-
- Posts: 170
- Joined: Sat Dec 10, 2011 7:21 pm
- Location: Canada
- Has thanked: 20 times
- Been thanked: 52 times
- Contact:
Re: I2c Help please
Thanks, I corrected this in my post to help avoid any confusion.kersing wrote:Hi Grant,
Small correction, the value for power up is 03h (00000011) as you mention earlier in your message, not 0x01 or 00000010 (0x02). So the third byte should be 0x03, not 0x01.
Jac
Should have waited til after my first cup of coffee this morning before making a post.
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi Kersing and GTF,
Thank you for your posts as always, they are making things a lot easier for me, I have put a chart together of how I think it should be done, one thing that I am not quite sure about is the address, I know that you have to add the 1 to put into write mode, but I was told that because the Flowcode macro used was "Transmit Byte" you just put your address in and Flowcode automatically adjusted it for you.
Thanks
Acestu
Thank you for your posts as always, they are making things a lot easier for me, I have put a chart together of how I think it should be done, one thing that I am not quite sure about is the address, I know that you have to add the 1 to put into write mode, but I was told that because the Flowcode macro used was "Transmit Byte" you just put your address in and Flowcode automatically adjusted it for you.
Thanks
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
-
- Posts: 170
- Joined: Sat Dec 10, 2011 7:21 pm
- Location: Canada
- Has thanked: 20 times
- Been thanked: 52 times
- Contact:
Re: I2c Help please
I am adding the 8th bit (R/W) to the 7 bit address to get a full byte for my I2C devices to work. I think the Transmit/Receive in FC changes the way the Acknowledge bits are handled as is mentioned in the TSL2561 datasheet.
- Attachments
-
- TSL2561-1.fcfx
- (8.26 KiB) Downloaded 158 times
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi GTF,
Thanks for the chart, I have built a breadboard setup tonight to test the charts with an i2c lcd module which is now giving me grief, I think I will have to get a bigger breadboard and use a serial lcd in the next few days (everything is awkward at the mo because of xmas).....
cheers
Acestu
Thanks for the chart, I have built a breadboard setup tonight to test the charts with an i2c lcd module which is now giving me grief, I think I will have to get a bigger breadboard and use a serial lcd in the next few days (everything is awkward at the mo because of xmas).....
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
-
- Posts: 170
- Joined: Sat Dec 10, 2011 7:21 pm
- Location: Canada
- Has thanked: 20 times
- Been thanked: 52 times
- Contact:
Re: I2c Help please
It could be a little more simple as below.
- Attachments
-
- TSL2561_2.fcfx
- (8.01 KiB) Downloaded 162 times
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi GTF,
Now I have rebuilt the breadboard I have added a push button to my chart that sets the power up process going, the value returned is 255 this is the case when the slave address is 0x39 or 0x72 so I don't think it is communicating with the chip, do you know of an easy test for this ?
cheers
Acestu
Now I have rebuilt the breadboard I have added a push button to my chart that sets the power up process going, the value returned is 255 this is the case when the slave address is 0x39 or 0x72 so I don't think it is communicating with the chip, do you know of an easy test for this ?
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi,
I am using the Adafruit 757 level shifter to power the TSL2561 , could this be the problem ?
http://www.adafruit.com/products/757
Here is a pic of how I have it wired:
cheers
Acestu
I am using the Adafruit 757 level shifter to power the TSL2561 , could this be the problem ?
http://www.adafruit.com/products/757
Here is a pic of how I have it wired:
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.
- acestu
- Posts: 1720
- Joined: Thu Dec 01, 2011 9:36 pm
- Location: Macclesfield UK
- Has thanked: 783 times
- Been thanked: 223 times
- Contact:
Re: I2c Help please
Hi,
I have just had a thought, because I am using the level converter, do I still need to use pull-ups or are they included in the device?
I will try and find out...
cheers
Acestu
I have just had a thought, because I am using the level converter, do I still need to use pull-ups or are they included in the device?
I will try and find out...
cheers
Acestu
Laptop Mac Book Pro i7 retina El Capitan //// Tower/Intel i7-Windows 7 64 Bit, Toshiba i5 Laptop Windows 10
Computers are like air conditioners. They work fine until you start opening windows.
Computers are like air conditioners. They work fine until you start opening windows.