Serwisy partnerskie:
Close icon
Serwisy partnerskie

Transmisja danych w inteligentnym domu 3. Transmisja równoległa i szeregowa. RS-232

Na początek trzeba wspomnieć o dwóch podstawowych sposobach przekazywania danych cyfrowych. Są to: transmisja równoległa i transmisja szeregowa.
Article Image

Transmisja równoległa - na czym polega?

Idea jest prosta: jednocześnie przekazywane są nie pojedyncze bity, tylko paczki bitów – najczęściej 8-bitowe (bajty). W transmisji równoległej w danej chwili przekazywany jest cała paczka (bajt), co w uproszczeniu pokazane jest na pochodzącym ze strony SparkFun rysunku 1. Zaletą jest szybkość i prostota, główną wadą obecność w linii tylu przewodów, ile jest transmitowanych bitów (plus masa i jakieś sterowanie – sygnał zegarowy).

Rys.1 Transmisja równoległa i szeregowa

Transmisja szeregowa - jak działa?

Druga podstawowa możliwość to transmisja szeregowa – to dziś absolutnie dominujący sposób przekazywania informacji cyfrowych. Bity tworzące paczkę nie są transmitowane jednocześnie, tylko kolejno, szeregowo. Idea jest pokazana w dużym uproszczeniu na dole rysunku 1. W jednokierunkowym systemie takiej transmisji potrzebne są urządzenia zamieniające paczkę bitów (bajt) na postać szeregową, a potem z powrotem na równoległą.

W praktyce zadanie jest bardziej skomplikowane, ponieważ trzeba zapewnić transmisję dwukierunkową, a także synchronizację i obsługę ewentualnych błędów. Zanim do tego wrócimy, raz na zawsze zamknijmy jeden temat: transmisję równoległą. Otóż transmisja równoległa jest powszechnie wykorzystywana wewnątrz komputerów przy przesyłaniu danych między pamięcią RAM i procesorem – na niewielkie odległości do kilkudziesięciu centymetrów, za to z ogromnymi prędkościami – ten wątek mało nas jednak interesuje. Starsi Czytelnicy pamiętają, że dawne komputery z lat 80. i 90. miały „drukarkowy” port LPT (Parallel port, zwany też Centronics). Fotografia 2 przedstawia dwie wersje wykorzystywanych gniazd.

Fot.2 Parallel port, zwany też Centronics

Jednocześnie przekazywanych było osiem bitów informacji. Rysunek 3 pokazuje, że miał on 8 linii danych i dodatkowe linie sterujące. Najogólniej biorąc, dawało to dość dużą szybkość transmisji. Jednak choćby tylko ze względu na obecność w łączu (kablu) wielu żył maksymalna odległość między urządzeniami była ograniczona.

Rys.3 LPT - 8 linii danych i dodatkowe linie sterujące

Warto też wiedzieć, że w automatycznych przyrządach pomiarowych spotyka się jeszcze stare łącze równoległe GPIB / IEEE-488, którym też nie będziemy się zajmować.

Fotografia 4 prezentuje oscyloskop, który oprócz omawianego dalej szeregowego łącza RS232, ma też dwa łącza równoległe: LPT – Centronics i (na dole) port GPIB / IEEE-488. Dziś już nie wykorzystuje się ani takich łączy, ani innych systemów przewodowej transmisji równoległej. Powszechnie stosuje się różne odmiany szeregowej transmisji danych.

Fot.4 Oscyloskop - szeregowe łącze RS232, dwa łącza równoległe LPT, port GPIB  IEEE-488

Transmisja równoległa i szeregowa - rejestry

W najprostszych zastosowaniach często wystarcza transmisja jednokierunkowa. Do zamiany postaci równoległej na szeregową mogą być wykorzystane rejestry: PISO – Parallel Input Serial Output, a „w drugą stronę” rejestry SIPO – Serial Input Parallel Output. Do dziś w małych systemach mikroprocesorowych, także w systemie Arduino, dla zwiększenia liczby wyjść stosuje się rejestry SIPO, np. 74HC595.

Natomiast dla zwiększenia liczby wejść można zastosować rejestry PISO, np. CMOS 4021 czy SN74HC165. Aby na bazie tych oraz podobnych rejestrów zbudować użyteczne dwukierunkowe łącze szeregowe, trzeba byłoby zadbać o szereg dodatkowych kwestii, w tym synchronizację i obsługę ewentualnych błędów. Nie realizuje się tego za pomocą takich prostych układów scalonych.

Rys.5 Do komunikacji potrzebne są co najmniej trzy linie (plus masa)

W najprostszych zastosowaniach dane są wysyłane lub odbierane w takt sygnałów zegarowych, a dodatkowo potrzebny jest także sygnał sterujący (np. latch, reset), więc do komunikacji potrzebne są co najmniej trzy linie (plus masa), jak pokazuje przykład z rysunku 5.

Łącze szeregowe "Serial", czyli RS-232 - jak działa?

Od początku lat 60. wykorzystuje się standardowe łącze szeregowe (zwane serial), często nazywane COM lub RS232. Dawniej każdy komputer miał co najmniej jeden port szeregowy (Serial port). Zwykle gniazdo miało 9 pinów (fotografia 6).

Fot.6 Port szeregowy (Serial port) -  9 pinów

Popularne były też porty szeregowe 25-pinowe. Fotografia 7 pokazuje odpowiednią przejściówkę.

W łączu szeregowym poszczególne bity (zera i jedynki) przesyłane są kolejno, szeregowo, a więc do dwukierunkowej transmisji zasadniczo wystarczą dwa przewody „danych” plus wspólna masa.

Fot.7 Port szeregowy 25-pinowy

Ale co ciekawe, „pełne” łącze szeregowe z 25-pinowymi gniazdami (DB25) miało prawie wszystkie piny wykorzystane, m.in. dla drugiego toru transmisyjnego i dodatkowych sygnałów sterujących, jak widać na rysunku 8a!

Rys.8 Łącza szeregowe z 25-pinowymi gniazdami (DB25) i z 9-pinowymi gniazdami (DB9)

„Podstawowe”, pełne połączenia w zdecydowanie bardziej popularnych gniazdach 9-pinowych (DB9) widoczne jest na rysunku 8b. Co jednak ważne w praktyce, można też było wykorzystywać najprostsze połączenie jedynie trzyprzewodowe według rysunku 9. Szeregowa dwukierunkowa transmisja z dwoma tylko przewodami danych (i masą) według standardu RS-232 nadal jest bardzo popularna.

Krótkie przypomnienie: w najprostszej asynchronicznej wersji z rysunku 9 mamy tylko dwie niezależne linie danych.

Rys.9 Połączenie trzyprzewodowe

Nie ma możliwości synchronizacji, ale problem rozwiązywany jest w prosty sposób: w obu komunikujących się urządzeniach użytkownik musi wcześniej ustawić jednakowe parametry transmisji. Przede wszystkim prędkość transmisji. Ponieważ w tym starym standardzie (RS-232 = EIA-232) dopuszcza się dość duże odchyłki częstotliwości taktowania, liczba bitów transmitowanych w jednej porcji jest ograniczona do najwyżej dziesięciu. Oprócz bitów „właściwej informacji” przekazywane są dodatkowe dane, tworząc pojedynczą „paczkę” – ramkę.

Na rysunku 10 pokazana jest zasada: stan wysoki (1) jest stanem spoczynkowym linii. Początek transmisji to zawsze przejście ze stanu wysokiego do niskiego (1-0) i od tego momentu urządzenie odbiorcze zaczyna liczyć czas.

Rys.10 Łącze szeregowe - zasada działania

Ono wie, że pierwszy bit to zawsze tzw. bit startu o wartości 0 i ignoruje go, a odbiera paczkę kolejnych bitów danych (począwszy od najmłodszego LSB), a po nich jeszcze może być (lub nie) transmitowany tzw. kontrolny bit parzystości (parity bit), co pozwala zrealizować prostą kontrolę błędów. Na koniec jednej „paczki” – ramki, linia przechodzi w stan wysoki na co najmniej czas jednego bitu lub dowolnie dłużej.

W związku z tym, aby skonfigurować łącze szeregowe do takiej pracy, w obu urządzeniach trzeba podać: prędkość transmisji (bitrate) – w bitach na sekundę (bps) – jedną ze standardowych wartości, najczęściej 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, liczbę bitów „właściwej informacji”, najczęściej 8, informację o parzystości (czy jest i jaka) oraz minimalną liczbę bitów stopu, najczęściej 1.

Bitu kontroli parzystości może nie być, co oznaczane jest None, a jeśli jest, to wskazuje, czy liczba transmitowanych jedynek jest parzysta (Even), czy nieparzysta (Odd). Dziś z reguły transmituje się 8 bitów, prawie nigdy nie transmituje się bitu parzystości (None), a minimalna liczba bitów stopu to 1. Jest to w skrócie oznaczane 8-N-1 i do tego oczywiście musi być podana prędkość. Jeśli mamy nieznane współczesne urządzenie/moduł z łączem szeregowym (serial), to ewentualne próby „dogadania się” z nim należy zaczynać od ustawień 9600, 8, N, 1, a w razie niepowodzenia ustawiać coraz większą prędkość.

Podstawy są proste, ale niestety wielu współczesnych młodych elektroników ma poważne pytania i wątpliwości dotyczące standardu RS-232. Nie tylko z powodu obecności dwóch linii masy i aż pięciu, a nawet sześciu linii pomocniczych. Źródłem wątpliwości są m.in. poziomy napięć. Łącze szeregowe jest bardzo stare, dlatego standardowe wartości poziomów napięć są „zdecydowanie niewspółczesne”.

Rys.11 Schemat blokowy układu scalonego MAX232

Możemy powiedzieć w pewnym skrócie, że w „prawdziwym” standardzie RS-232 logiczna jedynka to napięcie ujemne w zakresie –3V…–15V, a logiczne zero to napięcie dodatnie z zakresu +3…+15V. W dawnych komputerach i innych urządzeniach w łączach RS-232 występowały wyłącznie sygnały o takich właśnie poziomach napięć. Jeżeli pracujące wewnątrz układy cyfrowe TTL zasilane były tylko napięciem pojedynczym 5V, wtedy potrzebne były układy pośredniczące, translatory i obwody zasilające, które poziomy TTL zamieniały (w obu kierunkach) na podwyższone napięcia dodatnie i ujemne, wymagane przez standard RS-232.

Już dawno opracowano serię scalonych translatorów – rodzinę MAX232, które są zasilane pojedynczym napięciem +5V (niektóre niższym), zawierają nie tylko niezbędne obwody logiczne, ale też przetwornice pojemnościowe, które powielają napięcie zasilania i wytwarzają stosunkowo wysokie napięcia dodatnie i ujemne – rysunek 11 pokazuje schemat blokowy układu scalonego MAX232. Kostki te bywają stosowane do dziś. Ich zastosowanie oznacza, że poziomy napięć odpowiadają „wysokonapięciowemu” standardowi RS-232.

Jednak takie „prawdziwe”, „standardowe”, „wysokonapięciowe” łącza RS-232 są wykorzystywane coraz rzadziej. Niemniej stary szeregowy sposób transmisji nadal jest zaskakująco popularny, tylko realizowany jest w sposób uproszczony, przy zasilania 3...5V, ze „zwykłymi” poziomami logicznymi 1, 0. W następnym odcinku omówimy kłopoty, wynikające z różnorodności odmian, wersji i modyfikacji standardu RS-232.

Tematyka materiału: RS-232, transmisja szeregowa, transmisja równoległa
AUTOR
Źródło
Elektronika dla Wszystkich wrzesień 2019
Udostępnij
UK Logo