Politechnika Białostocka
Wydział Elektryczny
SPRAWOZDANIE Z ZAJĘĆ LABORATORYJNYCH
Synteza Układów Cyfrowych
(Nazwa przedmiotu)
Ćwiczenie numer: 2
Temat: Przełączniki, wyświetlacze, multipleksery
Imiona i nazwiska studentów:
Piotr Wołkowycki
Kamil Świerzbin
Rodzaj studiów: stacjonarne, II stopnia
Kierunek studiów: elektrotechnika
Semestr: I Grupa laboratoryjna:
Prowadzący ćwiczenia: dr Walenty Owieczko
.................................. Ocena
(Data wykonania ćwiczenia)
.............................................
(data i podpis prowadzącego)
1. Cel ćwiczenia:
Celem ćwiczenia było zrealizowanie na płytce programowalnej Altera Cyclone B wyświetlania napisu "HELO" (cokolwiek ten napis oznacza) w taki sposób aby oglądający go odnosił wrażenie, że napis ten płynnie przemieszcza się wzdłuż ekranu.
2. Wykonanie ćwiczenia:
Pierwszym krokiem jaki postawiliśmy na drodze do naszego wielkiego celu było zapoznanie się z numeracją konkretnych segmentów wyświetlacza 7‑segmentowego i przydzielenie im stanów niskich i wysokich tak wyświetlić na nim napis "HELO". Bez żadnych udziwnień, przemieszczeń, przesuwań. Bez nic. Po prostu "HELO". Na razie.
Aby poprawnie określić segmenty wyświetlacza które mają dostać stany wysokie znaleźliśmy w czeluściach Internetu taki oto rysunek poglądowy (jak się później okazało taki sam był w instrukcji do zajęć, ale student jak to student - zawsze szuka drogi naokoło):
Rys. 1. Wyświetlacz 7-seg - numeracja segmentów
Gdy już dowiedzieliśmy się co z czym podłączyć obróciliśmy teorię w praktykę, zastosowaliśmy standardową procedurę kompiluj, assigments, kompiluj, programmer.
W rezultacie otrzymaliśmy coś takiego:
Rys. 2. Zdjęcie wyświetlaczy 7-seg. układu poprawnie wyświetlającego HELO
Kolejnym krokiem w naszym projekcie było zmontowanie układu za pomocą którego możliwe będzie przesuwanie napisu. Rolę tą miał pełnić licznik napędzany KEY'em.
Wyświetlać przesuwany napis można było na dwa sposoby:
sposób I: HELOHELOHELOHELOHELOHELOHELOHELO
H | E | L | O |
---|---|---|---|
E | L | O | H |
L | O | H | E |
O | H | E | L |
H | E | L | O |
sposób II: HELOHELOHELOHELOHELOHELOHELO
H | E | L | O |
---|---|---|---|
E | L | O | |
L | O | ||
O | |||
H | |||
H | E | ||
H | E | L | |
H | E | L | O |
Jako, iż w głębi duszy jestem estetą, sposób pierwszy ze względu na swą nieczytelność po prostu nie pasuje do mojego światopoglądu. Wybraliśmy więc II sposób wyświetlania.
W tym celu skonstruowaliśmy licznik modulo 8 na trzech przerzutnikach typu "T". Teoretycznie aby uzyskać przerwę między początkiem a końcem napisu można było by zastosować licznik modulo 5 (wtedy mielibyśmy mniejszą przerwę pomiędzy kolejnymi HELO) ale, po pierwsze wówczas o tym nie pomyśleliśmy, a po drugie - modulo 8 jest łatwiej zrobić, więc gdybyśmy wpadli na ten pomysł to i tak raczej nie chciało by się nam tego robić. Tak jak jest też jest dobrze.
Wyjścia poszczególnych przerzutników spięliśmy z wejściami zegarowymi przerzutników o bit "starszych" natomiast na wejście zegarowe pierwszego podpięliśmy KEY[0]. W ten oto sposób na wyjściach przerzutników dostawaliśmy kolejne liczny w kodzie binarnym.
Wyjścia licznika wyprowadziliśmy na 4 multipleksery z których każdy odpowiadał za wyświetlanie odpowiedniej litery na jednym wyświetlaczu. Układ z powodzeniem dało by się zrobić na jednym multiplekserze gdyż wejścia adresowe są jednakowo podpięte jednakże po pierwsze wówczas o tym nie pomyśleliśmy a po drugie na 4 MUX'ach jest czytelniej.
Rys. 3. schemat układu
Po złożeniu układu okazało się, że napis przesuwa się poprawnie - płynnie i gładko, ale nie w tą stronę co trzeba tzn. od prawej do lewej. W przypadku tak krótkiego napisu jak HELO nie ma to większego znaczenia, jednakże w przypadku dłuższych ciągów znaków wyświetlanie od pierwszej litery a nie od ostatniej znacznie ułatwia czytanie wyświetlanego tekstu.
Po zanegowaniu wszystkiego co dało się zanegować (wszystkich wyjść licznika) zaczął on przesuwać napis poprawnie.
Rys 4. Czemu jest konieczna negacja wszystkich wyjść? Nie wiem. Ale jest konieczna.
Ostatnią modyfikacją układu, taką wisienką na torcie, była jego automatyzacja. Aby nie było trzeba przesuwać napisu za pomocą programowalnego przycisku wykorzystaliśmy kwarc będący elementem programowalnej płytki.
Niestety aby uzyskać zamierzony efekt nie wystarczy podłączyć kwarcu w miejsce przycisku (czyli to wejścia zegarowego pierwszego przerzutnika). Kwarc ma bowiem zapędy aby przesuwać HELO przez nasz wyświetlacz około 5 000 000 razy na sekundę. Tak szybkie przewijanie tekstu może sprawiać pewne trudności z odczytaniem niesionej przezeń treści. Dlatego też aby go nieco spowolnić (tak około 33 554 432 razy) stosujemy dzielnik częstotliwości który...
Właśnie w tym momencie (czyli pisząc sprawozdanie - dokładnie >>teraz<<) zauważyłem bezcelowość tworzenia licznika z przerzutników typu "T". Dzielnik częstotliwości jest tak na prawdę po prostu licznikiem. Wystarczyło wyprowadzić z niego bity 226, 227, 228 i podać je bezpośrednio na wejścia multipleksera zamiast brać bit 225 i trzykrotnie dzielić go przez 2 (Boże, dlaczego zawsze tak późno wpada się na rozwiązania prostsze i lepsze?).
Koniec końców nie wpadliśmy o czasie na ten pomysł, więc schemat układu licznika wyglądał następująco:
Rys. 5. schemat układu liczącego z częstotliwością ok. 1 Hz
3. Wnioski
Na nasze szczęście pomimo kilku przygód udało się nam w końcu uzyskać zamierzony efekt.
Wykonanie ćwiczenia nauczyło studentów kreatywnego podejścia do występujących na drodze do celu problemów oraz pokazało, że jeśli układ działa nie do końca poprawnie zazwyczaj wystarczy dorzucić kilka bramek NOT.
Wykonanie ćwiczenia nadal nie nauczyło studentów zmniejszania do minimalnej liczby składowych projektowanego układu, gdyż to samo można by było otrzymać używając 3 multiplekserów i 3 przerzutników typu "T" mniej. Może kiedyś studenci osiągną i ten poziom. Pozostaje nam tylko mieć nadzieję.