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

High-speed i2c example

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
sseidman



Joined: 14 Mar 2005
Posts: 159

View user's profile Send private message

High-speed i2c example
PostPosted: Tue Jul 17, 2012 4:25 pm     Reply with quote

http://www.i2c-bus.org/highspeed/

Does anyone have any example code for high-speed i2c by putting out the "8-bit master code" at 400kHz? Do I need a second slow master to kick the first master into high gear?

I'm trying specifically to use the MCP4728 at high speeds, and the data sheet section 5.1.1 talks about this, but never shows a sequence. Reading the high speed doc from i2c-bus.org is just confusing me, and I can't find any app notes or examples.

thanks!
temtronic



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

View user's profile Send private message

PostPosted: Tue Jul 17, 2012 4:38 pm     Reply with quote

CCS does allow 'fast' mode and you can set the speed with the use I2C(...) directive.

Pressing F11 while your project is open, does allow the onscreen help files to appear.Just locate the preprocessor directives and then I2C.There are several pages of help as well as actual code examples.

These might shed light on what you're asking about.

hth
jay

+++++++++++++++++++++++++
Temtronic,
Please read OP's post before replying.
His query is "High Speed" (3.4 MHz) mode not Fast mode.
Do not advise F11 on advanced topics !!
The quickest draw does not always win the prize.
- Forum Moderator
+++++++++++++++++++++++++
Ttelmah



Joined: 11 Mar 2010
Posts: 19546

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 2:17 am     Reply with quote

Big question, _what PIC_. Few PIC's support the high speed mode (not sure any do - I don't know of any!). You need active pull up on the I2C lines, and a chip that generates the asymmetric clock used by this. Most PIC's only support rates up to 1Mbps on I2C, and symmetric clocks. Have only played with it on other chips than the PIC. There may be some new DSP PIC that does support it, but if so we need to know what chip?.

Best Wishes
temtronic



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

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 4:35 am     Reply with quote

oops...guess I need better bifocals !Sorry about that....since we are a 'worldwide' forum,differnet words can mean the same thing..

If we wait a week or two 'ultra' speed will be out and that will obsolete slow,fast and the 'new' high speeds....

I'm still upset that 'legacy' devices are all gone off PCs.
sigh ,I'm getting too old for this stuff.
Ttelmah



Joined: 11 Mar 2010
Posts: 19546

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 4:53 am     Reply with quote

Yes. It is also made worse, since you have historical references to 'Fast' I2C, as 'high speed', quite a bit of generic stuff that uses I2C a little 'faster' than this, talking about this as 'high speed' (which the PIC can do in most cases, _provided_ you turn off any slew rate limiting), and then you have the 'HS' high speed.
Aaargh......

Problem with the PC, is it is so driven by price. Features that were superior or useful, have been priced out of existence, and replaced with remarkably cheap kit, which (unfortunately), while offering 'paper' performance that is great, performs poorly when actually used. :(

Best Wishes
sseidman



Joined: 14 Mar 2005
Posts: 159

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 6:20 am     Reply with quote

Thanks for the answers-- sorry I wasn't more specific, temtronic.

The answer to which PIC is whichever PIC I need to use! It looks like for different reasons I need to take a jump up to the dspic33's, but it does need to be a DSP.


I'd love to get to at least 3x faster than the 400kHz spec-- I don't think 3.4 MHz will be achievable without some extreme measures, but if I can hit 1.2MHz, I think that might give me enough headroom.

So, it sound like I can try to use plain old FAST i2c, and use FAST=1200000, disabling slew rate limitations, and using an active pullup/accelerator like the LTC1694?

Thanks for the leads!
temtronic



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

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 6:34 am     Reply with quote

dum question from the old guy..but .. is there perhaps an SPI version of this type of device(quad 12bit DAC) that might work for you or are you commited to using this part?

as for the speed , I'd test using the I2C fast option,say 400KHz, then up the speed a bit until it either fails or some other error(maybe the compiler won't accept 1,000,000 as a speed ?)
Ttelmah



Joined: 11 Mar 2010
Posts: 19546

View user's profile Send private message

PostPosted: Wed Jul 18, 2012 8:00 am     Reply with quote

Not quite as simple as that.

The key with genuine 'HS' parts, is you send them a command using normal 'fast' mode I2C, to 'turn up' to the HS mode. Then they should turn on the active termination, and start accepting HS signalling. When the transfer is complete, they automatically switch back 'down'. Key difference with HS, is that the clock waveform has 2:1 asymmetric timing. How important this is for the particular chip concerned here, I don't know, but on my previous 'playing' with this, I could not get HS to work, until this criterion was met....
I was lucky, using a FPGA, so just generated the waveforms needed. I was actually sending from a PIC, but the 'PIC' involved was a 'virtual' one in the same FPGA. Also remember the termination resistors need to be _low_ at the higher speed. I used 470R.

Seriously, the first thing to do, is talk to Microchip. Ask _them_ if they have examples for using this chip with a PIC, and the fastest speeds it can support with this. It may well turn out that they say '1MHz is max with a PIC', or that they can give you a working example, and say 'you can go to 2MHz, with this particular DSPIC' (my memory is that it ought to be possible to get to this with certain clocks).

I don't think there is any real problem (except possibly having to update SPBRG manually), with the speed switch on the PIC, but just how fast you can get, and whether the chip will accept the output from most PIC's is open to question.....
sseidman



Joined: 14 Mar 2005
Posts: 159

View user's profile Send private message

PostPosted: Fri Jul 27, 2012 2:32 pm     Reply with quote

Thanks for all the suggestions. I managed to sidestep the issue using a 32-sample buffer on the accelerometer I'm using. I now have more than enough clock ticks to accomplish processing between FIFO flushes by clocking at 1MHz.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
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