MINISTERSTWO EDUKACJI NARODOWEJ Mirosław Sulejczak Badanie układów zewnętrznych mikrokontrolera 311[07].Z4.03 Poradnik dla ucznia Wydawca Instytut Technologii Eksploatacji Państwowy Instytut Badawczy Radom 2006
Recenzenci: mgr inż. Elżbieta Małgorzata Majka mgr inż. Anna Kembłowska Opracowanie redakcyjne: mgr inż.danuta Pawełczyk Konsultacja: mgr inż. Gabriela Poloczek Korekta: Poradnik stanowi obudowę dydaktyczną programu jednostki modułowej 311[07].Z4.03 Badanie układów zewnętrznych mikrokontrolera zawartego w modułowym programie nauczania dla zawodu technik elektronik. Wydawca Instytut Technologii Eksploatacji Państwowy Instytut Badawczy, Radom 2006 1
SPIS TREŚCI 1. Wprowadzenie 3 2. Wymagania wstępne 6 3. Cele kształcenia 7 4. Materiał nauczania 8 4.1. Dołączanie układów zewnętrznych do mikrokontrolera 8 4.1.1. Materiał nauczania 8 4.1.2. Pytania sprawdzające 13 4.1.3. Ćwiczenia 14 4.1.4. Sprawdzian postępów 15 4.2. Wyświetlacz LCD 16 4.2.1. Materiał nauczania 16 4.2.2. Pytania sprawdzające 19 4.2.3. Ćwiczenia 20 4.2.4. Sprawdzian postępów 21 4.3. Przetwornik C/A 22 4.3.1. Materiał nauczania 22 4.3.2. Pytania sprawdzające 23 4.3.3. Ćwiczenia 24 4.3.4. Sprawdzian postępów 26 5. Sprawdzian osiągnięć 27 6. Literatura 35 2
1. WPROWADZENIE Poradnik będzie Ci pomocny w przyswajaniu wiedzy z zakresu badania modułów wewnętrznych mikrokontrolera. W poradniku zamieszczono: - wymagania wstępne wykaz umiejętności, jakie powinieneś mieć już opanowane, abyś bez problemów mógł korzystać z poradnika, - cele kształcenia wykaz umiejętności, jakie opanujesz podczas pracy z poradnikiem, - materiał nauczania podstawowe wiadomości teoretyczne niezbędne do opanowania treści jednostki modułowej, - zestaw pytań przydatny do sprawdzenia, czy już opanowałeś podane treści, - ćwiczenia, które pomogą Ci zweryfikować wiadomości teoretyczne oraz ukształtować umiejętności praktyczne, - sprawdzian postępów, - literaturę uzupełniającą, - sprawdzian osiągnięć przykładowy zestaw zadań i pytań. Pozytywny wynik sprawdzianu potwierdzi, że dobrze pracowałeś podczas lekcji i że nabyłeś wiedzę i umiejętności z zakresu tej jednostki modułowej, W materiale nauczania zostały omówione zagadnienia zakresu badania układów zewnętrznych mikrokontrolera, ich budowy, sposobu dołączenia do mikrokontrolera oraz programowania. Podczas poznawania modułów mikrokontrolera niewątpliwie pomocny będzie nauczyciel, który pomoże Ci w przypadku pojawienia się problemów. Z rozdziałem Pytania sprawdzające możesz zapoznać się: - przed przystąpieniem do rozdziału Materiał nauczania poznając przy tej okazji wymagania wynikające z zawodu, a po przyswojeniu wskazanych treści, odpowiadając na te pytania sprawdzisz stan swojej gotowości do wykonywania ćwiczeń, - po zapoznaniu się z rozdziałem Materiał nauczania, by sprawdzić stan swojej wiedzy, która będzie Ci potrzebna do wykonywania ćwiczeń. Kolejny etap to wykonywanie ćwiczeń, których celem jest uzupełnienie i utrwalenie wiadomości z zakresu badania modułów mikrokontrolera. Wykonując ćwiczenia przedstawione w poradniku lub zaproponowane przez nauczyciela, będziesz poznawał budowę, sposób programowania i użytkowania modułów dołączanych do mikrokontrolera. Po wykonaniu zaplanowanych ćwiczeń, sprawdź poziom swoich postępów wykonując Sprawdzian postępów. W tym celu: - przeczytaj pytania i odpowiedz na nie, - podaj odpowiedź wstawiając X w podane miejsce, wpisz TAK jeśli Twoja odpowiedź na pytanie jest prawidłowa, wpisz NIE jeśli Twoja odpowiedź na pytanie jest niepoprawna. Odpowiedzi NIE wskazują luki w Twojej wiedzy, informują Cię również, jakich zagadnień jeszcze dobrze nie poznałeś. Oznacza to także powrót do treści, które nie są dostatecznie opanowane. Poznanie przez Ciebie wszystkich lub określonej części wiadomości będzie stanowiło dla nauczyciela podstawę przeprowadzenia sprawdzianu poziomu przyswojonych wiadomości i ukształtowanych umiejętności. W tym celu nauczyciel może posłużyć się zadaniami testowymi. 3
W rozdziale 5. tego poradnika jest zamieszczony przykład takiego testu, zawiera on: instrukcję, w której omówiono tok postępowania podczas przeprowadzania sprawdzianu, przykładową kartę odpowiedzi, w której, w przeznaczonych miejscach wpisz odpowiedzi na pytania lub zakreśl właściwe odpowiedzi spośród zaproponowanych. Bezpieczeństwo i higiena pracy W czasie pobytu w pracowni musisz przestrzegać regulaminów, przepisów bezpieczeństwa i higieny pracy oraz instrukcji przeciwpożarowych, wynikających z rodzaju wykonywanych prac. Przepisy te poznasz podczas trwania nauki. 4
311[07].Z4 Badanie układów mikroprocesorowych 311[07].Z4.01 Pisanie i uruchamianie programów w asemblerze 311[07].Z4.02 Badanie modułów wewnętrznych mikrokontrolera 311[07].Z4.03 Badanie układów zewnętrznych mikrokontrolera Schemat układu jednostek modułowych 5
2. WYMAGANIA WSTĘPNE Przystępując do realizacji programu jednostki modułowej, powinieneś umieć: omawiać architekturę systemu mikroprocesorowego, stosować rozkazy mikrokontrolera, pisać, kompilować i poprawiać programy w języku asemblera, programować moduły wewnętrzne mikrokontrolera, używać zestawu uruchomieniowego do uruchamiania programu, korzystać z różnych źródeł informacji. 6
3. CELE KSZTAŁCENIA W wyniku realizacji programu jednostki modułowej powinieneś umieć: zaprogramować przetworniki C/A, wykorzystać brzęczyk do sygnalizacji określonych sytuacji, wykorzystać przełączniki wejściowe do wprowadzania danych binarnych, wyświetlić informację na zestawie diod, stworzyć kody klawiszy, zaprogramować niestandardowe znaki wyświetlacza, uruchomić mikroprocesorowe systemy sterowania (np. sygnalizacją świetlną skrzyżowania). 7
4. MATERIAŁ NAUCZANIA 4.1. Dołączanie układów zewnętrznych do mikrokontrolera 4.1.1. Materiał nauczania Układy zewnętrzne mogą być dołączone do mikrokontrolera za pośrednictwem portów lub dołączane do magistral danych, adresowej i sterującej. Układy dołączone do magistral są dostępne w przestrzeni adresowej zewnętrznej pamięci danych XRAM. Diody: Aby wyświetlić informację na zestawie diod należy wysłać daną: do portu równoległego np. MOV P1,#0FFH na adres pod którym są dostępne w przestrzeni adresowe np.: MOV DPTR,#9000H ; ;adres diod MOV A,#0FFH MOVX @DPTR,A Można również zapalać lub gasić pojedyncze diody dołączone do portu np. SETB P1.1 lub CLR P1.1. Podobnie można załączać/ wyłączać brzęczyk. Przełączniki binarne: Przełączniki binarne również mogą być dołączane do portu lub umieszczane w przestrzeni adresowej XRAM. Pobranie stanu przełączników do akumulatora: z portu np.: MOV A,P1 z bufora umieszczonego w przestrzeni adresowej np.: MOV DPTR,#8000H ;adres klawiatury MOV A,@DPTR Przykład programu realizującego koder priorytetowy tzn. pobierającego stan przełączników dołączonych do portu P1 i wyświetlającego binarnie numer wybranego przełącznika na diodach dołączonych do magistrali pod adresem 9000H. Przełącznik 0 ma najwyższy priorytet. MOV R7,#0 MOV A,P1 NAST: RRC A ;bity pobrane z portu są przesuwane w prawo ;i wpisywane jako bit CY INC R7 JNC NAST DEC R7 MOV A,R7 MOV DPTR,#9000H MOVX @DPTR,A ;rej. R7 jest inkrementowany po każdym wysuniętym ;zerze ;w R7 jest binarny numer najstarszego ustawionego ;przełącznika 8
Klawiatura Klawiatura może być zbudowana jako połączenie kilku przycisków wspólną końcówką, lub poszczególne przyciski mogą być zorganizowane w postaci matrycy. W zależności od dostępności portów wejściowych i wymaganej ilości klawiszy, stosuje się różnego rodzaju układy wejściowe. Najprostszym sposobem dołączenia klawiatury bezpośrednio do portu mikrokontrolera przedstawia rysunek 1. Port P1 jest rejestrem umieszczonym w wewnętrznej przestrzeni adresowej mikrokontrolera i z tego powodu można wymuszać stany logiczne na poszczególnych wyjściach portu. Dzięki tej właściwości można dołączyć klawiaturę 8 stykową lub matrycową 4x4. Program do obsługi klawiatury matrycowej ustawia kolejno stan logiczny 0 na poszczególnych liniach portu P1 (od P1.4 do P1.7) i odczytuje stan linii P1.0 do P1.3. Naciśnięty przycisk wymusza stan 0. a) b) Rys. 1. Dołączenie styków klawiatury do portu P1 mikrokontrolera a) matryca 4x4, b) klawiatura 8 stykowa [6] Podobnie jak w przypadku innych układów zewnętrznych możliwe jest dołączenie klawiatury do magistral w przestrzeni adresowej zewnętrznej pamięci XRAM. Takie rozwiązanie wymaga dodatkowych elementów w postaci dekodera adresów, rejestrów wejściowych i wyjściowych: 9
Rys. 2. Dołączenie klawiatury 16 stykowej [6] Podobnie jak diody do mikrokontrolera mogą być dołączone wskaźniki elektroluminescencyjne np. ośmiosegmentowe. Najprostszy sposób dołączenia pojedynczego wyświetlacza ośmiosegmentowego do portu mikrokontrolera przedstawia rysunek 3. Rys.3. Wyświetlacz ośmiosegmentowy dołączony do portu [6] W przypadku dołączenia kilku wyświetlaczy znaki na nich mogą być wyświetlane: statycznie informacja jest wyświetlana na wszystkich wskaźnikach jednocześnie, dynamicznie w danej chwili aktywny jest tylko jeden wyświetlacz, wrażenie ciągłego wyświetlania znaków na wszystkich wyświetlaczach uzyskuje się dzięki bezwładności ludzkiego oka. Przykładową makietę zawierającą 4 wskaźniki 8 segmentowe przedstawia rys. 4, cztery wskaźniki W1..W4 są wybierane liniami portu P5.0 P5.3, stan jedynki logicznej na linii portu P4.0 P4 7 wywołuje przepływ prądu przez wybrany segment, a tym samym zaświecenie segmentu, jeśli wskaźnik jest wybrany, stan zera wygasza segment. 10
P5.0-P5.3 sterowanie anod wskaźników a h a h a h a h R1... R8 P4.0-P4.7 P4.0 P4.7 sterowanie katod (segmentów) wskaźników Rys. 4. Schemat blokowy makiety wskaźników 8 segmentowych [3, s.92] Można również zastosować dekoder z serii CMOS typu CD4511, który zawiera w sobie dekoder kodu BCD na kod wskaźnika 7 segmentowego oraz rejestr zatrzaskowy. Dzięki temu istnieje możliwość podłączenia czterech wyświetlaczy typu WK (wspólna katoda) do jednego portu mikrokontrolera (rys.5). Liniami portu P1.0 do P1.3 podajemy kod znaku do wyświetlenia a wyjściami P1.4 do P1.7 wybieramy wyświetlacz, zmiana stanu z 0 na 1 na którymś z wyjść P1.4 do P1.7 powoduje wpisanie kodu do dekodera. Rezystory w obwodzie poszczególnych segmentów ograniczają prąd świecenia. Dzięki rozwiązaniom układowym przedstawionym powyżej oprogramowanie wyświetlaczy jest proste i poszczególne wyświetlacze świecą statycznie. 11
Rys. 5. Cztery wyświetlacze 7 segmentowe podłączone do portu mikrokontrolera poprzez dekodery typu CD4511 [6] Przykład: Do portu P1 mikrokontrolera dołączony jest wyświetlacz 8 segmentowy. Napisz program jednocyfrowego licznika odliczającego sekundy. Rozwiązanie zadania należy rozpocząć od utworzenia tablicy kodów 8 segmentowych cyfr 0 9 (segment A P1.0, B P1.1,...H P1.7): cyfra H G F E D C B A hex 0 0 0 1 1 1 1 1 1 CF 1 0 0 0 0 0 1 1 0 06 2 0 1 0 1 1 0 1 1 5B 3 0 1 0 0 1 1 1 1 4F 4 0 1 1 0 0 1 0 0 34 5 0 1 1 0 1 1 0 1 6D 6 0 1 1 1 1 1 0 1 7D 7 0 0 0 0 0 1 1 1 07 8 0 1 1 1 1 1 1 1 7F 9 0 1 1 0 1 1 1 1 6F Następnie obliczyć liczbę przepełnień licznika odmierzającego 1 sekundę: Aby odmierzyć 1 s licznik musi zliczyć: 1s=1000000µs=1000000 cykli 1000000 = 15 reszta 16960 65536 12
Aby odliczyć 1000000 cykli licznik trzeba przepełnić 15 razy w pełnym zakresie i jeszcze 16960 cykli. Wartość początkowa, którą należy wpisać do licznika: 65536 16969=48576. Program będzie składał się z następujących części: 1. załadowanie do pamięci IRAM od adresu 30h tablicy kodów 8 segmentowych, 2. rejestr R1 będzie licznikiem wyświetlanych cyfr (uwaga: można wpisać do rejestru wartość początkową 30h, zamiast 0 pozwoli to adresować tablicę kodów 8 segmentowych), 3. pobranie kodu cyfry i wysłanie na port P1, 4. odmierzenie 1 sekundy, 5. inkrementacja licznika i sprawdzenie, czy jest już równy 9, jeżeli tak następną cyfrą będzie 0, 6. kroki 3 6 będą powtarzane. MOV R0,#30H ;adres tablicy kodów MOV @R0,#0CFH ;kod 0 INR R0... ;załadowanie wszystkich kodów OD_NOWA: MOV R1,#30H ;licznik cyfr CYKL: MOV P1,#@R1 ; wysłanie kodu 8 segmentowego LCALL SEKUNDA ;odmierzenie opóźnienia INR R1 CJNE R1,#10,CYKL ;czy była cyfra 9? LJMP OD_NOWA SEKUNDA: MOV TMOD,#00010000B ; licznik T1 zlicza impulsy wewnętrzne (C/T =0) w trybie 1 (M1M0=01) MOV TH1,#HIGH(48576) ;załadowanie starszego bajtu wartości początkowej do starszej części licznika T1 MOV TL1,#LOW(48576) ;załadowanie młodszego bajtu wartości początkowej do młodszej części licznika T1 MOV R7,#16 ;licznik przepełnień SETB TR1 ;start zliczania SEK: JNB TF1,$ ;oczekiwanie na przepełnienie licznika CLR TF1 ;programowe zdjęcie flagi przepełnienia DJNZ R7,SEK ; dekrementacja licznika przepełnień CLR TR1 ; zatrzymanie licznika po odmierzeniu 1s RET 4.1.2. Pytania sprawdzające Odpowiadając na pytania, sprawdzisz, czy jesteś przygotowany do wykonania ćwiczeń. 1. W jaki sposób można dołączyć układy zewnętrzne do mikrokontrolera? 2. Jakimi rozkazami można wysłać daną z akumulatora mikrokontrolera na układ zewnętrzny dołączony do portu równoległego? 3. Jakimi rozkazami można wysłać daną z akumulatora mikrokontrolera na układ zewnętrzny dołączony do magistrali? 4. W jaki sposób można wyświetlać znaki na kilku wyświetlaczach dołączonych do mikrokontrolera? 13
4.1.3. Ćwiczenia Ćwiczenie 1 Napisz i uruchom program sterowania sygnalizacją świetlną. Sygnalizatory są symulowane przez diody dołączone do portu P5 mikrokontrolera: D0 D1 D5 D2 D3 D4 D6 D7 Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) przygotować sekwencję świateł na skrzyżowaniu wypełniając tabelę: przejście droga droga dla główna podporz. pieszych D7 D6 D5 D4 D3 D2 D1 D0 czas zielone czerw. czerw. 0 0 1 1 0 0 0 1 5 s 2) przygotować algorytm programu w postaci schematu blokowego, 3) napisać program w języku asemblera do odmierzania czasu używając układu czasowego, 4) skompilować program, poprawić ewentualne błędy, 5) uruchomić program używając zestawu uruchomieniowego, 6) sprawdzić poprawność działania programu, 7) zaprezentować wykonane ćwiczenie, 8) dokonać oceny poprawności wykonanego ćwiczenia. Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z oprogramowaniem, literatura z rozdziału 6. Ćwiczenie 2 Napisz i uruchom program wyświetlania na wyświetlaczu 8 segmentowym numeru naciśniętego na klawiaturze klawisza: Sposób wykonania ćwiczenia 14
Aby wykonać ćwiczenie powinieneś: 1) przygotować kody 8 segmentowe poszczególnych cyfr szesnastkowych, 2) przygotować algorytm programu w postaci schematu blokowego, 3) napisać program w języku asemblera, 4) skompilować program, poprawić ewentualne błędy, 5) uruchomić program używając zestawu uruchomieniowego, 6) sprawdzić poprawność działania programu, 7) zaprezentować wykonane ćwiczenie, 8) dokonać oceny poprawności wykonanego ćwiczenia. Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z oprogramowaniem, literatura z rozdziału 6. Ćwiczenie 3 Napisz i uruchom program wyświetlający na diodach krążącą jedynkę w prawo, krążącą jedynkę w lewo, krążące zero w prawo lub krążące zero w lewo. Wybór funkcji zrealizuj używając przełączników. Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) przygotować algorytm programu w postaci schematu blokowego, 2) napisać program w języku asemblera pamiętając o konieczności wprowadzenia opóźnienia pomiędzy poszczególnymi stanami, 3) skompilować program, poprawić ewentualne błędy, 4) uruchomić program używając zestawu uruchomieniowego, 5) sprawdzić poprawność działania programu, 6) zaprezentować wykonane ćwiczenie, 7) dokonać oceny poprawności wykonanego ćwiczenia, Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z oprogramowaniem, literatura z rozdziału 6. 4.1.4. Sprawdzian postępów Czy potrafisz: Tak Nie 1) dołączyć diody do mikrokontrolera? 2) dołączyć wyświetlacze 8 segmentowe do mikrokontrolera? 3) dołączyć przełączniki do mikrokontrolera? 4) dołączyć klawiaturę do mikrokontrolera? 5) napisać program wysyłania danych na diody lub wyświetlacze 8 segmentowe? 6) wczytać stan przełączników i klawiatury? 7) opracować kody klawiszy? 15
4.2. Wyświetlacz LCD 4.2.1.Matriał nauczania Sterowanie wyświetlaczem LCD jest na tyle skomplikowane, że budowane są jako gotowe moduły zawierające oprócz wyświetlacza kontroler sterujący wyświetlaniem danych na wyświetlaczu. Przykładem może być wyświetlacz LCD ze sterownikiem HD44780. Rys.6. Przykładowy sposób dołączenia wyświetlacza LCD w przestrzeni adresowej pamięci XRAM [5, s. 206] Kontroler zawiera pamięć danych DD RAM i generator znaków CG ROM. Do pamięci danych wpisywane są znaki wyświetlane na wyświetlaczu, adres w DD RAM odpowiada pozycji na wyświetlaczu. Dla wyświetlacza 2x16 znaków do poszczególnych pozycji wyświetlacza przyporządkowane są następujące adresy DD RAM (szesnastkowo): linia1 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F linia2 40 41 42 43 44 45 46 47 48 49 4A 4B 4c 4D 4E 4F Pamięć CG ROM zawiera generator znaków. Adresy w pamięci CG ROM odpowiadają kodom ASCII znaków. Dodatkowo można zaprojektować 8 własnych znaków umieszczonych w pamięci CG ROM pod adresami 0..7 (lub 8..15). Dołączenie wyświetlacza LCD do mikrokontrolera wymaga doprowadzenia szyny danych oraz 3 sygnałów sterujących: Linia Nazwa Opis E Enable Wybór sterownika RS Register selection Wybór wewnętrznych rejestrów: instrukcji lub danych R/W Read/ Write Odczyt/ zapis sterownika 16
Cztery kombinacje sygnałów RS i R/W pozwalają na wykonanie następujących operacji: Tabela 1 Sygnały RS i R/W RS R/W Opis 1 0 zapis danych do pamięci RAM (pamięci wyświetlacza DD RAM lub generatora znaków CG RAM) 1 1 odczyt danych z pamięci RAM (pamięci wyświetlacza DD RAM lub generatora znaków CG RAM) 0 1 odczyt słowa statusowego, najstarszy bit busy jest informacją o stanie zajętości wyświetlacza: busy=1 sterownik zajęty 0 0 zapis rozkazów do sterownika Współpraca mikrokontrolera z wyświetlaczem LCD wymaga wysłania rozkazów sterujących. Tabela 2 Rozkazy sterujące wyświetlacza LCD Rozkaz Opis 0 0 0 0 0 0 0 1 Clear Display kasuj dane wyśw. i ustaw kursor na adres 0 0 0 0 0 0 0 1 x Return Home ustaw kursor na adres 0 0 0 0 0 0 1 I/D S Entry mode set ustaw kierunek przesunięcia kursora oraz wł/ wył kierunek przesuwania danych wyświetlacza: I/D=1 zwiększaj adres kursora po każdym wpisie danej I/D=0 zmniejszaj adres kursora po każdym wpisie danej S=1 jednoczesny obrót danych wyświetlacza 0 0 0 0 1 D C B Display ON/OFF control: 1 ON(włącz), 0 OFF(wyłącz): D cały wyświetlacz C kursor B miganie znaku w pozycji kursora 0 0 0 1 S/C R/L x x Kursor and display Shift S/C=1 obrót danych wyświetlacza S/C=0 przesunięcie kursora R/L=1 obrót/ przesunięcie w prawo R/L=0 obrót/ przesunięcie w lewo 0 0 1 DL N F x x Function set DL=1 8 bitowa szyna DL=0 4 bitowa szyna N=1 2 linie wyświetlacza N=0 1 linia wyświetlacza F=1 znaki 5x10 punktów F=0 znaki 5x7 punktów 0 1 A 5 A 4 A 3 A 2 A 1 A 0 Set CG RAM address Ustawienie adresu generatora znaków (A 5..A 0 ) 1 A 6 A 5 A 4 A 3 A 2 A 1 A 0 Set DD RAM address Ustawienie adresu danych (A 6..A 0 ) pozycji na wyświetlaczu 17
Wyświetlacz LCD może być dołączony do mikrokontrolera w przestrzeni adresowej pamięci XRAM, przykładowy adres 8800H. Linie R/W i RS są doprowadzone jako bity adresowe A1 i A0. Stąd w celu wybrania wyświetlacza LCD są stosowane następujące adresy: starszy bajt adresu: 88H młodszy bajt: A7 A6 A5 A4 A3 A2 A1 R/W A0 RS 0 0 0 0 0 0 0 0 zapis słowa sterującego 0 0 0 0 0 0 0 1 zapis danej 0 0 0 0 0 0 1 0 odczyt słowa statusowego 0 0 0 0 0 0 1 1 odczyt danej Przykładowa inicjalizacja wyświetlacza: MOV DPTR,#8800H ; wybór funkcji: zapis słowa sterującego MOV A,#38H ;szyna 8 bitowa, 2 linie, znak 5x7 MOVX @DPTR,A ;wysłanie słowa sterującego do wyświetlacza LCALL BUSY ;oczekiwanie na gotowość MOV A,#0EH ;wyświetlacz włączony, kursor widoczny MOVX @DPTR,A LCALL BUSY MOV A,#06H ;inkrementacja adresu po wysłaniu słowa MOVX @DPTR,A LCALL BUSY MOV A,#0 ;wyczyszczenie wyświetlacza MOVX @DPTR,A LCALL BUSY ; wysyłanie danych na wyświetlacz LCD BUSY: PUSH DPH ;zachowanie rejestru DPTR na stosie PUSH DPL PUSH ACC ;zachowanie akumulatora na stosie MOV DPTR,#8802H ;wybór funkcji: odczyt słowa statusowego TEST: MOVX A,@DPTR ;pobranie słowa statusowego JB ACC.7,TEST ;test flagi busy (oczekiwanie na gotowość wyświetlacza) POP ACC ;odtworzenie stanu akumulatora POP DPL ;odtworzenie stanu rejestru DPTR POP DPH RET 18
Niekiedy pojawia się potrzeba zdefiniowania własnych znaków np. polskich liter. Mamy wówczas do dyspozycji 8 komórek pamięci generatora znaków (adresy 0 7 lub 8 15). Definiujemy literę ó na polu 5x7 pikseli: hex: 01 02 0E 11 11 11 0E inicjalizacja wyświetlacza.. ;zdefiniowanie własnego znaku MOV DPTR,#8800H MOV A,#40H MOVX @DPTR,A LCALL BUSY MOV R7,#7 ;wybór funkcji: zapis słowa sterującego ;adres 0 w CG RAM ;licznik bajtów wysyłanych do CGRAM MOV A,#0 PL: MOV DPTR,#TAB_PL ;adres tablicy ze zdefiniowaną literą PUSH ACC MOVC A,@A+DPTR MOV DPTR,#8801H MOVX @DPTR,A LCALL BUSY POP ACC INC A DJNZ R7,PL ;pobranie bajtu definiowanego znaku ;wybór funkcji: zapis danej TAB_PL: DB: 01, 02, 0Eh, 11h, 11h, 11h, 0Eh Odwołanie do zdefiniowanego znaku następuje przez podanie jego adresu. Na przykład w celu wyświetlenia tekstu Próba definiujemy tablicę: TABLICA: DB Pr,00, ba, znaki znajdujące się pomiędzy apostrofami zostaną pobrane jako kody ASCII z generatora znaków CGROM, a własny znak z komórki 0 pamięci CGRAM. Jeżeli konieczne jest zdefiniowanie większej ilości znaków wystarczy zwiększyć licznik (np. 3 znaki licznik=21), w tablicy umieścić odpowiednia ilość bajtów. Znak zdefiniowany przez pierwsze 7 bajtów zostanie zapamiętany pod adresem 0, kolejne pod adresami 1,2 itd. 4.2.2. Pytania sprawdzające Odpowiadając na pytania, sprawdzisz, czy jesteś przygotowany do wykonania ćwiczeń. 1. Jakie sygnały z mikrokontrolera muszą być doprowadzone do wyświetlacza LCD? 2. W jaki sposób można zainicjować wyświetlacz LCD? 3. Jak sprawdzić gotowość wyświetlacza LCD do odebrania słowa sterującego lub danej? 4. Jak wyświetlić znak na wyświetlaczu LCD na wybranej pozycji? 19
5. Jak zdefiniować własny znak? 6. Jak wyświetlić tekst zawierający gotowe znaki z CGROM i znaki własne? 4.2.3. Ćwiczenia Ćwiczenie 1 Program wysyłania na wyświetlacz znaków z generatora znaków. Po wysyłaniu 16 znaków odmierz jednosekundowe opóźnienie umożliwiające obserwację znaków, następnie wyślij kolejnych 16 znaków itd., aż do wyczerpania znaków w pamięci generatora znaków CGROM. Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) przygotować słowa sterujące konieczne do zainicjowania wyświetlacza, 2) opracować algorytm programu i zapisać go w postaci schematu blokowego, 3) napisać program wyświetlania danych z generatora znaków, 4) napisać podprogram odmierzania czasu 1s, włączyć go jako podprogram do programu głównego, 5) skompilować program, poprawić ewentualne błędy, 6) uruchomić program używając zestawu uruchomieniowego, 7) sprawdzić poprawność działania programu, 8) zaprezentować wykonane ćwiczenie, 9) dokonać oceny poprawności wykonanego ćwiczenia. Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z wyświetlaczem LCD wraz z oprogramowaniem, lista rozkazów mikrokontrolera, lista słów sterujących wyświetlacza LCD, tablica kodów ASCII, literatura z rozdziału 6. Ćwiczenie 2 Napisz i uruchom program wyświetlający tekst dłuższy niż 16 znaków używając znacznika końca: a) w 2 liniach, b) tekst przewija się na wyświetlaczu w 1 linijce. Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) przygotować słowa sterujące konieczne do zainicjowania wyświetlacza, 2) opracować algorytm programu i zapisać go w postaci schematu blokowego, 3) napisać program wyświetlania danych (zdefiniować własne znaki), 4) skompilować program, poprawić ewentualne błędy, 5) uruchomić program używając zestawu uruchomieniowego, 6) sprawdzić poprawność działania programu, 7) zaprezentować wykonane ćwiczenie, 8) dokonać oceny poprawności wykonanego ćwiczenia. 20
Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z wyświetlaczem LCD wraz z oprogramowaniem, lista rozkazów mikrokontrolera, lista słów sterujących wyświetlacza LCD, literatura z rozdziału 6. Ćwiczenie 3 Napisz program wyprowadzania na wyświetlacz LCD trzycyfrowej liczby wprowadzonej z klawiatury. Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) przygotować słowa sterujące konieczne do zainicjowania wyświetlacza, 2) opracować algorytm programu i zapisać go w postaci schematu blokowego, 3) napisać program odczytu danej z klawiatury, zamiany pobranej danej na kod ASCII i wyświetlania znaku, 4) skompilować program, poprawić ewentualne błędy, 5) uruchomić program używając zestawu uruchomieniowego, 6) sprawdzić poprawność działania programu, 7) zaprezentować wykonane ćwiczenie, 8) dokonać oceny poprawności wykonanego ćwiczenia. Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z wyświetlaczem LCD wraz z oprogramowaniem, lista rozkazów mikrokontrolera, lista słów sterujących wyświetlacza LCD, tablica kodów ASCII, literatura z rozdziału 6. 4.2.4. Sprawdzian postępów Czy potrafisz: Tak Nie 1) omówić sposoby dołączenia wyświetlacza LCD do mikrokontrolera? 2) zainicjować wyświetlacz? 3) napisać program wysyłania znaków na wyświetlacz? 4) zdefiniować i wyświetlić własne znaki? 5) napisać program przewijający po ekranie długi tekst? 6) napisać program wyprowadzający na wyświetlacz numer naciśniętego klawisza? 21
4.3. Przetwornik C/A 4.3.1. Materiał nauczania Przetwornik C/A pozwala na odwzorowanie danej cyfrowej w postaci sygnału analogowego. Sposób odwzorowania przedstawia rysunek 7: Rys. 7. Kształtowanie sygnału analogowego za pośrednictwem przetwornika cyfrowo analogowego. [3,s. 57] Odwzorowanie sygnału cyfrowego w analogowy jest tym lepsze : im liczba bitów przetwornika jest większa, im krótszy jest czas miedzy kolejnymi próbkami sygnału cyfrowego t. Przetwornik cyfrowo analogowy jest traktowany jako zewnętrzne urządzenie wyjściowe, do którego wpisywane są dane. W zależności od rozdzielczości przetwornika (ilości bitów) przetwornik może zajmować jeden albo dwa adresy w przestrzeni adresowej. Do mikrokontrolera z rodziny 51 najłatwiej dołączyć przetwornik C/A 8 bitowy. Prosty przykład rozwiązania układowego jest przedstawiony na rys. 8. Zastosowano tutaj przetwornik C/A typu DAC08, który nie zawiera w sobie rejestru pamięciowego, źródła napięcia odniesienia, wzmacniacza wyjściowego. Z tego względu należy wszystkie te elementy dołączyć do przetwornika. Najlepszym rozwiązaniem jest zastosowanie przetwornika C/A przystosowanego do współpracy z układami mikroprocesorowymi, który zawiera w sobie wszystkie wymienione wyżej elementy. Rys. 8. bitowy przetwornik C/A zrealizowany na układzie DAC08 [6] 22
Programowe kształtowania sygnału analogowego piłokształtnego na wyjściu przetwornika C/A może być zrealizowane przez wpisywanie wartości cyfrowych do bufora przetwornika. Przetwornik dołączony jest w przestrzeni adresowej pamięci zewnętrznej XRAM, a więc wysłanie danej z mikrokontrolera do przetwornika rozkazem MOVX powoduje jednocześnie wystawienie sygnału WR powodującego wpis danych do bufora wejściowego przetwornika. Najwyższą częstotliwość generowanego sygnału można uzyskać, jeżeli mikrokontroler będzie wykonywał jak najmniej rozkazów pomiędzy kolejnymi sterowaniami przetwornika C/A lub ograniczy się liczbę poziomów kształtujących sygnał analogowy. Zakładając 8 bitowy przetwornik (256 poziomów), największą częstotliwość sygnału można uzyskać dla sygnału o następującym kształcie: U(t) U max FD D FE FF 1 2 3 0 t t T Rys. 9. sygnał piłokształtny uzyskany na wyjściu przetwornika C/A Program kształtujący sygnał analogowy (przykładowy adres przetwornika C/A 9000H): CLR A ;zerowanie akumulatora MOV DPTR,#9000H ;adres przetwornika C/A CYKL: MOVX @DPTR,A ;wysłanie danej do bufora przetwornika INC A SJMP CYKL Mikrokontroler wykonuje pętlę w czasie 5 cykli maszynowych: rozkaz MOVX @DPTR,A 2 cykle, INC A 1cykl, SJMP CYKL 2 cykle. Przy 8 bitowej rozdzielczości przetwornika C/A okres T generowanego sygnału wynosi: T=256*5cykli=1280 cykli maszynowych dla f XTAL =12 MHz: 1 f max = = 781,25Hz T 4.3.2. Pytania sprawdzające Odpowiadając na pytania, sprawdzisz, czy jesteś przygotowany do wykonania ćwiczeń. 1. Jakie jest zadanie przetwornika C/A? 2. W jaki sposób liczba bitów przetwornika wpływa na jakość sygnału analogowego? 3. Jakie parametry przetwornika C/A wpływają na odwzorowanie sygnału analogowego? 4. W jaki sposób można wygenerować przebieg o zadanym kształcie na wyjściu przetwornika C/A dołączonego do mikrokontrolera? 23
4.3.3. Ćwiczenia Ćwiczenie 1 Napisz i uruchom program generujący na wyjściu przetwornika C/A przebieg piłokształtny jak na rysunku: U(t) U max FD FE FF 1 2 3 0 t t T Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) przygotować algorytm programu w postaci schematu blokowego, 2) napisać program w języku asemblera, 3) skompilować program, poprawić ewentualne błędy, 4) uruchomić program używając zestawu uruchomieniowego, 5) sprawdzić poprawność działania programu używając oscyloskopu, 6) zaprezentować wykonane ćwiczenie, 7) dokonać oceny poprawności wykonanego ćwiczenia. Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z oprogramowaniem, oscyloskop, literatura z rozdziału 6. Ćwiczenie 2 Napisz i uruchom program generujący na wyjściu przetwornika C/A przebieg trapezoidalny jak na rysunku: 24
U(t) U max FD FE FF ¾ U max C0 1 2 3 0 t t T Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) przygotować algorytm programu w postaci schematu blokowego, 2) napisać program w języku asemblera, 3) skompilować program, poprawić ewentualne błędy, 4) uruchomić program używając zestawu uruchomieniowego, 5) sprawdzić poprawność działania programu używając oscyloskopu, 6) zaprezentować wykonane ćwiczenie, 7) dokonać oceny poprawności wykonanego ćwiczenia. Wyposażenie stanowiska pracy: komputer PC, oprogramowanie umożliwiające kompilowanie i debbugowanie programu, zestaw uruchomieniowy z oprogramowaniem, oscyloskop, literatura z rozdziału 6. Ćwiczenie 3 Wyszukaj w Internecie noty katalogowe przetworników C/A różnych producentów. Porównaj ich parametry, przeanalizuj możliwość dołączenia do mikrokontrolera 8 bitowego. Sposób wykonania ćwiczenia Aby wykonać ćwiczenie powinieneś: 1) wyszukać w Internecie strony producentów przetworników C/A, 2) na stronie producentów przetworników C/A odszukać przetworniki współpracujące z mikrokontrolerami 8 bitowymi, 3) ściągnąć dokumentację wybranych przetworników, 4) porównać ich parametry, 5) zaprezentować wykonanie ćwiczenia. Wyposażenie stanowiska pracy: komputer PC z dostępem do Internetu, oprogramowanie umożliwiające przeglądanie dokumentacji w postaci PDF, literatura z rozdziału 6. 25
4.3.4. Sprawdzian postępów Czy potrafisz: Tak Nie 1) wskazać sposoby dołączenia przetwornika C/A do mikrokontrolera 8 bitowego? 2) podać podstawowe parametry przetwornika C/A? 3) porównać przetworniki ze względu na parametry? 4) napisać program generowania przebiegów analogowych o zadanym kształcie? 5) obliczyć okres i częstotliwość wygenerowanego przebiegu analogowego? 26
5. SPRAWDZIAN OSIĄGNIĘĆ INSTRUKCJA DLA UCZNIA 1. Przeczytaj uważnie instrukcję. 2. Podpisz imieniem i nazwiskiem kartę odpowiedzi. 3. Zapoznaj się z zestawem zadań testowych. 4. Test zawiera 20 zadań o różnym stopniu trudności. Zadania: 1 14 są to zadania wielokrotnego wyboru i tylko jedna odpowiedź jest prawidłowa, w zadaniach: 15 20 należy udzielić krótkiej odpowiedzi, 5. Udzielaj odpowiedzi tylko na załączonej karcie odpowiedzi: w zadaniach wielokrotnego wyboru zaznacz prawidłową odpowiedź X (w przypadku pomyłki należy błędną odpowiedź zaznaczyć kółkiem, a następnie ponownie zakreślić odpowiedź prawidłową), w zadaniach z krótką odpowiedzią wpisz odpowiedź w wyznaczone pole, 6. Test składa się z dwóch części o różnym stopniu trudności: I część poziom podstawowy, II część poziom ponadpodstawowy. 7. Pracuj samodzielnie, bo tylko wtedy będziesz miał satysfakcję z wykonanego zadania. 8. Kiedy udzielenie odpowiedzi będzie Ci sprawiało trudność, wtedy odłóż jego rozwiązanie na później i wróć do niego, gdy zostanie Ci czas wolny. Trudności mogą przysporzyć Ci zadania: 16 20, gdyż są one na poziomie trudniejszym niż pozostałe. 9. Na rozwiązanie testu masz 90 min. Powodzenia 27
ZESTAW ZADAŃ TESTOWYCH 1. Który z rozkazów spowoduje, że diody dołączone do portu P1 zapalą się tak, jak na rysunku? a) MOV P1,#55, b) MOV P1,#85, c) MOVX P1,A, d) SETB P1. 2. Po wczytaniu stanu przełączników w akumulatorze jest liczba ABH, ile przełączników było ustawionych? a) 2, b) 3, c) 4, d) 5. 3. Poniższy program spowoduje, że na diodach dołączonych do portu P1 będą pojawiały się kolejne liczby w kodzie: a) krążąca jedynka w prawo, b) krążąca jedynka w lewo, c) krążące zero w prawo, d) krążące zero lewo. MOV A,#80H CPL A CYKL: RR A MOV P1,A LCALL CZAS LJMP CYKL 4. Rysunek przedstawia wyświetlacz 8 segmentowy dołączony do portu P1 mikrokontrolera. Jaką liczbę należy wysłać na port, aby wyświetlić cyfrę 3? a) 1FH, b) 17H, c) 4FH, d) 47H. 28
5. Po adresem A000H dołączona jest klawiatura (osiem klawiszy aktywnych zerem), który z fragmentów programu spowoduje skok pod adres DWA pod warunkiem, że naciśnięty był klawisz drugi: MOV DPTR,#0A000H MOVX A,@DPTR a) CJNE A,#2,SKOK LJMP DWA, b) CJNE A,#0FBH,SKOK LJMP DWA, c) CJNE A,#0FBH,DWA, d) CJNE A,#02H,DWA. 6. W wyniku wykonania rozkazu MOV A,P1 zawartość akumulatora jest równa BBH, który klawisz był naciśnięty? a) S4, b) S7, c) S10, d) S13. 7. Litera A pojawi się na wskazanej pozycji wyświetlacza LCD pod warunkiem, że jej kod został wpisany: A a) do pamięci CGRAM pod adres 03H, b) do pamięci DDRAM pod adres 03H, c) do pamięci CGRAM pod adres 43H, d) do pamięci DDRAM pod adres 43H. 8. Wyświetlacz LCD został dołączony do mikrokontrolera w przestrzeni adresowej pod adresem 5500H. Linia RS została doprowadzona z wyświetlacza LCD jako A0, a R/W jako A1 z magistrali adresowej. Odwołanie się do adresu 5501H oznacza: a) zapis słowa sterującego, b) zapis danej, c) odczyt słowa statusowego, d) odczyt danej. 9. Jaką wartość wpisać do DPTR i jakim rozkazem uzupełnić program testowania zajętości wyświetlacza dołączonego do mikrokontrolera pod adresem 50H (RS=A0, R/W=A1): MOV DPTR,#... CZEKAJ: a) 50H, MOVX A,@DPTR, b) 50H, SETB ACC.7, c) 52H, MOVX A,@DPTR, d) 52H, SETB ACC.7. JB ACC.7,CZEKAJ 29
10. W opisie wyświetlacza LCD jest słowo sterujące: 0 0 0 0 1 D C B Display ON/OFF control: 1 ON, 0 OFF Wysłanie jakiego słowa spowoduje załączenie wyświetlacza z migającym kursorem: a) 0FH, b) 0EH, c) 0BH, d) 0AH. 11. Jaki znak i na którym wyświetlaczu zostanie wyświetlony po wykonaniu rozkazu MOV P1,#43H? a) cyfra 3 na W4, b) cyfra 3 na W3, c) cyfra 4 na W4, d) cyfra 4 na W3. 12. Odwzorowanie danej cyfrowej w postaci sygnału analogowego będzie tym lepsze im: a) liczba bitów przetwornika większa i częstotliwość przetwarzania większa, b) liczba bitów przetwornika mniejsza i częstotliwość przetwarzania większa, c) liczba bitów przetwornika większa i częstotliwość przetwarzania mniejsza, d) liczba bitów przetwornika mniejsza i częstotliwość przetwarzania mniejsza. 13. Częstotliwość przebiegu analogowego generowanego na wyjściu 8 bitowego przetwornika C/A w wyniku wykonania programu realizującego wysyłanie danej cyfrowej w ciągu 10 cykli (f XTAL =12MHz) wynosi: a) 390,625 Hz. b) 4687,5 Hz. c) 390,625 khz. d) 4687,5 khz. 30
14. Jaki przebieg uzyskamy na wyjściu 8 bitowego przetwornika C/A dołączonego do mikrokontrolera pod adresem A000H w wyniku wykonania następującego programu: MOV DPTR,#0A000H MOV R1,#64 CYKL1: CYKL2: MOV A,R1 MOVX @DPTR,A ADD A,R1 JNC CYKL2 SJMP CYKL1 a) b) c) d) U U U U t t t t 15. Do portu P5 dołączone są przełączniki binarne, a pod adresem 9000h dołączone są diody. Napisz program zapalający diody odpowiadające przełącznikom w stanie 1 logicznej, a gaszący diody odpowiadające przełącznikom w stanie 0 logicznego. 16. Jakie słowa należy wysłać do wyświetlacza LCD w celu zdefiniowania następującego znaku? 17. Uzupełnij program wysyłania tablicy zdefiniowanej TABLICA: DB Tekst, zakładając, że wyświetlacz został już zainicjowany, podprogram testowania zajętości wyświetlacza znajduje się pod adresem BUSY, adres wyświetlacza 8800H (RS=A0, R/W=A1): MOV R7,#5 ;licznik ilości znaków do wysłania MOV DPTR,#TABLICA ;wpis adresu tablicy z tekstem do wyświetlenia MOV A,#0 ;akumulator zawiera numer wysyłanego znaku z tablicy (offset) SEND: PUSH ACC ;zachowanie stanu akumulatora na stosie MOVC A,@A+DPTR ;pobranie znaku LCALL DISPL ;wywołanie podprogramu wysyłania znaku POP ACC ;przywrócenie offsetu INC A ;następny znak z tablicy 31
DJNZ R7,SEND DISPL: RET 18. W przestrzeni adresowej pamięci XRAM pod adresem B000H i B001H podłączone są klawisze jak na rysunku: klawisze S1 S9 dołączone pod adresem B000H mają być odczytane jako cyfry 0...7, a S1 i S2 pod adresem B001H jako 8 i 9. Napisz program który odczyta stan klawiatury i wyświetli na wyświetlaczu LCD numer naciśniętego klawisza. Wyświetlacz LCD znajduje się pod adresem C000H, jest właściwie zainicjowany, a pod adresem BUSY znajduje się podprogram testowania zajętości. 19. Napisz program generujący na wyjściu 8 bitowego przetwornika C/A (adres A000H) przebieg trapezoidalny jak na rysunku: U(t) U max FD FE FF U MAX 2 1 2 3 0 t t T 20. Jaka jest częstotliwość wygenerowanego w zadaniu 19 sygnału analogowego? 32
KARTA ODPOWIEDZI Imię i nazwisko.. Badanie układów zewnętrznych mikrokontrolera Zakreśl poprawną odpowiedź lub wpisz odpowiedź. Nr zadania Odpowiedź 1. a b c d 2. a b c d 3. a b c d 4. a b c d 5. a b c d 6. a b c d 7. a b c d 8. a b c d 9. a b c d 10. a b c d 11. a b c d 12. a b c d 13. a b c d 14. a b c d 15. Punkty 16. 17. 33
18. 19. 20. 34
6. LITERATURA 1. Dyrcz K., Kowalski C. T., Zarczyński Z.: Podstawy techniki mikroprocesorowej, Oficyna Wydawnicza Politechniki Wrocławskiej, 1999. 2. Janiczek J., Stępień A.: Mikrokontroler 80(C)51/52, Wydawnictwo Elektronicznych Zakładów Naukowych, Wrocław 1995. 3. Janiczek J., Stępień A.: Laboratorium systemów mikroprocesorowych cz. I i II, Wydawnictwo Elektronicznych Zakładów Naukowych, Wrocław 1995. 4. Rydzewski A.: Mikrokomputery jednoukładowe rodziny MCS 51,Wydawnictwa Naukowo Techniczne, Warszawa 1992. 5. Starecki T.: Mikrokontrolery 8051 w praktyce, Wydawnictwo BTC, Warszawa 2002 6. http://www.adatronik.com.pl 35