Komunikace více PIC přes izolovanou sběrnici

Dotazy na technické problémy, vlastní řešení technických problémů

Moderátor: Moderátoři

Zpráva
Autor
Uživatelský avatar
mtajovsky
Příspěvky: 3694
Registrován: 19 zář 2007, 02:00
Bydliště: Praha

#16 Příspěvek od mtajovsky »

termit256 píše:Jen posli bajt/paket dvakrat za sebou. Prijimaci strana vyhodnoti jestli jsou oba stejne a pokud ne, posle povel k opakovani prenosu.
Klidně se to zmastí 2x i vícekrát úplně stejně a nic se nepozná. Už jsem to zažil na DTMF přenosu. Zabepečovací CRC je určitě lepší a méně náročné na přenosovou kapacitu než opakování přenosu.

Uživatelský avatar
dracekvo
Příspěvky: 402
Registrován: 10 úno 2009, 01:00

#17 Příspěvek od dracekvo »

Tak on je 12F1572 dokonce levnější jak jeho slabší bráška s jedničkou na konci.
Jen ještě dotaz k tomu UARTu. Tam je možné spojovat více zařízení na jednu sběrnici, nebo je to jen pro přímou komunikaci?

Uživatelský avatar
Jirka525
Příspěvky: 325
Registrován: 22 kvě 2013, 02:00
Bydliště: Psáry JN79GW

#18 Příspěvek od Jirka525 »

To záleží, jak tu sběrnici hardwarově ošetříš. UART na CPU poskytuje signály na úrovni TTL. To znamená že na TXD můžeš připojit několik zařízení RXD. Nesmíš ale spojit 2 signály TXD, to by na sběrnicích docházelo ke kolizím. Jinými slovy, na úrovni TTL uděláš pouze obousměrnou komunikaci bod - bod nebo jednosměrnou komunikaci bod - multibod. Jedna velitelská stanice může dávat povely ostatním. Pokud potřebuješ sběrnici, na kterém může být několik zařízení s obousměrnou komunikací, tak je vhodné dát za UART převodník TTL/RS485. http://www.gme.cz/rozhrani-pro-rs422-rs ... 5-sbernice RS485 je třístavová sběrnice, na které může být současně zapojeno několik zařízení. Ale stejně musíš programově ošetřit aby v danném okamžiku vysílala maximálně jedna stanice. To se typicky používá pro komunikační protokoly typu Master-Slave, například můj oblíbený Modbus.
Jirka

Uživatelský avatar
dracekvo
Příspěvky: 402
Registrován: 10 úno 2009, 01:00

#19 Příspěvek od dracekvo »

Tak jsem nakonec vzal 12F1822 a ten podle datasheetu podporuje
• Master Synchronous Serial Port (MSSP) with SPI
and I2CTM with:
- 7-bit address masking
- SMBus/PMBusTM compatibility
• Enhanced Universal Synchronous Asynchronous
Receiver Transmitter (EUSART) module:
- RS-232, RS-485 and LIN compatible
- Auto-Baud Detect

Ale furt přemýšlím nad tou komunikací.
Jestli sem to dobře vše pochopil, tak 5V UART si sice můžu oddělit obyčejnejma optočlenama, ale už nemůžu spojit víc zařízení.
Potřeboval bych 1 master a 16 slave.

Na rychlosti opravdu nezáleží. Budu posílat číslo z ADC převodníku. Tj. 0-1024 a pokud master přijme od všech 16 slave data jednou za dvě vteřiny, tak to stačí.

Uživatelský avatar
ross4435897
Příspěvky: 426
Registrován: 10 lis 2009, 01:00
Bydliště: Brno

#20 Příspěvek od ross4435897 »

I2C bus

Uživatelský avatar
dracekvo
Příspěvky: 402
Registrován: 10 úno 2009, 01:00

#21 Příspěvek od dracekvo »

S i2c jsem zase na začátku problému, a tím je cena za izolátor i2c.

No nic, tohle asi žádné rozumné řešení mít nebude.
Asi se v rátím k tomu jak sem chtěl na začátku napsat nějaký vlastní protokol 1-wire na principu DS18B20.

Uživatelský avatar
peatre
Příspěvky: 39
Registrován: 26 lis 2007, 01:00
Bydliště: Malacky
Kontaktovat uživatele:

#22 Příspěvek od peatre »

Na viac zariadeni jednoznačne I2C Alebo One wire komunikaciu

http://www.embedded.com/design/prototyp ... he-I2C-Bus
Bezpečnost pri práci je dúležitejší než práca samotná...

Uživatelský avatar
ross4435897
Příspěvky: 426
Registrován: 10 lis 2009, 01:00
Bydliště: Brno

#23 Příspěvek od ross4435897 »

no zas tak drahy to neni (kdyz si jich koupis 1000ks :)) .... I2C ISOLATOR .. nebo na Ebay
One-wire je podle me taky pouzitelny ...
Naposledy upravil(a) ross4435897 dne 12 dub 2016, 10:59, celkem upraveno 1 x.

Uživatelský avatar
lesana87
Příspěvky: 3296
Registrován: 20 zář 2014, 02:00

#24 Příspěvek od lesana87 »

Budič RS-485 se do dvacky pořídí i při 10ks.

Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 01:00

#25 Příspěvek od frpr666 »

Já hlasuju pro každý "slave" 2x optočlen a pro "master" dekodér 1 z 16. Myšleno dle obr. níže.
Rx na "slave" MCU může být klidně jen obyčejný pin, a čekat jen na stav "log0", který odstartuje vysílání směrem "slave"->"master".
Pozn.1. na kolektoru PNP jsou pospojovány všechny anody...
Edit.2. výhodou tohoto řešení je, že "slave" může být např. bateriově napájený a většinu života v "power down" režimu. Vzbudit se, vyslat a zase usnout...
Přílohy
160412_optoizolator16.jpg
(44.23 KiB) Staženo 45 x
Naposledy upravil(a) frpr666 dne 12 dub 2016, 17:47, celkem upraveno 1 x.

Uživatelský avatar
Habesan
Příspěvky: 6924
Registrován: 12 led 2009, 01:00
Bydliště: Plzeňsko
Kontaktovat uživatele:

#26 Příspěvek od Habesan »

Co použít SPI a optrony s otevřeným kolektorem, s tím, že odpovídat bude pouze Slave, který správně obdrží svoji adresu (tak jako u I2C)?

Co použít I2C, ale HW (nějakým XOR) mu rozdělit datovou sběrnici na dvě jednosměrné?

EDIT: ad frpr666 sériovým řazením podřízených obvodů by se x-násobně (16, 127 nebo 256) snížila spolehlivost zařízení.
Naposledy upravil(a) Habesan dne 12 dub 2016, 18:16, celkem upraveno 1 x.
Sháním hasičák s CO2 "sněhový", raději funkční.
(Nemusí mít platnou revizi.)
(Celkově budu raději, když se to obejde bez papírů.)

Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 01:00

#27 Příspěvek od frpr666 »

No ještě by šlo snížit počet optočlenů. Pokud nejsou nároky na rychlost, tak pospojovat "slave" za sebe do "série". Každý slave by kopíroval řetězec ze svého vstupu a nakonec by připojil "svůj" nějaký řetězec ve stylu <adresa_slave_x><data_slave_x>
Přílohy
160412_optoizolator16b.jpg
(40.08 KiB) Staženo 42 x

Uživatelský avatar
dracekvo
Příspěvky: 402
Registrován: 10 úno 2009, 01:00

#28 Příspěvek od dracekvo »

Nad tou kruhovou topologií jsem přemejšlel taky, ale vyšlo mi, ale nevím jak bych to uřídil bez hodin. A kdybych použil hodinový signál, tak by mi počet optočlenů zůstal stejný, jen bych měl víc práce s obsluhou.
Nakonec sem se rozhodl pro dvě jednostranné 1wire sběrnice. Na jedné z mástra odešlu adresu a na druhé budu čekat na odpověď od osloveného procesoru.

Přincip je takový, že na RX bude stále log 1 a při vysílání jí bude optočlen stahovat do log 0. Tudíž budu moci mít více procesorů na jedné sběrnici, aniž by se navzájem ovlivňovali.

Mám zapojení správně?
Přílohy
oddelovac.png
(18.7 KiB) Staženo 59 x

Uživatelský avatar
frpr666
Příspěvky: 1051
Registrován: 28 pro 2009, 01:00

#29 Příspěvek od frpr666 »

Otázka je jestli chceš mít galvanicky izolované i jednotlivé "slave" mezi sebou. Nebo "slave" plavou na stejném potenciálu?
Jestli to dobře chápu, tak "master" bude v "log1" napájet 16x led v optočlenu?
Mimochodem jak máš vyřešené galvanicky izolované napájení pro jednotlivé "slave"?

Uživatelský avatar
dracekvo
Příspěvky: 402
Registrován: 10 úno 2009, 01:00

#30 Příspěvek od dracekvo »

To jsem asi nezmínil, každý slave sedí na jednom článku baterie z které se také napájí, takže musí být izolované i mezi sebou.
Jsou to vlastně balancéry, které po dosažení určitého napětí sepnou přes mosfet výkonové odpory. Když už to řídím přes PIC, tak jako doplňkovou funkci chci mít možnost si v budoucnu vyčítat napětí jednotlivých článků do nadřazeného systému k archivaci. Nebo přes něj nastavovat balanční napětí. Tak proto mi ani moc nezáleží na rychlosti komunikace.

S tim napájením 16x led optočlenu je to dobrá připomínka, to jsem si vůbec neuvědomil. Takže u mástra to budu muset posílit nějakým tranzistorem.

Odpovědět

Zpět na „Poradna“