UwagaNa w/w rysunku bit nr
3 litery
A=0 (stan niski). Tymczasem jego stan jest wysoki, co jest błędem! Dotyczy to także rysunków w załącznikach.
Autor słusznie zakłada, że czytelnik powinien to znać, a jak nie to należy gdzieś poszukać.
Tak też zrobiłem. Dlatego opis przeznaczony jest tylko dla tych nielicznych, jeszcze nie wprowadzonych w temat.
Jest krótki, Prawdę powiedziawszy tekstu można nie czytać. Wystarczą 2 rysunki.
Podam najpierw opis uproszczony - patrz rysunek Uproszczona zasada transmisji RS232C.Na początku wejście RXD nasłuchuje linii. Jest stan wysoki, a to oznacza że „nic się nie dzieje”
W pewnej chwili na wejściu RXD pojawiają się kolejno:
bity 01000001 (litera „A” w kodzie ASCII)
chwila odpoczynku (stan wysoki)
bity 01101100 (litera „l” w kodzie ASCII)
chwila odpoczynku (stan wysoki)
… itd.
W końcu wprowadzona zostanie cała „Ala ma kota” i gdzieś zapamiętana w mikrokontrolerze.
A teraz opis dokładniejszy - patrz rysunek Transmisja RS232C Dotyczy tego samego „Ala ma kota”
Kolejne bity przesyłanego bajtu przedstawione są jako numery 7,6,5,4,3,2,1 i 0.
Po pierwszeSkąd USART wie, że rozpoczęła się transmisja pojedynczego znaku?
Tak się złożyło, że pierwszych 128 znaków ASCII (w tym litery) zaczyna się od 0. Od biedy mogłoby to być początkiem znaku. Ale tylko „od biedy”. Dlatego, że nie można odebrać wtedy znaku zaczynającego się od 1. Czyli następnych 128 znaków ASCII. Chyba to się nazywa rozszerzone ASCII.
Jak temu zaradzić? Po prostu RS232C zakłada że pierwszym bitem jest zawsze „0”. Jest to tzw. bit „START”. Pełni on tylko funkcję sterującą. Gdy nic się nie dzieje na linii, to USART tylko sprawdza czy dalej się nic nie dzieje, czy też już pojawiło się 0. Jeżeli tak to układ wie, że za chwilę rozpocznie się nadawanie bajtu.
Po drugieUSART powinien odbierać dowolne znaki. Między innymi np. znak 0xFF czyli 11111111. Tu USART by zgłupiał. Po starcie byłyby same jedynki. Co w takim razie robi USART. Programując USART (inicjalizując) „mówimy” mu w jakim tempie będą przychodziły kolejne bity danego bajtu. Czyli jaki jest okres trwania pojedynczego bitu. Teraz gdy USART wykryje stan START(czyli zbocze z 1 na 0 linii) to włącza generator próbkujący. Parametry tego generatora są tak dobrane, żeby sprawdzanie kolejnego bitu następowało mniej więcej w połowie czasu trwania bitu. Zaraz po włączeniu tego generatora USART wykryje oczywiście bit = 0. Ten bit jako bit START-u oczywiscie zostanie pominięty. Drugi impuls generatora wprowadzi do wewnętrznego rejestru USART-u bit nr 7 przesyłanego bajtu. Itd. tzn trzeci impuls wprowadzi bit nr 6,..., a 9 impuls bit nr 0.
W ten sposób został wprowadzony znak „A” z tekstu „Ala ma kota”
Po trzecieNadajnik tekstu, czyli np. komputer wie, że wysyła np. literę „A” ( 01000001). Wie też, że ten znak ma parzystą liczbę jedynek (2). To teraz jako następny (po bicie nr 0) wyśle tzw bit parzystości. Przy wysyłanej literze „A” ( 01000001) bit parzystości będzie miał wartość 0. Jest tak ponieważ 0 + liczba jedynek w literze „A” (2), da nam 2=0+2, czyli liczbę parzystą. Gdyby był wysyłany np. znak 01110110 (5 jedynek) to nadajnik ustawi bit parzystości na 1.
Teraz nadajnik odbierając bity bajtu oraz bit parzystości będzie je wszystkie sumował.
W przypadku litery „A” gdy sygnał nie zostanie zakłócony wyjdzie mu liczba parzysta. A to oznacza że najprawdopodobniej nie nastąpił błąd. Tzn może być tak że na skutek np. zakłóceń magnetycznych znak „A” ( 01000001) zostanie odebrany jako np. 10000001. Też liczba parzysta! Zafałszowanie na bitach nr 7 i 6. Ale przyznacie, że jest to mało prawdopodobne. Raczej zostanie zakłócony tylko 1 bit.
Przy okazji. W internecie nie przesyłamy danych raczej znak po znaku. Raczej przesyłamy tak jakby jeden dłuuuuuugi znak o liczbie bitów kilkanaście tysięcy. I wtedy jako ostatnich kilkadziesiąt bitów jest przesyłana tzw suma korekcyjna. --->http://forum.atnel.pl/topic3555.html Jest to odpowiednik bitu parzystości.
Po czwarteOstatnim bitem jest bit STOP. Podobnie jak bit startu służy tylko do synchronizacji.
UwagiOpisany został najbardziej typowy tryb pracy gdzie:
- jest przesyłany znak 8 bitowy (mogą być jeszcze 5,6,7 lub 9 bitowe znaki)
- używany jest bit parzystości (może go nie być)
- jest 1 bit stopu. (mogą być 2)
Ujęty został tylko odbiornik RXD USART.
Nadajnik TXD USART działa wg tych samych reguł.
Przeniesiono z innego działu - Zielony J.