CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

how to connect to mpu6050 gyro sensor-i2c?
Goto page 1, 2, 3, 4  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

how to connect to mpu6050 gyro sensor-i2c?
PostPosted: Tue Aug 21, 2012 3:33 pm     Reply with quote

Hi.
I want to connect to mpu6050 gyro and accel sensor with i2c protocol.
Please help me.

Please give me a example code.

I want to access and write to register of sensor.

How to do addressing of the i2c sensor address and register address with ccs?
This is mpu6050 datasheet:
http://www.invensense.com/mems/gyro/documents/PS-MPU-6000A.pdf
tx
temtronic



Joined: 01 Jul 2010
Posts: 9246
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Tue Aug 21, 2012 4:36 pm     Reply with quote

Can't give any code as we don't know which PIC you're using !!!

I'm assuming you're using a 3 volt PIC(?) as the sensor is a 3 volt device ???
Also be sure to use the correct I2C buss pullups.

Also download PCM programmer's I2C diagnostic program from this forum, it'll confirm you CAN talk to the sensor, have it wired up correctly, etc.

hth
jay
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 12:40 am     Reply with quote

temtronic wrote:
Can't give any code as we don't know which PIC you're using !!!

I'm assuming you're using a 3 volt PIC(?) as the sensor is a 3 volt device ???
Also be sure to use the correct I2C buss pullups.

Also download PCM programmer's I2C diagnostic program from this forum, it'll confirm you CAN talk to the sensor, have it wired up correctly, etc.

hth
jay


I'm using 16f877a.

I'm not writing into the register of sensor.

For example I want to write 0 in bit6 of 0x3b address register.

I need example of code.
pls
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 1:15 am     Reply with quote

Thing is that the sensor is a 3v device, and the PIC you have is a 5v device. You need level translation hardware between them.....

Best Wishes
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 4:14 am     Reply with quote

thank u so much temtronic and Ttelmah for your answer
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 7:00 am     Reply with quote

Ttelmah wrote:
Thing is that the sensor is a 3v device, and the PIC you have is a 5v device. You need level translation hardware between them.....

Best Wishes


The sensor and the pic16f877a vcc is 3 volt.

When i want to read from any register the lcd show 255.

This is my code:
Code:

void main()
{
set_tris_b(0x00); //set port b as outputs
lcd_init();
long input;

while(true)
{
i2c_start();
i2c_write(0x68);// device address
input=i2c_read(0x3b);// register address(X accel)
i2c_stop();
delay_ms(10);

lcd_gotoxy(1,1);
printf(lcd_putc,"%Lu",input);
}
}
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 7:38 am     Reply with quote

You can't just make a chip work of 3v, by attaching 3v....
The PIC16F877A, _requires_ 4v _minimum_.
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 7:46 am     Reply with quote

You are also misunderstanding I2C.
You don't read and write in one instruction.
Sequence is:

START
Write device address, with bottom bit clear (we are writing).
Write register address (write register number).
START (repeated start)
Write device address with bottom bit _set_ (says we want to read)
read reply
stop

Look at the I2C bus scanner from PCM programmer (already mentioned). It shows 'how' to scan a bus for replies, and as such how the transactions work.

The 'repeated start', is how you turn the bus around, after sending the register address, before reading.
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 8:02 am     Reply with quote

Ttelmah wrote:
You can't just make a chip work of 3v, by attaching 3v....
The PIC16F877A, _requires_ 4v _minimum_.


but the datasheet of 16f877a said:
Wide operating voltage range: 2.0V to 5.5V


Last edited by Mahdi on Wed Aug 22, 2012 8:12 am; edited 1 time in total
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 8:11 am     Reply with quote

I have no experience with the ccs.

can you give me a sample code of following the address

i want to read from device

device address:0x68

register address: 0x3b

thank you so much
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Aug 22, 2012 2:45 pm     Reply with quote

Quote:
Wide operating voltage range: 2.0V to 5.5V

That wide range is only for the "LF" version of the 877A.
The part number is PIC16LF877A.

But, you can use an 3v i2c slave with a 5v PIC, if you use software i2c
on PortB, which is a TTL-compatible i/o port.

In software i2c, the i2c bits are sent and received by "bit banging" with
the i/o port pins. On PortB, the Vih (high level input voltage) is 2.0 volts.
This is true even if the Vdd for the PIC is 5.0 volts.

So, you can use pull-ups on the i2c bus that pull-up to +3.0v, and it works
perfectly well with the TTL-compatible inputs on PortB. You can use
3.3K ohm resistors for the pull-ups on the SCL and SDA lines.

This technique does not work with hardware i2c, where the PIC is running
at +5v for Vdd. It requires software i2c. The CCS #use i2c() library
supports software i2c. Software i2c is the default case for that library.
So, it's no problem to do it.


Quote:
device address:0x68

That's the slave address in 7-bit Philips format. But CCS doesn't use that
format. CCS uses 8-bit format. To convert to CCS format, just shift
the Philips address left by 1 bit position. So, the correct addresses to
use with the i2c_write() function are:

CCS i2c slave write address = 0xd0
CCS i2c slave read address = 0xd1

This assumes that you have connected pin 9 on the MPU-6050 to ground.


Here is a link to the i2c bus scanner program. Modify the first few lines
of the program (#include, #fuses, #use delay, #use rs232) to fit your
PIC and your board:
http://www.ccsinfo.com/forum/viewtopic.php?t=47707&start=21
This program will tell you if the PIC can find the MPU-6050 on the i2c bus.
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Thu Aug 23, 2012 2:06 am     Reply with quote

As a further comment, the F877, will probably run at 3.3v, _but will not be reliable_. Get the LF variant.
This is down to 'read the data sheet, not just the header'. The sheet covers both chip versions, and _between them_, the two chip types have the 'wide operating voltage range' mentioned.....

Best Wishes
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

PostPosted: Thu Aug 23, 2012 6:42 am     Reply with quote

thanks alot pcm programer

Ttelmah wrote:
As a further comment, the F877, will probably run at 3.3v, _but will not be reliable_. Get the LF variant.
This is down to 'read the data sheet, not just the header'. The sheet covers both chip versions, and _between them_, the two chip types have the 'wide operating voltage range' mentioned.....

Best Wishes




Ttelmah your answer is right.but the LF frequency is low.until to 10Mhz
and it receive alot of noise.There is no way that I use the 16f?
for example use the resistor in scl and sda line or use 3.0v Zener diode?
i dont understand this part
Quote:

But, you can use an 3v i2c slave with a 5v PIC, if you use software i2c
on PortB, which is a TTL-compatible i/o port.
Ttelmah



Joined: 11 Mar 2010
Posts: 19552

View user's profile Send private message

PostPosted: Thu Aug 23, 2012 7:30 am     Reply with quote

This is down to input threshold levels.
A 'TTL' port pin, is considered to be 'high', if it is above 2.4v. A Schmitt port pin, is only considered 'high', when it gets to 4v (with a PIC running at 5v).
The hardware I2C input, uses a Schmitt buffer.
So a 3.3v device connected to a 5v PIC, using the hardware I2C, won't work. However you can connect such a device to a software I2C port provided you choose pins that have TTL input buffers (data sheet).
Fortunately, CCS provides software I2C just as easily as hardware.

Since I2C is an 'open collector' bus (the chips only drive downwards), the outputs from the PIC will drive the lines fine.

Wiring then has to be:
Run the PIC off 5v
Choose PIC pins with TTL input buffers.
Select these in #use I2C
Connect the PIC I2C pins to the 3v device.
Have the I2C pullups, go to the 3v rail (remember that lower rail voltage means smaller resistors will be needed - typically 4K7 is quite OK for short busses at 5v, but at 3v, you need 2K7 to give the same bus drive).

Best Wishes
Mahdi



Joined: 21 Aug 2012
Posts: 47

View user's profile Send private message

PostPosted: Thu Aug 23, 2012 8:19 am     Reply with quote

This could can use? with 2.2 and 3.3 resistor the out put of micro has 3 volt
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2, 3, 4  Next
Page 1 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group