Schéma komunikace RS422 mezi více než dvěma SN75179, ATMega8

Zdravím všechny,
obracím se zde s dotazem ohledně zapojení komunikace RS422 obvodem SN75179. Hledám nějaké funkční propojení čtyř kusů. Ať dělám co dělám prostě komunikace nechodí nebo s velkým počtem chyb. Když propojím pouze dva převodníky tak je vše OK. Chyby se nevyskytují. Ale jakmile připojím další kus - končím. (respektive příjem dat na straně Master je chybový) Proto se ptám neexistuje nějaké zapojení, které mi unika? Pátral jsem po internetu, ale žádnou zradu nenacházím.
Zapojené klasicky z AMega8 na 75179 pak čtyři vodiče na další 75179 a opět AMega8… Vzdálenost mezi jednotlivými moduly je cca 20cm, tak nepředpokládám nějaké zásadní rušení. Zapojení co jsem přiložil, je k jinému obvodu, ale vesměs shodné.

:arrow_right: administrator: přejmenováno z “Komunikace mezi SN75179”
4ks.gif

Osciloskop hovori co ? na kratku vzdialenost to chodi ? kabel je aky pouzity ? niesu prehodene krizene zily s nekrizenymi ?

Osciloskop bohužel nemám k dispozici. Kabel je běžný laněný vodič - vzdálenost 20cm nikoly metry… Při propojení dvou modulů je komunikace OK… jak přidám další tak KO… mezi masterem a slave moduly je to křížené. Mezi slave již nikoly. Jen koukám moje zapojení se jeví jako funkční takto :

A – Y
B – Z
Z – B
Y – A

Ovšem když připojím další modul, tak chodí jen chyby a nesmyslné znaky.

A – Y – Y
B – Z – Z
Z – B – B
Y – A – A

Zkus na vysílač - master připojit pullup odpory cca 680R až 1K5. Viz: hw.cz/teorie-a-praxe/dokumen … rs422.html
Možná nemáš definován klidový stav při pauze ve vysílání nebo naopak jednotky zůstanou na úrovni vysílání a pak to může dělat ptákoviny. Možná se přetlačují, kdo dá víc. Ten vysílač utáhne až 60mA. V nějakém převodníku používám pro vizuální kontrolu v sérii s pullup odpory LEDky. Nedávno jsem s kolegou řešil podobný problém. kdy připojení více zařízení způsobilo výpadky či nefunkčnost. Zakopaný pes byl v tom, že každé zařízení mělo jak ukončovací, tak pullup odpory. Tím se impedance zmešila natolik, že ji korektně vysílače již “neutáhly” a minimální rozdíl byl cca v mV a ne min. 200mV. Konkrétně se jednalo o RS485 (2-drátovou), ale v principu je to naprosto shodné.
Nevím, zda jsem to tady už kdysi nepsal, ale servisoval jsem cca 105 zařízení po RS485. Zapojení někdo vtipně vybudoval do dvou “vánočních vloček”, tedy přesně tak, jak to nemá být. Vypadávala komunikace i od 40 zařízení při dotazech. Různé adresy, náhodně. Samotné zapojení v každé “vločce”, ale fungovalo korektně. Přenosová rychlost 2400 nebo 4800, už nevím. Pullup a ukončovací odpory jsem musel vyštípat na totální většině zařízení a částečně se to zlepšilo. Pomohl až opakovač zběrnice zapojený mezi “vločkami”. 100% komunikace. Celková délka vedení byla možná kilometr.
Zkus snížit rychlost, ale zkoušel jsem více zapojení a na stole do pár desítek metrů jsem nikdy neměl problém.
Mikop

Zdravíčko, tak jsem se konečně dostal k tomuto problému.

  • Pullup odpory nepomohly… respektive zvyšoval jsem je až do hodnoty 120R.
  • Jako druhý pokus jsem si místo SN75179 pořídil MAX488E, jež je zapojením totožný. A stejný problém. Jak připojím druhý slave, tak končím. Napadlo mě z jednoho modulu vyndat procesor, jestli neodesílá právě on něco a sběrnice stejně vykazovala tytéž chyby.
  • Po připojení kontrolní LED přes tranzistory vidím, že na straně příjmače master se objevuje jeden příkaz za druhým i když slave odesílat nic nemá. Nevim co to ma byt.
  • Nedalo mi to a předělal ta zapojení na dvoudrát s SN75176 (program v MCU, zachován beze změny, jen přidán příkaz pro řídící signál RX/TX) a funguje… i bez Pullup nebo nějakého spešl zapojení… Tak jsem z toho poněkud jelen. Napadlo mě ještě jestli není problém třeba v kapacitě vedení…!? ale to je asi hloupost…

To je divný. Zkus se podívat na přepínání vysílání. V zapojení máš pro RS422 je jen jeden vysílač (master) a ostatní jsou přijímače (slavy). Ale obráceně je jen jeden přijímač (master) a ostatní vysílače (slavy). Nezůstávají ty slavy v aktivní vysílací úrovni, protože jeden master a jeden slave pojede, ale u více slavů se můžou přetahovat při vysílání. Ale asi by Ti to nejelo na té RS485. Pokud jsou v klidu všichni v neaktivní úrovni, pak mají ty pullup odpory smysl pro definici klidového stavu. Hodnoty pullup odporů min. 680R!!! U těch terminačních je 120R mezi krouceným párem, ale na krátké vzdálenosti nejsou vesměs potřeba. Zapojení viz minulý příspěvek.

PS. Ještě to můžeš nechat na té RS485, ale nebude to fullduplex. A co stejné adresy slavů?

Dneska si s tím skusím ještě pohrát, testoval jsem zakončovací odpory 220R a pullup 820R. Skusím jít na hodnoty co píšete. Jinak adresy jsou samožřejmě jiné. I vysílání dat je v jiný okamžik (rozestup cca 2,5sec). Jen k tomu přepínání - SN75179 nemá řídící vodiče. To úvodní zapojení ukazuje jen propojení mezi Masterem a třemi slave. Dneska bych tedy rád testnul toto…
P1168823.jpg

Tak jsem se ještě jednou podíval do datasheetu na ten SN75179. Přepínání směru opravdu nemá - sorry. Tak mě napadly další možnosti. Podle obrázku výstupního budiče z datasheetu je při D=1 na Y=1 a Z=0. Při D=0 na Y=0 a Z=1. To značí, že pokud ostatní nevysílají (D=1 na Y=1 a Z=0), drží linku na těchto úrovních a jeden komunikující vysílač to nepřetlačí. Možná nějaké zákmity nebo opakované odpovědi, které pak bliknou LED. Pro multimaster komunikaci musí obvod vysílače na straně slavů přejít do vysoké impedance, aby nezatěžoval nějakým stavem linku, když nějaký jiný slave potřebuje odpovědět. Z toho mi vychází, že SN75179 je použitelná pouze pro dvě zařízení proti sobě. Pokud mermomocí potřebuješ tu RS422, zkus použít 2 budiče SN75176 (2 x RS485). Ty umožňují tu vysokou impedanci na vysílači nastavit. Pin označený jako DE=0 nastaví výstup do vysoké impedance. Při DE=1 se vysílá. Na některých zařízeních jsou použity LTC491. Ty to umí. Ale cena Tě asi odradí - 150 až 170,- Kč dle počtu.

No… :laughing: Tak to je na sebevraždu. :laughing: Už alespoň vím proč to nefunguje. Každopádně velice děkuju za vysvětlení, lámal bych se tím nejspíš ještě další týden. :laughing: Takže už se těším na výrobu nových DPS… Ještě jednou díky! :wink:

Jak jsem už psal, použij raději tu dvoudrátovou RS485. Použil jsem ji ve všech mých zapojeních. A ještě poznámka. Pokud budeš mít více napájecích zdrojů, propoj GND těch zdrojů mezi sebou. Celkový posun napětí mezi jednotkami na sběrnici je dle datasheetu max. 7V. Ale od 5V to už dělá značnou neplechu.

Přesně tak to udělám. Přechod na dvoudrát bude nejschůdnější řešení.