 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
marko Član



Pridružen-a: Sre 07 Jan 2004 15:14 Prispevkov: 755 Aktiv.: 3.18
|
Objavljeno: Pet Maj 18, 2012 10:51 am Naslov sporočila: i2c + avtomobilska aplikacija |
|
|
Živjo!
Izgubljam živce z i2c in avtomobilskio aplikacijo. Žal je projekt v taki fazi, da se I2C ne morem več znebiti, iščem pa najboljšo možno rešitev.
Dogaja se, da se I2C vodilo redno obeša.. Uporabljam AVR in I2C knjižnico avtorja Petra Fleury-a, ki naj bi bila najbolj preverjena. Dodal sem algoritem za detekcijo "obešanja" v določenih while zankah, s katero ponovno obudim vodilo. Ročno naredim 9 clockov + i2c stop. Zadeva se sicer uspešno postavi nazaj, vendar me živcira, ker se to dogaja precej pogosto - največji problem pa je, da med tem ko se izvaja ta recovery, ostala koda ne funkcionira pravilno (izmerjeno 10 - 20 ms).
Recovery je seveda samo en od problemov, največji problem je to, da do tega sploh prihaja.
Moja i2c postavitev je taka:
AVR (izolirano napajanje) <-> RTC chip
AVR (izolirano napajanje) <-> ADUM1250 (i2c isolator na zunanjem napajanju) <-> 2x IO EXPANDER (1 expander je stran 1 cm, drugi pa 1.5m), 1xAD7997 (a/d converter)
Expander, ki je 2m stran ima military spec žico + oklop, tako da motenj po tem kablu ne bi smelo biti. Debelina 0.25.
Zadeva se obeša največkrat na I/O expanderjih, nekajkrat tudi na RTC chipu. AD7997 zaenkrat še ni imel težav. Pullup upori so 1.8k (4 kosi, 2 na obeh straneh izolatorja), ki da najbolj pravokoten signal (sem poskusil tudi z 3.3k, in 4.7k pa je zmeraj slabše)
Zunanjo napajanje je klasično LM7805 + kondenzatorji. Drugih filtrov nimam (Je to problem??). Pred napajanjem (generalni + in -) pa je RBO40-40G, ki skrbi za prenapetostno zaščito in polariteto.
Vem, da i2c ni bil namenjen za take dolžine, vendar želim zadevo zrihtat optimalno, ker za večji redesign vezja ni časa.
Obstaja rešitev za ta problem?
Gledal sem I2C bufferje, ki imajo stuck recovery opcijo. Mislite, da bi to rešilo težavo? Kakšne so vaše izkušnje?
Zase vem, da I2C v naslednjih projektih za avtomobilske aplikacije niti slučajno ne bom uporabljal. Razmišljam o SPI ali CAN vodilu? Se da enostavno povezat CAN vodilo preko kakega zunanjega čipa z 8 bitnim AVR-jem? (preko SPI?)
SPI mi je malo nepraktičen, ker potrebuje veliko žic za več naprav (enable).
Lepo bi prosil za kakšen nasvet ali idejo, zaenkrat sem z vašo pomočjo rešil še vse težave
Koda za i2c recovery je tole:
Koda: |
for (int x=1; x<9; x++)
{
cbi(PORTC, 0); // SCL
_delay_us(50);
sbi(PORTC, 0); // SCL
_delay_us(50);
}
TWCR = (0<<TWINT) | (0<<TWEN) | (1<<TWSTO);
_delay_ms(5);
i2c_init();
|
Marko |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.87 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 18, 2012 11:53 am Naslov sporočila: |
|
|
Poskusi zmanjšati hitrost. Kateri RTC uporabljaš? PCF8583? Nekoč sem imel podobne probleme PCF8583,SAA1064 -> PIC. SAA je bil kaka pol metra oddaljen od mikrokontrolerja. (prikazovalnik) Zadeva se je vsake toliko časa obesila. Zadeva je začela delati normalno, ko sem spisal softwerski I2c. Nekaj let kasneje sem uporabil isti displej v kombinaciji AVR-ja. Težava se je ponovila. Ko sem kasneje zmanšal dolžino povezovalnih kablov na par cm je zadeva začela delati normalno. Tukaj je bil res očitno vzrok dolžina. Z drugega konca pa sem recimo LCD katerega poganja extender PCF8574 povezal s ca 5m dolgim telefonskim kablom ter umetno povzročal motnje, pa je zadeva delala brez problema. ***klik*** _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
marko Član



Pridružen-a: Sre 07 Jan 2004 15:14 Prispevkov: 755 Aktiv.: 3.18
|
Objavljeno: Pet Maj 18, 2012 1:04 pm Naslov sporočila: |
|
|
Uporabljam 100 khz hitrost. Če dam na 400, itak ne deluje polovica naprav. Softwerskega I2C nisem še poskušal. Nekako nisem videl potrebe, bom pa poskusil še s tem.
Tudi jaz imam uporabljen PCF8574. Prav ta je tudi en od ta problematičnih.
Z motnjami doma običajno nisem imel problemov, zadeva je tekla brez težav tudi po več dni skupaj. Problem je ta "barabija" v avtomobilu.
Kaj pa praviš na I2C buffer? |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.87 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Pet Maj 18, 2012 1:22 pm Naslov sporočila: |
|
|
Citiram: |
Z motnjami doma običajno nisem imel problemov, zadeva je tekla brez težav tudi po več dni skupaj. Problem je ta "barabija" v avtomobilu. |
Težava je torej sigurno hardwerskega značaja. Sploh ni nujno, da težava nastaja na vodilu. Prilotaj na vso čipovje direk na napajalne nogice 100n kondezatorje.
Z I2C buferji pa nimam izkušenj. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
matjazkariz Član


Pridružen-a: Sre 03 Nov 2004 18:09 Prispevkov: 1026 Aktiv.: 4.33
|
Objavljeno: Pet Maj 18, 2012 6:05 pm Naslov sporočila: |
|
|
Citiram: |
Zase vem, da I2C v naslednjih projektih za avtomobilske aplikacije niti slučajno ne bom uporabljal. Razmišljam o SPI ali CAN vodilu? Se da enostavno povezat CAN vodilo preko kakega zunanjega čipa z 8 bitnim AVR-jem? (preko SPI?) |
Ja. Poglej MCP2515 ali SJA1000. _________________ LP, Matjaž |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 501 dni
Powered by phpBB © 2001, 2005 phpBB Group
|