Makieta dydaktyczna IME-LabTM



Podobne dokumenty
LABORATORIUM OPROGRAMOWANIA MIKROPROCESOROWEJ APARATURY POMIAROWEJ

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Programowanie Mikrokontrolerów

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

P 6.7 P 6.6 P 6.5 P 6.4 MAX 232. RxD TxD

Technika Mikroprocesorowa

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

Zespół Szkół Technicznych. Badanie wyświetlaczy LCD

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

Wizualizacja stanu czujników robota mobilnego. Sprawozdanie z wykonania projektu.

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

LEKCJA TEMAT: Zasada działania komputera.

Opis procedur asemblera AVR

Uniwersalny zestaw uruchomieniowy ZL4PIC

Programowanie w językach asemblera i C

Wyświetlacze graficzne : 162x64 z kontrolerem S1D x60 z kontrolerem S1D15710

SML3 październik 2008

dokument DOK wersja 1.0

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Stanowisko laboratoryjne dla mikrokontrolera ATXmega32A4 firmy Atmel

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Zagadnienia zaliczeniowe z przedmiotu Układy i systemy mikroprocesorowe elektronika i telekomunikacja, stacjonarne zawodowe

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Opis układów wykorzystanych w aplikacji

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

1 Moduł Neuronu Cyfrowego

Parametryzacja przetworników analogowocyfrowych

Badanie układów średniej skali integracji - ćwiczenie Cel ćwiczenia. 2. Wykaz przyrządów i elementów: 3. Przedmiot badań

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

OPROGRAMOWANIE APARATURY POMIAROWEJ OPROGRAMOWANIE APARATURY P. Programowa obsługa klawiatury PC AT oraz odbiór informacji z pilota TV w kodzie RC-5

Licznik rewersyjny MD100 rev. 2.48

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Programowalne Układy Cyfrowe Laboratorium

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Kod produktu: MP01105

ZL8AVR. Płyta bazowa dla modułów dipavr

instrukcja użytkownika terminala ARGOX PA-20 SYSTEMY AUTOMATYCZNEJ IDENTYFIKACJI

ZL9ARM płytka bazowa dla modułów diparm z mikrokontrolerami LPC213x/214x

Laboratorium Komputerowe Systemy Pomiarowe

ZL9AVR. Płyta bazowa dla modułów ZL7AVR (ATmega128) i ZL1ETH (RTL8019)

Alfanumeryczny wyświetlacz LCD

Spis treści. 1 Moduł RFID (APA) 3

PRUS. projekt dokumentacja końcowa

ZL27ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

Dokumentacja sterownika mikroprocesorowego "MIKSTER MCC 026"

Programowanie mikrokontrolerów. 8 listopada 2007

GND(VSS) i VCC - masa i zasilanie. V0 - regulacja kontrastu

2.1 Przesył danych między procesorem a tabelą zmiennych

1 Moduł Neuronu Cyfrowego SM

SML3 październik

SML3 październik

Interfejs RS485-TTL KOD: INTR. v.1.0. Zastępuje wydanie: 2 z dnia

STEROWNIK LAMP LED MS-1 Konwerter sygnału 0-10V. Agropian System

ZL2AVR. Zestaw uruchomieniowy z mikrokontrolerem ATmega8

Sterownik Spid Pant 8 i Ant 8. Podręcznik użytkowania

Kod produktu: MP-BTM222-5V

TERMINAL DO PROGRAMOWANIA PRZETWORNIKÓW SERII LMPT I LSPT MTH-21 INSTRUKCJA OBSŁUGI I EKSPLOATACJI. Wrocław, lipiec 1999 r.

Politechnika Wrocławska

Mikroprocesor Operacje wejścia / wyjścia

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

Dodatek D. Układ współpracy z klawiaturą i wyświetlaczem 8279

ĆWICZENIE 7. Wprowadzenie do funkcji specjalnych sterownika LOGO!

ZL25ARM. Płyta bazowa dla modułów diparm z mikrokontrolerami STR912. [rdzeń ARM966E-S]

Organizacja typowego mikroprocesora

PC 3 PC^ TIMER IN RESET PC5 TIMER OUT. c 3. L 5 c.* Cl* 10/H CE RO WR ALE ADO AD1 AD2 AD3 AD4 A05 A06 LTJ CO H 17 AD7 U C-"

Wstęp Architektura... 13

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Instrukcja do ćwiczenia : Matryca komutacyjna

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

2. Architektura mikrokontrolerów PIC16F8x... 13

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA

MIKROPROCESORY architektura i programowanie

UW-DAL-MAN v2 Dotyczy urządzeń z wersją firmware UW-DAL v5 lub nowszą.

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

SML3 październik

Dokumentacja Licznika PLI-2

INSTRUKCJA OBSŁUGI. Przekaźnik czasowy ETM ELEKTROTECH Dzierżoniów. 1. Zastosowanie

TM PROGRAM TERMINALA RS232 DLA MULTIPLEKSERA 8XRS232 / ETHERNET 10BASE-T

ZL29ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

2.1 Porównanie procesorów

3. Sieć PLAN. 3.1 Adresowanie płyt głównych regulatora pco

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU

Ćwiczenie 7 Matryca RGB

MultiTool instrukcja użytkownika 2010 SFAR

Kod produktu: MP01611

Wyjście do drukarki Centronix

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1.

Zwory na płycie z łączem szeregowym ustawienie zworek dla programowania.

Program EDYTOR-AS-OUX

Szkolenia specjalistyczne

Moduł licznika położenia LP 2.

PROGRAMOWALNE STEROWNIKI LOGICZNE

Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów AVR

Rozdział ten zawiera informacje na temat zarządzania Modułem Modbus TCP oraz jego konfiguracji.

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Instrukcja użytkownika ARSoft-WZ1

Transkrypt:

Makieta dydaktyczna IME-LabTM Autor: Mirosław Kozioł Zielona Góra, 2014

Instytut Metrologii Elektrycznej, Uniwersystet Zielonogórski Niniejsze opracowanie przeznaczone jest do użytku osobistego i niekomercyjnego. W przypadku studentów Wydziału Elektrotechniki, Informatyki i Telekomunikacji Uniwersytetu Zielonogórskiego dopuszcza się wykonanie wydruku jednej kopi materiałów w celach dydaktycznych. Kopiowanie, wprowadzanie zmian, przesyłanie i wykorzystywanie niniejszej publikacji w całości lub fragmentach przez inne osoby bez pisemnej zgody Autora jest zabronione.

Spis treści 1. Ogólna charakterystyka makiety... 5 2. Architektura systemu mikroprocesorowego... 5 2.1. Modyfikacja systemu mikroprocesorowego do pracy z programem monitora... 8 2.2. Mapowanie układów peryferyjnych w obszarze adresowania zewnętrznej pamięci danych.. 11 2.3. Adresy układów peryferyjnych... 13 3. Działanie makiety pod kontrolą programu monitora... 14 3.1. D (ang. Download) ładowanie programu... 14 3.2. J (ang. Jump) skocz pod określony adres w pamięci... 15 4. Układy peryferyjne... 16 4.1. Diody LED... 16 4.2. 7-segmentowe wyświetlacze LED... 16 4.3. Znakowy wyświetlacz LCD... 19 4.4. Przetwornik analogowo-cyfrowy... 22 4.4.1. Kanały 1-4... 25 4.4.2. Kanał 5 zadajnik napięcia... 26 4.4.3. Kanał 6 czujniki temperatury LM35... 26 4.4.4. Kanał 7 termistor... 27 4.5. Przetwornik cyfrowo-analogowy... 28 4.6. Programowany układ wejść-wyjść 8255... 30 4.7. Programowany układ czasowy 8254... 32 4.8. Układ asynchronicznej transmisji szeregowej TL16C550... 32 5. Literatura... 34 3

4

1. Ogólna charakterystyka makiety Makieta dydaktyczna IME-LabTM została zaprojektowana jako dydaktyczny system mikroprocesorowy pracujący pod kontrolą programu monitora Ułatwia to testowanie kolejnych wersji programów pisanych przez studentów podczas zajęć laboratoryjnych. Dodatkowo układy peryferyjne dołączone do magistrali systemowej zostały mapowane w obszarze adresowania zewnętrznej pamięci danych. Dzięki temu dostęp do nich jest realizowany na takiej samej zasadzie, jak dostęp do zewnętrznej pamięci danych. Głównym elementem systemu mikroprocesorowego znajdującego się na makiecie jest mikrokontroler AT89S52 (układ U4) firmy Atmel. Jest to mikrokontroler z rodziny MCS-51 opracowanej przez firmę Intel. Do układu U4 została dodatkowo dołączona pamięć RAM o rozmiarze 64kB (układy U7 i U8) oraz pamięć ROM (układ U5) również o rozmiarze 64kB. W ramach systemu mikroprocesorowego występuje szereg układów peryferyjnych. Są to: 8-kanałowy, 8-bitowy przetwornik analogowo-cyfrowy ADC0848 firmy National Semiconductor (obecnie Texas Instruments); 1-kanałowy, 8-bitowy przetwornik cyfrowo-analogowy AD5330 firmy Analog Devices; programowany układ wejść-wyjść 8255; programowany układ czasowy 8254; układ asynchronicznej transmisji szeregowej TL16C550; znakowy wyświetlacz LCD o dwóch wierszach po 16 znaków w każdym wierszu, ze sterownikiem HD44780; 4-cyfrowy, multipleksowany wyświetlacz LED; rejestr zatrzaskowy 74AC273 z dołączonymi diodami LED. W przypadku przetwornika analogowo-cyfrowego, jego 4 kanały zostały wyprowadzone na złączach BNC (J8 do J11). Do pozostałych dołączono: czujnik temperatury LM35 z wyjściem napięciowym, układ z termistorem NTC, potencjometr. Schemat blokowy całej makiety przedstawiono na rysunku 1. Schemat ideowy zamieszczono na końcu niniejszego opracowania. 2. Architektura systemu mikroprocesorowego Przy projektowaniu makiety założono, że wszystkie układy peryferyjne znajdujące się na niej będą dołączone do magistrali systemowej systemu mikroprocesorowego i będą mapowane w obszarze adresowania zewnętrznej pamięci danych mikrokontrolera. Dodatkowo, ze względów praktycznych, program użytkownika powinien być ładowany do zewnętrznej pamięci danych systemu mikroprocesorowego, która następnie powinna być traktowana przez mikrokontroler jako pamięć programu. Poczynione założenia wymusiły zmianę domyślnej zmodyfikowanej architektury Harvardziej, w jakiej pracują mikrokontrolery rodziny MCS-51, na architekturę von Neumana, oraz zastosowanie tzw. programu monitora nadzorującego proces ładowania programu użytkownika oraz jego uruchamiania. Takie rozwiązanie jest bardziej wygodne w stosowaniu niż ciągłe przeprogramowywanie dołączonej zewnętrznie do mikrokontrolera pamięci EROM. 5

CS7 WR RD INT-AC RAM 32kB CS5 WR RD 8255 8254 Rejestr LCD HD44780 uc MCS-51 P0 ALE P2 Konwerter UART- -USB Cztery 7-segmentowe moduły LED 8 diod LED Rejestr D0..D7 A0..A7 A8..A15 Dekoder adresowy Przetwornik C/A ROM 64kB CH1 CH2 CH3 CH4 CH5 CH6 CH7 Przetwornik A/C UART TL16C550 Adres Dane OE CS RAM 32kB Adres Dane Adres Dane LED_MUX0 LED_MUX1 E CS1 RS A0 R/W A1 D0..D7 LED_MUX0 LED_MUX1 P3.4 P3.5 TxD RxD WR RD PSEN Złącze USB B Rejestr CS2 CS3 D0..D7 A9..A15 CS1 CS3 CS5 CS7 OEROM OERAM CSRAM1 CSRAM2 CS2 CS4 CS6 CS8 CS8 J7 LM35 J8 J9 J10 J11 P2 Potencjometr Termistor Konwerter TTL- -RS-232 Dane Dane INT-AC INTRA INTRB INT-UART J2 INT0 INT1 A0 A1 A2 WR INT-UART WE OE CS WE OE CS A0 A1 A0 A1 WR RD CS PA PB PC P1 INTRB INTRA A0 A1 A0 A1 WR RD CS A0 A1 A2 P3 Rys. 1. Schemat blokowy makiety IME-LabTM 6

Zarówno zmiana architektury, jak również zastosowanie programu monitora wymagają zastosowania w systemie mikroprocesorowym dekodera adresowego. Zanim zostanie omówiona dokładniej jego budowa, przedstawiony zostanie sposób dołączania pamięci programu oraz zewnętrznej pamięci danych mikrokontrolera zgodny z domyślną architekturą mikrokontrolerów rodziny MCS-51. Na rysunku 2 przedstawiono schemat blokowy systemu mikroprocesorowego z zewnętrzną pamięcią programu (CODE) i zewnętrzną pamięcią danych (XDATA) zgodny z zaleceniami producenta mikrokontrolera. Podczas dostępu do zewnętrznej pamięci programu lub danych na porcie P2 mikrokontroler wystawia młodszy bajt adresu, gdyż linie tego portu pełnią rolę linii szyny adresowej. Z kolei młodszy bajt adresu wystawiany jest na porcie P0. Linie tego portu pełnią nie tylko rolę linii szyny adresowej, ale również rolę linii szyny danych (linie portu P0 realizują tzw. multipleksowaną szynę adresową i danych). Dlatego wystawiony na liniach portu P0 młodszy bajt adresu musi być zapamiętany za pomocą dodatkowego układu. W tym celu do linii portu P0 mikrokontrolera dołącza się rejestr zatrzaskowy sterowany sygnałem z wyjścia ALE (ang. Address Latch Enable) mikrokontrolera. Sygnał na tym wyjściu przechodzi w stan aktywny (wysoki) wtedy, gdy jednostka centralna mikrokontrolera, realizując dostęp do zewnętrznej pamięci danych lub pamięci programu, wystawia na liniach portu P0 młodszy bajt adresu. Zatem 16-bitową szynę adresową tworzą linie μc 0000H ROM 0000H RAM P2 A8..A15 ALE Rejestr A0..A7 Adres Adres EA P0 D0..D7 Dane Dane WE PSEN OE OE WR CS CS RD FFFFH FFFFH Rys. 2. Schemat blokowy dołączania zewnętrznej pamięci danych i pamięci programu do mikrokontrolerów rodziny MCS-51 portu P2 oraz wyjścia rejestru zatrzaskowego. Tych 16 linii dołączanych jest do wejść adresowych pamięci danych (RAM) i pamięci programu (ROM). W zależności od rodzaju operacji do wykonania (odczyt zewnętrznej pamięci danych lub pamięci programu albo zapis zewnętrznej pamięci danych) linie portu P0, w chwili, gdy pełnia rolę linii szyny danych, stają się odpowiednio wejściami albo wyjściami. Aktywacja danego układu do wykonania określonej operacji realizowana jest przez ustawienie stanu niskiego na wyjściu PSEN (odczyt pamięci programu), RD (odczyt pamięci danych) lub WR (zapis pamięci danych). Ustawienie jednej z tych trzech linii w stan niski realizuje automatycznie jednostka centralna w zależności od wykonywanego rozkazu. Przy takiej konfiguracji zewnętrzna pamięć danych XDATA i pamięci programu CODE posiadają osobne przestrzenie adresowe. Osobną przestrzeń adresową ma również wewnętrzne pamięć danych DATA. Wszystkie pamięci dołączone są do jednostki centralnej mikrokontrolera wspólną magistralą systemową. Obydwie przedstawione cechy są charakterystyczne dla zmodyfikowanej 7

architektury Harvardzkiej. Taka architektura systemu powoduje, że w pamięci RAM mogą być przechowywane tylko dane, a w pamięci ROM tylko program. 2.1. Modyfikacja systemu mikroprocesorowego do pracy z programem monitora Na rysunku 3 przedstawiono schemat blokowy systemu mikroprocesorowego wykorzystującego program monitora. Program monitora jest na stałe wgrywany do pamięci ROM systemu mikroprocesorowego i pozwala na przyjmowanie i wykonywanie poleceń wprowadzanych przez użytkownika. Polecenia te są przesyłane do programu monitora z komputera PC za pośrednictwem portu szeregowego. Program monitora rezyduje w pamięci ROM od adresu 0000H, dlatego po restarcie systemu mikrokontroler wykonuje jego kod. Program monitora m.in. inicjuje port szeregowy mikrokontrolera do komunikacji z komputerem PC i oczekuje na polecenia umożliwiające: załadowanie programu użytkownika, wyświetlenie zawartości pamięci, wykonanie programu użytkownika od wskazanego adresu, wykonanie programu w trybie pracy krokowej, wstawienie pułapek lub wyświetlenie oraz zmianę zawartości rejestrów mikroprocesora. μc P2 A8..A15 0000H 1FFFH 2000H ROM Monitor 0000H RAM Pamięć danych EA ALE P0 PSEN WR Rejestr A0..A7 D0..D7 Dane Adres OE CS Dane Adres WE OE CS Pamięć danych i pamięć programu RD FFFFH FFFFH Dekoder adresowy OEROM OERAM CSRAM Obszar niewykorzystany Rys. 3. Schemat blokowy systemu mikroprocesorowego opartego na mikrokontrolerze rodziny MCS-51 i pracującego pod kontrolą programu monitora Podczas działania programu monitora program użytkownika wpisywany jest zawsze do zewnętrznej pamięci danych XDATA systemu mikroprocesorowego. Aby program ten mógł być następnie wykonany jednostka centralna musi traktować tą pamięć nie jako pamięć danych, ale jako pamięć programu. Do tego celu wykorzystywany jest dekoder adresowy. Z punktu widzenia mikrokontrolera odczyt pamięci programu odbywa się przez podanie na szynę adresową zawartości licznika programu jednostki centralnej oraz wymuszenie przez jednostkę centralną mikrokontrolera stanu niskiego na wyjściu. PSEN Załóżmy, że program monitora rezyduje w pamięci ROM w zakresie adresów 0000h..1FFFh, natomiast program użytkownika wpisywany jest do pamięci RAM od adresu 2000h. Dekoder adresowy powinien być tak zaprojektowany, że jeśli jednostka centralna odczytuje kody rozkazów w zakresie adresów występowania programu monitora, to jako pamięć programu CODE aktywowana jest pamięć ROM. Natomiast, jeśli kody rozkazów odczytywane są z adresów 8

powyżej 1FFFh, to do pracy aktywowana jest pamięć RAM, gdzie znajduje się program użytkownika. Zatem: jeśli PSEN = 0 oraz adres = 0000h..1FFFh, to do odczytu aktywowana jest pamięć ROM, czyli jej wejścia CS = 0 oraz OE = 0, jeśli PSEN = 0 oraz adres = 2000h..FFFFh, to do odczytu aktywowana jest pamięć RAM, czyli jej wejścia CS = 0 oraz OE = 0. W celu spełnienia powyższych założeń do dekodera adresowego jako sygnały wejściowe należy doprowadzić linię PSEN oraz linie szyny adresowej. W praktyce okazuje się, że do dekodera nie muszą być doprowadzone wszystkie linie szyny adresowej. Jeśli bowiem zapiszemy binarnie adresy, dla których ma być aktywowana pamięć ROM i adresy, dla których ma być aktywowana pamięć RAM, to można zauważyć, że pierwsza grupa adresów ma zawsze na trzech najstarszych bitach zera, a druga co najmniej jedną jedynkę. Zatem dla jednoznacznego rozpoznania, z której grupy adres pojawia się na szynie adresowej, wystarczy do dekodera adresowego doprowadzić linie A15, A13 i A12. Dekoder adresowy powinien mieć również trzy linie wyjściowe, jak przedstawiono to na rysunku 3. Jedna do aktywacji pamięci ROM przy spełnieniu pierwszego warunku na liniach PSEN, A15, A14 i A13, drugą do aktywacji pamięci RAM przy spełnieniu drugiego warunku na tych liniach i trzecią związaną z wyborem układu pamięci RAM. Biorąc pod uwagę poczynione założenia, dekoder adresowy powinien realizować następujące równania logiczne: wystawiać stan niski na wyjściu OEROM, jeśli PSEN = 0 AND A15 = 0 AND A14 = 0 AND A13 = 0, wystawiać stan niski na wyjściu CSRAM, jeśli PSEN = 0 AND (A15 = 1 OR A14 = 1 OR A13 = 1). wystawiać stan niski na wyjściu OERAM, jeśli PSEN = 0 AND (A15 = 1 OR A14 = 1 OR A13 = 1). Program użytkownika przeważnie nie zajmuje całej zewnętrznej pamięci RAM, dlatego w systemie powinna istnieć również możliwość odnoszenia się do tej pamięci, jak do pamięci danych XDATA. Mikrokontroler chcąc realizować odczyt zewnętrznej pamięci danych wystawia stan niski na linii RD. Przy realizacji zapisu zewnętrznej pamięci danych mikrokontroler wystawia stan niski na linii. WR Oczywiście obydwie operacje realizowane są przy jednoczesnym wystawieniu adresu komórki pamięci na liniach szyny adresowej. Również w takiej sytuacji dekoder adresowy powinien poprawnie aktywować do pracy układ pamięci RAM. Dekoder adresowy powinien zatem realizować dodatkowo następujące zadania: wystawiać stan niski na wyjściu CSRAM, jeśli RD = 0 OR WR = 0, wystawiać stan niski na wyjściu OERAM, jeśli RD = 0. Pierwszy z powyższych warunków zapewnia aktywację do pracy układu pamięci RAM, jeśli mikrokontroler realizuje operację odczytu lub zapisu zewnętrznej pamięci danych (sam sygnał zapewniający pojawienie się stanu aktywnego na wejściu WE pamięć RAM może być podłączony bezpośrednio z mikrokontrolera do układu pamięci). Drugi warunek zapewnia pojawienie się stanu aktywnego na wejściu OE aktywującym pamięć RAM do odczytu. Łącząc równia logiczne, jakie musi realizować dekoder adresowy przy aktywacji do pracy układu pamięci RAM jako zewnętrznej pamięci danych XDATA i jako pamięci programu CODE, otrzymuje się następujące równania logiczne: wystaw stan niski na wyjściu CSRAM, jeśli (PSEN = 0 AND (A15 = 1 OR A14 = 1 OR A13 = 1)) OR RD = 0 OR WR = 0, 9

wystaw stan niski na wyjściu OERAM, jeśli (PSEN = 0 AND (A15 = 1 OR A14 = 1 OR A13 = 1)) OR RD = 0. Ze względu na to, że w praktyce układy statycznych pamięci RAM o rozmiarze 64kB i organizacji 8-bitowej są trudno dostępne, pamięć RAM systemu mikroprocesorowego znajdującego się na makiecie IME-LabTM składa się fizycznie z dwóch układów, co przedstawiono na rysunku 4. Jeden z nich obsługuje pierwszą połowę adresów, tj. adresy w zakresie 0000h..7FFFh, a drugi druga połowę, tj. adresy w zakresie 8000h..FFFFh. Stąd konieczna stała się kolejna modyfikacja dekodera adresowego, aby wybierał do pracy odpowiedni układ w zależności od adresu na szynie adresowej. Jak łatwo zauważyć, do wyboru odpowiedniego układu wystarczy znajomość stanu najstarszej linii szyny adresowej, tj. linii A15, gdyż adresy z pierwszej połowy mają zawsze na najstarszym bicie wartość 0, natomiast adresy z drugiej połowy na najstarszym bicie mają wartość 1. μc P2 A8..A15 0000H 1FFFH 2000H ROM Monitor 0000H RAM1 Pamięć danych 8000H RAM2 EA ALE P0 PSEN WR Rejestr A0..A7 D0..D7 Adres Dane OE CS Adres Dane WE OE CS Pamięć danych i pamięć programu Dane Adres WE OE CS Pamięć danych i pamięć programu RD FFFFH 7FFFH FFFFH Dekoder adresowy OEROM OERAM CSRAM1 CSRAM2 Ostatecznie, z punktu widzenia odpowiedniej aktywacji układów pamięci ROM i RAM, dekoder adresowy realizuje następujące równania logiczne: wystawia stan niski na wyjściu OEROM, jeśli PSEN = 0 AND A15 = 0 AND A14 = 0 AND A13 = 0, wystawia stan niski na wyjściu CSRAM1, jeśli A15 = 0 AND ((PSEN = 0 AND (A14 = 1 OR A13 = 1)) OR RD = 0 OR WR = 0), wystawia stan niski na wyjściu CSRAM2, jeśli A15 = 1 AND ((PSEN = 0 AND (A14 = 1 OR A13 = 1)) OR RD = 0 OR WR = 0), wystawiać stan niski na wyjściu OERAM, jeśli (PSEN = 0 AND (A15 = 1 OR A14 = 1 OR A13 = 1)) OR RD = 0. Powodują one, że mapa pamięci, jeśli chodzi o zewnętrzną pamięć danych (XDATA) i pamięć programu (CODE) mikrokontrolera, przedstawia się jak na rysunku 5. Pisząc program, który odnosi się do zewnętrznej pamięci danych należy pamiętać, że w zakresie adresów 2000h..FFFFh zewnętrzna pamięć danych XDATA i pamięć programu CODE realizowane są fizycznie na tym samym układzie pamięci RAM. Zatem, jeśli program użytkownika będzie realizował operacje zapisu zewnętrznej 10 Obszar niewykorzystany Rys. 4. Schemat blokowy systemu mikroprocesorowego opartego na mikrokontrolerze rodziny MCS-51 z dwoma układami pamięci RAM i pracującego pod kontrolą programu monitora

0000H CODE Monitor 0000H XDATA 1FFFH 2000H (realizowane przez układ ROM) Program użytkownika (realizowane przez układy RAM1 i RAM2) Pamięć danych (realizowane przez układy RAM1 i RAM2) UWAGA: Z punktu widzenia programu użytkownika, w zakresie adresów 2000h..FFFFh pamięć programu (CODE) i zewnętrzna pamięć danych (XDATA) realizowane są przez ten sam układ. FFFFH FFFFH Rys. 5. Mapa zewnętrznej pamięci danych i pamięci programu systemu mikroprocesorowego opartego na mikrokontrolerze rodziny MCS-51 pamięci danych XDATA mikrokontrolera w zakresie adresów, pod którymi sam rezyduje, to doprowadzi to do modyfikacji jego kodu, co z kolei może prowadzić do jego działania w sposób niezgodny z oczekiwaniami. 2.2. Mapowanie układów peryferyjnych w obszarze adresowania zewnętrznej pamięci danych Spełnienie założenia odnośnie mapowania w obszarze adresowania zewnętrznej pamięci danych XDATA zastosowanego mikrokontrolera wszystkich układów peryferyjnych znajdujących się na makiecie i dołączonych do magistrali systemowej systemu mikroprocesorowego wymagało dalszej modyfikacji dekodera adresowego. Modyfikacja polegała na zmniejszeniu zakresu adresów, przy których aktywowana jest do pracy pamięć danych RAM i rozdzieleniu ich pomiędzy układy peryferyjne. Dlatego z obszaru zewnętrznej pamięci danych XDATA wydzielono przestrzeń w zakresie adresów F800h..FFFFh. Z kolei z tego zakresu wydzielono cztery podprzestrzenie w zakresie adresów: F800h..F9FFh, FA00h..FBFFh, FC00h..FDFFh oraz FE00h..FFFFh. Jednoznaczne rozróżnienie, do której podprzestrzeni należy dany adres możliwe jest na podstawie co najmniej siedmiu najstarszych bitów. Dlatego liczbę linii szyny adresowej doprowadzonych do dekodera adresowego zwiększono z trzech (A15..A13) do siedmiu (A15.. A9). Przy takim podejściu, z punktu widzenia odpowiedniej aktywacji układów pamięci ROM i RAM oraz układów peryferyjnych, dekoder adresowy powinien realizować następujące równania logiczne: wystawiać stan niski na wyjściu OEROM, jeśli PSEN = 0 AND A15 = 0 AND A14 = 0 AND A13 = 0, wystawiać stan niski na wyjściu CSRAM1, jeśli A15 = 0 AND ((PSEN = 0 AND (A14 = 1 OR A13 = 1)) OR RD = 0 OR WR = 0), wystawiać stan niski na wyjściu CSRAM2, jeśli A15 = 1 AND ((PSEN = 0 AND (A14 = 1 OR A13 = 1 OR A12 = 1 OR A11 = 1)) OR RD = 0 OR WR = 0), wystawiać stan niski na wyjściu OERAM, jeśli (PSEN = 0 AND (A15 = 1 OR A14 = 1 OR A13 = 1 OR A12 = 1 OR A11 = 1)) OR RD = 0. 11

wystawiać stan wysoki na wyjściu CS1 (aktywacja układu LCD1), jeśli A15 = 1 AND A14 = 1 AND A13 = 1 AND A12 = 1 AND A11 = 1 AND A10 = 1 AND A9 = 1 AND (WR = 0 OR RD = 0); wystawiać stan niski na wyjściu CS2 (aktywacja układu U23), jeśli A15 = 1 AND A14 = 1 AND A13 = 1 AND A12 = 1 AND A11 = 1 AND A10 = 0 AND A9 = 1 AND WR = 0; wystawiać stan niski na wyjściu CS3 (aktywacja układu U11), jeśli A15 = 1 AND A14 = 1 AND A13 = 1 AND A12 = 1 AND A11 = 1 AND A10 = 1 AND A9 = 0 AND WR = 0; wystawiać stan wysoki na wyjściu CS4 (aktywacja układu U10), jeśli A15 = 1 AND A14 = 1 AND A13 = 1 AND A12 = 1 AND A11 = 1 AND A10 = 0 AND A9 = 0 AND (WR = 0 OR RD = 0); Założono, że mapowanie w obszarze adresowania zewnętrznej pamięci danych zostanie zrealizowane dla następujących układów: przetwornik analogowo-cyfrowy, przetwornik cyfrowo-analogowy, programowany układ wejść-wyjść 8255, programowany układ czasowy 8254, układ asynchronicznej transmisji szeregowej TL16C550, rejestr zatrzaskowy danych multipleksowanego znakowego wyświetlacza LED, rejestr zatrzaskowy diod LED. Jak widać cztery podprzestrzenie adresowe nie pokrywają całego zapotrzebowania układów peryferyjnych, gdyż układów peryferyjnych jest aż siedem. Z tego powodu projekt dekodera adresowego znajdującego się na makiecie IME-LabTM został zrealizowany na bazie dwóch układów: programowalnym układzie logicznym ATF16V8B (U9) oraz dekoderze/demultiplekserze 74LS138 (U10). Układ U9 realizuje wszystkie założenia przedstawione w punkcie 2.2. Natomiast układ U10 dzieli dodatkowo podprzestrzeń w zakresie adresów F800h..F9FFh na osiem mniejszych obszarów na podstawie stanu kolejnych linii adresowych A8..A6. Ostateczną mapę pamięci dla systemu mikroprocesorowego znajdującego się na makiecie IME-LabTM przedstawiono na rysunku 6. 0000H 1FFFH 2000H FFFFH CODE Monitor (realizowane przez układ ROM) Program użytkownika (realizowane przez układy RAM1 i RAM2) 0000H F7FFH F800H FFFFH XDATA Pamięć danych (realizowane przez układy RAM1 i RAM2) Układy peryferyjne F800H F9FFH FA00H FBFFH FC00H FDFFH FE00H FFFFH U10 (74LS138) U11 (74AC273) U23 (74AC273) LCD1 (RC1602A) F800H F83FH F840H F87FH F880H F8BFH F8C0H F8FFH F900H F93FH F940H F97FH F980H F9BFH F9C0H F9FFH U6 (8255) U12 (TL16C550) U14 (8254) U17 (ADC0848) U18 (AD5330) Niewykorzystane Niewykorzystane Niewykorzystane Rys. 6. Mapa pamięci programu oraz zewnętrznej pamięci danych systemu mikroprocesorowego znajdującego się na makiecie IME-LabTM 12

2.3. Adresy układów peryferyjnych Zgodnie z rysunkiem 6, odniesienie do danego układu peryferyjnego może obywać się przez dowolny adres z przydzielonej jemu przestrzeni. Jednak część zastosowanych układów peryferyjnych posiada wewnętrzne rejestry, których wybór dokonywany jest przez ustawienie odpowiednich stanów na specjalnie do tego przeznaczonych wyprowadzeniach tych układów podczas operacji zapisu lub odczytu. Aby sterowanie tymi wejściami odbywało się w trakcie operacji zapisu i odczytu wyprowadzenia te podłączono do najmłodszych liniach szyny adresowej. Z tego powodu dla uniknięcia pomyłek w tabeli 1 zebrano zalecane adresy dla dostępu do poszczególnych układów oraz ewentualnie podano, które linie wejściowe danego układu sterowane są dodatkowo liniami szyny adresowej. Tabela 1. Adresy układów peryferyjnych znajdujących się na makiecie IME-LabTM i mapowanych w obszarze adresowania zewnętrznej pamięci danych systemu mikroprocesorowego Oznaczenie układu U6 U12 U14 U17 U18 U11 U23 LCD1 Opis układu Adres Przyporządkowanie linii sterujących do linii szyny adresowej 8255 programowany układ wejść-wyjść F800h Wejście A0 podłączone do linii A0 Wejście A1 podłączone do linii A1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 A1 A0 TL16C550 układ asynchronicznej transmisji F840h Wejście A0 podłączone do linii A0 szeregowej Wejście A1 podłączone do linii A1 Wejście A2 podłączone do linii A2 1 1 1 1 1 0 0 0 0 1 0 0 0 A2 A1 A0 8254 programowany układ czasowy F880h Wejście A0 podłączone do linii A0 Wejście A1 podłączone do linii A1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 A1 A0 ADC0848 8-kanałowy, 8-bitowy przetwornik F8C0h analogowo-cyfrowy AD5330 jednokanałowy, 8-bitowy przetwornik F900h cyfrowo-analogowy 74AC273 rejestr zatrzaskowy dla sterowania FA00h ośmioma diodami LED 74AC273 rejestr zatrzaskowy dla sterowania FC00h segmentami 7-segmentowego wyświetlacza LED RC1602A moduł wyświetlacza LCD ze sterownikiem FE00h Wejście RS podłączone do linii A0 HD44780 Wejście R/W podłączone do linii A1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 R/W RS W celu wyjaśnienia, w jaki sposób należy wykorzystać przedstawione w tabeli 1 informacje załóżmy, że chcemy oprogramować wyświetlacz LCD. Zgodnie z informacją podaną w tabeli, adres bazowy, pod jakim występuje ten układ to FE00h. Na schemacie elektrycznym makiety widać, że wejście E sterownika wyświetlacza jest sterowane z wyjścia dekodera adresowego. Zatem każde odniesienie pod adres związany z wyświetlaczem LCD będzie skutkowało odpowiednim wysterowaniem tego wejścia. Natomiast pozostałe dwa wejścia, tj. RS i R/W dołączone są odpowiednio do linii A0 i A1 szyny adresowej. Zgodnie z informacjami podanymi w tabeli 3 znajdującej się w punkcie 4.3, wysłanie rozkazu do sterownika wyświetlacza LCD wymaga ustawienia obydwu linii (RS i R/W ) w stan niski. Zatem adres przy wysyłaniu rozkazów wyniesie FE00h. Jednak chcąc dokonać zapisu pamięci RAM sterownika konieczne jest ustawienie stanu linii RS w stan wysoki, a stanu linii R/W w niski. To powoduje, że adres, pod który musimy się odnieść wyniesie FE01h. 13

3. Działanie makiety pod kontrolą programu monitora PAULMON2 jest darmowym programowym monitorem instalowanym w systemach bazujących na mikrokontrolerach rodziny MCS-51. Umieszczenie opisywanego monitora w pamięci ROM mikrokontrolera pozwala na wczytywanie programów do pamięci RAM i wykonywanie ich, co jest znacznie wygodniejsze i szybsze, niż przeprogramowywanie pamięci EPROM. Do komunikacji z programem monitora można wykorzystać dowolny program pozwalający na komunikację za pomocą złącza RS-232, np. HyperTerminal. Po uruchomieniu niniejszego programu na komputerze PC, oraz po wciśnięciu klawisza resetu makiety, monitor wysyła następujący komunikat: Welcome to PAULMON2 v2.1, by Paul Stoffregen See PAULMON2.DOC, PAULMON2.EQU and PAULMON2.HDR for more information. Program Name Location Type List 1000 External command Single-Step 1400 External command Memory Editor (VT100) 1800 External command a następnie pojawia się znak zachęty PAULMON2 Loc:2000 > _ Wartość 2000 określa adres, na jaki wskazuje wewnętrzny wskaźnik monitora. Jego znajomość jest użyteczna przy wywoływaniu komend operujących na pamięci systemu. Poniżej zostaną przedstawione wybrane komendy monitora. Wielkość liter przy wprowadzaniu poleceń nie ma znaczenia. 3.1. D (ang. Download) ładowanie programu Polecenie to pozwala na załadowanie do pamięci RAM systemu mikroprocesorowego pliku z programem w formacie Intel Hex. W formacie tym zawarte są informacje o adresie, pod który mają być zapisywane kolejne bajty przesyłanego programu, zatem wewnętrzny wskaźnik pamięci monitora nie jest brany pod uwagę. Załadowanie programu polega na wciśnięciu klawisza [D], co powoduje wyświetlenie następującej informacji PAULMON2 Loc:2000 > Download Begin ascii transfer of Intel hex file, or ESC to abort Teraz należy z menu Transfer programu HyperTerminal wybrać Wyślij plik tekstowy..., a następnie w otwartym oknie wskazać miejsce położenia pliku *.hex. Zatwierdzenie wyboru powoduje rozpoczęcie przesyłania danych. Za każdym razem, kiedy monitor odbierze pojedynczą linię z ładowanego pliku *.hex, na ekranie zostaje wyświetlona kropka. Jeśli z jakiś powodów konieczne jest przerwanie ładowania programu należy wtedy wcisnąć klawisz [Esc]. Po zakończeniu ładowania pliku z programem lub gdy ładowanie zostanie przerwane na życzenie użytkownika, na ekranie pojawia się podsumowanie....... Download completed 14

Summary: 135 lines received 2084 bytes received 2084 bytes written No errors detected Jeśli po wykonaniu polecenia wczytania pliku w informacji podsumowującej monitora raportowane są błędy o braku możliwości zapisu Summary: 246 lines received 3834 bytes received 640 bytes written Errors: 3204 bytes unable to write to oznacza, że plik *.hex został odebrany poprawnie, jednak obszar pamięci wyspecyfikowany w kolejnych rekordach zawartych w pliku jest tylko do odczytu. W przypadku odebrania przez monitor danych o niepoprawnym formacie zostanie wyświetlone podsumowanie podobne do poniższego. Summary: 3 lines received 62 bytes received 62 bytes written Errors: 1 bad checksums 2 unexpected begin of line 17 unexpected hex digits 2 unexpected non hex digits 3.2. J (ang. Jump) skocz pod określony adres w pamięci Polecenie to pozwala na przejście do wykonywania wczytanego wcześniej programu użytkownika. Po wciśnięciu klawisza [J] pojawi się napis PAULMON2 Loc:2000 > Jump to memory location Jump to memory location (2000), or ESC to quit: _ W tym momencie należy wprowadzić wartość adresu, od którego został umieszczony program. Po wpisaniu ostatniego (czwartego) znaku na ekranie pojawi się napis running program: informując o rozpoczęciu wykonywania programu użytkownika. Przed przejściem pod wyspecyfikowany adres program monitora odkłada na stosie wartość 0000H, zatem programy, które kończą się instrukcją RET powodują ponowne wywołanie programu monitora. Jeśli program działa w nieskończonej pętli, to jedyną możliwością powrotu do programu monitora jest reset mikrokontrolera. 15

4. Układy peryferyjne 4.1. Diody LED Na makiecie IME-LabTM znajduje się osiem diod LED (elementy D3 do D10). Ich katody podłączone są na stałe do masy napięcia zasilania. Natomiast stan na ich anod określany jest przez stan wyjść układu 74AC273 (U11) zawierającego osiem przełączanych zboczem przerzutników typu D. Zapis informacji do przerzutników, a tym samym ustawienie ich wyjść w odpowiedni stan, odbywa się przy stanie wysokim na wejściu CLR oraz zboczu narastającym na wejściu CLK tego układu. Włączenie danej diody LED wymaga ustawienia wyjścia danego przerzutnika w stan wysoki. Wejścia D0..D7 układ U11 zostały podłączone do szyny danych systemu mikroprocesorowego, natomiast wejście CLK tego układu zostało dołączone do jednego z wyjść dekodera adresowego. Generowanie zbocza narastającego na wejściu CLK realizowane jest automatycznie przez dekoder w wyniku pojawienia się odpowiedniej kombinacji bitów na liniach A15..A9 szyny adresowej (patrz punkt 2.2) podczas realizacji operacji zapisu do zewnętrznej pamięci danych mikrokontrolera. Dana, która podczas tej operacji pojawia się na liniach szyny danych określa stan wyjść poszczególnych przerzutników typu D układu U11. Dzięki takiemu podłączeniu, z punktu widzenia tworzonego oprogramowania, sterowanie diodami LED odbywa się przez zapis bajta informacji pod odpowiedni adres zewnętrznej pamięci danych XDATA (patrz tabela 1 w punkcie 2.3). Ustawienie określonego bitu przesyłanej informacji w stan wysoki powoduje ustawienie tego stanu na wyjściu odpowiedniego przerzutnika typu D układu U11, a tym samym włączenie do świecenia dołączonej do niego diody LED. 4.2. 7-segmentowe wyświetlacze LED Na makiecie dydaktycznej IME-LabTM znajdują się również cztery 7-segmentowe wyświetlacze LED o wspólnej anodzie, nazywane dalej modułami. Sterowanie statyczne taka liczbą modułów wymagałoby ich bezpośredniego dołączenia do mikrokontrolera, co nie było możliwe ze względu na mała liczbę jego wolnych wyprowadzeń. Dlatego zastosowano podłączenie, które z punktu widzenia mikrokontrolera wymaga niewielkiej liczby linii, wymusza jednak dynamiczne sterowanie poszczególnymi modułami, gdzie informacje na poszczególnych modułach LED wyświetlane są w sposób multipleksowany. Zasada realizacji takiego wyświetlania wymaga wspólnego sterowania katodami tych samych segmentów we wszystkich modułach LED oraz cyklicznego, a zarazem wyłącznego dołączania napięcia zasilania do wspólnych anod poszczególnych modułów. Zastosowany na makiecie 7-segmentowy wyświetlacz LED to układ KW4-563ASA (W1) firmy Lucky Light. Są to właściwie cztery moduły 7-segmentowe o wspólnej anodzie umieszczone w jednej obudowie, co przedstawiono schematycznie na rysunku 7. Wspólna anoda każdego modułu jest wyprowadzona osobno z obudowy wyświetlacza. Z kolei katody segmentów A każdego modułu są ze sobą wewnętrznie połączone i wyprowadzone na jednym wyprowadzeniu. Podobnie jest z segmentami B, C, D, E, F, G oraz DP każdego modułu. Oznaczenie poszczególnych segmentów przedstawiono również na rysunku 7. Sterowanie połączonymi katodami segmentów A, B, C, D, E, F, G i DP zrealizowano identycznie, jak w przypadku diod LED stosując układ 74AC273 (U23) mapowany w obszarze zewnętrznej pamięci danych mikrokontrolera pod adresem podanym w tabeli 1. Zatem zapis informacji do tego układu, a co za tym idzie odpowiednie ustawienie jego wyjść, realizowane jest przez zapis do komórki zewnętrznej pamięci danych XDATA o podanym adresie. Należy mieć na uwadze, że w tym przypadku stanem aktywnym na wyjściu układu U23, tj. stanem, który powoduje zaświecenie określonego 16

Cyfra 1 wspólna anoda Cyfra 2 wspólna anoda Cyfra 3 wspólna anoda Cyfra 4 wspólna anoda A B C D E F G DP katody F G A B E C D DP Cyfra 1 Cyfra 2 Cyfra 3 Cyfra 4 Rys. 7. Wewnętrzne połączenia diod LED w ramach obudowy wyświetlacza KW4-563ASA firmy Lucky Light oraz oznaczenie poszczególnych segmentów w module segmentu przy podaniu napięcia dodatniego na wyprowadzenie wspólnej anody modułu LED, w którym znajduje się segment, jest stan niski, gdyż wyjścia układu U23 sterują katodami poszczególnych segmentów modułów. Przyporządkowanie poszczególnych wyjść układu U23 do wejść A, B, C, D, E, F, G i DP wyświetlacza W1 można odczytać ze schematu elektrycznego makiety. Przy takiej konfiguracji sprzętowej wejść A, B, C, D, E, F, G i DP stałe dołączenie anod wszystkich modułów LED do plusa zasilania spowodowałoby, że na wszystkich modułach wyświetlana była by ta sama informacja. Dlatego anody modułów dołączone są do plusa zasilania za pośrednictwem tranzystorów PNP BC807 (układy T1 do T4) pracujących jako klucze tranzystorowe. Dołączenie wspólnej anody modułu LED odbywa się przez otwarcie określonego tranzystora w wyniku podania na jego bazę logicznego zera. Stan wyjść układu U23 w czasie otwarcia tranzystora określa, które segmenty modułu LED zostaną zaświecone, a które zgaszone. Jeśli teraz poszczególne tranzystory będą otwierane cyklicznie (jeden po drugim) a zarazem wyłącznie (tylko jeden z tranzystorów jest otwarty, pozostałe są zamknięte), a przy zmianie otwarcia tranzystora będzie następowała również zmiana stanów wyjść układu U23, to na każdym module LED będą możliwe do zaprezentowania różne informacje. Dodatkowo, ze względu na bezwładność ludzkiego oka, świecenie modułów LED będzie odbierane jako jednoczesne. Omówioną idee pracy wyświetlaczy LED przedstawiono graficznie na rysunku 8. Baza tranzystora T1 Baza tranzystora T2 Baza tranzystora T3 Baza tranzystora T4 1 0 1 0 1 0 1 0 Wyjścia układu U23 Dana dla modułu 1 Dana dla modułu 2 Dana dla modułu 3 Dana dla modułu 4 Dana dla modułu 1 Dana dla modułu 2 Rys. 8. Przebieg czasowe podczas sterowania modułów wyświetlacza LED w sposób multipleksowany Sterowanie otwieraniem i zamykaniem tranzystorów T1..T4 wymaga czterech linii. W celu zmniejszenia liczby tych linii zastosowano układ 74HC138 (U21) dekodera/demultipleksera 3 na 8 linii. Zasadę działania tego układu przedstawia rysunek 9. Odpowiednia kombinacja stanów na wejściach A, B i C powoduje, że na określonym wyjściu.. Y7 Y0 pojawia się stan niski. W układzie U21 wykorzystane są tylko cztery wyjścia.. Y3 Y0, dlatego do ich wyboru wystarczy tylko odpowiednie ustawianie wejść A i B (na wejście C na stałe podano stan niski). Dzięki temu liczba linii 17

A B C G2A G2B G1 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Wejścia Aktywacja Wybór Wyjścia G2A G2B G1 C B A Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7 1 X X X X X 1 1 1 1 1 1 1 1 X 1 X X X X 1 1 1 1 1 1 1 1 X X 0 X X X 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 1 1 1 1 1 1 1 0 0 1 0 0 1 1 0 1 1 1 1 1 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 1 1 1 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 0 1 0 0 1 1 1 1 1 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 Rys. 9. Zasada działania układu 138 (dekodera/demultipleksera 3 na 8 linii) mikrokontrolera wymaganych do sterowania tranzystorami T1..T4 została zmniejszona z czterech do dwóch. Dodatkowo, dzięki zastosowaniu układu U21, zrealizowano zabezpieczenie przed jednoczesnym otwarciem więcej niż jednego tranzystora (żadna kombinacja stanów na wejściach A i B nie powoduje jednoczesnego pojawienia się stanu niskiego na więcej niż jednym wyjściu.. Y3 Y0 ). Zgodnie z tabelą przedstawioną na rysunku 9, aby kombinacja stanów na wejściach A, B i C układu U21 powodowała ustawienie stanu niskiego na jednym z wyjść Y0.. Y7, konieczne jest podanie na wejścia 2A i G2B stanu niskiego, a na wejście G1 stanu wysokiego. Na makiecie IME-LabTM wejścia 2A i G2B na stałe dołączono do masy. Natomiast wejście G1 sterowane jest z wyjścia układu multiwibratora monostabilnego 74HC123 (U22). Układ ten ustawia na wyjściu Q stan wysoki w m.in. wyniku pojawienia się na jego wejściu B zbocza narastającego (patrz rysunek 10). Czas trwania stanu wysokiego w ns na wyjściu Q uzależniony jest od wartości dołączonego do niego kondensatora i rezystora zgodnie z zależnością (1) gdzie pojemność C musi być podana w pf, a rezystancja R w kω. Jeśli przed upływem czasu określonego wartościami tych elementów na wejściu B ponownie pojawi się zbocze narastające sygnału, to czas trwania stanu wysokiego na wyjściu Q zostanie odpowiednio przedłużony (patrz rysunek 10), pozwalając nadal na aktywację odpowiedniego wyjścia Y0.. Y4 układu U21 w zależności A B CLR Cx Rx/Cx Q Q Wejścia Wyjścia CLR A B Q Q 0 X X 0 1 X 1 X 0 1 X X 0 0 1 1 0 1 1 0 1 B Q 1 0 1 0 Rys. 10. Zasada działania układu 123 (multiwibrator monostabilny) 18

od stanów wejść A i B tego układu. Wejścia A i B układu U21 sterowane są odpowiednio przez stany linii P3.4 i P3.5 mikrokontrolera. Otwarcie określonego tranzystora dołączającego napięcie zapisania do anody modułu LED w zależności od stanów na liniach P3.4 i P3.5 przedstawiono w tabeli 2. Zgodnie z przedstawioną wcześniej zasadą obsługi multipleksowanego wyświetlacza LCD, tworzone oprogramowanie musi cyklicznie ustawiać kolejne kombinacje stanów na liniach P3.4 i P3.5 jednocześnie zmieniając stan wyjść układu U23 w zależności od tego, jaka informacja ma być prezentowana na danym module. Tabela 2. Aktywacja określonych modułów LED w zależności od stanów linii P3.4 i P3.5 mikrokontrolera P3.5 P3.4 Otwarty tranzystor 0 0 T1 Aktywowany moduł LED 0 1 T2 1 0 T3 1 1 T4 Linia P3.4 dołączona jest również do wejścia B układu U22. Ze względu na to połączenie multipleksowana obsługa mniej niż czterech modułów LED może spowodować, że pożądana informacja nie będzie na nich wyświetlana. Żeby to pokazać załóżmy, że chcemy obsługiwać tylko dwa moduły, których anody są sterowane przez tranzystory T1 i T2. W takim wypadku, zgodnie z tabelą 2, na linii P3.4 będzie utrzymywany zawsze stan niski. To spowoduje, że na wejściu B układu U22 nigdy nie pojawi się zbocze narastające, a zatem na wyjściu Q tego układu będzie stale stan niski. Stan ten jest propagowany na wejście G1 układu U21 uniemożliwiając ustawienie wyjść tego układu w stan niski (patrz rysunek 9), a więc otwieranie tranzystorów, które dołączają napięcie zasilania do wspólnych anod poszczególnych modułów LED. To powoduje, że obsługiwane moduły LED nigdy się nie zaświecą. Dlatego tworzone oprogramowanie musi zawsze realizować obsługę wszystkich czterech modułów LED. Jeśli z jakiegoś powodu na określonym module wszystkie segmenty mają być wygaszone, to należy w momencie jego aktywacji do świecenia ustawić wszystkie wyjścia układu U23 w stan wysoki. 4.3. Znakowy wyświetlacz LCD Zastosowany na makiecie znakowy wyświetlacz LCD to moduł RC1602A-GHW-ESX firmy Raystar. Moduł posiada pole odczytowe składające się z dwóch wierszy po 16 znaków w każdym. Zastosowany sterownik pola odczytowego jest kompatybilny ze sterownikiem HD44780 firmy Hitachi. Interfejs sterownika modułu LCD składa się z ośmiu linii danych D0..D7 oraz trzech linii sterujących: R/W, RS oraz E. Linia sterująca R/W informuje sterownik wyświetlacza o pożądanym kierunku przepływu informacji, tj. zapisie do sterownika (R W = 0) lub odczycie ze sterownika(r W = 1). Z kolei na podstawie stanu linii RS sterownik dokonuje interpretacji przesyłanej informacji. I tak, przy zapisie (R W = 0) będzie ona interpretowana jako: rozkaz do wykonania, gdy RS = 0, kod znaku do wyświetlenia, gdy RS = 1, Natomiast przy odczycie (R W = 1) sterownik wystawia na linie danych: 19

bajt, w którym najstarszy bit informuje o zajętości sterownika, a pozostałe o aktualnym adresie w pamięci DD RAM lub CG RAM, gdy RS = 0, kod znaku z bieżącego adresu pamięci DD RAM lub CG RAM, gdy RS = 1. W tabeli 3 przedstawiono rozkazy dostępne przy sterowaniu modułem LCD. Do poprawnej pracy wyświetlacza wymagane jest co najmniej przesłanie rozkazów dotyczących ustawienia: parametrów pracy (ang. Function Set), sterowania wyświetlaniem (ang. Display on/off Control) i trybu wprowadzania znaków (ang. Entry Mode Set). Znaczenie poszczególnych bitów wymienionych rozkazów znajduje się również w tabeli 3. Tabela 3. Wykaz rozkazów sterownika wyświetlacza LCD Czynność Stan linii Czas RS R/W D7 D6 D5 D4 D3 D2 D1 D0 wykonania Czyszczenie ekranu, zerowanie adresu kursora 0 0 0 0 0 0 0 0 0 1 1,53 ms (ang. Clear Display) Zerowanie adresu kursora (ang. Return Home) 0 0 0 0 0 0 0 0 1 x 1,53 ms x stan nieistotny Tryb wprowadzania znaków (ang. Entry Mode Set) 0 0 0 0 0 0 0 1 ID S 39 ms ID zmniejszaj (0)/zwiększaj (1) adres kursora po wpisaniu znaku S przesuwaj (1) ekran po wpisaniu znaku Sterowanie wyświetlaniem (ang. Display ON/OFF) 0 0 0 0 0 0 1 D C B 39 ms D wyłączenie (0)/włączenie (1) wyświetlacza C kursor niewidoczny (0)/widoczny (1) B kursor migoczący (1) Przesuwanie kursora lub ekranu 0 0 0 0 0 1 SC RL x x 39 ms (ang. Cursor or Display Shift) SC przesuń kursor (0)/ekran (1) RL w lewo (0)/prawo(1) x stan nieistotny Ustawienie parametrów pracy (ang. Function Set) 0 0 0 0 1 DL N F x x 39 ms DL sterowanie 4-bitowe (0)/8-bitowe (1) N 1 wiersz (0)/2 wiersze (1) F znak 5x7 (0)/5x10 (1) punktów x stan nieistotny Ustawienie adresu pamięci generatora znaków 0 0 0 1 A5 A4 A3 A2 A1 A0 39 ms (CG RAM) (ang. Set CG RAM Address) Ustawienie adresu kursora (adres w DD RAM) 0 0 1 A6 A5 A4 A3 A2 A1 A0 39 ms (ang. Set DD RAM Address) Odczyt bitu zajętości oraz adresu 0 1 BF A6 A5 A4 A3 A2 A1 A0 0 ms (ang. Read Busy Flag and Address) BF moduł zajęty (1), moduł gotowy do przyjmowania danych (0) A adres generatora znaków lub adres kursora (zależni od tego, który z nich był ostatnio wpisywany) Wpisywanie danych 1 1 0 D7 D6 D5 D4 D3 D2 D1 D0 43 ms (ang. Write Data to RAM) Odczyt danych 1 1 D7 D6 D5 D4 D3 D2 D1 D0 43 ms (ang. Read Data from RAM) 1 Jeśli ostatnio ustawionym adresem był adres pamięci generatora znaków (CG RAM), to dane dotyczą generatora znaków, w przeciwnym wypadku pamięci ekranu (DD RAM). Przed wysłaniem jakiejkolwiek informacji do sterownika wyświetlacza, należy sprawdzić jego gotowość do jej przyjęcia przez odczyt informacji ze sterownika (przy RS = 0 i R W = 1) tak długo, aż najstarszy bit, oznaczony w tabeli 3 jako BF, nie przyjmie wartości 0. Wzorce możliwych do wyświetlenia znaków przechowywane są w pamięci CG RAM sterownika. Kody poszczególnych znaków podano na rysunku 11. Sterownik ten posiada również dwa rodzaje 20

Rys. 11. Kody znaków znajdujących się w pamięci CG ROM sterownika wyświetlacza LCD pamięci RAM. Pamięć ekranu (DD RAM) przechowuje kody znaków aktualnie wyświetlanych na polu odczytowym. Każdemu polu odczytowemu odpowiada jedna komórka pamięci DD RAM. Na rysunku 12 pokazano graficznie adresy odpowiadające poszczególnym pozycjom na polu odczytowym dla zastosowanego wyświetlacza. Wyświetlenie znaku na odpowiedniej pozycji pola odczytowego polega więc na wpisaniu kodu znaku do odpowiedniej komórki pamięci DD RAM. 000102030405060708090A0B0C0D0E0F 404142434445464748494A4B4C4D4E4F Rys. 12. Adresy w pamięci DD RAM sterownika wyświetlacza LCD o 2 liniach i 16 kolumnach odpowiadające poszczególnym polom odczytowym Drugi rodzaj pamięci RAM znajdującej się w sterowniku to pamięć generatora znaków (CG RAM) o rozmiarze 64 bajtów. Wzorzec jednego znaku zapisywany jest na 8 bajtach, stąd istnieje możliwość zdefiniowana do 8 własnych znaków użytkownika. Znaki te będą dostępne pod adresami od 0 do 7 pamięci CG ROM sterownika. Format zapisu wzorca znaku przedstawiono w tabeli 4. W celu zaprogramowania wzorca znaku występującego pod adresem 01H w pamięci CG ROM, należy wysłać rozkaz ustawiający adres pamięci CG RAM generatora znaków na wybraną wartość, a następnie sukcesywnie przesyłać kolejne dane określające wzorce linii znaku. W celu wyświetlenia 21

Tabela 4. Wykaz rozkazów sterownika wyświetlacza LCD Adres CG RAM dwójkowo Dane dwójkowo Znak n n n 0 0 0 0 0 0 0 0 0 0 0 n n n 0 0 1 0 0 0 0 1 1 1 0 n n n 0 1 0 0 0 0 1 0 0 0 1 n n n 0 1 1 0 0 0 1 0 0 0 1 n n n 1 0 0 0 0 0 1 0 0 0 1 n n n 1 0 1 0 0 0 0 1 0 1 0 n n n 1 1 0 0 0 0 1 1 0 1 1 n n n 1 1 1 0 0 0 0 0 0 0 0 nnn określa numer jednego z ośmiu znaków użytkownika w zapisie dwójkowym tak zaprojektowanego znaku należy zapisać do pamięci DD RAM sterownika wyświetlacza jego kod (w rozpatrywanym przykładzie wynosi on 01H). Znak, którego kod zostanie wysłany do sterownika, pojawi się zawsze na pozycji określonej aktualną zawartością licznika adresu A pamięci DD RAM sterownika wyświetlacza. Następnie adres ten zostanie zwiększony lub zmniejszony w zależności od ustawienia bitu I/D rozkazu ustalającego tryb wprowadzania znaków (ang. Entry Mode Set). Bieżąca wartość licznika adresów A sterownika wyświetlacza określa również pozycję, na której znajduje się kursor o ile został on włączony przez ustawienie odpowiedniego bita. Dlatego określenia adres pozycji znaku, adres kursora i adres DD RAM są jednoznaczne. W celu zmiany zawartości licznika adresu A, a jednocześnie przemieszczenia kursora na odpowiednią pozycję pola odczytowego wyświetlacza, należy użyć funkcji ustawiającej adres kursora (ang. Set DD RAM address) na jedną wartości przedstawionych na rysunku 12. Wysłanie rozkazu ustawiającego adres pamięci DD RAM powoduje, że każda następna operacja zapisu lub odczytu danej przy RS = 1 będzie odnosiła się do wspomnianej pamięci. Identycznie następstwa dotyczą wysłania rozkazu ustawiającego adres pamięci CG RAM. Dlatego po ewentualnym procesie programowania znaku (czyli odnoszenia się do pamięci CG RAM), a przed wysyłaniem kodów znaków do wyświetlenia (czyli odnoszenia się do pamięci DD RAM), należy wysłać rozkaz ustawiający odpowiedni adres w pamięci DD RAM. Na makiecie dydaktycznej moduł wyświetlacza LCD został tak dołączony do systemu mikroprocesorowego, że występuje w obszarze adresowania zewnętrznej pamięci danych XDATA zastosowanego mikrokontrolera. Zatem jego obsługa od strony programowej realizowana jest z wykorzystaniem instrukcji właściwych dla zapisu/odczytu zewnętrznej pamięci danych mikrokontrolera. Linie R W i RS podłączone są odpowiednio do linii A1 i A0 szyny adresowej systemu mikroprocesorowego. Stąd sterowanie nimi odbywa się przez odpowiednie ustawienie dwóch najmłodszych bitów adresu podczas operacji zapisu/odczytu zewnętrznej pamięci danych mikrokontrolera. Linia E sterowana jest automatycznie przez dekoder adresowy systemu w wyniku pojawienia się odpowiedniej kombinacji bitów na liniach A15..A9 szyny adresowej przy zapisie lub odczycie zewnętrznej pamięci danych mikrokontrolera, dlatego ustawienie jej odpowiedniego stanu nie wymaga ingerencji programowej. 4.4. Przetwornik analogowo-cyfrowy Zastosowany na makiecie IME-LabTM przetwornik analogowo-cyfrowy to układ ADC0848 (U17) firmy Texas Instruments. Schemat blokowy przetwornika przedstawiono na rysunku 13. Jest to przetwornik 8-bitowy zawierający w swojej strukturze 8-kanałowy multiplekser analogowy. Układ 22

Rys. 13. Schemat blokowy przetwornika ADC0848 posiada 8 linii danych oraz wejścia, CS WR i RD, co ułatwia jego dołączenie do magistrali systemowej systemu mikroprocesorowego. Każdy z kanałów multipleksera może być programowo skonfigurowany do pracy w jednym z trzech trybów: różnicowym, pseudoróżnicowym i niesymetrycznym (napięcia w każdym kanale odniesienie są do wspólnej masy AGND). Ze względu na sposób wyprowadzenia tych kanałów na złącza makiety nie zaleca się ustawiania innego trybu ich pracy niż niesymetryczny. Konfiguracja multipleksera wybierana jest przez zapis odpowiedniej wartości, zgodnie z tabelą 5, do jego rejestru zatrzaskowego liniami MA0..MA4. Zbocze narastające na wejściu WR przetwornika, przy wysokim stanie na wejściu RD i niskim na wejściu, CS wpisuje dane do rejestru zatrzaskowego multipleksera, jednocześnie uruchamiając konwersję w danym kanale (patrz rysunek 14). Poprzedzające go zbocze opadające ustawia wyjście INTR przetwornika w stan wysoki. Po zakończeniu konwersji, która trwa maksymalnie 40 μs, uzyskany wynik konwersji jest zatrzaskiwany w rejestrze wyjściowym przetwornika, a linia INTR ustawiana jest w stan niski. Ustawienie linii CS oraz RD w stan niski przepisuje wynik konwersji na linie DB0..DB7, umożliwiając jego odczyt. Jednocześnie na linii INTR ustawiany jest stan wysoki. Należy zauważyć, że linie wejściowe MA0..MA4 rejestru multipleksera są podłączone do tych samych wyprowadzeń przetwornika, co linie DB0..DB4 rejestru wyjściowego wyniku konwersji, po których następuje odczyt pięciu najmłodszych bitów przetworzonej wartości wejściowego napięcia analogowego. Omówiony przetwornik analogowo-cyfrowy został tak dołączony do systemu mikroprocesorowego makiety, że z punktu widzenia tworzonego oprogramowania dla mikrokontrolera widziany jest jak komórka zewnętrznej pamięci danych XDATA o adresie podanym w tabeli 1. Jego 8 linii danych zostało dołączone do szyny danych systemu mikroprocesorowego. Zapis informacji pod właściwy adres powoduje automatyczne ustawienie wejścia CS przez dekoder adresowy w stan niski oraz wejścia WR przez linię WR mikrokontrolera. Przesyłana po liniach szyny danych informacja jest zapisywana do rejestru zatrzaskowego multipleksera określając odpowiedni 23

Tabela 5. Wybór i konfiguracja kanału w przetworniku ADC0848 Rys. 14. Przebiegi czasowe podczas zapisu i odczytu informacji do/z przetwornika ADC0848 tryb pracy danego kanału i wymuszając w nim start konwersji. Odczyt informacji z podanego adresu zewnętrznej pamięci danych XDATA powoduje również odpowiednie wysterowanie wejścia CS przez dekoder adresowy i wejścia RD przez linię RD mikrokontrolera. W ten sposób realizowany jest odczyt z przetwornika umożliwiający uzyskanie wyniku konwersji analogowo-cyfrowej z wybranego wcześniej kanału. Na makiecie IME-LabTM wyjście INTR przetwornika może być dołączone do wejście INTR0 mikrokontrolera poprzez wpięcie zworki w odpowiednim miejscu złącza J2. Dzięki temu istnieje możliwość określenia końca konwersji na podstawie stanu linii INTR przetwornika albo przez 24

programowe sprawdzanie stanu wejścia INTR0 mikrokontrolera, albo przez obsługę przerwania od tego wejścia. Do wejścia V REF układu U17 został podłączony układ REF192 (U15) firmy Analog Devices wytwarzający dla przetwornika analogowo-cyfrowego napięcie referencyjne o wartości 2,5 V. Oznacza to, że przetwornik akceptuje na swoich wejściach analogowych napięcia z zakresu 0..2,5 V. Zależność między kodem uzyskanym na wyjściach cyfrowych przetwornika a napięciem wejściowym wyrażonym w woltach jest następująca (2) 4.4.1. Kanały 1-4 W celu umożliwienia przetwarzania napięć bipolarnych z zakresu ±5 V, w przypadku kanałów 1..4 omawianego w tym punkcie przetwornika analogowo-cyfrowego, między złączami J8 do J11 a wejściami tych kanałów umieszczono dodatkowo obwody wejściowe. Ich zadaniem jest konwersja napięć z zakresu ±5 V na zakres 0..2,5 V akceptowany przez przetwornik analogowo-cyfrowy. Do realizacji tego zadania zastosowano nieodwracający wzmacniacz sumujący. Sumowaniu podlega tutaj napięcie wejściowe podawane z zewnątrz przez jedno ze złącz J8 do J11 i stałe napięcie o wartości 1,25 V generowane przez układ REF3012 (U24) firmy Texas Instruments. Zależność napięcia wyjściowego od napięcia wejściowego dla takiej konfiguracji wzmacniacza można wyprowadzić stosując metodę superpozycji. Poniżej przedstawiono wyprowadzenie takiej zależności dla obwodu wejściowego związanego z kanałem CH1 przetwornika. W pierwszej kolejności zakładamy, że źródło napięcia dołączone do złącza J8 jest zwarte. Uzyskujemy w ten sposób wzmacniacz w konfiguracji nieodwracającej z dzielnikiem napięcia na wejściu. Stad napięcie podawane na wejście nieodwracające wzmacniacza wynosi Znając wzór na wzmocnienie wzmacniacza nieodwracającego, można określić zależność napięcia wyjściowego od napięcia wejściowego U REF, która przedstawia się następująco Następnie zwieramy źródło napięcie U REF, co pozwala wyznaczyć odpowiedź układu na napięcie podawane na złącze J8. Uzyskany w ten sposób układ to również wzmacniacz nieodwracający z dzielnikiem napięcia na wejściu. Tym razem napięcie podawane na wejście nieodwracające wzmacniacza wynosi (3) (4) (5) gdzie jest napięciem podanym na złącze J8. Stad napięcie na wyjściu wzmacniacza przedstawia się następującą zależnością (6) Sumując sygnały wyjściowe i uzyskane od obydwu źródeł napięć, tj napięcia U WE podawanego na złącze J8 oraz stałego napięci U REF uzyskujemy zależność napięcia wyjściowego zastosowanego obwodu wejściowego dla kanałów 1 do 4 przetwornika analogowo-cyfrowego od napięcia U WE 25