View previous topic :: View next topic |
Author |
Message |
Fabri
Joined: 22 Aug 2005 Posts: 275
|
timeout in #use_i2c |
Posted: Tue Mar 27, 2007 10:39 am |
|
|
Hi,
Don't tell me I'm boring but I'm quite in trouble with i2c and ccs function #use_i2c. In case of noise of bus, or disconnect of slave, the micro remain inside a #use_i2c routine and exit only by wdt reset. The bus is 1 meters to 3 long. I tryed to work on hardare with ferrite beads or resistors without solve the problem.
At the moment I intruduced a timeout controll from TIMER0 interrupt and I solve some problem resetting bits of SSPCON registers. In other case this escape system doesn't work and I remain insyde routine till wdt timeout occure.
In first step I don't want write i2c comunication routine, I wrote it in assembler some times ago, and I want use CCS function.
Is there any possibility to reset i2c comunication, of #use_i2c function, comunication and restart it by software ?
Somebody had my problem and solve it in other way ?
Thanks for suppor me ! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Mar 27, 2007 11:30 am |
|
|
Give us a complete description of the external i2c hardware.
Post these things:
1. The manufacturer and part number of the i2c chips (or chips).
2. The length of the i2c bus.
3. The type of cable or wire used to connect to the slave chips.
4. The size of the pull-ups.
5. The location of the pull-ups on the bus.
6. The voltage used for the pull-ups.
7. The type of power supply used and its location, etc.
Post these and every other detail about the problem. |
|
|
Fabri
Joined: 22 Aug 2005 Posts: 275
|
|
Posted: Wed Mar 28, 2007 1:00 am |
|
|
Well,
I did many test changing configuration of resistor in series and pull-up without changes.
I have PIC18F2520 as master and PCF8563 in same board. Pull-up are 3K3 ohm. Actually I pull-up each i2c chips, with it's 330 ohm in series , but I tryed with only one pull-up on PIC18F2520 and only one series resistors near PIC without any changes. There are diodes BAT54S to protect SDA and SCL lines Vs. ground and 5Vdc near output bus conector.
External i2c bus is 1 meters long and slave is PIC16F690 with it's series resistors and 3K3 Pull-up. The bus is connected on RJ11 and the cable is 6x28 AWG. The power supply and voltage of pull-up are the same and all 5Vdc trought 1 wire of the bus cable. In bus cable there is also 12Vdc line, I also tryed to disconnect it without changes.
The power supply is a classic with LM7805 from 3VA transformer 230V/12Vac, all components are located in main board.
PICs has, in input pin, it's external pull-up of 10K.
The problem occur when I apply burst noise on power line 230Vac and external i2c bus cable is connected. When I disconnect i2c bus RJ11 in the main board the PIC stop to reset itself. Burst noise level on power supply is 2KV but the problem happen also with 500V.
I did some other test and when I stop master i2c task the problem disappear without any hardware changes.
I tryed to insert ferrite beads, inductor, Murata filters on bus, 5Vdc, ground and power supply without changes. I tryed to increase series resistors without changed the results.
Testing the circuits in debug I found that master stay inside #use_i2c bus in case of bus trouble and exit only when wdt timeout occur.
I hope to give you a complete view of problem and hardware configuration.
Thanks very much ! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Mar 28, 2007 11:57 am |
|
|
Quote: |
The problem occur when I apply burst noise on power line 230Vac
and external i2c bus cable is connected. When I disconnect i2c bus RJ11
in the main board the PIC stop to reset itself. Burst noise level on power
supply is 2KV but the problem happen also with 500V. |
You're actually doing pre-production ESD/EMI testing. You should
have said that in the beginning.
Quote: |
The power supply is a classic with LM7805 from 3VA transformer
230V/12Vac, all components are located in main board. |
Do you an input power filter in front of the transformer ?
I would use a power line filter or a power entry module with a built-in
filter. In other words, let somebody else design the filter for you.
Just buy a power entry filter that you can drop into your product. |
|
|
Konrad
Joined: 15 Sep 2003 Posts: 34
|
Shame CCS I2C does not have a TIMEOUT |
Posted: Wed Mar 28, 2007 3:48 pm |
|
|
You must write your own I2C routines. It is a shame that CCS have no TIMEOUT for I2C as they do for RS232.
If you take I2C out of the box checkout Philips I2C bus extenders. Using the bus extenders will enable you to increase filtering without degrading the I2C signal.
No amount of filtering will compensate for the fact that the bus may be interrupted (or cables removed etc) so use your own routtines. |
|
|
Fabri
Joined: 22 Aug 2005 Posts: 275
|
|
Posted: Thu Mar 29, 2007 12:37 am |
|
|
Hi,
I have a power line filter and without any i2c bus comunication I havent problem up to 3KV of burst in ac lines. As you sad, Konrad, the problem is in software because also cable removed in 60% of case do a reset of master for wdt timeout. Also slave stop to work in case of noise for absence of timeout escape.
I solve some problem testing the situation of compiler's i2c routine, timeout in read and write i2c routines and wdt timeout of slave.
I think CCS must solve also this problem or let the user to complete by oneself the function doing right change. I think CCS have to give open function based on C language as some other present in compiler. I know that user is free from use of inside function of compiler but when it is present it must work as better as possible. I hope you understand.
OK, I decided to write by myself i2c routine as soon as possible.
Thanks for help,
Regards, |
|
|
|