Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 28 mar 2024, o 18:45


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 
Autor Wiadomość
PostNapisane: 16 gru 2012, o 21:37 
Offline
Użytkownik

Dołączył(a): 27 lis 2012
Posty: 289
Pomógł: 6

Obrazek
Uwaga
Na 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 pierwsze
Ską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 drugie
USART 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 trzecie
Nadajnik 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 czwarte
Ostatnim bitem jest bit STOP. Podobnie jak bit startu służy tylko do synchronizacji.
Uwagi
Opisany 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.


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.



Ostatnio edytowano 19 maja 2017, o 10:27 przez mg101, łącznie edytowano 18 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2012, o 21:47 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27212
Lokalizacja: Szczecin
Pomógł: 1041

I bardzo dobre podsumowanie ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2012, o 22:08 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 sty 2012
Posty: 131
Lokalizacja: Kraków
Pomógł: 2

Dzięki,
fajnie to opisałeś "łopatologicznie"



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 3 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO