RS232 i linia CTS - kiedy ustawić na '0', aby PC nie wysyłał danych?

RS232 - sterowanie =?iso-8859-2?Q?przep=B3ywem?= HELP ! Bo zwariuje ;-)





Poprzedni Następny
Wiadomość
Spis treści
From: antispam_verox_at_nospam_a4.pl (Verox)
Subject: RS232 - sterowanie =?iso-8859-2?Q?przep=B3ywem?= HELP ! Bo zwariuje ;-)
Date: 1 Apr 2003 20:57:55 GMT


Hej,

Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w tym
wypadku PC) nie wysłał nam następnego bajtu danych ?
Wydaje mi się że to działa zupełnie asynchroniznie, ale niestety najwidoczniej
tak nie jest. Sprawa banalna softwareowy UART, odbieram bajt i coś tam z nim
robie (kod na pic F84):

;----------------------------------------------------------------------------
; odbiera bajt z RS'a wynik w W i odebrany
;----------------------------------------------------------------------------

receive:
bcf CTS ; cts = 1 pozwalamy na zapis

btfsc RxD
goto receive ; czekaj na bit startu


movlw 16
call wpause ; pół bitu startu

btfsc RxD ; czy wciąż niski ?
goto receive ; nie ? Fałszywy bit stopu !

movlw 0x08 ; 8 bitów
movwf cnt ; do licznika

bsf CTS ; cts = 0 nie chcemy więcej bajtów (narazie)

; za pół bitu zaczyna sie 1-wszy bit

bitloop:
call stdpause ; czas 1 bitu


bsf status,c ; 1us preset bitu CARRY
btfss rxd ; 1us odczytaj port
bcf status,c ; 1us jeśli port=0, wyczyść CARRY
rrf odebrany,f ; 1us wsuń bit
decfsz cnt,f ; 1us
goto bitloop ; 2 us

; mamy odebrany bajt w ,,odebrany''
; czekamy na bit stopu
call stdpause ; bit stopu - olej

movf odebrany,w
return


i... oczywiście nie działa - znaczy odbiera bajty z rs'a, ale PC nie reaguje
na niski stan na linii CTS (konfiguracja portu jest ok). I tu pytanie, czy
ktoś z Was wie jaki jest minimalny czas niskiego stanu na lini CTS, ew jakieś
przebiegi ?

Dzięki z góry



--
#begin 666 signature.exe
[verox <at> a4 <dot> pl] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_at_nospam_poczta.onet.pl>
Subject: Re: RS232 - sterowanie przepływem HELP ! Bo zwariuje ;-)
Date: Tue, 01 Apr 2003 23:33:14 +0200


On 1 Apr 2003 20:57:55 GMT, Verox wrote:
Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

Pamietaj ze np 16550 ma 16 bajtow kolejki nadajnika.


J.


========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.polbox.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: antispam_verox_at_nospam_a4.pl (Verox)
Subject: Re: RS232 - sterowanie =?iso-8859-2?Q?przep=B3ywem?= HELP ! Bo zwariuje ;-)
Date: 1 Apr 2003 21:53:02 GMT


On Tue, 01 Apr 2003 23:33:14 +0200, J.F. napisał:
On 1 Apr 2003 20:57:55 GMT, Verox wrote:
Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

Pamietaj ze np 16550 ma 16 bajtow kolejki nadajnika.

Ale jakie to ma znaczenie ? IMHO CTS powinno zatrzymać transmisje
NATYCHMIAST czyli nadajemy aktualny bajt i już ani bitu więcej. Inaczej taka
zabawa nie miała by sensu - DCE nie musi wiedzieć jak duży jest bufor
nadajnika, DCE wie że zapełnił się bufor odbiorczy i wystawia CTS=0, DTE musi
przerwać transmisje inaczej zginą bajty...

--
#begin 666 signature.exe
[verox <at> a4 <dot> pl] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Fish" <apf_jf_at_nospam_bledneslowo.poczta.onet.pl>
Subject: Re: RS232 - sterowanie przepływem HELP ! Bo zwariuje ;-)
Date: Wed, 2 Apr 2003 00:08:31 +0200



Użytkownik "Verox" <antispam_verox_at_nospam_a4.pl> napisał w wiadomości
news:slrnb8k2hr.1af.antispam_verox_at_nospam_matrix.trzepak.pl...
On Tue, 01 Apr 2003 23:33:14 +0200, J.F. napisał:
On 1 Apr 2003 20:57:55 GMT, Verox wrote:
Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE
(w tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

Pamietaj ze np 16550 ma 16 bajtow kolejki nadajnika.

Ale jakie to ma znaczenie ? IMHO CTS powinno zatrzymać transmisje
NATYCHMIAST czyli nadajemy aktualny bajt i już ani bitu więcej. Inaczej
taka
zabawa nie miała by sensu - DCE nie musi wiedzieć jak duży jest bufor
nadajnika, DCE wie że zapełnił się bufor odbiorczy i wystawia CTS=0, DTE
musi
przerwać transmisje inaczej zginą bajty...

CTS=0 powinno sie wystawiać nie po zapełnieniu bufora tylko np po
zapełnieniu 2/.
Transmisje odblokowujemy po zmniejszeniu zapełnienia bufora do np 1/3
Dzięki temu wykorzystana jest maksymalna możliwa do odebrania przez DCE
prędkośc nadawania danych (bufor nigdy podczas transmisji nie jest pusty) i
nie ma niebezpieczeństwa utraty danych (bufor nigdy nie jest całkowicie
zapełniony).

--
Janusz



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: J.F. <jfox_at_nospam_poczta.onet.pl>
Subject: Re: RS232 - sterowanie przepływem HELP ! Bo zwariuje ;-)
Date: Wed, 02 Apr 2003 22:16:33 +0200


On 1 Apr 2003 21:53:02 GMT, Verox wrote:
On Tue, 01 Apr 2003 23:33:14 +0200, J.F. napisał:
Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

Pamietaj ze np 16550 ma 16 bajtow kolejki nadajnika.

Ale jakie to ma znaczenie ? IMHO CTS powinno zatrzymać transmisje
NATYCHMIAST czyli nadajemy aktualny bajt i już ani bitu więcej.

Ja juz nie pamietam, ale byc moze 16550 troche tak juz robi.
Za to wczesniejsze kosci - nie. Ale tam byl mniejszy bufor,
tym niemniej ze trzy bajty miescil.

Inaczej taka zabawa nie miała by sensu

Tak jak proponujesz tez niezbyt - zaczynamy nadawac bajt, stary
wlasnie konczy dochodzic do odbiornika. Zanim odbiornik przetworzy i
zmieni linie - to moze nastepny zdazymy wyslac. Czyli odbiornik
na dwa dodatkowe musi byc przygotowany. A 2 czy 4 lub 5 to juz
niewielka roznica.

DCE nie musi wiedzieć jak duży jest bufor
nadajnika, DCE wie że zapełnił się bufor odbiorczy i wystawia CTS=0, DTE musi
przerwać transmisje inaczej zginą bajty...

Przyzwoitosc nakazuje miec bufor w odbiorniku znacznie wiekszy, bo
inaczej gina bajty :-)

Natomiast troche mylisz pojecia. W zamysle DTE wystawia RTS.
DCE przestawia sie w tryb nadawania i po uzyskaniu gotowosci
wystawia CTS. Od tego momentu nie ma mozliwosci przerwania transmiji.

To dopiero znacznie pozniej odkryto ze taka mozliwosc bywa uzyteczna,
ze CTS swietnie sie do tego nadaje, ze uzywa sie RS-232 miedzy
dwowa DTE bez DCE.


J.


========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: antispam_verox_at_nospam_a4.pl (Verox)
Subject: Re: RS232 - sterowanie =?iso-8859-2?Q?przep=B3ywem?= HELP ! Bo zwariuje ;-)
Date: 2 Apr 2003 07:18:56 GMT


On Tue, 01 Apr 2003 22:12:24 -0500, Greg Sz napisał:
"J.F." wrote:

On 1 Apr 2003 20:57:55 GMT, Verox wrote:
Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

Pamietaj ze np 16550 ma 16 bajtow kolejki nadajnika.

Maly drobiazg co do interfejsu V.24 (amerykanskie RS232) na liniach danych

"0" to napiecie dodatnie
"1" ujemne

N aliniach strujacych jak CTS, RTS DTR, DSR. CD

"Tak" dodatnie
"Nie" ujemne
Moze wiec cos nie tak zrobiles z polaryzacja sygnalu CTS.

Doskonale o tym wiem, polaryzacja sygnałów jest OK.

A twoj software w PC jest ustawiony jak trzba na to rzeby stan "Nie" na CTS
wstrymywal nadawanie ?
Normalnie i tak zaden software nie zrobi tego natychmiastowo
Sprzet nic sam nie blokuje. Wszytko jest zrobione programem.

Właśnie - i tu jest podstawowy problem :-(
Dzięki za pomoc.

--
begin 666 signature.exe
[verox <at> a4 <dot> pl] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: Greg Sz <greg_sz_at_nospam_dsuper.net>
Subject: Re: RS232 - sterowanie =?iso-8859-1?Q?przep=B3ywem?= HELP ! Bo zwariuje
Date: Tue, 01 Apr 2003 22:12:24 -0500


"J.F." wrote:

On 1 Apr 2003 20:57:55 GMT, Verox wrote:
Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

Pamietaj ze np 16550 ma 16 bajtow kolejki nadajnika.

Maly drobiazg co do interfejsu V.24 (amerykanskie RS232) na liniach danych

"0" to napiecie dodatnie
"1" ujemne

N aliniach strujacych jak CTS, RTS DTR, DSR. CD

"Tak" dodatnie
"Nie" ujemne

Moze wiec cos nie tak zrobiles z polaryzacja sygnalu CTS.

A twoj software w PC jest ustawiony jak trzba na to rzeby stan "Nie" na CTS
wstrymywal nadawanie ?
Normalnie i tak zaden software nie zrobi tego natychmiastowo
Sprzet nic sam nie blokuje. Wszytko jest zrobione programem.

Pozdro
Grze




========
Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.webcorp.com.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: "Fish" <apf_jf_at_nospam_bledneslowo.poczta.onet.pl>
Subject: Re: RS232 - sterowanie przepływem HELP ! Bo zwariuje ;-)
Date: Tue, 1 Apr 2003 23:56:01 +0200



Użytkownik "Verox" <antispam_verox_at_nospam_a4.pl> napisał w wiadomości
news:slrnb8jv92.6ia.antispam_verox_at_nospam_matrix.trzepak.pl...
Hej,

Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w
tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

[ciach]

i... oczywiście nie działa - znaczy odbiera bajty z rs'a, ale PC nie
reaguje
na niski stan na linii CTS (konfiguracja portu jest ok). I tu pytanie, czy
ktoś z Was wie jaki jest minimalny czas niskiego stanu na lini CTS, ew
jakieś
przebiegi ?

Dawno się tym nie bawiłem ale wydaje mi się że problem może polegać na
istnieniu w PC-towym UART-cie bufora. PC poprawnie odczytuje stan CTS ale w
buforze UART-a jest już ileś bajtów danych które są wysyłane aż do
opróznienia bufora. Nawet wyłaczenie bufora może nie pomóc bo minimalny
jednobajtowy zawsze pozostaje. Jeżeli zmienisz stan CTS w trakcie transmisji
jednego bajtu to jeżeli PC zdążył wpisać nastepny do rejestrów UART-a to on
też zostanie wysłany zanim nastapi przerwa.
Najlepiej w odbiorniku zrób sobie bufor odbiorczy i wysyłaj CTS w momencie
gdy pozostanie jeszcze 16 bajtów wolnych w buforze (taki jest max bufor
UART-u w PC-cie)
Zrób zresztą eksperyment: wyślij z PC powiedzmy 20 bajtów. Po pierwszym
odebranym zmień stan CTS i policz ile jeszcze bajtów dojdzie do odbiornika.
Podejrzewam, że ta liczba zupełnie przypadkowo będzie równa wielkości bufora
ustawionego w PC :-))

--
Janusz



========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.polbox.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: antispam_verox_at_nospam_a4.pl (Verox)
Subject: Re: RS232 - sterowanie =?iso-8859-2?Q?przep=B3ywem?= HELP ! Bo zwariuje ;-)
Date: 2 Apr 2003 07:16:32 GMT


On Tue, 1 Apr 2003 23:56:01 +0200, Fish napisał:

Użytkownik "Verox" <antispam_verox_at_nospam_a4.pl> napisał w wiadomości
news:slrnb8jv92.6ia.antispam_verox_at_nospam_matrix.trzepak.pl...
Hej,

Czy ktoś z Was wie kiedy należy ustawić linie CTS na ,,0'' tak żeby DTE (w
tym
wypadku PC) nie wysłał nam następnego bajtu danych ?

[ciach]

i... oczywiście nie działa - znaczy odbiera bajty z rs'a, ale PC nie
reaguje
na niski stan na linii CTS (konfiguracja portu jest ok). I tu pytanie, czy
ktoś z Was wie jaki jest minimalny czas niskiego stanu na lini CTS, ew
jakieś
przebiegi ?

Dawno się tym nie bawiłem ale wydaje mi się że problem może polegać na
istnieniu w PC-towym UART-cie bufora. PC poprawnie odczytuje stan CTS ale w
buforze UART-a jest już ileś bajtów danych które są wysyłane aż do
opróznienia bufora. Nawet wyłaczenie bufora może nie pomóc bo minimalny
jednobajtowy zawsze pozostaje. Jeżeli zmienisz stan CTS w trakcie transmisji
jednego bajtu to jeżeli PC zdążył wpisać nastepny do rejestrów UART-a to on
też zostanie wysłany zanim nastapi przerwa.
Najlepiej w odbiorniku zrób sobie bufor odbiorczy i wysyłaj CTS w momencie
gdy pozostanie jeszcze 16 bajtów wolnych w buforze (taki jest max bufor
UART-u w PC-cie)

I wydawało mi sie że UART powinien być na tyle sprytny że zatrzyma opóżnianie
bufora jeśli przytrzymamy go CTS'em

Zrób zresztą eksperyment: wyślij z PC powiedzmy 20 bajtów. Po pierwszym
odebranym zmień stan CTS i policz ile jeszcze bajtów dojdzie do odbiornika.
Podejrzewam, że ta liczba zupełnie przypadkowo będzie równa wielkości bufora
ustawionego w PC :-))

I na moje nieszczęście jest tak jak napisałeś :-( Czyli po jednym takcie na
CTS leci do mnie cały bufor :-(( Będe to musiał jakoś obejść :-(

--
begin 666 signature.exe
[verox <at> a4 <dot> pl] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.pl!news.nask.pl!news.man.poznan.pl!pwr.wroc.pl!panorama.wcss.wroc.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: pisz_na.mirek_at_nospam_dionizos.zind.ikem.pwr.wroc.pl
Subject: Re: RS232 - sterowanie =?ISO-8859-2?Q?przep=B3ywem?= HELP ! Bo zwariuje ;-)
Date: 2 Apr 2003 09:07:45 GMT


Verox <antispam_verox_at_nospam_a4.pl> wrote:
I wydawało mi sie że UART powinien być na tyle sprytny że zatrzyma opóżnianie
bufora jeśli przytrzymamy go CTS'em

CTS jest interpretowany programowo (jeśli chodzi o UART ) a nie sprzętowo :(

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.polbox.pl!not-for-mai

Poprzedni Następny
Wiadomość
Spis treści
From: antispam_verox_at_nospam_a4.pl (Verox)
Subject: Re: RS232 - sterowanie =?iso-8859-2?Q?przep=B3ywem?= HELP ! Bo zwariuje ;-)
Date: 2 Apr 2003 12:36:22 GMT


On 2 Apr 2003 09:07:45 GMT, pisz_na.mirek_at_nospam_dionizos.zind.ikem.pwr.wroc.pl napisał:
Verox <antispam_verox_at_nospam_a4.pl> wrote:
I wydawało mi sie że UART powinien być na tyle sprytny że zatrzyma opóżnianie
bufora jeśli przytrzymamy go CTS'em
CTS jest interpretowany programowo (jeśli chodzi o UART ) a nie sprzętowo :(

No racja, PDF prawde mi powiedział ;-)
chwilowo poradziłem sobie wyłączająć FIFO na tym porcie i jak ręką odjął :-)

--
begin 666 signature.exe
[verox <at> a4 <dot> pl] vy 73! de SP9UOB
Proud to be 100 percent microsoft free. op. Tomek

========
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!news.polbox.pl!not-for-mai