Odbiór i dekodowanie znaków ASCII za pomocą makiety cyfrowej. Znaki wysyłane przez komputer za pośrednictwem łącza RS-232. Opracowanie: Andrzej Grodzki Do wysyłania znaków ASCII zastosujemy dostępny w systemie Windows program TERMINAL, ale może to być dowolny terminal, który komunikuje się za pośrednictwem złącza COM (RS-232). Nasza transmisja będzie dla uproszczenia układu ASYNCHRONICZNA, będzie odbywać się po jednej linii, tylko w jedną stronę z komputera do makiety cyfrowej. W TERMINALU ustawimy parametry transmisji: Liczba bitów na sekundę: 57600 Bity danych: 8 Parzystość: brak Bit STOPU: 1 Sterowanie przepływem: brak Na ekranie TERMINALA parametry wyświetlą się tak: Jeśli kogoś interesuje bardziej standard przesyłania danych RS-232, jego historia powstania i rozwoju, warianty, szczegółowe parametry, itp. w internetowej Wikipedii można znaleźć prawdziwe informacje na ten temat pod adresem: http://pl.wikipedia.org/wiki/rs-232. Zanim przejdziemy do szczegółowego schematu zapoznajmy się ze schematem blokowym zamieszczonym poniżej. Strona 1 z 7
Układ do odbioru i dekodowania znaków ASCII będzie składał się z pięciu bloków: 1. Translatora poziomów. 2. Rejestru przesuwnego. 3. Układu START/STOP. 4. Dzielnika częstotliwości. 5. Wyświetlacza siedmiosegmentowego. Oto krótkie omówienie budowy i działania poszczególnych bloków. Translator poziomów Ponieważ cyfrowe sygnały transmisji RS-232 wysyłane przez komputer posiadają poziomy napięcia rzędu +-12V, a nasz układ będzie zbudowany z tradycyjnych układów TTL musimy w pierwszej kolejności dokonać translacji sygnału ze standardu RS-232 do standardu TTL. Można tego dokonać wykorzystując specjalizowane układy scalone dedykowane do tego celu, ale my zastosujemy najprostszą metodę, użyjemy tzw. obcinacza napięcia zbudowanego na oporniku R1 i diodzie Zenera D1. Napięcie dodatnie na wyjściu takiego układu nie przekracza napięcia Zenera, które w naszym przypadku wynosi 5,1V. Po obniżeniu napięcia do bezpiecznego poziomu dla układów TTL pozostaje nam jeszcze odwrócenie sygnału ponieważ RS-232 nadaje w logice ujemnej, a TTL to logika dodatnia dlatego po obcinaczu znajduje się bramka NAND U1-74132 pełniąca rolę inwertera. Strona 2 z 7
Poniżej przedstawiony jest obraz rzeczywistego sygnału przychodzącego z komputera (Kanał 1) i po obcięciu przez układ obcinacza napięcia (Kanał 2). Sygnał TTL przed (Kanał 1) i po inwersji, odwróceniu (Kanał2) Rejestr przesuwny Zadaniem rejestru przesuwnego jest zamiana informacji szeregowej na informacje równoległą (ang. SIPO Serial Input Parallel Output). Układ ten jest sercem całego układu. Zrozumienie działania układu 74164 jest kluczowe dla zrozumienia działania całego układu. Jak działa rejestr przesuwny? Do naszej pracy wykorzystujemy tylko dwa wejścia: szeregowe wejście danych DSa i wejście taktujące CP. W momencie każdego narastającego zbocza na wejściu taktującym CP stan logiczny z wejścia szeregowego danych jest przenoszony do pierwszego rejestru D0 (zapamiętany), jednocześnie dane które były przed nadejściem zbocza zostają przesunięte o jedną pozycję w prawo, czyli stan pierwszego rejestru D0 przesuwa się do rejestru D1, D1 do D2, D2 do D3 itd. Dane przesuwają się w prawo robiąc miejsce nowej danej w D0. Dana z ostatniego rejestru D7 ponieważ nie ma już następnego rejestru zostaje w wyniku takiego działania przesuwania utracona. Układ rejestru przesuwnego U3-74164 posiada wyjścia wszystkich ośmiu wewnętrznych rejestrów, są to piny D0 do D7. Dzięki własności zapamiętywania i przesuwania informacji oraz posiadania wyjść ze wszystkich rejestrów świetnie nadaje się do przetwarzania informacji szeregowej na równoległą i do tego został on przede wszystkim skonstruowany. Można powiedzieć w momentach narastającego zbocza na CP, Strona 3 z 7
próbkujemy informacje szeregową, a wynik próbkowania jest zapamiętany zatrzaśnięty, w kolejnych rejestrach. Pobieramy kolejne w czasie próbki przebiegu szeregowego. Mamy do wykorzystania osiem rejestrów, które możemy nazwać również komórkami pamięci. Poniżej przedstawiamy rzeczywisty obraz z oscyloskopu, w kanale1 obraz danych, w kanale2 przebieg taktujący. Przebiegi pomierzone na naszej makiecie cyfrowej. Osiem próbek trafia do rejestru przesuwnego, z czego pierwsza próbka to bit STARTU, kolejne to kod binarny wysłanego znaku ASCII, od bitu najmłodszego LSB(2), do najstarszego MSB(8). Nasz znak ma kod binarny 1001010, co odpowiada 4A w układzie heksadecymalnym, a 112 w układzie oktalnym, łatwo sprawdzić w tabeli taki kod posiada duża litera J. Na podstawie schematu elektronicznego wyjaśnij dlaczego ostatni impuls taktujący jest w postaci tzw. szpilki, jego czas trwania jest tak krótki? Od czego zależy jego czas trwania? Układ START/STOP Zadaniem układu jest jednoznaczne rozpoznanie początku nadawania znaków ASCII przez komputer, ponieważ znak może przyjść w dowolnym momencie. Linia przesyłania znaków w stanie spoczynku jest w stanie logicznej jedynki. Układ START/STOP czeka na pierwsze opadające zbocze, bit STARTU. Kiedy ono nadejdzie następuje przełączenie układu zezwalające licznikowi przez 10 zliczanie impulsów zegarowych 576kHz. Po podziale przez 10 przebieg o częstotliwości 57,6kHz taktuje rejestr przesuwny w odpowiednich momentach przesuwając informacje od pierwszego rejestru D0 do Strona 4 z 7
ostatniego D7. Kiedy na wyjściu ostatniego rejestru D7 pojawi się opadające zbocze bitu STARTU, układ zatrzymuje licznik przez 10, do rejestru przestają docierać impulsy zegarowe, informacja szeregowa zostaje zapamiętana w poszczególnych rejestrach i jednocześnie zmieniona na informację równoległą stan każdego z rejestru jest obecny na wyjściach D0 do D7. Układ START/STOP to klasyczny układ przerzutnika RS zbudowany na bramkach NAND. Wyświetlacz siedmio-segmentowy Tego bloku nie musimy budować, jest on częścią makiety cyfrowej. Niestety zastosowane dekodery 7 segmentowe dekodują poprawnie tylko cyfry od 0 do 9 są to dekodery dziesiętne, dlatego podłączymy je w sposób niekonwencjonalny. Do pierwszych dwóch dekoderów podłączymy tylko trzy kolejne linie, czwarte wejścia dekoderów podłączymy do zera, a do ostatniego dekodera podłączymy tylko jedną linię. W taki sposób zespół trzech wyświetlaczy będzie wyświetlał liczbę binarną naszego znaku ASCII w systemie oktalnym, od 0 do 177(oct). Dla ułatwienia, aby nie trzeba było przeliczać, w tabeli znaków ASCII zamieszczonej poniżej znajduje się rubryka z gotowymi oktalnymi reprezentacjami, które powinny wyświetlić się na wyświetlaczach, przy prawidłowym połączeniu układu. Strona 5 z 7
Dzielnik częstotliwości Po co stosować dzielnik częstotliwości? dlaczego nie można taktować rejestru przesuwnego bezpośrednio z generatora zewnętrznego? Nasze generatory zewnętrzne nie posiadają wejścia wyzwalania zewnętrznego, nie potrafią w odpowiednim momencie zacząć generowanie zadanego przebiegu, są generatorami samobieżnymi bez możliwości synchronizacji z zewnętrznym przebiegiem, a taka synchronizacja jest konieczna. Generator taktujący powinien rozpocząć swoją pracę w momencie przyjścia znaku, dokładnie bitu STARTU, a nasz generator takiej funkcji nie posiada. Co w takim wypadku należy zrobić? Zbudować własny wewnętrzny generator na makiecie cyfrowej? Niekoniecznie, można zastosować inne prostsze rozwiązanie. Jeżeli zastosujemy dzielnik przez 10 (7490) taktowany częstotliwością 10 krotnie większą i zezwolimy na dzielenie, tworzenie sygnału taktującego rejestr przesuwny w momencie przyjścia bitu STARTU, to maksymalny błąd (opóźnienie) jaki może powstać wynosi max 1/10 okresu, ponieważ taktujemy rejestr przesuwny w ½ okresu ta 1/10 opóźnienia absolutnie nie zagraża prawidłowemu taktowaniu. Resetowanie układu Na koniec warto omówić funkcje resetowania układu. Założeniem układu była jego maksymalna prostota, ale jednocześnie prawidłowe, bezbłędne, dekodowanie znaków ASCII. Upraszczając układ zrezygnowaliśmy z możliwości dekodowania wielu znaków ASCII wysyłanych po sobie. Za każdym razem aby odebrać znak, należy układ ręcznie wyzerować, a dokładnie przygotować do odbioru znaku. Warunkiem koniecznym do prawidłowej pracy jest ustawienie rejestru przesuwnego w stanie samych jedynek we wszystkich rejestrach. Wyjaśnij dlaczego? Układ 74164 niestety nie posiada takiej funkcji, takiego wejścia SET, posiada jedynie wejście RESET zerowanie wszystkich rejestrów. Jak ustawić same jedynki? W czasie kiedy nie są nadawane znaki na wejściu rejestru (szynie danych) panuje logiczna jedynka, wystarczy 8 taktów zegara, aby jedynka z wejścia pojawiła się we wszystkich rejestrach, włączmy więc na krótko dzielnik częstotliwości wykorzystując drugie wejście zerujące, podłączone do wyjścia NIE Q generatora pojedynczych impulsów w makiecie. W czasie trwania pojedynczego impulsu dzielnik wygeneruje nam wystarczającą ilość impulsów, aby ustawić rejestry w stanie jeden, co będzie widoczne pojawieniem się liczby 177 na wyświetlaczach makiety, układ jest gotowy do odbioru kolejnego znaku. Wykaz elementów 1. U1-74132 cztery dwuwejściowe bramki NAND z wejściem Schmitt a. 2. U2-7490 licznik dziesiętny. 3. U3-74HC164 ośmiobitowy rejestr przesuwny typu SIPO 4. R1-rezystor 10 kiloomów. 5. D1-dioda Zener a 5V1 (5,1V) Strona 6 z 7
Cdn Strona 7 z 7