Izolowany konwerter zrobić z RS232

W dniu 2017-09-22 o 16:28, Pszemol pisze:

Dobra - poszukałem zajawki, żeby nie trzeba było oczywistych rzeczy pisać:

formatting link
Pozdrawiam

DD

Reply to
Dariusz Dorochowicz
Loading thread data ...

Wiesz, to ma znaczenie wtedy, kiedy nie masz do dyspozycji sygnału sterującego nadajnikiem, czyli właśnie w konwerterach i repeaterach. Jak masz swojego procka to nie ma to najmniejszego sensu. W "normalnym" gotowym urządzeniu tylko raz się spotkałem z tym, że trzeba było wstępnie spolaryzować magistralę - na szczęście wystarczył rezystor z którejś linii do masy. I to był jakiś kontroler do PC-ta. Z innymi kontrolerami było OK.

Pozdrawiam

DD

Reply to
Dariusz Dorochowicz

W teorii pierwszego stopnia, bo w drugim stopniu, to sie doczytasz, ze producent gwarantuje poprawne dzialanie jesli napiecia wejsciowe są np w zakresie -7 .. +12V wzgledem masy komparatora (odbiornika). A jakie jest napiecie miedzy masa odbiornika a masa nadajnika kilometr dalej ? Bo nadajnik wystawia na druty napiecie np 0V lub +5V wzgledem swojej masy.

A jak na wejscie przylozysz napiecie np 100V wzgledem masy komparatora, to juz nie bedziesz mial komparatora :-)

No i co proponujesz ?

J.

Reply to
J.F.

Nie, to napięcie musi się zmieścić z odpowiednim zakresie. Popatrz na pdf-y układów.

Oczywiście. Ale jest rolą integratora żeby poprawnie dobrać urządzenia i konfigurację połączeń sygnałów i zasilania. Dlatego wszystkie, albo prawie wszystkie urządzenia z RS485 które widziałem, niezależnie od tego czy izolacja interfejsu była czy nie, miały wyprowadzoną masę komunikacji. Taki np kontroler systemu mający 4 podwójne wyjścia na magistrale (żeby można było włączyć nie tylko na końcu magistrali), nieizolowany interfejs i solidny uziemiony blok do podłączania mas komunikacji. Masa układu była uziemiona. Dedykowane do tego urządzenia miały optoizolację interfejsu i wyprowadzoną masę komunikacji. Nie żeby to był jedyny przypadek. Tak się to po prostu robi. W urządzeniach - jak pisał Piotr - na liniach cewka CM i kilka nF do uziemienia.

Pozdrawiam

DD

Reply to
Dariusz Dorochowicz

W dniu 2017-09-22 o 16:42, Pszemol pisze:

Izolacja jest po to, że jak masa jednego pływa sobie o kilkanaście/kilkadziesiąt voltów względem drugiego to wszystko działa. Dodatkowo jak w czasie burzy jeden skoczy w górę o kV względem drugiego to też komunikacja nie powinna zauważyć.

Łączenie izolowanych mas jest drogą powrotną dla sygnałów CM generowanych przez drivery. W czasie zmiany stanu jedna linia szybciej zmienia stan niż druga i występuje dość spory impuls CM (połącz między A i B dwa jednakowe rezystory i obejrzyj sygnał między nimi). Poza tym według danych katalogowych scalaków napięcie między tymi rezystorami gdy A>B może być inne niż gdy A<B nawet o 0,1V. Jeśli ten impuls (czy ten 0,1V prostokąt) będzie leciał przez ziemię i przez pojemności izolacji po obu stronach to powstaje duża pętla emitująca te zakłócenia (ta sama pętla odbiera też zakłócenia). Jak izolowane masy są połączone to praktycznie nie ma tej pętli i znikają wynikające z niej problemy. P.G.

Reply to
Piotr Gałka

Nie musisz mieć swojego procka - wszystkie porty RS232 mają linię RTS która była historycznie używana zawsze do sterowania kierunkiem nadawania RS485.

Reply to
Pszemol

Duży chłopiec i wieży w to, że tranzystorom na stopniu wejściowym jest wszystko jedno na jakim potencjale względem masy układu pracują?

Reply to
Zbych

Dnia Fri, 22 Sep 2017 17:43:27 -0000 (UTC), Pszemol napisał(a):

Tak mniej wiecej do 1980, bo potem przyszedl IBM i olal. A moze nie musial olewac, bo wczesniej producenci modemow olali.

Potem jeszcze producenci UARTow olali i malo kto (tzn malo ktory system) to prawidlowo ustawia w swiecie pecetow.

J.

Reply to
J.F.

A co Ty wygadujesz... uarty sie od dawna nie zmieniaja. W najpopularniejszych 16C550 to masz a reszta to wariacje tego ukladu z roznymi wielkosciami fifo.

Reply to
Pszemol

Jak masz urządzenie które nie ma fizycznie żadnej linii poza TxD i RxD to sobie możesz korzystać z RTSa ile wlezie. A jak weźmiesz takiego AT91SAM9260 który nawet na niektórych UARTach ma RTS tylko starsze wersje linuxów nie obsługują tego poprawnie to też sobie możesz.

Pozdrawiam

DD

Reply to
Dariusz Dorochowicz

Ale wiesz że istnieje świat poza pecetami? ;)

Pozdrawiam

DD

Reply to
Dariusz Dorochowicz

I co wtedy robisz?

Dajesz timer wyzwalany bitem startu do sterowania linią DE/RE? I czas ustawiasz zgodnie z baudrate?

Czy może robisz tak jak konwerter z linku u góry, że steruje nadajnikiem tylko w czasie bitu startu i zerowych bitów danych a resztę zostawia odbiornikom aby sobie radziły z niesterowaną linią?

Reply to
Pszemol

No oczywiście, ale co to zmienia?

Reply to
Pszemol

Nie o to chodzi.

8250 o ile pamietam mial 2 bajty bufora wyjsciowego. Wpisujesz bajt1 do wyslania, a on go zaczyna wysylac, ale ... od razu mowi ze nadajnik gotowy do wyslania kolejnego znaku i generuje stosowne przerwanie od nadajnika. Wpisujesz bajt2 - tym razem rejestr statusu mowi, ze nadajnik zajety. Jak skonczy wysylac bajt1, to zaczyna wysylac bajt2, ale od razu status mowi ze bufor nadajnika wolny i generuje przerwanie. Wpisujesz bajt3, sytuacja sie powtarza. UART konczy wysylac bajt2, zaczyna wysylac bajt3, zglasza przerwanie - a program stwierdza, ze nie ma nic wiecej do nadania, wiec konczy obsluge. A uklad ciagle wysyla kolejne bity. Wysylanie bajtu3 sie konczy, 8250 ustawia stosowny bit statusu, ze juz sie nadawanie zakonczylo ... ale przerwania juz nie zglasza.

Czyli program wysylajacy jak juz stwierdzi ze nie ma nic do wyslania, to musi aktywnie sprawdzac kiedy to wysylanie sie zakonczylo, i kiedy moze wylaczyc RTS. Mamy np 100MHz procesor a przy 9600 musimy prawie

1ms czekac i sprawdzac czy juz mozna przestawic RTS, zamiast inna pozyteczna robote robic.

16550 to juz nie pamietam - problem rozwiazano, czy sie zaostrzyl,bo kolejka dluzsza.

J.

Reply to
J.F.

Ja piszę o automatycznym machaniu RTSem przez uarta odpowiednio ustawionego. Jest to funkcja uarta dedykowana właśnie do zastosowania w RS485.

Oczywiście, że machanie tą linią programowo jest uciążliwe, ale i to jest do zrobienia bo nowoczesne uarty mają dwa bity obsługujące nadajnik: ten co Ty opisałeś nazywa się "transmitter holding register empty" THRE a jest jeszcze "transmitter empty" TEMT.

Reply to
Pszemol

Ano że na 16C550 świat się nie kończy. I że jest więcej różnych realizacji UARTów i USARTów, w szczególności w mikrokontrolerach. I że są układy gdzie masz tylko TxD i RxD, bez żadnych linii sterujących. I MAXy232 robią tam "na pół gwizdka". Aha, w szczegółów już nie pamiętam, ale wspomniany przeze mnie SAM9260 ma osobny tryb pracy linii RTS właśnie do obsługi MAX485.

Pozdrawiam

DD

Reply to
Dariusz Dorochowicz

Temat został odłożony, a teraz jest nieaktualny. Gdybym miał to jednak zrobić, to słowo daję - nie wiem. Być może nawet postawiłbym tam po drodze jakiegoś "maluszka" (TINY albo raczej malutkiego ARMa) żeby się nie zastanawiać, a przy okazji mógłby coś pożytecznego zrobić co w Linuksie może być trudne... Różne pomysły można mieć. Ale na pewno przetestowałbym wreszcie właśnie ten układ o którym piszesz i może właśnie tego użył.

Pozdrawiam

DD

Reply to
Dariusz Dorochowicz

Ale 16550 chyba jeszcze tego nie ma. Wiec malo ktory program ma :-(

tylko TEMT przerwania nie zglasza. wiec musisz procesor zmarnowac na pilnowanie, albo jakies przerwanie/timer dobrac do predkosci :-P

J.

Reply to
J.F.

Nie wiem czy się rozumiemy... ja nie chcę kupić, ja nie chcę użyć. Ja chcę zrobić. Mam dwa urządzenia połączyć, potrzebuję porobić między nimi interfejsy różne, i między innymi RS232-RS485. Innymi słowy - chcę "wyprodukować" nową swoją płytkę na której jedną z kilku funkcji będzie taki konwerter :-)

Reply to
Pszemol

Ficzerek ten się nazywa "RS-485 half duplex direction control".

Chyba masz rację, oryginalny 16C550 tego jeszcze nie miał, miały to późniejsze chipy EXARa - od lat jestem jak widać rozpieszczony używając uartów klasy XR16C850 i podobnych która mają właśnie taki ficzerek i nie zdawałem sobie nawet sprawy jaki szczęściarz ze mnie ;-)

4.18 Feature Control Register (FCTR) - Read/Write This register controls the XR16C2850 new functions that are not available in ST16C550 or ST16C650A. FCTR[1:0]: Auto RTS Hysteresis User selectable RTS# hysteresis levels for hardware flow control application. After reset, these bits are set to "0" to select the next trigger level for hardware flow control. See Table 5 for more details. FCTR[2]: IrDa RX Inversion . Logic 0 = Select RX input as encoded IrDa data (Idle state will be logic 0). . Logic 1 = Select RX input as inverted encoded IrDa data (Idle state will be logic 1). FCTR[3]: Auto RS-485 Direction Control . Logic 0 = Standard ST16C550 mode. Transmitter generates an interrupt when transmit holding register becomes empty and transmit shift register is shifting data out. . Logic 1 = Enable Auto RS485 Direction Control function. The direction control signal, RS485 pin, changes its output logic state from low to high one bit time after the last stop bit of the last character is shifted out. Also, the Transmit interrupt generation is delayed until the transmitter shift register becomes empty. The RS485 output pin will automatically return to a logic low when a data byte is loaded into the TX FIFO.
formatting link
piknie.

No tak, lepiej mieć ficzerek opisany wyżej :-)

Reply to
Pszemol

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.