From: /<evin <kev...@ya...> - 2008-08-10 21:11:39
|
Hi Tristan, I was able to get I2C comms to work on my Robostix with my Devantech compass using code I found linked from their website: char i2c_read(char address, char reg) { char read_data = 0; TWCR = 0xA4; // send a start bit on i2c bus while(!(TWCR & 0x80)); // wait for confirmation of transmit TWDR = address; // load address of i2c device TWCR = 0x84; // transmit while(!(TWCR & 0x80)); // wait for confirmation of transmit TWDR = reg; // send register number to read from TWCR = 0x84; // transmit while(!(TWCR & 0x80)); // wait for confirmation of transmit TWCR = 0xA4; // send repeated start bit while(!(TWCR & 0x80)); // wait for confirmation of transmit TWDR = address+1; // transmit i2c address with readbit set TWCR = 0xC4; // clear transmit interupt flag while(!(TWCR & 0x80)); // wait for confirmation of transmit TWCR = 0x84; // transmit, nack (last byte request) while(!(TWCR & 0x80)); // wait for confirmation of transmit while(!(TWCR & 0x80)); //wait for confirmation of transmit read_data = TWDR; // and grab the target data TWCR = 0x94; // send a stop bit on i2c bus return read_data; } void i2c_transmit(char address, char reg, char data) { TWCR = 0xA4; // send a start bit on i2c bus while(!(TWCR & 0x80)); // wait for confirmation of transmit TWDR = address; // load address of i2c device TWCR = 0x84; // transmit while(!(TWCR & 0x80)); // wait for confirmation of transmit TWDR = reg; TWCR = 0x84; // transmit while(!(TWCR & 0x80)); // wait for confirmation of transmit TWDR = data; TWCR = 0x84; // transmit while(!(TWCR & 0x80)); // wait for confirmation of transmit TWCR = 0x94; // stop bit } void setup(void) { TWBR = 32; // 100khz bus speed } I am sad to admint I do not remember the author my only excuse is it was a '2am Please please work hardware session!' Hope this helps! Kevin -- View this message in context: http://www.nabble.com/Robostix---I2C-Communications-tp18865550p18915085.html Sent from the Gumstix mailing list archive at Nabble.com. |
From: Tristan R. <tr...@gm...> - 2008-08-11 06:02:17
|
Hi Dave and Kevin, Dave, Good news that I2C is capable on both boards - i just can't seem to get it right on mine though - yet the audiostix worked fine first time. I have tried with a separate robostix board which produced exactly the same strange results on the SCL and SDA data lines. Also, i ran the Flash-LED program to ensure that the board was at least functional - seemed to be flashing ok. Kevin, Thanks for the code - didn't work though =(. I know my own code does work on the audiostix because it was going before.... I think i'll just bite the bullet and get an audiostix, and pray that it works! Thanks again, Tristan. On Mon, Aug 11, 2008 at 7:11 AM, /<evin <kev...@ya...> wrote: > > Hi Tristan, > > I was able to get I2C comms to work on my Robostix with my Devantech > compass > using code I found linked from their website: > > char i2c_read(char address, char reg) > { > char read_data = 0; > > TWCR = 0xA4; // send a start bit on i2c bus > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWDR = address; // load address of i2c device > TWCR = 0x84; // transmit > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWDR = reg; // send register number to read from > TWCR = 0x84; // transmit > while(!(TWCR & 0x80)); // wait for confirmation of transmit > > TWCR = 0xA4; // send repeated start bit > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWDR = address+1; // transmit i2c address with readbit > set > TWCR = 0xC4; // clear transmit interupt flag > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWCR = 0x84; // transmit, nack (last byte > request) > while(!(TWCR & 0x80)); // wait for confirmation of transmit > while(!(TWCR & 0x80)); //wait for confirmation of transmit > read_data = TWDR; // and grab the target data > TWCR = 0x94; // send a stop bit on i2c bus > return read_data; > > } > void i2c_transmit(char address, char reg, char data) > { > TWCR = 0xA4; // send a start bit on i2c bus > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWDR = address; // load address of i2c device > TWCR = 0x84; // transmit > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWDR = reg; > TWCR = 0x84; // transmit > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWDR = data; > TWCR = 0x84; // transmit > while(!(TWCR & 0x80)); // wait for confirmation of transmit > TWCR = 0x94; // stop bit > } > > void setup(void) > { > TWBR = 32; // 100khz bus speed > } > > I am sad to admint I do not remember the author my only excuse is it was a > '2am Please please work hardware session!' > > Hope this helps! > > Kevin > -- > View this message in context: > http://www.nabble.com/Robostix---I2C-Communications-tp18865550p18915085.html > Sent from the Gumstix mailing list archive at Nabble.com. > > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > Build the coolest Linux based applications with Moblin SDK & win great > prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > gumstix-users mailing list > gum...@li... > https://lists.sourceforge.net/lists/listinfo/gumstix-users > |