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 support@ccsinfo.com

PIC I2C hardware µP Freeze

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



Joined: 31 Jan 2008
Posts: 19

View user's profile Send private message

PIC I2C hardware µP Freeze
PostPosted: Thu Jan 31, 2008 2:29 pm     Reply with quote

Dear users,
I see a problem when using I2C hardware ( USING PIC18F4620)
I search in this forum, but I don't see a post relating this.
The problem :
When the I2C BUS go in short-Circuit ( SCL or SDA), the I2C bus hang and PIC Controller STOP at STEP 2 ( see the listing).
The solution is to RESET the PIC.
This can occur, when a device is defect or a problem on the PCB board.
I search to find a solution.
After a few experiment, I try to use the FORCE_SW and there is no more µP Freeze.

My question :
- Is it a problem for a somes CHIPS when using I2C HArdware ?
- is it better to use the SW version ?
Best Regards

Code:
int IN8574(int device_addr)
   {
   int io_field,ACK;
   printf("\n\r step1");
   i2c_start();
   printf("\n\r step2");
   ACK=i2c_write(PCF8574_ID | device_addr<<1 | I2CREAD);printf("\n\r Write ACK %u",ACK);
   printf("\n\r step3");
   io_field=i2c_read(0);
   printf("\n\r step4");
   i2c_stop();
   printf("\n\r step5");
   return(io_field);
   }
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Sun Feb 03, 2008 1:27 pm     Reply with quote

Quote:

When the I2C BUS go in short-circuit ( SCL or SDA), the I2C bus hang.

Do you mean a short-circuit to ground ?
esa



Joined: 31 Jan 2008
Posts: 19

View user's profile Send private message

PostPosted: Sun Feb 03, 2008 3:02 pm     Reply with quote

Dear PCM Programmer,

YES, to make a test, I make a short-circuit to ground on SDA or SCL.
I know, this is not a normal situation, but this is to see what could be happening when something could be defect on the board.

On my board there is something wrong ( maybe the PCB or maybe a I2C device ), because, some time, a I2C line (SDA or SCL, I don't remember), stay low.
After this, the only think that I could do to restart to a normal situation, is to make a power OFF and ON again ( not my µP, but the IO device with a lot off PCF8574).

I use this board, for a long time ago with a Industrial PC. And make my one I2C protocol routine. I never see that problem before.
Now, I transfer all my program on a PIC ( a long work ), and I see this problem.
Problem only with the Hardware interface.
With the Software I2C, that's working.
When short-circuit, I don't read nothing on the bus, but the program don't freeze. When the short-circuit go off, the program continue to work ( that's what I need).
Thanks for your input
Regards
Eric
esa



Joined: 31 Jan 2008
Posts: 19

View user's profile Send private message

PostPosted: Tue Feb 05, 2008 2:58 pm     Reply with quote

I have more informations.
My IO board (with PCF8574) is connected to my µP board.
When I disconnect the IO board and reconnect it, some time, the program freeze.
The SDA line stay LOW on my IO board.
Maybe a PCF8574 device waiting something ?
I make a restart of my µP board without success. The program halt on the first reading/writing attempt on the I2C bus.
So I decide to try to use the Software switch for I2C.
Redownload the µP.
Restart µP ( and my IO board is always with the SDA line low ).
The program can now restart without having a problem with this situation ( SDA LINE LOW ). And the program continue to work without problem.
So, by using the software parameter, it is possible to came back to a normal situation.
Somebody already see this behavior ?
Best Regards
boattow
Guest







I2C problems?
PostPosted: Wed Feb 06, 2008 10:51 am     Reply with quote

You might take a look at the Microchip website for the errata on your microcontroller. There have been many people having problems using I2C on the PIC18f4620 family due to some bugs. For one thing, there are sometimes some issues with the power on reset and you must make the 2 I2C lines as outputs, clear LATC, then set them as inputs, then configure I2C registers as you normally would. Another thing which can cause the I2C to not work at all, or work for a period and then quit (freeze) is the BRG number is incorrect in the datasheet so the clock speed is incorrect. Check the errata for the new BRG value to be written to the SSPAAD register.

As a guest, this site won't let me paste the URL so go to Microchip's website and search for this document and I think you will be able to solve your problems: 80224d.pdf

Good luck,
Boattow
Guest








PostPosted: Fri Feb 08, 2008 5:51 am     Reply with quote

I think you need a timeout on your hardware I2C function. You could rewrite the I2C functions a wee bit. So that if the SCLK line gets stuck low for an excessive amount of time you do not hang up your micro and the possible faulty I2C comms can be detected within your code. If you use a watchdog, it will just reset your chip and it will detect the same situation again and again keep on doing the same thing, whereas re-writing the I2C functions will allow you to do something about the fault.
asmallri



Joined: 12 Aug 2004
Posts: 1630
Location: Perth, Australia

View user's profile Send private message Send e-mail Visit poster's website

PostPosted: Fri Feb 08, 2008 11:53 am     Reply with quote

esa wrote:
I have more informations.
My IO board (with PCF8574) is connected to my µP board.
When I disconnect the IO board and reconnect it, some time, the program freeze.


I have lots of products in the field using I2C with the PIC18F4620. I have a high degree of confidence with it. However what you are describing here is more likely an input latch up problem which can happen when the signals lines are connected before the ground raid is connected. Even a few nanoseconds in this state can lead to latch up.

Going back to your original problem description, if the PIC is always the IC2 master, then you can place low value resistors (such as 470R) in series with the clock and data lines.
_________________
Regards, Andrew

http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!!
esa



Joined: 31 Jan 2008
Posts: 19

View user's profile Send private message

PostPosted: Sat Feb 09, 2008 4:11 am     Reply with quote

Thanks to everybody for your help.

To solve the problem and to avoid hang up the processor, I prefer to use the DIRECTIVE 'FORCE_SW'
#use i2c(Master,Slow,sda=PIN_C4,scl=PIN_C3,force_SW).

In this case, I can disconnect my IO board and I never freeze the code.
So, thanks to Guest, but software I2C is already make by CCS and good working Smile

Thanks to Andrew : I already use 390 R in serial on each device.
And 4K7 pullUp resistor.

Regards
Case solved.
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