View previous topic :: View next topic |
Author |
Message |
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
#use fast_io(C) set_tris_c() and #BYTE |
Posted: Mon Aug 02, 2004 10:49 pm |
|
|
Hopefully a quick question (or 2, or 3, or 4, or 5):
I want to use direct io for speed (software PWM with 4 outputs), and have learned that using fast_io will help significantly, but the set_tris_x() function (or changing the register) will be required, and using the #BYTE is needed to directly use a port. I need to do this on Port C while using the UART and I2C functions, and would like to do it correctly so it works.
Below questions are assuming usage of #use FAST_IO(C)...
Questions:
1.) How can I change TRIS_C for the I2C interface, or do I need to? (SDA is bidirectional).
2.) When is TRIS_C) set by the I2C and UART functions? I would like to change TRIS_C only when needed, but using FAST_IO, I'm not sure if I need to set the TRIS_C value for the UART and I2C pins. I know that I at least need to set the TRIS_C bits for the other pins that aren't used by the UART and I2C pins.
3.) Will the compiler do any bank switching needed to access any defined #BYTE directive? (ie: if bank 2 is selected, will the compiler select bank 0 to access PORT_C)?
4.) Is there an expanded FAQ on CCS somewhere? The current FAQ is good, but needs more topics and questions. So far, this forum is the best source of information I have found, but I would like to read a large FAQ before posting stupid questions
5.) Has anyone used the I2C interface faster than 400KHz with CCS? If so, HOW? (The part I'm talking to is limited to 3.4MHZ SCL rate, and it should be fairly low capacitance for the connection - no cables). |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Tue Aug 03, 2004 6:08 am |
|
|
You need to set the TRIS register at the begining of you program. Go ahead and setup the IO for the RC6 and RC7. I believe the #USE RS232 will do this for you but it can't hurt to do it again and I prefer not to use the #USE RS232 and setup the UART myself. The I2C functions should handle setting the IO. I would just leave them as inputs when setting up the TRIS. Yes the compiler will handle the bank switching. The only FAQ I know about is posted on their site. A PIC running at 40MHz can generate a clock at 10MHz. I2C devices are usually not that fast. Is this a I2C or an SPI device? |
|
|
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
|
Posted: Tue Aug 03, 2004 6:34 am |
|
|
Mark -
That sounds good - I can just setup the tris state before calling the #use rs232 and I2C statements. I'm already using the "fast" and "force_hw" in the I2C use statement, but I think it will go just under 400 KHz, and the I2C part I'm talking to can go up to 3.4 MHz so I wanted to bump up the speed a bit. |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Tue Aug 03, 2004 7:00 am |
|
|
To go faster, you are going to have to setup the I2C yourself. Read the section in the datasheet. It talks about the Baud Rate generator and you can determine the BRG value needed based on your crystal. |
|
|
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
|
Posted: Tue Aug 03, 2004 8:51 am |
|
|
Thanks for the feedback Mark -
Do you know if I can just change the BRG after the use I2C() statement, and still use the internal I2C functions? |
|
|
Mark
Joined: 07 Sep 2003 Posts: 2838 Location: Atlanta, GA
|
|
Posted: Tue Aug 03, 2004 10:15 am |
|
|
You should be able to. You can look in the lst file to see what the #use i2c is doing and when it is called. I like to set things up myself to avoid any confusion or changes that could be made in the future. |
|
|
bdavis
Joined: 31 May 2004 Posts: 86 Location: Colorado Springs, CO
|
|
Posted: Tue Aug 03, 2004 11:16 am |
|
|
OK - Thanks Mark!
I'll give that a shot... |
|
|
Guest
|
|
Posted: Mon Feb 06, 2006 5:01 am |
|
|
Mark wrote: | You need to set the TRIS register at the begining of you program. Go ahead and setup the IO for the RC6 and RC7. I believe the #USE RS232 will do this for you but it can't hurt to do it again and I prefer not to use the #USE RS232 and setup the UART myself. The I2C functions should handle setting the IO. I would just leave them as inputs when setting up the TRIS. Yes the compiler will handle the bank switching. The only FAQ I know about is posted on their site. A PIC running at 40MHz can generate a clock at 10MHz. I2C devices are usually not that fast. Is this a I2C or an SPI device? |
|
|
|
rnielsen
Joined: 23 Sep 2003 Posts: 852 Location: Utah
|
|
Posted: Mon Feb 06, 2006 9:35 am |
|
|
This guy seems to have some spare time on his hands to be posting so many phantom messages. |
|
|
|