Instrukcja do laboratorium

29
Komputerowe Sterowanie w Elektronice Przemysłowej © Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ Autor: Rafał Kotas LABORATORIUM Komputerowe Sterowanie w Elektronice Przemysłowej

Transcript of Instrukcja do laboratorium

Page 1: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Autor: Rafał Kotas

LABORATORIUM

Komputerowe Sterowanie

w Elektronice Przemysłowej

Page 2: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Niniejsza instrukcja nie jest kompletnym źródłem informacji niezbędnych do

wykonania zaproponowanych ćwiczeń. Zawarte są w niej jedynie wskazówki na co należy

zwrócić szczególną uwagę przy programowaniu mikrokontrolera. Podstawowymi źródłami

informacji, z których należy korzystać są: nota katalogowa mikrokontrolera oraz nota

katalogowa płyty dydaktycznej wyposażonej we wspomniany mikrokontroler oraz peryferia.

Potrzebna do wykonania poniższych ćwiczeń dokumentacja znajduje się we wskazanej

lokalizacji: C:\Atmel\Dokumentacja AVR\ lub na stronach internetowych:

1) www.atmel.com

2) www.kamami.pl

3) www.atmel.com

Literatura:

o Mikrokontrolery AVR ATmega w praktyce / Rafał Baranowski

o Wyświetlacze graficzne i alfanumeryczne w systemach mikroprocesorowych / Rafał

Baranowski

o Sztuka programowania mikrokontrolerów AVR : podstawy / Andrzej Pawluczuk

o Sztuka programowania mikrokontrolerów AVR : przykłady / Andrzej Pawluczuk

Mapa połączeń płyty dydaktycznej:

PA0 -> CON7 (P2) – potencjometr analogowy [zielony – 1]

PA1 -> CON7 (TEM) – termistor [zielony – 1]

PA2 – PA7 -> CON13 (D4, D5, D6, D7, E, RS) – char LCD [zielony – 6]

CON13 (RW) -> GND – char LCD [zielony – 1]

PB0-PB3 -> CON19 (SW0, SW1, SW2, SW3) – klawiatura [czerwony – 4]

PB4, PB6, PB7-> CON8 (CS, SIO, SCK) – termometr cyfrowy [czerwony – 3]

PB5 -> CON7 (SPK) – brzęczek [czerwony – 1]

PC6-PC7 -> CON9 (6, 7) – LED-y: LED6, LED7 [niebieski – 2]

PD0 -> CON7 (RxD) – transmisja szeregowa [niebieski – 1]

PD1 -> CON7 (TxD) – transmisja szeregowa [niebieski – 1]

PD2-PD6 -> CON9 (0, 1, 2, 3, 4, 5) – LED-y: LED0, LED1, LED2, LED3, LED4, LED5

[niebieski – 6]

PC0, PC1 -> CON7 (SCL,SDA) [niebieski – 2]

Page 3: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczeń 1-5 Każdy mikrokontroler integruje w swojej strukturze kilka elementów, nazywanych

zasobami. Niemal w każdym mikrokontrolerze z rodziny AVR występuje pewna grupa

zasobów. Są to:

pamięć RAM,

pamięć programu,

rejestry robocze,

jednostka centralna CPU (Central Processing Unit),

rejestry wejścia/wyjścia.

Pamięć RAM jest ulotną pamięcią przewidzianą, do zapamiętywania informacji powstałej

podczas realizacji programu. W pierwszej chwili po włączeniu zasilania zawartość pamięci

RAM trzeba traktować jako przypadkową. Przed jej właściwym użyciem należy ją

zainicjować, czyli ustawić zmienne programu przy użyciu danych początkowych. Do tej

pamięci dostęp jest ograniczony i możliwy wyłącznie z poziomu programu. Wynika z tego, iż

jedynie program może zapisywać dane do pamięci oraz odczytywać z niej dane. Pamięć

programu nie jest pamięcią ulotną. Przewidziana jest ona do przechowywania kodu programu

w postaci binarnych kodów rozkazów programu. Wykonywanie tych rozkazów w ściśle

określonej kolejności, sprawia, że mikrokontroler spełnia zaprogramowane zadanie.

Najważniejszym elementem wchodzącym w skład struktury mikrokontrolerów jest jednostka

centralna. Element ten odpowiedzialny jest za realizację programu. Kody rozkazów pobierane

z pamięci programu dekodowane są przez CPU, a następnie są wykonywane czynności

związane z tą instrukcją. Bardzo ważnym fragmentem CPU jest rejestr nazywany licznikiem

rozkazów. Wskazuje on miejsce w programie, w którym obecnie znajduje się jego wykonanie.

Wszystkie mikrokontrolery posiadają również pewien zestaw wskaźników, nazywanych

inaczej rejestrem flag. Do tego rejestru należą m.in. flagi: przeniesienia C (carry flag)

i globalnego zezwolenia na przerwania I (interrupt enable flag). Zasobami mikrokontrolerów

AVR, które biorą udział w operacjach arytmetycznych i logicznych są tzw. rejestry robocze.

Wszystkie operacje realizowane przez mikrokontroler wykonywane są właśnie na tych

rejestrach.

Do zajęć przygotowano płyty dydaktyczne wyposażone w mikrokontroler ATmega32.

Główną jego cechą, która zadecydowała o takim wyborze jest dostępna ilość portów,

wbudowany przetwornik A/C, a także dostępność, niski koszt i łatwość programowania.

ATmega32 jest 8–bitowym mikrokontrolerem z rodziny AVR. Rdzeń mikrokontrolera AVR

posiada bogaty zestaw instrukcji z 32 rejestrami ogólnego przeznaczenia, które mają symbole

od R0 do R31. Rejestry te, z punktu widzenia programu, znajdują się na początku

wewnętrznej pamięci RAM. Bezpośrednie podłączenie wszystkich 32 rejestrów do jednostki

arytmetyczno-logicznej (ALU), pozwala na jednoczesny dostęp do dwóch niezależnych

rejestrów w jednej instrukcji wykonywaj w czasie jednego cyklu maszynowego. Taka

architektura zwana architekturą RISC jest zdecydowanie bardziej wydajna i efektywna, gdyż

pozwala na szybszą pracę w porównaniu z konwencjonalnymi mikrokontrolerami

o architekturze typu CISC. ATmega32 posiada wbudowane: 32K bajty wewnętrznej

programowalnej pamięci typu FLASH z możliwością odczytu podczas zapisu, 1K bajt

EEPROM, 2K bajty SRAM, 32 rejestry robocze, 8-kanałowy, 10-bitowy przetwornik ADC,

Watchdog – programowalny licznik z wewnętrznym oscylatorem, SPI - port równoległy,

JTAG, programowany szeregowo USART, dwa 8-bitowe liczniki, jeden licznik 16-bitowy,

4-kanałowy PWM oraz komparator analogowy. Możliwe są następujące częstotliwości pracy:

Page 4: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

1, 2, 4, 8 albo 16 MHz. Istnieje również możliwość podłączenia do mikroprocesora kwarcu

w celu uzyskania precyzyjnej częstotliwości pracy. Do poprawnej pracy mikrokontroler

ATmega32 wymaga napięcia zasilającego od 4,5 do 5,5 V. Mikrokontroler posiada

wbudowane obwody, kontrolujące prawidłowość napięcia zasilającego. W przypadku, gdy

napięcie niespodziewanie obniży się poniżej wartości zadanej, mikrokontroler zostaje

zresetowany i pozostaje w tym stanie do czasu powrotu prawidłowego napięcia zasilającego.

Mikrokontroler ten wyposażony jest w 6 różnych trybów pracy w uśpieniu. Dzięki temu

posiada wiele niezbędnych konfiguracji, w których możliwe jest oszczędzanie energii.

Podczas aktywnej pracy mikrokontrolera pobiera on około 1,1 mA. Po przejściu w jeden

z trybów uśpienia pobór prądu spada poniżej 0,4 mA. Istnieje również ustawienie

mikrokontrolera do pracy w trybie niskiego poboru mocy (Power-Down). W trybie tym

mikrokontroler zapamiętuje zawartość rejestrów, ale zatrzymuje oscylator, uniemożliwiając

wykonywanie instrukcji, aż do wystąpienia następnego przerwania lub sprzętowego resetu.

ATmega32 produkowana jest w trzech rodzajach obudów (w tym SMD). Posiada 4 8-bitowe

porty wejścia/wyjścia A, B, C i D. Osobne wyprowadzenia są przydzielone do podłączenia

mikrokontrolera do zasilania, masy, zewnętrznego źródła odniesienia dla przetwornika ADC,

zewnętrznego kwarcu, a także do sprzętowego resetu. Rejestry wejścia/wyjścia są zbiorem

rejestrów przeznaczonych do komunikacji ze „światem zewnętrznym”. Służą one również do

kontroli i konfigurowania wbudowanych w mikrokontroler bloków funkcjonalnych.

Odpowiednie zapisy w poszczególnych rejestrach decydują o tym, które bity portów

równoległych spełniają rolę wejść, a które rolę wyjść.

W mikrokontrolerach AVR w przestrzeni rejestrów wejścia/wyjścia znajduje się wskaźnik

stosu SP (Stack Pointer). Przede wszystkim służy on do zachowania rejestrów

wykorzystanych w procedurze obsługi przerwania (instrukcja push i pop). Wskaźnik stosu

w mikrokontrolerach AVR jest rejestrem o charakterze adresowym. W przypadku

mikrokontrolerów z rodziny AVR wskaźnik stosu SP jest adresem pierwszego, wolnego do

zapisu miejsca w pamięci RAM. Do obsługi mikrokontrolerów ATmega32 stworzono wiele

programów, środowisk narzędziowych i oprogramowania. Są to m.in. kompilatory C,

debuggery i programatory.

Rys.1. Adresy rejestrów roboczych

mikrokontrolera ATmega32

Rys. 2. Adresy portów i rejestrów I/O

mikrokontrolera ATmega32

Page 5: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Ćwiczenie 1 Temat: Obsługa rejestrów i portów mikrokontrolera – operacje podstawowe

Zadanie: Na porcie PB ustawić żądaną informację o dowolnej treści. Skontrolować działanie

przy użyciu symulatora wbudowanego w AVR Studio.

Język: Asembler

Zasoby: port PB

Ćwiczenie 2 Temat: Obsługa rejestrów i portów mikrokontrolera – operacje podstawowe

Zadanie:

1) Na odpowiednim porcie ustawić żądaną informację o dowolnej treści. Skontrolować

działanie przy użyciu diod LED na płycie dydaktycznej.

2) Odmierzanie czasu – pętla opóźniająca i wykorzystanie przerwań. Wyświetlić na

buforze LED dowolną dynamiczną informację – pulsowanie, miganie itp.

Język: Asembler

Zasoby: port PD2-PD7, port PC6-PC7

Ćwiczenie 3 Temat: Obsługa rejestrów i portów mikrokontrolera.

Zadanie: Obsługa klawiatury. W zależności od ustawienia klawiatury wyświetlać

odpowiednią informację na buforze LED.

Język: Asembler

Zasoby: port PB0-PB3, port PD2-PD7, port PC6-PC7

Ćwiczenie 4 Temat: Generacja dźwięków za pomocą brzęczyka.

Zadanie: 1) Wykorzystać programy do odmierzania czasu do generacji dźwięku w zakresie

słyszalnym.

2) Przyporządkować klawiszom różne dźwięki.

Język: Asembler

Zasoby: port PB5, port PB0-PB3

Ćwiczenie 5 Temat: Generacja dźwięków za pomocą brzęczyka oraz wyświetlanie informacji na diodach

LED.

Zadanie: Wygenerować dźwięk oraz ustawić dowolną informację na diodach LED. Napisać

obsługę klawiatury.

Język: C

Zasoby: port PB5, port PB0-PB3

Page 6: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 6 Wszystkie mikrokontrolery z rodziny AVR wyposażone są w przetwornik analogowo-

cyfrowy (ADC). Najczęściej jest to jeden przetwornik, który posiada kilka

multipleksowanych wejść. Programista posiada możliwość wyboru, z którego wejścia

w danym momencie chce korzystać. Przetwornik może pracować w dwóch trybach:

1. Tryb ciągły, konwersja wykonywana automatycznie co określony czas;

2. Wyzwalanie ręczne.

Mikrokontroler Atmega32, posiada jeden 10-bitowy przetwornik ADC. Wynik

konwersji przechowywany jest w rejestrach ADCH i ADCL. Istnieje możliwość odczytu

8-bitowego. Do konfiguracji przetwornika wykorzystywane są dwa rejestry:

• ADCMUX

• ADCSRA

Podłączanie przetwornika analogowo-cyfrowego

W układach elektronicznych, w których występują sygnały analogowe często

wprowadza się rozdział napięć zasilających na napięcia „analogowe” i „cyfrowe”. Tak samo

postępuje się z masą, prowadząc „masę cyfrową” i „masę analogową” osobno na płytce.

Zabiegi takie wynikają z faktu, że układy cyfrowe w których występuje częste kluczowanie są

źródłami szumu. Szum ten przedostający się na linie zasilania i masy może zakłócać sygnały

analogowe i wprowadzać błędy pomiaru.

Jednym z typowych rozwiązań oddzielenia zasilania analogowego od cyfrowego jest

układ pokazany na rysunku poniżej. Jak wiadomo, cewkę w przypadku prądu stałego można

rozpatrywać jako zwarcie. Dla prądów wysokiej częstotliwości jest ona „oporem”.

Kondensatory stanowią przerwę w obwodzie dla prądu stałego jednak są dogodną drogą dla

prądu zmiennego. Cały ten układ powoduje więc, że prąd stały może swobodnie płynąć od

źródła do odbiorników natomiast prąd zmienny (wynikający z zakłóceń) jest zwierany do

masy.

Rys. 3. Rozdzielenie zasilania analogowego i cyfrowego.

W przypadku masy nie wprowadza się elementów filtrujących pomiędzy masę

cyfrową i analogową. Prowadzi się natomiast te sygnały osobno na ścieżkach płytki

drukowanej zwierając je w tylko jednym miejscu na płytce drukowanej. Mikrokontrolery

z rodziny AVR posiadają oddzielne piny dla analogowych i cyfrowych sygnałów

zasilających. W wielu mikrokontrolerach napięcie z wejścia analogowego wykorzystywane

jest jako napięcie zasilające port A. (sprawdź w karcie katalogowej). Z tego powodu, jeśli nie

wykorzystujemy przetwornika ADC a zamierzamy korzystać z portu A, należy pin AVCC

połączyć z napięciem cyfrowym. Takiego połączenia można też dokonać jeśli nie zależy nam

na dużej dokładności konwersji analogowo-cyfrowej.

Page 7: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Rys. 4. Przykładowe sygnały podane na wejście ADC

Mikrokontrolery z rodziny AVR posiadają wejście napięcia odniesienia do

przetwornika ADC (VREF). Podczas projektowania układu wykorzystującego przetwornik

ADC należy wziąć pod uwagę jakie będą sygnały podawane na jego wejście. Na rysunku 4

pokazano dwa przykładowe sygnały. Wartość sygnału o dużej amplitudzie (a) zmienia się w

zakresie około 0 – 5V. Dlatego, napięcie odniesienia dla przetwornika nie może być niższe

niż 5V. W przypadku niższego napięcia odniesienia przetwornik dawałby fałszywe wyniki

lub mógłby nawet zostać uszkodzony. W drugim przypadku, wartość sygnału nie przekracza

wartości 1V (b). Duża część zakresu pomiarowego przetwornika jest więc nie wykorzystana

a sygnał jest próbkowany z mniejszą rozdzielczością niż jest to dostępne. Z tego powodu, jeśli

mamy pewność, że sygnał nie będzie przekraczał wartości 1V, najlepszym rozwiązaniem jest

podanie napięcia odniesienia wynoszącego 1V. Istnieją trzy możliwości podania napięcia

odniesienia do przetwornika:

1. Zewnętrzne napięcie podane na pin VREF

2. VREF połączone wewnątrz mikrokontrolera do AVCC

3. Wewnętrzne źródło napięcia 2,56V

W dokumentacji zestawu startowego należy zwrócić uwagę na sposób podłączenia

pinu VREF. Jak widać, jest do niego podłączony kondensator. Należy też zwrócić uwagę jaki

sygnał może zostać podany na wejście przetwornika. Może on mieć wartość nawet 5V.

Dlatego jest tylko jedno ustawienie bitów REFS1, REFS0 właściwe dla zestawu

uruchomieniowego ZL15AVR.

Rejestr ADCMUX

Mikrokontrolery z rodziny AVR, najczęściej posiadają wiele wejść do przetwornika

ADC. W szczególności w mikrokontrolerze AtMega32 każdy pin portu A może być użyty

jako wejście przetwornika. Podczas konfiguracji przetwornika, musimy więc określić, który

z pinów ma być użyty jako wejście ADC. Do ustawienia wejścia używane są bity MUX[4..0].

Przetwornik ADC w mikrokontrolerze Atmega32 posiada rozdzielczość 10 bitów. Aby

zapisać wynik konwersji wykonanej przy użyciu tego przetwornika, potrzebne są dwa

8-bitowe rejestry (ADCH i ADCL). Ponieważ zapisujemy wartość 10-bitową do dwóch

rejestrów (16-bitów), pozostaje 6 bitów zbędnych, które uzupełniane są zerami. Istnieje

możliwość wyboru, czy wartość rejestrów za zostać wyjustowania do prawej lub lewej strony.

- ADLAR = 0, justowanie do prawej, odczyt 10-bitowy

ADCH 0 0 0 0 0 0 1 1

ADCL 1 1 1 1 1 1 1 1

- ADLAR = 1, justowanie do lewej, odczyt 8-bitowy

ADCH 1 1 1 1 1 1 1 1

ADCL 1 1 0 0 0 0 0 0

Page 8: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Justowanie do prawej strony ma sens kiedy zależy nam na największej dostępnej

dokładności i odczytujemy pełen, 10-bitowy, wynik. Musimy odczytać oba rejestry

a następnie ich zawartość skleić ze sobą. Jeśli nie zależy nam na pełnej dokładności, możemy

odczytywać tylko wartość 8-bitową. W takim przypadku justujemy wynik do lewej

i odczytujemy jedynie wartość rejestru ADCH.

Rejestr ADCSRA

Jeśli chcemy używać przetwornika, musimy go najpierw włączyć. Służy do tego bit

ADEN. Przetwornik ADC w mikrokontrolerach AVR może pracować w dwóch trybach:

1. Wyzwalanie ręczne

2. Praca ciągła

W przypadku wyzwalanie ręcznego musimy ręcznie ustawić bit, który uruchomi

konwersję (ADSC), następnie sprawdzić flagę (ADIF), która mówi czy konwersja się

zakończyła. Następnie możemy odczytać wynik z rejestrów ADCH i ADCL.

Przykładowy program

Jest to przykładowe podejście przy wykorzystaniu jednego wejścia przetwornika ADC,

odczycie 10-bitowym i ręcznym wyzwalaniu:

int main()

{

ustawienie rejestru ADCMUX

while(1)

{

Ustawienie rejestru ADCSRA (uruchomienie konwersji)

Sprawdzenie flagi informującej o ukończeniu konwersji

Odczytanie zawartości rejestrów ADCH i ADCL

Przeliczenie wartości rejestrów na oczekiwane jednostki

Wyświetlenie wyniku

}

}

Ćwiczenie 6 Temat: Obsługa 10-bitowego przetwornika ADC wbudowanego w mikrokontroler.

Zadanie: W zależności od ustawienia pokrętła potencjometru analogowego P2 wyświetlić

wyskalowaną wartość tego napięcia na diodach LED.

Język: C

Zasoby: port PA0, port PD2-PD7, port PC6-PC7

Page 9: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 7 Transmisja szeregowa RS- 232

Złącze RS-232 jest podstawowym złączem wykorzystywanym w transmisji

szeregowej. Znaki składające się z pięciu do ośmiu bitów mogą być przesyłane w sposób

szeregowy bit po bicie. Aby przesłać dane przez złącze RS-232 należy zaopatrzyć je w dwa

dodatkowe bity sterujące, mianowicie:

• Bit startu, który wyznaczy rozpoczęcie nadawania;

• Bit stopu, wyznacza koniec procesu nadawania pojedynczego znaku.

Wykorzystywany jest tutaj również bit parzystości, w celu detekcji błędów. Jest to

jednak czynność stosowana coraz rzadziej, ponieważ lepszym rozwiązaniem okazuje się być

algorytm sum kontrolnych, zapewnia on znacznie większy poziom detekcji błędów

w przesyłanym znaku. Bit parzystości kontroluje stosunek zer do jedynek w znaku. W

transmisji szeregowej asynchronicznej stosuj się dwa bity stopu, służy to zwiększeniu odstępu

pomiędzy przesyłanymi znakami. Urządzenia DCE (Data Communication Equipment ) są to

np. modemy lub też inne urządzenia, które służą w pośredniczeniu w transmisji szeregowej

danych. Urządzenia zaś DTE (Data Terminal Equipment) to komputery lub inne urządzenia,

które są nadawcami lub odbiorcami informacji.

Przesyłanie danych przez magistralę RS-232 zwykle za pomocą kabla. Przy tym

połączeniu może być realizowane jedno z kilku połączeń w zależności od złącza, które

zastosowane jest w komputerze (9 lub 25 pin):

- DB-9 BD-9

RDX(2) ------------- TDX(3)

TDX(3) ------------- RDX(2)

GND(5) ------------- GND(5)

- DB-9 DB-25

RDX(2) ------------ TDX(2)

TDX(3) ------------ RDX(3)

GND(5) ------------ GND(7)

- DB-25 DB-25

RDX(3) ------------ TDX(2)

TDX(2) ------------ RDX(3)

GND(7) ------------ GND(7)

Szybkość transmisji szeregowej

Nawet w transmisji asynchronicznej urządzenia nadawcze i odbiorcze muszą być

w jakiś sposób ,,zsynchronizowane'' – muszą więc pracować z ,,jednakową szybkością'' (to

znaczy wiedzieć ile ,,trwa'' transmisja pojedynczego bitu). Szybkość transmisji podawana jest

w bitach na sekundę - bps (ang. bits per second). Najczęściej używane szybkości w transmisji

szeregowej mieszczą się w następującym szeregu: 75, 110, 150, 300, 600, 1200, 2400, 4800,

9600, 19200, 38400, 57600 oraz 115200 bps. Urządzenia nadawcze i odbiorcze muszą zatem

pracować z jednakową szybkością. Zazwyczaj jest ona taka sama w obu kierunkach.

Szeregowa transmisja asynchroniczna

Transmisja rozpoczyna się od przesłania bitu startu (bit STB) następnie przesyłany jest

znak (oznaczony CB) – zwykle 7 lub 8 bitów danych, transmisję kończy bit stopu (STB). Po

czasie martwym procedura jest powtarzana.

Na początku transmisji przesyłany jest jednostkowy impuls (zero lub jeden), musi on

być przeciwny do sygnału zastosowanego w czasie martwym. Odbiorca takiego bitu

Page 10: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

startowego wie że w takim odcinku czasu będą nadawane następne bity tworzące przesyłaną

informację następuje więc krótkie zsynchronizowanie nadawcy z odbiorcy. Bity stopu

w zależności od rodzaju zastosowanego rozwiązania trwają od jednej do kilku jednostek

czasu.

Do podstawowych wad transmisji asynchronicznej należą:

- istnienie czasu martwego, które ogranicza wydajność przesyłu nawet do 60% ;

- szybkość transmisji jest ograniczona do kilkudziesięciu Kb/s.

Zaletami takiej transmisji są:

- niezależność zegarów nadawcy i odbiorcy;

- zamknięcie transmisji w ścisłych ramach czasowych.

Transmisja nazywana jest asynchroniczną, gdyż zakłada się, że dane mogą pojawiać

się w dowolnej chwili i będą natychmiast transmitowane do odbiorcy. Z tego też powodu

rozpoczęcie transmisji danych musi być zasygnalizowane w jakiś sposób. W tym celu

używamy dodatkowych dwóch bitów:

- bit startu – 0

- bit stopu - 1.

Znak A wysyłany w sposób szeregowy ,,wygląda'' następująco: 1 _ __

0 __| |_____| |

SP 1 00000 1T

Oznaczenia użyte w powyższym wykresie to:

S - bit startu,

P - bit parzystości,

T - bit stopu.

Szeregowa transmisja synchroniczna

W transmisji synchronicznej ciąg znaków zerojedynkowych o ściśle określonym

czasie trwania i ilości dokonuje zsynchronizowania nadawcy i odbiorcy. Początek nadawania

to ciąg synchronizujący (zazwyczaj jest to nie więcej niż 25 impulsów) – SYNC. Po

synchronizacji następuje przesłanie danych (DATA). Synchronizacja jest powtarzana tylko

wtedy, gdy następuje rozsynchronizowanie – co może się objawiać wzrostem błędów

w transmisji.

Zalety transmisji synchronicznej to:

- brak przerw w transmisji;

- nielimitowana szybkość transmisji.

Wadami takiej transmisji są:

- konieczność synchronizowania zegarów nadawcy i odbiorcy;

- urządzenia nadawczo-odbiorcze muszą być wyposażone w bufory.

Sposób postępowania dla mikrokontrolera

Mikrokontroler ATmega32 wyposażony jest w USART (Universal Synchronous and

Asynchronous serial Receiver Transmitter), który może pracować jako RS232. Aby

skorzystać z portu szeregowego RS232, należy wcześniej odpowiednio skonfigurować

mikrokontroler. Do tego celu służą rejestry:

• UBRRH - USART Baud Rate Register High,

• UBRRL - USART Baud Rate Register Low,

Page 11: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

- Bit URSEL (bit 7 w UBRRH) musi być ustawiony na 0.

- Bity 6:4 w UBRRH są zarezerwowane i należy je zerować.

- Szybkość transmisji wynosi:

- Wartość UBRR obliczamy ze wzoru:

• UCSRA - USART Control and Status Register A,

- Bit 7 – Ustawiony, gdy w buforze odbiorczym są nieprzeczytane dane. Może służyć

do wyzwolenia przerwania.

- Bit 6 – Ustawiany, gdy zakończy sie nadawanie ramki. Może służyć do wyzwolenia

przerwania. Zerowany przez wpisanie 1 lub przy wywołaniu przerwania.

- Bit 5 – Ustawiony, gdy rejestr nadawczy jest pusty. Może służyć do wyzwolenia

przerwania.

- Bit 4 – Błąd ramki.

- Bit 3 – Przepełnienie kolejki odbiorczej.

- Bit 2 – Błąd parzystości.

- Bit 1 – Podwojenie prędkości transmisji, tylko dla trybu asynchronicznego.

- Bit 0 – Włączenie trybu komunikacji wieloprocesorowej.

• UCSRB - USART Control and Status Register B,

- Bit 7 – Włączenie przerwania, gdy odebrano dane (ustawiony bit RXC).

- Bit 6 – Włączenie przerwania, gdy zakończono nadawanie (ustawiony bit TXC).

- Bit 5 – Włączenie przerwania, gdy rejestr nadawczy pusty (ustawiony bit UDRE).

- Bit 4 – Włączenie odbiornika, zmiana funkcji nogi PD0 na RxD.

- Bit 3 – Włączenie nadajnika, zmiana funkcji nogi PD1 na TxD.

- Bit 2 – Liczba przesyłanych bitów.

- Bit 1 – Dziewiąty odbierany bit.

- Bit 0 – Dziewiąty nadawany bit.

• UCSRC - USART Control and Status Register C,

- Bit 7 – musi być ustawiony na 1.

- Bit 6 – Tryb pracy:

- 0 – asynchroniczny

- 1 – synchroniczny

Page 12: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

- Bity 5:4 – Tryb parzystości:

- 00 – bez bitu parzystości

- 01 – wartość zarezerwowana

- 10 – bit parzystości (ang. even parity)

- 11 – bit nieparzystości (ang. odd parity)

- Bit 3 – Liczba bitów stopu:

- 0 – jeden bit

- 1 – dwa bity

- Bity 2:1 – Liczba przesyłanych bitów.

- Bit 0 – Polaryzacja sygnału zegara, dotyczy trybu synchronicznego.

Po zainicjalizowaniu mikrokontrolera można używać transmisji szeregowej

wykorzystując odpowiednie funkcje i polecenia operujące na rejestrze UDR.

• UDR - USART I/O Data Register:

- Są osobne rejestry nadawczy i odbiorczy (USART pracuje w trybie full duplex),

widziane pod tym samym adresem wejścia-wyjścia.

- Zapis dokonywany jest do rejestru nadawczego.

- Odczyt dotyczy bufora odbiorczego.

- Odbierane bity są gromadzone w rejestrze odbiorczym.

- Odebrane dane są dodatkowo buforowane w dwuelementowej kolejce FIFO.

Ćwiczenie 7 Temat: Komunikacja za pomocą portu szeregowego RS232.

Zadanie:

1) Należy uruchomić port szeregowy kontrolera.

2) Zrealizować funkcję echa dla konsoli: znaki wpisywane za pomocą klawiatury

komputerowej powinny być przesyłane za pośrednictwem portu szeregowego

mikrokontrolera i wyświetlane na ekranie komputera (okno terminala)

3) Echo buforowane: dane wpisane za pomocą klawiatury powinny być gromadzone w

buforze o wielości 128 bajtów w pamięci RAM kontrolera, zaś wysłane po wciśnięciu

klawisza ENTER lub przepełnieniu bufora.

Język: C

Zasoby: port PD0, port PD1

Page 13: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 8-9 Alfanumeryczny wyświetlacz LCD, na którym są wyświetlane parametry w trakcie

pracy, składa się z dwóch linii po szesnaście znaków. Układ ten posiada wbudowany

sterownik zgodny z HD44780, który umożliwia pracę wyświetlacza w jednym z dwóch

trybów – magistrala danych może być ośmiobitowa lub czterobitowa. Na zajęciach

wykorzystywać będziemy magistralę czterobitową, która pozwala na oszczędzenie 4 portów

mikrokontrolera. Wadą tej magistrali jest bardziej rozbudowana i skomplikowana obsługa

programowa. Rysunek przedstawia rozmieszczenie wyprowadzeń wyświetlacza, a tabela

zawiera opis ich funkcji.

Rys. 5. Wyprowadzenia alfanumerycznego wyświetlacza LCD

Nr Symbol Funkcja

1 GND Masa

2 Vcc Zasilanie

3 Kontrast Regulacja kontrastu

4 RS Wybór rejestru

5 R/W 1 – odczyt, 0 – zapis

6 E Sygnał zezwalający enable

7 D0 Linia danych D0

8 D1 Linia danych D1

9 D2 Linia danych D2

10 D3 Linia danych D3

11 D4 Linia danych D4

12 D5 Linia danych D5

13 D6 Linia danych D6

14 D7 Linia danych D7

15 LED_A Anoda podświetlania

16 LED_C Katoda podświetlania

Tabela 1. Funkcje wyprowadzeń wyświetlacza LCD

LCD 2x16

Page 14: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

W wykorzystanym wyświetlaczu jest wbudowane podświetlanie (linie 15 i 16), które

zrealizowano za pomocą diod LED. Podświetlanie wymagało dodania rezystora

ograniczającego prąd, którego nie ma w module wyświetlacza. Bez rezystora ograniczającego

wyświetlacz świeciłby bardzo jasno, wydzielając przy tym dużo ciepła. Prowadziłoby to do

nadmiernego nagrzewania się matrycy oraz skróciłoby jej żywotność, a także mogłoby

spowodować szybsze odparowanie ciekłego kryształu. Do linii CONTRAST dołączono

potencjometr tak jak na rysunku, co umożliwia regulację kontrastu. Standardowo kontrast

regulowany jest przyłożeniem napięcia z zakresu od 0 do napięcia zasilania, gdzie zero

odpowiada maksymalnemu kontrastowi, a napięcie zasilania - minimalnemu.

Wyświetlacz LCD posiada następujące rejestry:

- DataWR - rejestr danych przeznaczony do zapisu informacji;

- DataRD - rejestr danych przeznaczony do odczytu informacji;

- ControlRD - rejestr stanu wyświetlacza (Status) przeznaczony do odczytu;

- ControlWR - rejestr sterujący wyświetlacza (Control) przeznaczony do zapisu;

O wyborze, do którego rejestru nastąpi zapis lub odczyt decydują linie 4 i 5 (D/C

i R/W). Linia 6 (E-enable) uaktywnia wymianę informacji z wyświetlaczem. Wyświetlacz

zawiera dwa rodzaje wewnętrznej pamięci, które mogą być kontrolowane: pamięć DD

(Display Data) i pamięć CG (Character Generator). Dostęp do tych pamięci odbywa się przez

wymienione wyżej rejestry. Pamięć CG składa się z dwóch części: pamięci CG ROM

zawierającej przygotowane przez producenta kody znaków oraz pamięci CG RAM

przeznaczonej na kody znaków dowolnie zdefiniowane.

Aby wyświetlacz zaczął funkcjonować zawsze na początku programu po załączeniu

zasilania należy go zainicjować, czyli wysłać kilka rozkazów sterujących w ściśle

określonych odstępach czasu. Rozkazy oraz wszystkie zależności są zamieszczone w aplikacji

sterownika HD44780. Przykładowa sekwencja inicjalizacji wyświetlacza LCD znajduje się na

rysunku .

Page 15: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Rys. 6. Przykładowa programowa inicjalizacja modułu LCD

Po prawidłowym zainicjowaniu startu wyświetlacza można przejść do komunikacji z

tym modułem, która odbywa się przy wykorzystaniu magistrali czterobitowej. Każde

wysyłane do LCD słowo składa się z ośmiu bitów, funkcja odpowiedzialna za wysyłanie

danych do modułu dzieli je na dwie części czterobitowe i wysyła najpierw cztery starsze bity,

a następnie cztery młodsze.

Page 16: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Ćwiczenie 8 Temat: Obsługa wyświetlacza char LCD.

Zadanie:

1) Zainicjalizować wyświetlacz LCD.

2) Wyświetlić na wyświetlaczu LCD napis statyczny.

3) Zrealizować funkcję „reklamy świetlnej”: stopniowe wyświetlanie kolejnych liter

napisu, przewijanie w lewo i prawo, migotanie napisu (negatyw).

Język: C

Zasoby: port PA2 – PA7

Ćwiczenie 9 Temat: Obsługa 10-bitowego przetwornika ADC wbudowanego w mikrokontroler.

Zadanie: Pomiar temperatury przy użyciu termistora. Wyświetlenie przeliczonej wartości

temperatury na wyświetlaczu char LCD.

Język: C

Zasoby: port PA1, port PA2 – PA7

Page 17: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 10 Jednym z dwóch najpopularniejszych magistral do podłączania urządzeń

peryferyjnych w systemach mikroprocesorowych jest magistrala Serial Peripherial Interface

(SPI). Pozwala ona w prosty sposób komunikować się mikrokontrolerowi z takimi

peryferiami jak przetworniki ADC i DAC, czujniki temperatury, drivery diod, pamięci

EEPROM itp. Mikrokontrolery z rodziny AVR posiadają wbudowaną obsługę tej magistrali

co znacznie ułatwia programowanie układów korzystających z SPI.

Część sprzętowa magistrali SPI

Magistrala SPI korzysta z architektury master-slave. Jedno w urządzeń (MASTER)

inicjalizuje transmisję i generuje sygnał zegarowy. Drugie (SLAVE) odpowiada. Transmisja

może toczyć się w trybie full-duplex, to znaczy jednoczesne nadawanie i odbieranie. Służą do

tego dwie linie sygnałowe:

• MOSI (Master Out, Slave In)

• MISO (Master In, Slave Out)

Sygnał zegara przesyłany jest linią SCK.

Do magistrali może być podłączonych wiele urządzeń. Wykorzystują one wspólnie

linie MISO, MOSI i SCK. Koniecznym jest poprowadzenie oddzielnych linii Chip Select

(CS), służących do wyboru, które urządzenie ma być w danej chwili aktywne. Przykładowy

układ wykorzystujący magistralę SPI pokazany jest na rysunku 7.

Rys. 7. Przykładowe połączenie SPI

SPI posiada kilka trybów pracy. Przed korzystaniem z tej magistrali należy ustawić:

1. Kolejność bitów (MSB pierwszy lub LSB pierwszy),

2. Polaryzację zegara,

3. Fazę zegara,

4. Częstotliwość pracy magistrali.

Różne układy peryferyjne mogą wymagać innych ustawień. Z tego powodu może się zdarzyć,

że ustawienia magistrali trzeba zmieniać przed odwołaniem się do kolejnego urządzenia

peryferyjnego.

Programowanie interfejsu SPI

Do konfiguracji SPI w mikrokontrolerach AVR służą rejestry:

• SPCR - aby używać SPI, należy je najpierw włączyć (bit SPE). Kolejne bity tego

rejestru pozwalają ustawić, kolejność bitów, fazę i polaryzację zegara, częstotliwość

transmisji oraz czy mikrokontroler ma być masterem czy slavem.

• SPSR - w tym rejestrze znajduje się bit informujący o zakończeniu transmisji.

Znajduje się tutaj też bit odpowiedzialny za uruchomienie podwajania częstotliwości zegara

magistrali.

Rejestr, do którego zapisywane są dane do wysłania oraz rejestr w którym

przechowywane są dane odebrane noszą tą samą nazwę (SPDR). Należy jednak pamiętać, że

Page 18: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

są to tak naprawdę dwa oddzielne rejestry. Kiedy mikrokontroler pracuje w trybie master,

transfer inicjowany jest zapisaniem danej do rejestru SPDR. W tym samym czasie następuje

odbiór. Jeśli chcemy jedynie odebrać dane z zewnątrz, to co zostanie zapisane do rejestru

SPDR nie ma znaczenia.

Sposób programowania int main()

{

ustawienie rejestru SPCR

ustawienie rejestru SPSR

zapisanie do rejestru SPDR (wykonanie transmisji)

Sprawdzenie flagi ukończenia transmisji

Odczytanie danej z rejestru SPDR

}

Ćwiczenie 10 Temat: Cyfrowy pomiar temperatury przy użyciu termometru cyfrowego TC77.

Zadanie: Zrobić pomiar temperatury i wyświetlić tę wartość na wyświetlaczu char LCD.

Porównać wartość tej temperatury z temperaturą pomierzoną przy użyciu termistora.

Język: C

Zasoby: port PA2 – PA7, port PB4, PB6, PB7

Page 19: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 11 Wyświetlacze 7-segmentowe zbudowane są z diod LED. Składają się z siedmiu

segmentów + kropka (a, b, ..., g, dt), za pomocą których możemy przedstawić dowolną cyfrę

dziesiętną, a także niektóre litery.

Rys. 8. Wygląd zewnętrzny wyświetlacza 7-segmentowego

W celu zmniejszenia liczby wyprowadzeń, łączy się LED-y ( diody ) na dwa sposoby:

łącząc wszystkie katody ( wyświetlacz 7-segmentowy ze wspólną katodą ) albo wszystkie

anody ( wyświetlacz 7-segmentowy ze wspólną anodą ).

Rys. 9. Schematy podłączenia wyświetlaczy 7-segmentowych

Cyfry kodujemy tak, aby w siedmiobitowym słowie binarnym każdy bit odpowiadał

jednemu z segmentów. Tablica stanów linii portów układu wyświetlacza umożliwiająca

wyświetlanie cyfr:

Wspólna anoda Wspólna katoda

cyfra h g f e d c b a cyfra h g f e d c b a

0

1

2

3

4

5

6

7

8

9

.

0 0 1 1 1 1 1 1

0 0 0 0 0 1 1 0

0 1 0 1 1 0 1 1

0 1 0 0 1 1 1 1

0 1 1 0 0 1 1 0

0 1 1 0 1 1 0 1

0 1 1 1 1 1 0 1

0 0 0 0 0 1 1 1

0 1 1 1 1 1 1 1

0 1 1 0 1 1 1 1

1 0 0 0 0 0 0 0

0

1

2

3

4

5

6

7

8

9

.

1 1 0 0 0 0 0 0

1 1 1 1 1 0 0 1

1 0 1 0 0 1 0 0

1 0 1 1 0 0 0 0

1 0 0 1 1 0 0 1

1 0 0 1 0 0 1 0

1 0 0 0 0 0 1 0

1 1 1 1 1 0 0 0

1 0 0 0 0 0 0 0

1 0 0 1 0 0 0 0

0 1 1 1 1 1 1 1

Tabela 2. Stany linii portów układu wyświetlacza 7-segmentowego umożliwiająca

wyświetlanie cyfr.

Zaletą tych wyświetlaczy jest bardzo dobra czytelność nawet w całkowitych

ciemnościach. Wadą – duży pobór mocy (2..3 mW na segment dla najbardziej

energooszczędnych wyświetlaczy), co bardzo ogranicza ich zastosowanie w sprzęcie

zasilanym bateryjnie.

Page 20: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wyświetlacze statyczne

Statyczne sterowanie wyświetlaczem informacji jest najprostszym sposobem

wykorzystania wyświetlacza LED (lub pojedynczych diod). Jednocześnie sposób ten jest

najrzadziej stosowany ze względu na konieczność zarezerwowania tylu linii wyjściowych

portu mikrokontrolera ile będzie wykorzystywanych niezależnie elementów wyświetlacza.

Sposób ten polega na ciągłym podtrzymywaniu (do momentu zmiany informacji)

odpowiednich stanów logicznych, którym odpowiada świecenie lub wygaszenie diod LED.

Z tego powodu obsługa wyświetlacza statycznego jest niezwykle prosta a sam mikrokontroler

obciążony jest tylko w momencie zmian przekazywanej informacji.

Stosowanie wyświetlaczy ze wspólnym wyprowadzeniem anod poszczególnych

segmentów jest dużo bardziej popularne, ponieważ zazwyczaj bardziej wydajnym prądowo

poziomem logicznym linii portów wejścia-wyjścia jest poziom niski. Gwarantuje to

prawidłowe zaświecenie wyświetlacza. Warto nadmienić, że dla miniaturowych wyświetlaczy

niskoprądowych jest wymagany niski prąd o wartości 2..3mA. Można też wykorzystać

wyświetlacz ze wspólną katodą, którą wówczas łączymy z masą. Jednak stosowany

mikrokontroler musi mieć wyjścia portów w układzie przeciwsobnym, tzn. o odpowiedniej

wydajności linii w stanie wysokim. Dla obu wariantów różna będzie interpretacja logiczna

stanu wyświetlacza: dla wspólnej anody zaświecenie danego segmentu uzyskamy ustawiając

poziom niski na odpowiadającej mu linii, natomiast dla wyświetlacza ze wspólną katodą

świeceniu odpowiada poziom wysoki na wyprowadzeniu mikrokontrolera.

Włączone szeregowo rezystory R1…R8 ograniczają maksymalny prąd płynący przez

wyświetlacz. Ich wartość dobieramy w zależności od wymagań stosowanego wyświetlacza

oraz z uwzględnieniem możliwości portu mikrokontrolera (470 – 1k).

Czasami zdarza się tak, że wydajność prądowa portu wykorzystywanego

mikrokontrolera jest niewystarczająca do bezpośredniego dołączenia wyświetlacza, wówczas

jedynym wyjściem z sytuacji jest zastosowanie pośredniczącego układu wzmacniającego,

mogącego obsłużyć kilka niezależnych linii.

Obsługa pojedynczego statycznego wyświetlacza 7segmentowego pociąga za sobą

konieczność rezerwacji ośmiu linii portu mikrokontrolera. Jeżeli stosowany mikrokontroler

ma niewiele wyprowadzeń lub też jest wykorzystywany w bardzo rozbudowanym systemie,

może się okazać, że nie jest możliwe gospodarowanie takiej liczby wyprowadzeń.

Rozwiązaniem tego problemu jest układ wyświetlacza statycznego sterowanego przy użyciu

trzech linii, z możliwością regulacji jasności świecenia.

Układem pośredniczącym może być wówczas rejestr szeregowo – równoległy

74LS164, który realizuje przekształcenie wyświetlanej informacji z postaci szeregowej,

przesyłanej z mikrokontrolera linią DATA w takt zegara CLK, do postaci równoległej,

wymaganej przez wyświetlacz. Układ ten nie jest w pełni statyczny, w skutek chwilowego

wygaszania wyświetlacza za pomocą tranzystora, co umożliwia wprowadzenie dodatkowej

cechy funkcjonalnej. Jest nią możliwość sterowania w sposób programowy jasnością

świecenia wyświetlacza. Regulację jasności można uzyskać poprzez dobór czasów włączania

i wyłączania wyświetlacza. W rozwiązaniu standardowym wyłączanie wyświetlacza następuje

na niezbędny do zapisania rejestru czas, co w praktyce jest nierozróżnialne dla oka. Jeżeli

jednak z odpowiednio dużą częstotliwością: 30…40Hz generowalibyśmy na wyprowadzeniu

ON przebieg prostokątny o zmieniającym się wypełnieniu , to uzyskalibyśmy efekt ciągłego

świecenia wyświetlacza o jasności zależnej właśnie od wypełnienia przebiegu sterującego.

Wyświetlacze multipleksowane (dynamiczne)

Zasada ich działania polega na współdzieleniu wyprowadzeń mikrokontrolera przez

połączone w grupy wyświetlacze siedmiosegmentowe i dołączeniu dodatkowych układów

sterujących zasilaniem poszczególnych grup. Odpowiednio szybkie zapalenie i gaszenie

Page 21: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

kolejnych grup oraz bezwładność ludzkiego wzroku dają w efekcie złudzenie świecenia

całego wyświetlacza.

Rys. 10. Układ wyświetlacza multipleksowanego

Do portu mikrokontrolera zostają dołączone równolegle (za pośrednictwem

rezystorów ograniczających prąd) cztery jednakowe wyświetlacze siedmiosegmentowe ze

wspólną anodą. W przypadku sterowania statycznego (anody dołączone bezpośrednio do

plusa zasilania) działanie takiego układu byłoby co najmniej dyskusyjne – polegałoby na

wyświetlaniu tej samej informacji na wszystkich wyświetlaczach. Sytuacja taka nie będzie

jednak mieć miejsca, gdyż anody poszczególnych wyświetlaczy są dołączone do zasilania za

pośrednictwem niezależnych tranzystorów T1…T4, sterowanych czterema liniami

mikrokontrolera W1…W4. Włączenie napięcia zasilania konkretnego wyświetlacza (wraz

z wyłączeniem pozostałych) następuje wyłącznie wtedy, gdy na linie portu D0…D7 są

wystawiane dane przeznaczone dla danego wyświetlacza.

Sposób postępowania:

1. włączamy 1-szy wyświetlacz

2. wyświetlamy cyfrę tysięcy

3. wyłączamy 1-szy wyświetlacz

4. włączamy 2-gi wyświetlacz

5. wyświetlamy cyfrę setek

6. wyłączamy 2-gi wyświetlacz

7. włączamy 3-ci wyświetlacz

8. wyświetlamy cyfrę dziesiątek

9. wyłączamy 3-ci wyświetlacz

10. włączamy 4-ty wyświetlacz

11. wyświetlamy cyfrę jedności

12. wyłączamy 4-ty wyświetlacz

Gdy czas wyświetlania będzie odpowiednio krótki (rzędu kilku, kilkunastu milisekund)

będziemy mogli zobaczyć wszystkie 4 cyfry na raz, ponieważ ludzkie oko nie jest w stanie

zaobserwować tak szybkich zmian

Obsługa wszystkich pozycji następuje cyklicznie. Czas trwania pojedynczego cyklu

powinien być tak dobrany, aby częstotliwość świecenia każdego wyświetlacza nie była

mniejsza niż 30…40 Hz (aby przekroczyć możliwość rejestrowania zmian przez ludzkie oko).

Najlepszą sytuacją jest gdy częstotliwość ta wynosi 100Hz, co pozwala na wyświetlanie

informacji pozbawione efektu migotania znanego z ekranów monitorów i telewizorów. Dalsze

zwiększanie częstotliwości odświeżania nie poprawia już jakości wyświetlania, powoduje za

Page 22: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

to wzrost zakłóceń radioelektrycznych generowanych przez wyświetlacz oraz niepotrzebnie

marnuje moc obliczeniową mikrokontrolera.

W układzie wyświetlacza dynamicznego ważny jest dobór wartości rezystorów

ograniczających. Najłatwiej jest przyjąć wartości czterokrotnie mniejsze niż w statycznym

układzie sterowania takiego wyświetlacza. Często jednak taki wybór daje w efekcie zbyt

jasne, oślepiające wręcz świecenie wyświetlaczy. Spowodowane jest to, tym , że chociaż

teoretycznie prąd płynący przez wyświetlacz ma czterokrotnie większa wartość i płynie

czterokrotnie krócej, dając taką samą wartość średnią jak przy sterowaniu statycznym, to

jednak efektywność wyświetlaczy LED pracujących przy większych prądach jest dużo

wyższa (więcej energii jest zamienianej na światło). W praktyce okazuje się, że wartość

rezystorów należy zwiększyć o 50 – 100%, aby uzyskana jasność była porównywalna z

jasnością świecenia wyświetlacza przy sterowaniu statycznym.

Cechy multipleksowanego sterowania wyświetlaczy:

Zalety:

- niewielka liczba wykorzystywanych wyprowadzeń mikrokontrolera

- duża jasność świecenia z możliwością regulacji

- prosty układ połączeń i łatwe projektowanie płytki drukowanej

Wady:

- konieczność zarezerwowania ciągłej mocy obliczeniowej mikrokontrolera do obsługi

takiego układu i znaczna komplikacja oprogramowania

- generacja zakłóceń radioelektrycznych związana z przełączaniem pozycji

wyświetlacza, co sprawia, że konfiguracja ta jest niezbyt chętnie stosowana w

urządzeniach zawierających precyzyjne podzespoły analogowe o dużej czułości

Ćwiczenie 11 Temat: Obsługa wyświetlacza 7-segmentowego.

Zadanie:

1) Uruchomić wyświetlacz 7-segmentowy i wyświetlić stałą wartość.

2) Zmieniać wartość (np. inkrementacja) wyświetlaną na wyświetlaczu 7-segmentowym

poprzez wciśnięcie przycisku SW0.

Język: C

Zasoby: port PB0, port P… - P...

Page 23: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 12 Najpopularniejszymi magistralami do podłączania urządzeń peryferyjnych w

systemach mikroprocesorowych są magistrale Serial Peripherial Interface (SPI) oraz I2C.

Najczęściej spełniają one podobne funkcje i wykorzystywane są jako platforma komunikacji

mikrokontrolerów z urządzeniami peryferyjnymi. Może być również wykorzystana przy

komunikacji pomiędzy np. modułami bardziej rozbudowanego systemu. Mikrokontrolery z

rodziny AVR posiadają wbudowaną obsługę magistrali I2C. Ponieważ nazwa „I2C” jest

zastrzeżona przez firmę Philips, inni producenci często stosują inne nazwy. Firma Atmel

używa nazwy Two Wire (serial) Interface (TWI).

Część sprzętowa magistrali I2C

Magistrala I2C składa się jedynie z dwóch dwukierunkowych linii: Serial Data Line

(SDL) oraz Serial Clock Line (SCL). Linie te są wspólne dla wszystkich urządzeń

podłączonych do magistrali. W przeciwieństwie do SPI, nie jest konieczne prowadzenie

dodatkowych linii adresujących, ponieważ w I2C urządzenia są wybierane poprzez adresy

nadawane liniami danych. Do linii SDL i SCL muszą być podłączone rezystory podciągające.

Podobnie jak w przypadku SPI, tutaj również urządzenia dzielone są na master i slave.

W jednej chwili tylko jedno urządzenie może spełniać rolę mastera. Urządzenia mogą jednak

zmieniać swoją rolę. Magistrala ta nie pozwala na jednoczesne nadawanie i odbieranie.

Magistrala może pracować z różnymi prędkościami. Należy więc sprawdzić w dokumentacji

użytych podzespołów jaka jest ich maksymalna dopuszczalna prędkość zegara na magistrali.

Rys. 11. Przykładowy system oparty na magistrali I2C

Protokół I2C

Rys. 12. Przykładowa transmisja

Master generuje warunek startu. Następnie nadawany jest adres urządzenia, które ma

się komunikować z masterem. Po adresie występuje bit informujący, czy master zamierza do

slave'a zapisywać czy go odpytywać. Następnie slave generuje bit ACK, który informuje

o tym, że adres został poprawnie odebrany i slave jest gotowy do wykonania transmisji.

Następnie wysyłane są bity danych. Po każdym bajcie nadawany jest przez odbiornik bit

ACK. Transmisja kończona jest w momencie, kiedy podczas wysokiego stanu na linii zegara

wystąpi zbocze narastające na linii danych.

Page 24: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Programowanie interfejsu I2C

Do konfiguracji interfejsu I2C w mikrokontrolerach AVR służą rejestry:

1. TWBR - liczba zapisana w tym rejestrze używana jest do obliczenia prędkości

transmisji.

2. TWCR - w tym rejestrze znajdują się bity odpowiedzialne za:

• Uaktywnienie interfejsu TWI (TWEN)

• Generację bitu ACK (TWEA)

• Generację sekwencji startu (TWSTA)

• Generację sekwencji stopu (TWSTO)

• Informowanie o zakończeniu transmisji i wywołujące przerwanie

(TWINT)

• Informujące o kolizji na magistrali (TWWC)

• Uaktywniające przerwanie (TWIE)

3. TWSR - w tym rejestrze znajdują sęi bity informujące o statusie interfejsu TWI oraz

ustawiające preskaler częstotliwości.

4. TWAR - w tym rejestrze przechowywany jest adres slave mikrokontrolera.

Dane znajdują się w rejestrze TWDR.

Porównanie interfejsów SPI i I2C

Poniżej przedstawione są ważniejsze zalety obu interfejsów.

Magistrala SPI

• Transmisja w trybie Full-Duplex

• Większa przepustowość niż w I2C

• Duża możliwość dopasowania protokołu do własnych potrzeb

• Możliwość przesyłania danych o dowolnej długości (nie tylko 8-bit)

• Mały pobór mocy

• Przy rozbudowanym systemie zabiera dużo pinów na sygnały Chip select

• Brak potwierdzeń i kontroli poprawności transmisji

• Tylko jeden master w systemie

Magistrala I2C

• Używa tylko dwóch linii

• Każe urządzenie może być masterem

• Sprzętowe sprawdzanie poprawności transmisji

Ćwiczenie 12 Temat: Obsługa RTC (zegar czasu rzeczywistego)

Zadanie:

1) Wysyłać datę / czas na wyświetlacz 7-segmentowy.

2) Rozszerzyć ppkt 1 o funkcję ustawiania czasu.

Język: C

Zasoby: port PC0, port PC1

Page 25: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 13-14 System przerwań obecny jest prawdopodobnie w każdym mikrokontrolerze. Im

bardziej jest on złożony, tym bardziej rozbudowany będzie w nim system przerwań.

W mikrokontrolerze ATmega32 dostępnych jest 21 rodzajów przerwań, które mogą być

wywoływane na skutek jeszcze większej liczby zdarzeń. Pozwala to na sprawne

kontrolowanie pracą wbudowanych w układ urządzeń peryferyjnych, a dzięki przerwaniom

zewnętrznym także urządzeń zewnętrznych.

Opis konfiguracji przerwań jest związany ściśle z układami peryferyjnymi i jest

zawarty w opisie tych układów w kolejnych punkach. Globalna flaga przerwań znajduje się

w głównym rejestrze kontrolnym SREG.

Zawartość rejestru SREG nie jest automatycznie zapamiętywana przy wejściu w kod

obsługi przerwania i odzyskiwana po jego wykonaniu. Należy to wykonywać programowo.

Podczas przerwań i wywołań procedur podrzędnych adres powrotny licznika programu jest

przechowywany w pamięci stosu. Poniższa tabela zawiera zestawienie wektorów przerwań

dla ATmega32.

Tabela 3. Wektory przerwań i resetu

Rejestr GICR - Główny rejestr kontroli przerwań

Page 26: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

INT1 - Bit odblokowujący zewnętrzne przerwanie 1. Ustawienie tego bitu na 1 oraz

ustawionym na 1 bicie I w SREG włącza zewnętrzne przerwanie. Sposób

wykrywania przerwania wybiera się bitami ISC11 i ISC10 w rejestrze MCUCR.

Zdarzenie może być wykryte nawet, gdy pin skonfigurowany jest jako wyjściowy.

INT0 - Bit odblokowujący zewnętrzne przerwanie 0. Ustawienie tego bitu na 1 oraz

ustawionym na 1 bicie I w SREG włącza zewnętrzne przerwanie. Sposób

wykrywania przerwania wybiera się bitami ISC01 i ISC00 w rejestrze MCUCR.

Zdarzenie może być wykryte nawet, gdy pin skonfigurowany jest jako wyjściowy.

INT2 - Bit odblokowujący zewnętrzne przerwanie 2. Ustawienie tego bitu na 1 oraz

ustawionym na 1 bicie I w SREG włącza zewnętrzne przerwanie. Bitem ISC2

w rejestrze MCUCSR określa się rodzaj zbocza generującego przerwanie. Zdarzenie

może być wykryte nawet, gdy pin skonfigurowany jest jako wyjściowy.

IVSEL - Bit wyboru początku wektora przerwań. Wykorzystywanie tego bitu wiąże się

z korzystaniem z programów bootujących. Jego wartość zero oznacza że wektory

przerwań zaczynają się od początku obszaru pamięci flash. Wartość jeden przesuwa

początek do miejsca wybranego przez konfigurację bitów bezpiecznikowych

BOOTZS

IVCE - Bit odblokowujący wybór wektora przerwań. Zabezpiecza przed przypadkową

zmianą stanu bitu IVSEL. Musi być ustawiony na 1 zanim zostanie zmieniony

IVSEL. Bit ten jest sprzętowo kasowany po 4 cyklach zegara od ustawienia tego

bitu, lub po zmianie IVSEL.

Przerwania zewnętrzne

Przerwania zewnętrzne są wyzwalane pinami INT0, INT1 oraz INT2. Mogą być

wyzwalane niezależnie od tego czy te piny są skonfigurowane jako wyjściowe czy wejściowe.

Cecha ta może być wykorzystana do programowego generowania przerwań. Zależnie od

ustawień w rejestrach MCUCR oraz MCUCS, przerwanie zewnętrzne może być wyzwolone

zboczem narastającym, opadającym, lub niskim poziomem (INT2 tylko zboczem).

INT0 / INT1: Przerwanie skonfigurowane jako wyzwalane poziomem będzie trwało

tak długo, jak będzie ten stan się utrzymywał. Poziom jest wykrywany asynchronicznie

i może służyć do wybudzenia mikrokontrolera z trybu Power-Down. Stan niski wówczas

musi się utrzymać przez czas, jaki jest potrzebny na wybudzenie.

INT2: Przerwanie INT2 może być wyzwolone jednym ze zboczy, a zdarzenie to

wykrywane jest asynchronicznie. Aby zdarzenie synchroniczne zostało wykryte (np. z wejścia

INT1), przy wykrywaniu zbocza impuls nie może być zbyt krótki, natomiast przy

wykrywaniu poziomu, jego stan również nie może trwać zbyt krótko. Związane to jest

z próbkowaniem stanu pinu w takt zegara Watchdoga.

Rejestr MCUCR - Rejestr kontroli mikrokontrolera Rejestr MCUCR zawiera między innymi bity kontrolne do wyboru sposobu

wykrywania przerwania.

Rejestr MCUCR

ISC10, ISC11 - Bity wyboru sposobu wykrywania przerwania 1. Pin INT1 może być

źródłem przerwania jeśli ustawiona jest flaga I w SREG oraz odpowiednia

maska przerwań w GICR.

Page 27: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

ISC11 ISC10 Opis

0 0 Niski poziom pinu INT1 spowoduje żądanie przerwania

0 1 Dowolna zmiana stanu logicznego na INT1 wywoła żądanie przerwania

1 0 Zbocze opadające na INT1 wywoła żądanie przerwania

1 1 Zbocze narastające na INT1 wywoła żądanie przerwania

Tabela 4. Opis bitów ISC11 i ISC10 rejestru MCUCR.

ISC00, ISC01 - Bity wyboru sposobu wykrywania przerwania 0. Pin INT0 może być

źródłem przerwania jeśli ustawiona jest flaga I w SREG oraz odpowiednia

maska przerwań w GICR.

ISC01 ISC00 Opis

0 0 Niski poziom pinu INT0 spowoduje żądanie przerwania

0 1 Dowolna zmiana stanu logicznego na INT0 wywoła żądanie przerwania

1 0 Zbocze opadające na INT0 wywoła żądanie przerwania

1 1 Zbocze narastające na INT0 wywoła żądanie przerwania

Tabela 5. Opis bitów ISC01 i ISC00 rejestru MCUCR.

Rejestr MCUCSR - Rejestr kontroli i statusu mikrokontrolera

ISC2 - Bity wyboru sposobu wykrywania przerwania 2. Pin INT2 (asynchroniczne

przerwanie zewnętrzne) może być źródłem przerwania jeśli ustawiona jest flaga

I w SREG oraz odpowiednia maska przerwań w GICR. Konfigurując ISC2

wybieramy rodzaj zbocza które wygeneruje przerwanie. Wpisanie 1 powoduje

reakcję na zbocze narastające, wpisanie 0 na zbocze opadające. Aby zmiana została

wychwycona, impuls powinien trwać typowo nie krócej niż 50ns. Zmiana bitu ISC2

może wywołać przerwanie, więc aby można było go zmienić, najpierw należy

wykasować bit odblokowujący w GICR, po czym można zmienić ISC2. Przed

ponownym odblokowaniem przerwania INT2, flaga tego przerwania powinna być

wykasowana przez wpisanie jedynki do INTF2 w GIFR.

Rejestr GIFR - Główny rejestr flag przerwań

INTF1 - Flaga zewnętrznego przerwania 1. Kiedy zdarzenie pinu INT1 wywoła przerwanie,

flaga INTF1 jest ustawiana na 1. Jeśli ustawiony jest bit I w SREG oraz ustawiony

bit INT1 w GICR, CPU skoczy do odpowiedniego wektora przerwania. Flaga

INTF1 jest kasowana kiedy wykonywana jest procedura obsługi przerwania.

Możliwe jest „ręczne” jej wykasowanie przez wpisanie do niej 1. Jeśli ustawionej

jest wyzwalanie przerwania poziomem, ta flaga zawsze pozostaje wyczyszczona.

INTF0 - Flaga zewnętrznego przerwania 0. Kiedy zdarzenie na pinie INT0 wywoła

przerwanie, flaga INTF0 jest ustawiana na 1. Jeśli ustawiony jest bit I w SREG oraz

ustawiony bit INT0 w GICR, mikrokontroler skoczy do odpowiedniego wektora

Page 28: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

przerwania. Flaga INTF0 jest kasowana kiedy wykonywana jest procedura obsługi

przerwania. Możliwe jest „ręczne” jej wykasowanie przez wpisanie do niej 1.

INTF2 - Flaga zewnętrznego przerwania 2. Kiedy zdarzenie na pinie INT2 wywoła

przerwanie, flaga INTF2 jest ustawiana na 1. Jeśli ustawiony jest bit I w SREG oraz

ustawiony bit INT2 w GICR, CPU skoczy do odpowiedniego wektora przerwania.

Flaga INTF2 jest kasowana kiedy wykonywana jest procedura obsługi przerwania.

Jeśli ustawione jest wyzwalanie przerwania poziomem, ta flaga zawsze pozostaje

wyczyszczona.

Ćwiczenie 13 Temat: Wykorzystanie przerwań zewnętrznych.

Zadanie:

1) Zainicjalizować wyświetlacz LCD oraz transmisję szeregową RS232.

2) Skonfigurować mikrokontroler do pracy z wykorzystaniem przerwań pochodzących

od transmisji szeregowej.

3) Możliwość inkrementacji licznika wyświetlanego na ekranie monitora PC (terminal)

oraz na wyświetlaczu LCD.

Język: C

Zasoby: porty PD0, PD1, PA2 – PA7

Ćwiczenie 14 Temat: Wykorzystanie przerwań zewnętrznych.

Zadanie:

1) Zainicjalizować wyświetlacz LCD.

2) Skonfigurować mikrokontroler do pracy z wykorzystaniem przerwań pochodzących

od przycisku (np.: INT0).

3) Program sekwencyjnego przeskakiwania tekstu (reklama) powinien być przerywany

przez krótką melodię brzęczka.

Język: C

Zasoby: porty PA2 – PA7, PB5

Page 29: Instrukcja do laboratorium

Komputerowe Sterowanie w Elektronice Przemysłowej

© Rafał Kotas, Katedra Mikroelektroniki i Technik Informatycznych PŁ

Wstęp teoretyczny do ćwiczenia 15 Jako urządzenia wyjściowe wykorzystuje się najczęściej wyświetlacze alfanumeryczne

ze sterownikiem HD44780 ze względu na stosunkowo niską cenę oraz proste sterowanie.

Jednak ich możliwości są niewielkie w porównaniu do wyświetlaczy graficznych. Najtańsze

wyświetlacze graficzne zbudowane są w oparciu o sterownik KS0108 (HD61202/HD61203)

nie posiadający generatora znaków.

Wyświetlacz ten pozwala na wyświetlenie ośmiu linii po 21 znaków (typowa czcionka

5x7) co daje łączną liczbę 168 znaków. Brak wbudowanego generatora znaków wydaje się

być poważną wadą wyświetlacza, jednak w prosty sposób można tą wadę wyeliminować

poprzez programową generację znaków realizowaną przez docelowy mikrokontroler.

Wszystkie niezbędne funkcje realizujące wyświetlanie tekstu wraz z tablicą znaków zapisaną

w pamięci programu zajmują około 1KB pamięci.

Funkcje poszczególnych wyprowadzeń wyświetlacza o rozdzielczości 128x64

przedstawia poniższa tabela :

Nr Oznaczenie Funkcja

1 /CS1 Wybór pierwszego kontrolera

2 /CS2 Wybór drugiego kontrolera

3 Vss Masa

4 Vdd +5V

5 Vee Zasilanie LCD (regulowane)

6 RS Wybór rejestru (0:instrukcje; 1:dane)

7 R/W Kierunek przesyłu (0:zapis; 1:odczyt)

8 EN Wykonanie operacji

9 DB0 Bit danych 0

10 DB1 Bit danych 1

11 DB2 Bit danych 2

12 DB3 Bit danych 3

13 DB4 Bit danych 4

14 DB5 Bit danych 5

15 DB6 Bit danych 6

16 DB7 Bit danych 7

Tabela 6. Opis wyprowadzeń wyświetlacza graficznego o rozdzielczości 128x64.

Do sterowania wyświetlaczem wymagane jest 13 wyprowadzeń mikrokontrolera. Nie

jest możliwa transmisja 4-bitowa, jak w przypadku wyświetlaczy alfanumerycznych ze

sterownikiem HD44780. Sterownik KS0108 zawiera szereg niezbędnych i jednocześnie

podstawowych funkcji, z którymi należy się zapoznać. Dodatkowo istnieje oprogramowanie,

które umożliwia zapis plików graficznych w postaci BitMap gotowych do zaprogramowania i

wyświetlania na tego typu wyświetlaczach graficznych.

Ćwiczenie 15 Temat: Obsługa wyświetlacza graficznego LCD.

Zadanie:

1) Zainicjalizować wyświetlacz graficzny LCD.

2) Wyświetlić na wyświetlaczu LCD napis statyczny.

3) Wyświetlić żądaną dowolną grafikę na wyświetlaczu LCD.

Język: C

Zasoby: porty PA0-PA7, PC0-PC3