View previous topic :: View next topic |
Author |
Message |
Zulander_ Guest
|
Read i2c bytes |
Posted: Mon Dec 04, 2006 4:08 pm |
|
|
Hi,
I am having problem reading an IC sending 8 bytes. I don�t know how I can read all those byte. is this how:
static void read_is(){
int byte0,byte1,byte2,byte3;
i2c_start();
i2c_write(0b11000001);
i2c_write(0x81);
byte0=i2c_read(0);
byte1=i2c_read(1);
byte2=i2c_read(2);
byte3=i2c_read(3);
//etc
printf("msg: TMC REPONSE: %x, %x , %x , %x \r\n", byte0,byte1,byte2,byte3);
i2c_stop();
}
i don't think this is the right way becuase iam getting the same value for all those variable..
thank you |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Dec 04, 2006 4:37 pm |
|
|
Your parameters for i2c_read() are wrong.
Post the manufacturer and part number of the i2c device that
you're trying to read from. |
|
|
Zulander_ Guest
|
TMC222 |
Posted: Mon Dec 04, 2006 4:53 pm |
|
|
It is a Stepper motor contoller :
You can find the spec sheet AT:
avrcard.com/Documents/datasheets/tmc222.pdf |
|
|
Zulander
Joined: 04 Dec 2006 Posts: 14
|
PIC |
Posted: Mon Dec 04, 2006 8:16 pm |
|
|
This is my screen shot of the control setting that i am going to be reading the 8 bytes of data:
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 05, 2006 2:05 am |
|
|
You need to do a read operation. The TMC222 data sheet shows how
to do this in Figure 20, on page 27. Look at the following code and
see how it follows the diagrams in the data sheet.
Quote: |
i2c_start();
i2c_write(0xC0);
i2c_write(0x81);
i2c_stop();
i2c_start();
i2c_write(0xC1);
byte0=i2c_read();
byte1=i2c_read();
byte2=i2c_read();
byte3=i2c_read();
byte4=i2c_read();
byte5=i2c_read();
byte6=i2c_read();
byte7=i2c_read(0);
i2c_stop();
|
Normally the i2c_stop() that's shown in bold above, is not included
in a read operation. For example, EEPROMs don't require it.
But this data sheet says to do it, so you should at least try it their way. |
|
|
treitmey
Joined: 23 Jan 2004 Posts: 1094 Location: Appleton,WI USA
|
|
Posted: Tue Dec 05, 2006 9:06 am |
|
|
Also the I2C address might not be what you think. The spec talks about only having one device on the I2c chain and then "Programming" 2 of the address bits. Kind of a interesting way of doing it. But it might be causing troubles.
What simple "read" can you do that will be a know value? to check that the
I2C address is what you think?
Do you have your pull-ups on sda,scl?
Is this the only chip on the I2C bus? |
|
|
|