Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1 Klawiatury i wyświetlacze Opracował: dr inŝ. Wojciech Wojtkowski w.wojtkowski@we.pb.edu.pl BIAŁYSTOK 2009
Spis treści instrukcji: 1. Cel i zakres ćwiczenia laboratoryjnego 2 2. Sterowanie wyświetlaczy 7 segmentowych.... 2 3. Projektowanie automatu sterującego w tekstowych językach opisu sprzętu 9 4. Zestaw uruchomieniowy... 12 4. Zagadnienia do przygotowania... 16 5. Wymagania BHP.. 16 6. Sprawozdanie studenckie. 16 7. Przykładowe zadania 17 8. Literatura.. 17 1. Cel i zakres ćwiczenia laboratoryjnego Celem ćwiczenia jest poznanie zasad wykorzystania w systemie cyfrowym wyświetlaczy 7-segmentowych oraz matrycowych w trybie multipleksowym. W trakcie ćwiczenia studenci opracowują takŝe procedury obsługi klawiatury złoŝonej z mikroprzełączników połączonych w matrycę 4x4. Rozpatrywany jest problem drgań styków przycisków sterujących. Zakres ćwiczenia obejmuje: wyświetlanie w trybie multipleksowym na 4-cyfrowym wyświetlaczu 7 segmentowym (wspólna anoda) bez uŝycia przerwań zegarowych, wyświetlanie w trybie multipleksowym na 4-cyfrowym wyświetlaczu 7 segmentowym (wspólna anoda) z wykorzystaniem przerwań zegarowych, wykorzystanie klawiatury matrycowej, eliminację programową drgań styków, sprzętową emulacje procesorów rodziny 89Cx051, sterowanie wyświetlaczem 7 segmentowym bezpośrednio z układu programowalnego FPGA. Szczegółowy zakres ćwiczenia ustala prowadzący. 2. Sterowanie multipleksowe wyświetlaczy 7 segmentowych Wyświetlacze 7 segmentowe są powszechnie stosowane we wszelkich urządzeniach cyfrowych i mikroprocesorowych. Wpływają na to ich relatywnie niska cena, dobra czytelność zarówno w dobrych jak i w złych warunkach oświetleniowych oraz ze znacznej 2
odległości. Odległość dobrego odczytu moŝna zwiększyć stosując wyświetlacze o większej wysokości. Wadą wyświetlacza 7-segmentowego jest stosunkowo duŝy pobór prądu, rosnący wraz ze wzrostem wysokości (wielkości) wyświetlacza. Pewną komplikację układu sterowania wymusza takŝe duŝa liczba wyprowadzeń (1 cyfra > 8 wyprowadzeń + wyprowadzenie kropki). Wyświetlacze alfanumeryczne LCD pomimo znacznie większej ilości punktów wyświetlacza nie mają z reguły więcej niŝ ok. 10 wyprowadzeń dla całej matrycy. Związane jest to z zastosowaniem zintegrowanego z wyświetlaczem sterownika (sterownik jest umieszczony na płytce PCB wyświetlacza). Wówczas aby wyświetlić dowolną informację przesyła się wyłącznie rozkazy sterujące i dane, natomiast bezpośrednio wyświetlaczem steruje sterownik. W przypadku wyświetlaczy alfanumerycznych LCD najczęściej spotykanym sterownikiem jest układ HD44780 firmy Hitachi lub inny układ funkcjonalnie z nim zgodny. Wyświetlacze 7 segmentowe są pozbawione sterownika. Typowy schemat połączeń wyświetlacza 7 segmentowego (jedna cyfra) jest przedstawiony na rysunku 1. Rys. 1. Rozkład wyprowadzeń wyświetlacza 7 segmentowego SA/SC08 3
Gdy wykorzystuje się tylko jedną lub dwie cyfry, często łączy się wszystkie segmenty z wyprowadzeniami układu sterującego. W przypadku większej liczby wyświetlaczy 7 segmentowych liczba wyprowadzeń jest z reguły zbyt duŝa, aby moŝna było wysterować wyświetlacz bezpośrednio np. za pomocą mikrokontrolera. Najczęściej trzeba zastosować wyświetlanie w trybie multipleksowym. Wówczas łączy się równolegle wszystkie segmenty a, wszystkie segmenty b itd. Dzięki temu dla n wyświetlaczy mamy tylko n+7 wyjść (a nie n x 8 w przypadku sterowania bezpośrednio kaŝdym segmentem). W konsekwencji sterowanie staje się jednak bardziej skomplikowane. w przypadku sterowania z mikrokontrolera ma to jednak skutki wyłącznie programowe. Przykład połączeń 4 wyświetlaczy 7 segmentowych do wyświetlania w trybie multipleksowym jest przedstawiony na rysunku 2. Rys. 2. Połączenie 4 wyświetlaczy 7 segmentowych do wyświetlania w trybie multipleksowym 4
Do sterowania segmentami został wykorzystany bufor ULN2003 (IC2 rys. 2) oraz dekoder HEF4543. Oczywiście w konkretnym układzie praktycznym zastosowane będzie tylko jedno z podanych rozwiązań. Schemat funkcjonalny układu ULN2003 jest przedstawiony na rysunku 3, natomiast schemat pojedynczego toru jest pokazany na rysunku 4. Bufor IC2 pozwala na sterowanie całym wyświetlaczem z urządzenia o małej wydajności prądowej. Zastosowanie takiego układu pozwala na wyświetlenie dowolnego znaku moŝliwego do wyświetlenia na wyświetlaczu 7 segmentowym, gdyŝ mamy bezpośredni dostęp do poszczególnych segmentów. Jest moŝliwość jeszcze większej redukcji wyprowadzeń układu wyświetlacza poprzez zastosowanie dekodera BCD-7seg. Na rysunku 2 jest to układ IC3. NaleŜy pamiętać aby przed włączeniem zasilania wyjąć układ IC2 lub IC3 w zaleŝności z którego będziemy korzystać (dotyczy zestawu uruchomieniowego). Chodzi o to, aby nie wystąpiła sytuacja w której oba układy są włączone jednocześnie. Schemat funkcjonalny dekodera HEF4543 oraz rozmieszczenie wyprowadzeń są przedstawione na rysunku 5. W przypadku gdy zastosowano dekoder BCD 7seg, ilość potrzebnych wyprowadzeń do wysterowania wyświetlacza o n cyfrach spada do n+4. Tabela 1 prezentuje porównanie potrzebnej liczby wyprowadzeń mikrokontrolera do wysterowania wyświetlacza 7 segmentowego o n cyfrach: Tabela 1. Niezbędna liczba wyprowadzeń mikrokontrolera potrzebna do wysterowania wyświetlacza 7 segmentowego o n cyfrach Typ połączenia Liczba wyprowadzeń: Bezpośrednie do kaŝdego segmentu n x 8 Do wyświetlania multipleksowego z buforem ULN2003 Wyświetlanie multipleksowane z dekoderem HFA4543 n+7 n+4 W Tabeli 2 przedstawiono zestawienie wszystkich kombinacji wejść i wyjść układu dekodera BCD/7seg HEF4543. 5
Tabela 2. Tablica wejść i wyjść układu HEF4543 1. H - stan wysoki 2. L - stan niski 3. X - stan bez znaczenia 4. Dla wyświetlaczy LCD podłączyć sygnał zegarowy, dla wyświetlaczy 7 segmentowych ze wspólną katodą podłączyć L, dla wyświetlaczy ze wspólną anodą podłączyć H. 5. ZaleŜy od poprzednio podanego kodu BCD podczas gdy LD było wysterowane poziomem wysokim. Zastosowanie dekodera HEF4543 ogranicza jednak gamę dostępnych znaków do cyfr od 0 do 9. W przypadku bufora ULN2003 moŝna wyświetlać takŝe inne znaki lub niektóre litery. Cyfry wyświetlane na wyświetlaczu 7 segmentowym sterowanym poprzez HEF4543 są przedstawione na rysunku 6. Rysunek 7 przedstawia z kolei sposób dołączenia wyświetlaczy ze wspólną anodą i ze wspólną katodą do dekodera HEF4543. 6
Rys. 3. Schemat funkcjonalny układu ULN2003 Rys. 4. Schemat pojedynczego bufora w układzie ULN2003 Rys. 5. Dekoder BCD/7seg HEF4543 7
Rys. 6. Cyfry wyświetlane przy sterowaniu z HEF4543 Rys. 7. Sposób dołączenia wyświetlaczy LED do dekodera HEF4543 Do wysterowania wyświetlaczy 7 segmentowych za pomocą mikrokontrolera, najlepiej jest wykorzystać przerwania zegarowe. Pozwala to na pracę programu i róŝne obliczenia, podczas gdy informacja z odpowiednich zmiennych (komórek pamięci) jest wyświetlana automatycznie w procedurze obsługi przerwania zegarowego. MoŜna przy tym w jednym przerwaniu wyświetlić wszystkie 4 cyfry (sekwencyjnie), lub moŝna wprowadzić licznik cyfry i w kaŝdym (lub co kilka) przerwaniu wyświetlać jedną, kolejną cyfrę. Przy odpowiedniej częstotliwości generacji przerwań, uzyskamy efekt statycznego wyświetlania. Przykład wykorzystania licznika Timer 0 w języku MCS Basic podany poniŝej słuŝy wyłącznie ilustracji wykorzystania przerwań zegarowych w MCS Basic (nie jest to gotowy program wyświetlający na wyświetlaczach 7 segmentowych). 8
Przykład: Wykorzystanie TIMERa 0 do odmierzenia czasu w MCS Basic Dim Count As Byte, Gt As Byte Config Timer0 = Timer, Gate = Internal, Mode = 2 'Timer0 = timer : timer pracuje jako licznik 'Gate = Internal : źródło zliczania wewnętrzne 'Mode = 2 : 8-bit automatyczne przeładowanie On Timer0 Timer_0_int Load Timer0, 100 'wartość początkowa do licznika (100) Enable Interrupts 'uaktywnia przerwania Enable Timer0 'uaktywnia timer0 Priority Set Timer0 Start Timer0 Count = 0 Do Input "numer", Gt Print "wprowadziłeś:" ; Gt Loop Until Gt = 1 Stop Timer0 End 'ustawia najwyŝszy priorytet dla timer0 'start zliczania 'zerowanie pomocniczego licznika pętla dopóki nie zostanie wprowadzona jedynka Procedura obsługi przerwania: Timer_0_int: Inc Count If Count = 250 Then Print "TIMER0 wygenerował przerwanie" Count = 0 End If Return 3. Projektowanie automatu sterującego w tekstowych językach opisu sprzętu Układ sterujący wyświetlaczami 7-segmentowymi moŝe być takŝe zaprojektowany w matrycy FPGA jako np. automat Moore a. JeŜeli stan wyjść automatu zaleŝy wyłącznie od jego stanu bieŝącego, moŝna zastosować konstrukcję WITH STATES do opisu stanów wyjść. Przykład wykorzystania takiej konstrukcji przy projektowaniu automatu wyświetlającego dowolny znak na matrycy 8x8 jest przedstawiony na rys. 8. Automat moŝna bez problemu zmodyfikować do sterowania wyświetlaczami 7-segmentowymi. W miejsca oznaczone kropkami naleŝy wpisać definicje kolejnych stanów automatu. Jak widać najstarsze 8 bitów wyjścia jest wykorzystane do sterowania kolumnami wyświetlacza w kodzie 1zn. 8 9
najmłodszych bitów wyjścia automatu steruje wierszami matrycy. Do sterowania kolumnami moŝna teŝ wykorzystać demultiplekser 8 bitowy sterowany licznikiem modulo 8. Rys. 8. Przykład opisu automatu wyświetlającego dowolny znak na matrycy 8x8 (opis jest niekompletny) Inny sposób opisu automatu synchronicznego w języku AHDL jest przedstawiony na rysunku 9. 10
Rys. 9. Przykład opisu automatu wyświetlającego dowolny znak na matrycy 8x8 (opis jest niekompletny) Szczegółowe zasady opisu automatów w AHDL moŝna znaleźć w pomocy programu MAX+II lub Quartus w: Help - AHDL How To Use AHDL State Machines (AHDL). JeŜeli wykorzystujemy pamięć ROM do przechowywania matryc wyświetlanych znaków, musimy utworzyć plik konfigurujący pamięć. Najprostszy jest format MIF (Memory Initialization File). Przykładowa zawartość pliku.mif jest przedstawiona na rysunku 10. Wartości adresów i danych są zupełnie przypadkowe i słuŝą wyłącznie ilustracji sposobu konstruowania zawartości pliku konfiguracyjnego. Plik.mif moŝna utworzyć w dowolnym edytorze tekstowym, np. w notatniku Windows. Bardziej złoŝona metoda polega na implementacji wybranego standardowego lub własnego mikroprocesora, a następnie oprogramowanie go w asemblerze. W ten sposób moŝna wykorzystać procesor wbudowany (zagnieŝdŝony) do sterowania wyświetlaczami 7- segmentowymi. W przypadku zagnieŝdŝenia procesora o standardowym rdzeniu np. 8051, ARM, PIC, AVR, moŝna wykorzystać kompilatory wyŝszego poziomu takie jak C lub Basic. Do zagnieŝdŝenia najlepiej nadają się mikroprocesory typu RISC ze względu na znacznie 11
mniejsze zapotrzebowanie na zasoby sprzętowe układu programowalnego niŝ w przypadku mikrokontrolerów CISC. Rys. 10. Przykładowa zawartość pliku konfigurującego MIF 4. Zestaw uruchomieniowy Wszystkie zadania rozwiązywane w trakcie ćwiczenia, dotyczące sterowania z mikrokontrolera jednoukładowego, moŝna uruchomić na płytce testowej wchodzącej w skład zestawu uruchomieniowego 89x051. Na płytce testowej rozmieszczone są poszczególne elementy które moŝna łączyć bez potrzeby lutowania za pomocą specjalnych przewodów. Dostępne są następujące układy: - 20 pinowa podstawka DIP20 w której moŝna umieścić jeden z procesorów z rodziny 20 pinowych procesorów zgodnych z 8051 lub AVR. W podstawce moŝna teŝ umieścić złącze emulatora sprzętowego co pozwala na uruchamianie programów bez procesora w trybie emulacji. - Interfejs RS-232 umoŝliwiający komunikację z innym zestawem lub z komputerem PC. Do konwersji poziomów logicznych do standardu komputerowego został wykorzystamy układ MAX232. - Alfanumeryczny wyświetlacz 1x16 lub 2x16 zgodny programowo ze standardowym sterownikiem HD44780 firmy Hitachi. - Cztery wyświetlacze siedmiosegmentowe LED połączone w sposób umoŝliwiający sterowanie multipleksowe. - Uniwersalny dwukierunkowy port 8 bitowy z interfejsem I 2 C. 12
- Zegar czasu rzeczywistego PCF8583 z rezonatorem kwarcowym. - Pamięć EEPROM z interfejsem szeregowym I 2 C AT24C04. - 8 diod LED. - złącza pozwalające na dołączenie zewnętrznych modułów z komunikacją I 2 C, 1-Wire lub równoległą 8 bitową. - Odbiornik podczerwieni do odbioru danych z pilota zdalnego sterowania w standardzie RC-5. - Dwa tranzystory ogólnego przeznaczenia. - Dwa przyciski sterujące typu microswitch. W razie potrzeby moŝna dołączyć zewnętrzną klawiaturę 4x4 lub wykorzystać przewody zwierane do masy. Oprogramowanie systemu moŝna realizować z wykorzystaniem asemblera, C (np. bezpłatnego SDCC) lub MCS Basic (wersja testowa do 2kB kodu wynikowego). Przy wykorzystaniu mikrokontrolerów z rodziny AVR8 moŝna stosować AVR Studio (asembler) lub AVR Studio+AVRGCC (język C). Dopuszczalne jest takŝe łączenie modułów w języku wyŝszego poziomu z procedurami w asemblerze. Rozmieszczenie elementów na płytce testowej jest przedstawione na rysunku 12. Rozmieszczenie elementów na płytce wyświetlaczy jest przedstawione na rysunku 13. 13
Rys. 11. Schemat połączeń zestawu uruchomieniowego 14
Rys. 12. Rozmieszczenie elementów na płytce testowej Rys. 13. Rozmieszczenie elementów na płytce wyświetlaczy 15
5. Zagadnienia do przygotowania Przed przystąpieniem do wykonania ćwiczenia, student powinien: - zapoznać się z instrukcją, - zapoznać się ze schematem zestawu uruchomieniowego, - powtórzyć teorię układów sekwencyjnych wykorzystujących pamięci ROM, - powtórzyć projektowanie automatów sekwencyjnych za pomocą języka AHDL, - opracować rozwiązanie co najmniej dwóch z zadań podanych na końcu instrukcji. 6. Wymagania BHP Warunkiem przystąpienia do praktycznej realizacji ćwiczenia jest zapoznanie się z obowiązującą w laboratorium instrukcją BHP oraz przestrzeganie zasad w niej zawartych. Konieczne jest takŝe zapoznanie z ogólnymi zasadami pracy przy stanowisku komputerowym. Instrukcje BHP powinny być podane studentom podczas pierwszych zajęć laboratoryjnych i dostępne do wglądu w Laboratorium. 7. Sprawozdanie studenckie Sprawozdanie z ćwiczenia powinno zawierać: stronę tytułowa zgodnie z obowiązującym wzorem, cel i zakres ćwiczenia, opis stanowiska badawczego, opis przebiegu ćwiczenia z wyszczególnieniem wykonywanych czynności, algorytm rozwiązania danego problemu, schematy układów, programy w asemblerze (lub w języku wyŝszego poziomu) z komentarzami, komentarze i wnioski Na ocenę sprawozdania będą miały wpływ następujące elementy: zgodność zawartości z instrukcją, algorytm rozwiązania problemu, wnioski i uwagi, 16
terminowość i ogólna estetyka Sprawozdanie powinno być wykonane i oddane na zakończenie ćwiczenia, najpóźniej na zajęciach następnych. Sprawozdania oddane później będą oceniane niŝej. 7. Przykładowe zadania Z1. Wyświetlić liczbę 2345 na wyświetlaczach 7-segmentowych w trybie multipleksowym. MoŜna wykorzystać maksymalnie 8 wyprowadzeń mikrokontrolera. Nie powinno być widoczne migotanie. Z2. Licznik od 0 do 9999 taktowany sygnałem 1Hz. Z3. Licznik od 0 do 9999 zliczający wciśnięcia przycisku. NaleŜy wyeliminować wpływ drgań styków. Program powinien wykorzystywać przerwanie zegarowe do obsługi wyświetlaczy 7-segmentowych. Z4. Zaprojektować automat sekwencyjny działający jak stoper od 0 do 99 sekund. Z5. Zadanie jak Z4. Dodatkowo sterowanie przyciskami: start, stop i reset. Z6. Zaprojektować automat (w AHDL lub VHDL) wyświetlający stan licznika zliczającego liczbę wciśnięć przycisków góra i dół. Zastosować w projekcie pamięć LPM_ROM do przechowywania matryc znaków. Z7. Zrealizować wyświetlanie numeru klawisza wciśniętego na dołączonej klawiaturze matrycowej 4x4. 8. Literatura: L1. Paweł Hadam: Projektowanie systemów mikroprocesorowych, BTC, 2004r. L2. B. Zieliński: Układy mikroprocesorowe, przykłady rozwiązań, Gliwice, Helion, 2002r. L3. WWW.altera.com - dsf10k.pdf opis układów rodziny FLEX10K L4. Łuba T.: Syntez układów cyfrowych, WKŁ, 2003r. L5. Skorupski A.: Podstawy techniki cyfrowej, WKŁ, 2004 L6. Małysiak H.: Teoria automatów cyfrowych, laboratorium, Wydawnictwo Politechniki Śląskiej, 2003. L7. Pasierbiński, J., Zbysiński P.: Układy programowalne w praktyce, WKŁ, 2002r. 17