Čau všichni, pracuji teď na jednom projektu kde budu mít tři procesory který komunikujou po osmibitový sběrnici. Muj problém spočívá vtom, že na těch sběrnicích dochází k rušení a přenos dat je téměř nemožný. Sběrnice je tvořena klasickým 16-ti žilovým kabelem (jako jsou u HD). Lehce pomohlo když jsem na jednu stranu dal pull-down odpory na každej datovej vodič, ale stejně to furt není nic moc. Ani snížení rychlosti až na 100KB/s nepomohlo. Nenapadá nikoho co by se stim nechalo dělat, popřípadě nějaký zkušenosti.
Za každej názor budu rád.
16 žil je tam stoho důvodu že 8 je datových a zbylích 8 řídí komunikaci. Jinak I2C je šíleně pomalí (i kdyby běželo na 1 MHz tak přenese jenom něco přes 100KB/s). Přes paralérní sběrnici protáhnu až 500MB/s (kdyby to fungovalo jak má).
Pre velke rychlosti sa pouzivaju seriove rozhrania (napr. SATA), lebo tam sa neprejavi nerovnomerne spomalenie jednotlivych datovych vodicov a v navaznosti na to riadiacich. Paralelne rozhrania - pokial nie su na plosaku, na x vrstvovom plosnom spoji s velmi starostlivo prepocitanymi meandrami - su jednoducho pomalsie, lebo zbernicu treba taktovat tak, aby aj najpomalsi signal prisiel do ciela. A ak je kabel ATA pokruteny a v roznych castiach sa dotyka zeleznych casti a v inych castiach nie, uz to sa moze prejavit na vzajomnom oneskoreni jednotlivych signalov.
Seriove rozhrania tymto neduhom nie su postihnute, preto sa presadili. Spravit totiz velmi rychly prevodnik paralel/serial/paralel je dnes cenovo velmi dostupne.
Z horeuvedenych okolnosti pochybujem o moznosti prepojenia dvoch zariadeni cez paralelny kabel az 500MB/s v amaterskych podmienkach.
Pre doplnenie,
paralel ATA ide do max 8.3MB/s.
paralel ATA2 ide do max 16.7MB/s.
paralel ultraATA-133 ide do max 133MB/s.
Serial ATA ide az do 6Gb/s.
Ak nevyhovuje I2C (velka vyhoda je v implementacii multimastra) doporucujem prepojenie MCU cez SPI.
Důležité je,jak dlouhé ty vodiče jsou.Pokud bude jejich vzájemná kapacita tak velká,že změna na jednom vodiči způsobí přechod přes logické úrovně na druhém vodiči,vznikají chyby. Pomáhá zatížení vodičů na obou stranách vedení poměrně malými odpory(např.120 Ohm),případně zatížení odporovými děliči(na napájení i zem).
Ty voďiče maj délku CCA 20-30 cm, takže dlouhý nejsou. Jinak ten návrh stima odporama na každou stranu bych docela skusil, ale děsímě jedna věc, když dam na každou stranu 120ohm jak na proti zemi tak na napájení (stim že veprostřed bude datový vodič). Tak to mi vyjde že budu snima hnát trvalej proud 0,33A což je 1,6W , pokud budou všechny výstupy dat ve vysoký impedanci. Když začnu posílat data tak se situace ještě zhorší. Pokud bude na vodiči LOG 1 tak mi každym tim spojem poteče 80mA a celkem to bude 0,6A, 3,3W . To abych si tam udělal nějaký koncový budiče, protože z MCU můžu tahat max 20mA na vývod.
Tak kludne tam daj 2k2 alebo 1k pull-up a 1k alebo 470R pull down.
Log uroven bude v kludovom stave log.1. Ak to nepomozu hodnoty 2k2 a 1k, az potom experimentuj s nizsimi hodnotami, ale hlavne vyskusaj do akej prenosovej frekvencie Ti to pri akej hodnote odporov ide. Vhodne su na to tie odporove hrebene.
AKo tu uz niektori uviedli, kriticky bude presluch medzi vodicmi. Kadzy druhy daj na GND.
Ak by si predsa len mohol experimentovat trochu velkorysejsie, tak kazdy vodic mozes nahradit dvoma a cez ne tahat linku RS485. Ta je bidirect. a budice dnes uz vela nestoja. Podla zisteni takych 0.5EUR, co pri sirke zbernice 8b je zanedbatelna cena. Cez RS485 mozes ist i na desiatky metrov do 10Mb (jedna linka, ty ich mas 8, takze 10MB )
Su k tomu aj take ploche kable tvorene skrutenymi dvojicami vodicov.
RS485 je diferencialna 5V linka, takze z principu je velmi odolna voci presluchom.
Odhadujem, ze aj spotreba bude omnoho nizsia. Zaroven budes mat dobre oddelene procesory od dlhych zbernic. Inak Ta mozem ubezpecit, ze 20-30cm pre toto pouzitie uz su dlhe vodice.
Daj vediet, ako pokracujes.