I2C uzun mesafe devresi yaptım fakat data kaybı yaşıyorum?

Başlatan clonex, 01 Haziran 2018, 09:18:26

mufitsozen

Alıntı yapılan: clonex - 02 Haziran 2018, 12:59:39Ne yapayım hocam, ilk defa bu işlerle uğraşıyorum.

Bir sey yapmaniza gerek yok sayin @clonex, Bir sahsiyetin dedigi gibi "dogru kararlari almak icin tecrubemize danisiriz, tecrube kazanmamiz da daha once yaptigimiz kotu secimlerin sonucudur! (Good decisions come from experience. Experience comes from making bad decisions.)"  ;)

Burada Kipling'in meshur "if" siirine de atifta yapmak lazim ama konumuz muhendislik oldugu icin oralara sapmadan devam edelim. (bu arada if siirinin en guzel cevirilerinden birisi rahmetli Bulent Ecevit tarafindan yapilmistir, ingilizcesini okuyamazsan en azindan turkcesini okumani oneririm, benim nacizane gorusume gore genc bir insanin karakterine yapici etkileri olacaktir".

Muhendislige donersek, biliyorsun muhendislikte problem cozmek esastir. (troubleshooting). Bu yuzden muhendisleri tarif ederken "frustrated engineer (husrana ugramis muhendis)" denir ve murphy kanunlari gibi dimyata pirince giderken evdeki bulgurdan olan muhendislerin hikayesi de dilden dile anlatilir. Eger ilgilenirsen bu konuda yazilmis en guzel kitaplardan biriside Henry Petroski'nin "To Engineer is Human, The Role of Failure in Successful Design" kitabidir.

Konu yine dagilmadan senin konuya donersek, sayin @foseydon'un da belirttigi gibi I2C cok kisa mesafelerde (tercihan ayni PCB yada Back Panel yada sasede) calismak uzere tasarlanmistir. Mesafeleri uzattigin zaman bir takim etkiler bu haberlesme ortamini bozmaya ve sana prb cikartmaya baslar. Bunlardan, bence, en onemlisi mesafeler uzamaya basladiginda (uzaklik derken, I2C icin metrelerden bahsediyoruz) I2C bus bir transmmisin line'a donusur ve line empedansi (capacitance, inductance ve resistans birlesimi) cok onemli olmaya baslar. empedans uyumsuzlugu (mismatch), attenuation ve reflection(yansima) gibi prblemler cikartir. Standard ve daha onceden belirlenmis kablo vb elemanlar kullanmiyorsan bu line impedance(hat empedansi)ni sizin olcmeniz/hesaplamaniz yada deneme yanilma ile bulmaniz lazim gelir. Tabii bu standard bir urun icinse, musteride kurulu her sistem birbirinden farkli olacagi icin, her biri icin alanda hesap, olcme, denemeler yapmaniz gerekirki buda maliyeti cok yuksek bir istir.

Simdi sizin bu projenizin okul projesimi, ARGE projesimi yoksa ticari bir uygulamami oldugunu bilmiyoruz. O yuzden generic (genelleyici) bir takim onerilerde bulunmak disinda fazla bir katkim olamiyabilir korkarim.

Muhendislikte en temel kural(aforizma)lardan biri, "eger herhangi bir problemi cozmek icin en az uc yol dusunemiyorsaniz o problemi tam olarak anlamamisinizdir" der.

Senin yazdiklarin ve benim bunlardan anladiklarima gore simdi sana uc onerim olacak:

1- Termination resistansini deneme yanilma yolu ile deneyerek calisan bir deger bulmaya calis. Once clock hatti ile basla, ben olsam 50 ohmdan baslayarak 300 ohm'a kadar birer birer denerdim. Osiloskopta signal reflection varsa onuda gorebilirsin, ona gore kendini ayarlayabilirsin. Genellikle hatta reflectiondan dolayi bir bozulma varsa stabil bir clock osiloskopta yakalamak zordur. kare dalganin sekil bozuklugunun cok karakteristik bir grafigi vardir ama biraz google'ladim ama sana ornek olacak birsey bulamadim maalesef.

2- Mesafeli haberlesmelerde kullanilacak en guvenilir ve bilinen interface RS485'dir. Seri haberlesme uzerine oldugu ve bir cok standard chipler vb oldugu icin cok kolaylikla interface'ini buna cevirebilirsin. PCByi degistirsin vb 4-5 haftadan fazla almaz. Eger Arge ve/veya ticari bir is ise bence en azindan yakin gelecekte bu konuyu bir dusun derim.

3- Hattaki problemlerin bir cogunu yazilimi daha karisik ve kapsamli yaparak da cozmeyi deneyebilirsin. Bu konuda , random surelerle belli bir sayida retry etmek, ECC kullanmak (error correction code), gonderilecek bilgi eger uzunca ise, cok kisa bloklar haline retry ve ECC(Error correcting Codes) ile gondererek her seferinde butun blogu tekrar yollamamak gibi seyleri deneyebilirsin.

Bunlarda benim 2kurusluk dusuncelerim, belki sana bir faydasi olur.

Allah zihin acikligi versin, bol sans.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

google'da long distance I2C diye arayinca NXP AN10658 Sending I2C-bus signals via long communications cables diye bir dokuman var. Bir incelemende fayda olabilir.


Soyle bir ifade var "The drive capability of standard I2C-bus devices (3 mA sink) or even of Fast-mode Plus (Fm+) or I2C-bus buffers such as P82B96 or PCA9600 (30 mA) is not sufficient to drive useful logic voltages on these cables if they are terminated by their characteristic impedance at each end. Working with termination resistances that must be significantly larger than the characteristic impedance of the cable means there will be significant distortion of the logic signals in the period immediately following a change in the required logic state."

Dolayisi ile sana onerdigim termination resistance deneme isi calismayacaktir.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

Birde soyle bir yazi buldum birde onu incelemende fayda olabilir. https://hackaday.com/2017/02/08/taking-the-leap-off-board-an-introduction-to-i2c-over-long-wires/

Taking the Leap Off Board: An Introduction to I2C Over Long Wires
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

yas

r3 ve r4 dirençlerini hattın en ucundaki kartta kullanın diğerlerinde iptal edin büyük ihtimalle çalışacak.
Yada kaç tane kart varsa r3 ve r4 dirençlerini o kadar kat artırın örneğin 4 adet kart varsa r3=470x4 ~2k gibi bir değerle değiştirin.






clonex

Alıntı yapılan: mufitsozen - 02 Haziran 2018, 17:29:29Bir sey yapmaniza gerek yok sayin @clonex, Bir sahsiyetin dedigi gibi "dogru kararlari almak icin tecrubemize danisiriz, tecrube kazanmamiz da daha once yaptigimiz kotu secimlerin sonucudur! (Good decisions come from experience. Experience comes from making bad decisions.)"  ;)

Burada Kipling'in meshur "if" siirine de atifta yapmak lazim ama konumuz muhendislik oldugu icin oralara sapmadan devam edelim. (bu arada if siirinin en guzel cevirilerinden birisi rahmetli Bulent Ecevit tarafindan yapilmistir, ingilizcesini okuyamazsan en azindan turkcesini okumani oneririm, benim nacizane gorusume gore genc bir insanin karakterine yapici etkileri olacaktir".

Muhendislige donersek, biliyorsun muhendislikte problem cozmek esastir. (troubleshooting). Bu yuzden muhendisleri tarif ederken "frustrated engineer (husrana ugramis muhendis)" denir ve murphy kanunlari gibi dimyata pirince giderken evdeki bulgurdan olan muhendislerin hikayesi de dilden dile anlatilir. Eger ilgilenirsen bu konuda yazilmis en guzel kitaplardan biriside Henry Petroski'nin "To Engineer is Human, The Role of Failure in Successful Design" kitabidir.

Konu yine dagilmadan senin konuya donersek, sayin @foseydon'un da belirttigi gibi I2C cok kisa mesafelerde (tercihan ayni PCB yada Back Panel yada sasede) calismak uzere tasarlanmistir. Mesafeleri uzattigin zaman bir takim etkiler bu haberlesme ortamini bozmaya ve sana prb cikartmaya baslar. Bunlardan, bence, en onemlisi mesafeler uzamaya basladiginda (uzaklik derken, I2C icin metrelerden bahsediyoruz) I2C bus bir transmmisin line'a donusur ve line empedansi (capacitance, inductance ve resistans birlesimi) cok onemli olmaya baslar. empedans uyumsuzlugu (mismatch), attenuation ve reflection(yansima) gibi prblemler cikartir. Standard ve daha onceden belirlenmis kablo vb elemanlar kullanmiyorsan bu line impedance(hat empedansi)ni sizin olcmeniz/hesaplamaniz yada deneme yanilma ile bulmaniz lazim gelir. Tabii bu standard bir urun icinse, musteride kurulu her sistem birbirinden farkli olacagi icin, her biri icin alanda hesap, olcme, denemeler yapmaniz gerekirki buda maliyeti cok yuksek bir istir.

Simdi sizin bu projenizin okul projesimi, ARGE projesimi yoksa ticari bir uygulamami oldugunu bilmiyoruz. O yuzden generic (genelleyici) bir takim onerilerde bulunmak disinda fazla bir katkim olamiyabilir korkarim.

Muhendislikte en temel kural(aforizma)lardan biri, "eger herhangi bir problemi cozmek icin en az uc yol dusunemiyorsaniz o problemi tam olarak anlamamisinizdir" der.

Senin yazdiklarin ve benim bunlardan anladiklarima gore simdi sana uc onerim olacak:

1- Termination resistansini deneme yanilma yolu ile deneyerek calisan bir deger bulmaya calis. Once clock hatti ile basla, ben olsam 50 ohmdan baslayarak 300 ohm'a kadar birer birer denerdim. Osiloskopta signal reflection varsa onuda gorebilirsin, ona gore kendini ayarlayabilirsin. Genellikle hatta reflectiondan dolayi bir bozulma varsa stabil bir clock osiloskopta yakalamak zordur. kare dalganin sekil bozuklugunun cok karakteristik bir grafigi vardir ama biraz google'ladim ama sana ornek olacak birsey bulamadim maalesef.

2- Mesafeli haberlesmelerde kullanilacak en guvenilir ve bilinen interface RS485'dir. Seri haberlesme uzerine oldugu ve bir cok standard chipler vb oldugu icin cok kolaylikla interface'ini buna cevirebilirsin. PCByi degistirsin vb 4-5 haftadan fazla almaz. Eger Arge ve/veya ticari bir is ise bence en azindan yakin gelecekte bu konuyu bir dusun derim.

3- Hattaki problemlerin bir cogunu yazilimi daha karisik ve kapsamli yaparak da cozmeyi deneyebilirsin. Bu konuda , random surelerle belli bir sayida retry etmek, ECC kullanmak (error correction code), gonderilecek bilgi eger uzunca ise, cok kisa bloklar haline retry ve ECC(Error correcting Codes) ile gondererek her seferinde butun blogu tekrar yollamamak gibi seyleri deneyebilirsin.

Bunlarda benim 2kurusluk dusuncelerim, belki sana bir faydasi olur.

Allah zihin acikligi versin, bol sans.

Hocam değerli öğütleriniz ve açıklayıcı yorumlarınız için çok teşekkür ederim, çok mutlu oldum. Teşekkürler.