RS232->RS485 a sygnał RTS

Witam!

Dłubie po google i nie bardzo mogę znaleźć jasne stwierdzenie, czy można:

Mianowicie zastanawiam się, czy w przypadku obsługi UARTu z poziomu Windowsa i Linuxa można uzyskac efekt taki, że przed rozpoczęciem bloku danych linia RTS jest aktywna, a po zakończeniu deaktywuje się.

Robie mały konwerter RS485 i chciałbym, alby kierunek działania drivera wyjściowego był w miare możliwości sterowny sprzetowo. Jesli miałbym samoczynnie zmieniać stan lini RTS to mógłbym nie zdążyć. Chciałbym aby system operacyjny zadbał o odpowienio szybkie wyłączenie RTS po zakończeniu transmisji.

Czy ktoś z grupowiczów może mi potwierdzić, czy to jest standardowa funkcjia systemu operacyjnego ?

PS. Interesuje mnie powrót lini RTS do stanu niekatywnego natychmiast po wysłaniu ostatniego znaku w bloku.

Reply to
Sebastian Bialy
Loading thread data ...

Użytkownik "Sebastian Bialy" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:d8p00s$b4s$ snipped-for-privacy@nemesis.news.tpi.pl...

Może lepiej zrobić lub kupić taki konwerter, który nie wymaga sterowania nadawaniem

Pozdrawiam Sławek

Reply to
SlawekS

Użytkownik "SlawekS" snipped-for-privacy@vp.pl napisał w wiadomości news:d8p1oj$alk$ snipped-for-privacy@opal.futuro.pl...

Lecz wymaga odpowiednio długich przerwa miedzy nadawaniem a odbiorem. Lepiej zrobic na 4 kavelkach i po kłopocie.

Reply to
Kamil K.

Użytkownik "Kamil K." <kmail@fuck_op.pl> napisał w wiadomości news:d8p2jt$r9u$ snipped-for-privacy@nemesis.news.tpi.pl...

odbiorem.

Jak konwerter zna prędkość transmisji to nie koniecznie. P.G.

Reply to
invalid unparseable

Sebastian Bialy napisał(a):

Można. Popatrz chociażby na FLIPa Atmela. Transmisja bez kontroli przepływu + 2 linie RTS i DTR stosowane do resetowania i wprowadzenia procka w stan programowania. Nie jestem programistą ale z tego co widziałem w Delphi wygląda to mniej więcej tak: Comm1.SetDTR(False); itp.

Reply to
antek

Chodzi mi o coś zupełnie odwrotnego - ja nie chce sterować linią RTS, tylko chcę aby sprzęt nią sterował samoczynnie - sam mogę nie zdązyć po bloku danych jej wyłaczyc i zgubie bajty przychodzące.

Reply to
Sebastian Bialy

W pewnym sensie wolałbym mieć to zabudowane w urządzenie, bo modulik przy okazji rozprowadza zasilanie do reszty końcówek. Więc i tak musze to samodzielnie wydłubać.

Reply to
Sebastian Bialy

Użytkownik "Sebastian Bialy" snipped-for-privacy@poczta.onet.pl> napisał w wiadomości news:d8p00s$b4s$ snipped-for-privacy@nemesis.news.tpi.pl

Prosty układ z "555" ?

formatting link
str.23

Reply to
Marek Dzwonnik

Widzialem taki "przemyslowy" (cena) firmy Advantech - w srodku generator kwarcowy, jakas Altera i DIP-switch do ustawiania predkosci. Analogowo to najprosciej na jakims 555 lub 4538 (lepiej, bo wyzwalany zboczem wiec awaria polegajaca na ciaglym nadawaniu zera nie blokuje magistrali).

A mam tani firmy Moxa sterowany RTS i dziala to tak sobie - trzeba odpytywac czy to juz koniec nadawania (UART nie potrafi z tej okazji wygenerowac przerwania), pod Linuksem - ioctl TIOCSERGETLSR.

Jesli nie zdazymy wylaczyc RTS w pore - tracimy poczatek odpowiedzi. Protokol transmisji powinien byc odporny na bledy (np. MODBUS RTU).

Marek

Reply to
Marek Michalkiewicz

O ile sie orientuje to jest maly problem - oryginalny 8250 nie zglasza przerwania po zakonczeniu transmisji. Przerwanie sie pojawia jak zwolni sie miejsce w fifo nadajnika, jesli nie mamy nic wiecej do wyslania to je gasimy, a kostka kontynuuje nadawanie nie sygnalizujac juz ze bedzie konczyc. Niby mozna poczekac az sie zapali odpowiedni bit w rejestrze .. ale w systemie wielozadaniowym to zbrodnia :-(

Nie wiem czy obecnie uzywane kostki nie umozliwiaja obejscia tego.

Cos w tym jest, ale czy ten tranceiver jest wystarczajaco szybki ? No i jesli przypadkiem bedzie wiecej takich ukladow na linii to sie zrobi klopot..

J.

Reply to
J.F.
Reply to
invalid unparseable

Witam,

Pod Windowsem da się to zrobić. Przy otwieraniu portu COM należy ustawić flagę RTS_CONTROL_TOGGLE w DCB.Flags dla funkcji "SetCommState". RTS będzie przechodził w stan wysoki w czasie wysyłania danych.

Sławek

Reply to
SJ

Ale numer, faktycznie działa. Korzystałem z opisu, gdzie nawet nie wspomnieli to takim polu jak fRtsControl. Dzieki.

Przy okazji, czy ktoś jest zainteresowany klasą w C++ do obsługi portu szeregowego ? Pytam z ciekawości, bo lubie sobie robić takie małe klasy załatwiające chore pomysły WinAPI. Gdyby było pare osób zainteresowanych ,to bym to gdzies (po skończeniu) wystawił. Docelowo ma byc taka sama dla Win i Linux (o ile w linuxie tez jest toggle, ale powinno byc).

Reply to
Sebastian Bialy

A jakie jest opoznienie od zakonczenia przesylu danych to wylaczenia RTS ?

J.

Reply to
J.F.

Tego jeszcze nie wiem, i nie wiem tez, czy bede miał czym sprawdzić (analizator by się przydał albo choć oscyloskop z pamięcią :/). Od biedy mozna by zrobic tak, że bit stopu zerował by licznik, a zanik RTS blokował licznik - po wysłaniu ciągu bajtów powinien dac rade zmierzyć (czy zalezy od ilości bajtów). Ale to troche szycia i pewno nieprędko to zrobie.

Reply to
Sebastian Bialy

On Thu, 16 Jun 2005 12:19:00 +0200, Sebastian Bialy snipped-for-privacy@poczta.onet.pl> wrote: [.....]

Zanim zaczniesz coś pisać, poszukaj w Sieci darmowej klasy CSerialPort. Windows only. Jeśli chodzi o wieloplatformową klasę do seriala, to chyba tak łatwo nie będzie. Niby obsługa seriali jest podobna pod Windows i Linuksem, ale gdy zaczniesz się zagłebiać w szczegóły, ty wyjdzie na to że tylko interfejs klasy będzie wspólny dla obu systemów.

Regards, /J.D.

Reply to
Jan Dubiec

O to własnie chodzi.

Reply to
Sebastian Bialy

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.