PIC 18F2321-Multiplexer z MCU-prostupnost obousměrného sig.

Zdravím, řeším zdánlivě jednoduchý případ, chci za pomocí MCu udělat prostý a jednoduchý přepínač. Do jednoho portu mi signál vstupuje, a já jen tlačítkem volím na kterém portu vyleze. Problém je, že signál je obousměrný. Existuje nějaká finta jak z PICu udělat “drát”? Neboli Analogový multiplexer díky za postřehy

:arrow_right: administrator: přejmenováno z "PIC 18F2321 - Propojení portů"

Jeden zo stavov musi byt tzv. “mäkký”. Zvyčajne to býva log.1 cez odpor napr. 4k7 o Ucc.
Procesor si nastavi vsetky porty ako vstupne. Cez odpory typu pull up je na vsetkychj vstupoch zabezpecena log.1.
Ak mcu na niektorom zo vstupnych pinov zisti stav log.0, tento stav prenesie na predvoleny pin tak, ze ho nastavi ako vystupny a este ho da k tomu zaroven do stavu log.0. Ked signal log.0 na prislusnom vstupe pomynie, potom sa prislusny “vystupny” pin nastavi ako vstupny, cim sa na nom vdaka pull up odporu nastavi log.1.

Obdobne funguje logika napr. na I2C zbernici.

Pokud to má fungovat jako analogový multiplexer, tak hledej zapojení s CD4052(2x4) nebo CD4051(1x8). Procesorem pak jen nastavuješ, který kanál je aktivní.

Při použití uProc. to bude fungovat jen pro logické signály. Pro sinus průběh by se musel vstupní signál převést pomocí A/D převodníku(Fvz > 2*Fvst) a zpětně D/A převodem obnovit signál.

“analogový”? Jak chceš (z principu) slučovat dva analogové signály obousměrně? U digitálního je to jasné, otevřený kolektor (jak psal Martin). U jednosměrného analogového přepínače by to bylo asi také jasné, byl by asi zbytečný A/D+D/A převod a raději hw analogový multiplexer řízený procesorem. Možná ses spletl v definici zadání? Protože nevím jak bys definoval zda na vodiči analogový signál je/není (aby mohl být obousměrný). Jestli by byl směr řízený procesorem, tak také raději obousměrné analogové spínače než přímo CPU.

Panda38: Ano, uznávám že “analogový” není zcela přesné, řešení mám pomocí obvodu MAX306, konkrétněji jde o 1 wire protokol DALLAS. Jinak pro uživatele MArtin: Díkec!

Jestli chceš data přenášet procesorem, tak na DALLAS 1-wire budeš mít problém stíhat data přenášet přesně (kvůli granularitě časování instrukcí). Jsou tam i impulzy s délkou 1-15us, přinejmenším tím rozjedeš časování protokolu a nejspíš i nějaké krátké impulzy ztratíš. Jistě budou třeba i další obsluhy, např. komunikace procesoru kvůli řízení, v tom případě je to nereálné realizovat kvůli časování. Musíš použít nějaký hw maticový multiplex nebo programovatelné hradlo.

Existuju MUXy na I2C, napr PCA9547 alebo PCA9516

nxp.com/documents/data_sheet/PCA9547.pdf

zlgmcu.com/philips/iic/PCA95 … _DS_EN.pdf

to by sa na 1-wire dalo idealne pouzit. Ale aj tu spomynane analogove muxy, napr 4051 su skvele pull-up rezistory udrzuju log.1 na oboch stranach, takze si nemyslim ze bypouzitie analogoveho muxu bolo uplne od veci.
No na rozdiel od takeho PCA9516 sa urcie o nieco skrati dosah, nie uplne maly seriovy odpor analogoveho spinaca bude branit rychlejsiemu nabijaniu kapacity na vedeni. Dostatocne nizke hodnoty pull-upov by to vsak mohli poriesit.

:arrow_right: administrator: přiloženy externí soubory
PCA9547.pdf (142 KB)
PCA9516_DS_EN.pdf (114 KB)

Myslim, ze Panda38 nemylel doslovne… asi myslel spolehlive reseni s nejakou rezervou coz je podle me dobre … nemyslim, ze reseni nejakych ramcu ci jinych dat je optimalni pres 1-Wire. Cidla, pamet <1Kb, IO expander - mozna 2X16 LCD je OK. - ale podle me to neni nejak rychla a robustni zbernice … nejsem soudce jen amater ale spis bych veril CAN,RS485 bo tak necemu …

Mám objednán MAX306, 16 kanálový mux, tak uvidím jak se osvědčí.