Zadanie: Należy zaprojektować moduł odbiornika danych w
standardzie RS-232 dla następujących parametrów transmisji: 8 bitów danych, bez
bitu parzystości, jeden bit stopu, szybkość transmisji 9600bps bez sprzętowej
kontroli przepływu.
Moduł należy połączyć z modułem display z poprzedniego zadania tak, aby
odbiornik RS232 po otrzymaniu danych wyświetlał je na wyświetlaczu LED w
postaci heksadecymalnej (2 cyfry hex). Do wyświetlania odebranego kodu
wykorzystać dowolnie wybrane dwie kolejne cyfry wyświetlacza.
Wejścia i wyjścia układu:
clk_i - zegar 50MHz,
rst_i - reset asynchroniczny,
RXD_i - wejście danych RS232,
led7_an_o – wyjście sterujące anodami wyświetlaczy LED.
led7_seg_o – wyjście sterujące segmentami wyświetlaczy LED.
Należy wykonać symulację funkcjonalną oraz zweryfikować układ praktycznie
poprzez zaprogramowanie płytki testowej. Weryfikacja praktyczna polega na
podłączeniu wyprowadzeń zaprojektowanych modułów do portu COM1 komputera PC i
uruchomieniu programu MINICOM (program jest domyślnie skonfigurowany na
9600bps, 8 bitów danych, 1 bit stopu, bez parzystości).
Naciśnięcie klawisza na klawiaturze powinno spowodować wyświetlenie jego kodu
na wyświetlaczu LED.
Nadawanie i odbiór sygnałów w standardzie RS232
Nadawanie i odbiór sygnałów w standardzie
RS232 odbywa się w sposób szeregowy, oddzielnie na dwóch liniach w kierunkach
do i od urządzenia. W czasie braku transmisji sygnał na danej linii jest w
stanie wysokim. Rozpoczęcie transmisji inicjowane jest przez tzw. bit startu będący
"0" logicznym, który powinien trwać przez okres równy
odwrotności prędkości transmisji, w naszym przypadku wynoszący 1/9600 [sekund].
Wszystkie następne informacje są przesyłane z identycznym okresem trwania.
Następnie nadawane są szeregowo dane począwszy od najmniej znaczącego bitu aż
do bitu najbardziej znaczącego (D0-D7). Później występuje bit
parzystości, będący operacją logiczną XOR na danych D0-D7.
Bit parzystości jest opcjonalny i w przypadku niniejszego zadania nie
występuje. Zakończenie transmisji sygnalizowane jest bitami stopu, w ilości
zazwyczaj od 1 do 2. Przykład sygnału, zgodnego z wymaganiami zadania,
przenoszącego kod 01010011 przedstawiony jest na poniższym rysunku.
Rys.1 Przykładowa
transmisja kodu 01010011 przez RS-232
Informacje dodatkowe o standardzie RS232:
http://www.fizyka.umk.pl/~ptarg/labview/folie/RS232.pdf
http://pl.wikipedia.org/wiki/RS-232
Plik ucf do zadania, płytka Digilent Spartan-3, układ Spartan-3 3S200
FT256-4:
# Clock:
NET "clk_i" LOC = "T9" ; # 50 MHz clock
# Push-buttons:
NET "rst_i" LOC = "L14" ; # pressed high BTN3
# RS232:
NET "RXD_i" LOC = "T13" ; # RS 232 RXD
# Seven-segment LED display:
NET "led7_an_o<3>" LOC = "E13" ; # leftmost digit,
active low
NET "led7_an_o<2>" LOC = "F14" ; # active low
NET "led7_an_o<1>" LOC = "G14" ; # active low
NET "led7_an_o<0>" LOC = "D14" ; # rightmost digit,
active low
#
NET "led7_seg_o<7>" LOC = "E14" ; # segment 'a',
active low
NET "led7_seg_o<6>" LOC = "G13" ; # segment 'b',
active low
NET "led7_seg_o<5>" LOC = "N15" ; # segment 'c',
active low
NET "led7_seg_o<4>" LOC = "P15" ; # segment 'd',
active low
NET "led7_seg_o<3>" LOC = "R16" ; # segment 'e',
active low
NET "led7_seg_o<2>" LOC = "F13" ; # segment 'f',
active low
NET "led7_seg_o<1>" LOC = "N16" ; # segment 'g',
active low
NET "led7_seg_o<0>" LOC = "P16" ; # segment 'dp',
active low
#