Spojení více "Serial TTL" dohromady

Uživatelský avatar
Dex
Administrátor
Příspěvky: 1264
Registrován: 16 úno 2013, 14:26

Spojení více "Serial TTL" dohromady

Příspěvek od Dex » 03 zář 2020, 13:59

Zdravím,

chtěl bych propojit více "Serial TTL" v 5V úrovních dohromady. Bude jedno hlavní Arduino s 32U4 jehož Tx připojím na několik Rx dalších 32U4. Obdobně Tx z těch podřízených 32U4 spojím a přivedu na Rx toho prvního Arduina. Těch Arduin bude asi 5 a vzdálenosti mezi nimi v desítkách cm.

To ale pochopitelně není správně a já se ptám, jde-li to nějak "och..."? :)

Mám málo místa proto třeba cestou MCP2551 nebo podobných obvodů na RS-485 jít nechci. V podstatě mne napadlo jediné řešení a to zapojit to do kruhu (Tx0->Rx1 Tx1->Rx2 Tx2->Rx0), ale to se mi moc nelíbí.

Pro rejpaly:
1) zatím nemám dost 32U4 na brutální praktický test ala "uvidíme co to udělá"
2) i kdybych je měl, tak to přece jen tak bez rozmyslu "neodpálím", ale nejdříve se zkusím poradit tady ;)

Díky za případné rady.
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

JiT
Příspěvky: 36
Registrován: 29 bře 2016, 08:52
Bydliště: Kladno (to u Prahy)

Re: Spojení více "Serial TTL" dohromady

Příspěvek od JiT » 03 zář 2020, 14:16

Učitel na střední tomu říkal montážní součin a dával za to koule.
Máš prostor tam ještě táhnout od masteru ke slavům drát CS (Chip Select).

Pak bys prostě adresoval jeden slave a ostatní by si přepnuly nožičky do vysoké impedance.
To mi přijde nejvíc nejčistší za daných okolností.

Asi by se to dalo popropojovat s nějakými odpory, takže zatížení výstupu nebude dramatické.
A v software mít aplikovaný něco jako CSMA/CD. Brrr...

Jak si vůbec představuješ, že si to bude povídat? Master-slaves, multimaster, peer-to-peer?

Edit: A teď mi došlo.. I2C bys nebral? Na ty desítky cm to skousne i hvězdu.

Uživatelský avatar
Dex
Administrátor
Příspěvky: 1264
Registrován: 16 úno 2013, 14:26

Re: Spojení více "Serial TTL" dohromady

Příspěvek od Dex » 03 zář 2020, 14:46

Já vím, že je to špatně :D ale taky vím, že třeba Pololu nebo Sabretooth to na svých modulech k motorům nějak udělané mají a funguje to.

SPI se mi nelíbí, protože bych těch CS drátů mohl také někdy potřebovat třeba 6. To už to raději zvětším a nacpu tam třeba ten MCP2551 ;)

Komunikaci si vyřeším, to nebude problém - bude jeden pán a více otroků :) Vlastně nikdy nebude "vysílat" více otroků najednou.

I2C na takovu dálku a ještě do hvězdy - mno fůůůj :lol: to by se mi nelíbilo i když by to asi fungovalo, ale stejně to použít nemůžu protože to potřebuju na něco jinýho. A implementovat to v sw... nene to to raději zvětším ;)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Uživatelský avatar
fulda
Příspěvky: 1033
Registrován: 04 led 2016, 17:18

Re: Spojení více "Serial TTL" dohromady

Příspěvek od fulda » 03 zář 2020, 15:04

Tak asi je potřeba si nejprve zodpovědět, jak bude daná komunikace řízená.
Pokud je to nějaké řízení, kdy master osloví nějaký slave a pak čeká, že mu ten konkrétní slave odpoví, tak můžeš použít dejmetomu TTL multiplexer.
Podívej se na seznam 7400 a hledej slovo multiplexer, třeba 74150 je bezva.

Pokud slave začne žvanit tak nějak ze své vůle, tak potřebuješ něco, co bude ty signály skládat. například tak, že je všechny uděláš OD, pak je složíš do sebe a budeš čekat, co z toho vznikne. Pochopitelně to budeš nějakou dobu vylepšovat, až vynalezneš CSMA/CD
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

Uživatelský avatar
Dex
Administrátor
Příspěvky: 1264
Registrován: 16 úno 2013, 14:26

Re: Spojení více "Serial TTL" dohromady

Příspěvek od Dex » 03 zář 2020, 15:32

O MUXech vím, ale to to opět raději zvětším a přidám nějaký transceiver ;)

Komunikace bude probíhat tak, že master pošle pár bajtů, kde jeden bude ID otroka a ten jeden správný odpoví. Nic komplikovaného.

Třeba https://www.pololu.com/product/767 to má nějak vyřešené, protože se jich může za sebe zapojit více i to kombinovat třeba s modulem na řízení serv. Schéma jsem zatím nenašel, ale pohledem na tu destičku tam žádný extra obvod není a přesto to funguje. A to je to co mi vrtá hlavou :)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

MartinL
Příspěvky: 179
Registrován: 24 úno 2013, 14:13
Kontaktovat uživatele:

Re: Spojení více "Serial TTL" dohromady

Příspěvek od MartinL » 03 zář 2020, 16:29

Samozřejmě je lepší použít nějaký tranceiver (MCP2551), ale nouzové řešení je hardwarový and. Na TX výstupy dáš diodu, tak aby výstup stahoval jen k nule (katoda TX, anoda linka - jako otevřený kolektor) a na linku do RX masteru dáš pull-up (tvrdost dle délky vedení, rychlosti komunikace, ...). Pokud jde u daného uP nakonfigurovat výstup jako otevřený kolektor, tak není potřeba ta dioda, ale u ATmega32U4 to asi nepůjde (nepoužíval jsem, ale u jiných AVR to nelze). Kdysi jsem to nouzově použil na robotu na Eurobotu 2005 (protože jsem rychle nesehnal traceivery, tak jsem tam vrazil místo nich diody) a nakonec jsem s tím odjel i světové finále. Na další rok jsem tam, ale dal už, co tam bylo plánováno.

butan
Příspěvky: 61
Registrován: 02 dub 2019, 07:06

Re: Spojení více "Serial TTL" dohromady

Příspěvek od butan » 03 zář 2020, 19:25

Atmega neumí otevřený kolektor, (umí ho jen na I2c, ale pokud použiješ soft serial knihovnu, tak si jí můžeš upravit tak, aby přepínala TX místo h do vysoké impedance. A jako protokol bych doporučil komunikační lin protokol, atmelové na to mají hotové knihovny, protože se to běžně používá v autech. A zapojení se ještě zjednoduší, můžeš všechny Rx i Tx propojit jediným drátem :-)
Lubor

Uživatelský avatar
Dex
Administrátor
Příspěvky: 1264
Registrován: 16 úno 2013, 14:26

Re: Spojení více "Serial TTL" dohromady

Příspěvek od Dex » 03 zář 2020, 19:40

Hmm tak ten LIN protokol vypadá zajímavě, to prozkoumám.

Jinak asi poslechnu Martina a nějak tam někam nacpu MCP2551. No dost možná by pak ještě téhle rady litoval :lol:
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

MartinL
Příspěvky: 179
Registrován: 24 úno 2013, 14:13
Kontaktovat uživatele:

Re: Spojení více "Serial TTL" dohromady

Příspěvek od MartinL » 03 zář 2020, 20:10

Jen pozor, budič CAN (MCP2551) má zpětný odposlech - echo. Co vysíláš, to se hned také přijímá. Takže musí být trochu složitější sw, který se s tím vypořádá (stále jsem neupravil AVR bootloader, tak aby mi s tím fungoval :( ). Pokud se s tím nechceš trápit, tak je možná cesta přes RS485, kde je ale zase nutné přepínat směr vysílání x příjem (to je ale jednodušší).
Ad LIN) To je po hardwarové stránce to, co jsem popisoval (tedy v autě na 12V a poněkud korektněji řešené).

Uživatelský avatar
Dex
Administrátor
Příspěvky: 1264
Registrován: 16 úno 2013, 14:26

Re: Spojení více "Serial TTL" dohromady

Příspěvek od Dex » 03 zář 2020, 20:18

O tom vím. To by na 32U4 nebyl problém, protože tam je CDC směrem do PC (kde poslouchá i bootloader) a pak je k dispozici další sériák, kam bych právě připojil ty MCP2551. Příchozí paket by se pokaždé přijal, ale pokud by měl stejné ID jako modul, tak by se rovnou zahodil.
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host