Laboratorium mikrokontrolerów

Podobne dokumenty
Laboratorium mikrokontrolerów

Laboratorium mikrokontrolerów

TECHNIKA MIKROPROCESOROWA II

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

Laboratorium mikrokontrolerów

TECHNIKA MIKROPROCESOROWA II

Ćwiczenia z S S jako Profinet-IO Controller. FAQ Marzec 2012

TECHNIKA MIKROPROCESOROWA II

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

Programowanie w Javie

MultiTool instrukcja użytkownika 2010 SFAR

TECHNIKA MIKROPROCESOROWA II

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Instytut Teleinformatyki

dokument DOK wersja 1.0

LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program

Instrukcja programowania płytek edycji 2014

TECHNIKA MIKROPROCESOROWA II

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

Visual Basic Debugging and Error Handling

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH. PROCESORY OSADZONE kod kursu: ETD 7211 SEMESTR ZIMOWY 2017

Płytka uruchomieniowa XM64

TECHNIKA MIKROPROCESOROWA II

Edukacyjny sterownik silnika krokowego z mikrokontrolerem AT90S1200 na płycie E100. Zestaw do samodzielnego montażu.

Modułowy programowalny przekaźnik czasowy firmy Aniro.

C++ - [1-3] Debugowanie w Qt Creator

Parametryzacja przetworników analogowocyfrowych

2. Architektura mikrokontrolerów PIC16F8x... 13

Spis treści JĘZYK C - ŚLEDZENIE WYKONANIA PROGRAMU, DEBUGGER. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu

1.Wstęp. 2.Generowanie systemu w EDK

Program EDYTOR-AS-OUX

dv-2ps INSTRUKCJA OBSŁUGI

LABORATORIUM UKŁADY STYKOWE ZL3AVR

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

FAQ: /PL Data: 3/07/2013 Konfiguracja współpracy programów PC Access i Microsoft Excel ze sterownikiem S7-1200

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Skaner Mustek Scan Express

OPIS PROGRAMU APEK MULTIPLEKSER RX03

Konfiguracja pakietu CrossStudio for MSP

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

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

LabVIEW PLATFORMA EDUKACYJNA Lekcja 6 LabVIEW i Arduino programy wykorzystujące wyświetlacz LCD, czujnik temperatury, PWM i diodę LED

Electronic Infosystems

SML3 październik

AKTUATOR DO SYSTEMU DUO Q

Podstawy techniki mikroprocesorowej

Programowanie xcomfort Cz. I Eaton Corporation. All rights reserved.

Technika mikroprocesorowa. Konsola do gier

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

LABORATORIUM PRZEMYSŁOWYCH SYSTEMÓW STEROWANIA

1 Badanie aplikacji timera 555

Ćwiczenia z S Komunikacja S z miernikiem parametrów sieci PAC 3200 za pośrednictwem protokołu Modbus/TCP.

Architektura systemów komputerowych Laboratorium 10 Symulator SMS32 Urządzenia wejścia i wyjścia

Płytka ewaluacyjna z ATmega16/ATmega32 ARE0021/ARE0024

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

Konfigurowanie sterownika BX9000 firmy Beckhoff wprowadzenie. 1. Konfiguracja pakietu TwinCAT do współpracy ze sterownikiem BX9000

Technika Mikroprocesorowa

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

CW-HC08 Programowanie mikrokontrolera MC9S08QD4 [2]

Projektowanie z użyciem procesora programowego Nios II

Instrukcja instalacji i obsługi modemu ED77 pod systemem operacyjnym Windows 98 SE (wydanie drugie)

LABORATORIUM INTELIGENTNYCH SYSTEMÓW ELEKTRYCZNYCH

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Programator procesorów rodziny AVR AVR-T910

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

TwinCAT 3 konfiguracja i uruchomienie programu w języku ST lokalnie

Szkolenia specjalistyczne

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

IIPW_SML3_680 (Z80) przewodnik do ćwiczeń laboratoryjnych

Politechnika Białostocka

Projekt procesora NIOSII w strukturze programowalnego układu logicznego CYCLONEII EP2C35F672C6 podłączenie i obsługa wyświetlacza LCD.

STM32 Butterfly. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

Instrukcja podstawowego uruchomienia sterownika PLC LSIS serii XGB XBC-DR20SU

Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów AVR

PRACA W ZINTEGROWANYM ŚRODOWISKU URUCHOMIENIOWYM - IDE Keil μvision 2

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

Laboratorium Procesorów Sygnałowych

Instrukcja do oprogramowania ENAP DEC-1

Sterowanie oświetleniem poprzez TEBIS

Programator ICP mikrokontrolerów rodziny ST7. Full MFPST7. Lite. Instrukcja użytkownika 03/09

Instrukcja obsługi programu M116_Manager

Przemysłowy odtwarzacz plików MP3

Instrukcja dla: Icomsat v1.0 SIM900 GSM/GPRS shield for Arduino oraz dla GPRS Shield produkcji Seeedstudio.

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

LABORATORIUM ENERGOOSZCZĘDNEGO BUDYNKU

Konfigurowanie sterownika CX1000 firmy Beckhoff wprowadzenie. 1. Konfiguracja pakietu TwinCAT do współpracy z sterownikiem CX1000

Rysunek 1: Okno z lista

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Laboratorium - Monitorowanie i zarządzanie zasobami systemu Windows 7

Uniwersalny zestaw uruchomieniowy ZL4PIC

OPIS PROGRAMU USTAWIANIA NADAJNIKA TA105

Wydział Mechaniczny. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 4. Laboratorium z przedmiotu: Technika cyfrowa i mikroprocesorowa

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

Konfigurowanie sterownika CX9000 firmy Beckhoff wprowadzenie

ZL29ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

1.Instalacja. Przechodzimy przez kolejne okna instalatora klikacjąć Dalej. wolek.zallegro.pl

LOW ENERGY TIMER, BURTC

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager

Transkrypt:

Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki WIET Laboratorium mikrokontrolerów Ćwiczenie 2 Programowania GPIO Autor: Paweł Russek http://www.fpga.agh.edu.pl/pm ver. 26.10.16 1/12

1. Cel ćwiczenia Podczas niniejszego ćwiczenia student poszerzy swoją wiedzę na temat struktury i sposobu programowania układów peryferyjnych WE/WY ogólnego zastosowania (GPIO) w mikrokontrolerach serii Kinetis L firmy NXP (Kinetis). Zostaną przedstawione nowe funkcjonalności, a w szczególności sposób progrmowania GPIO jako wejścia. Zostanie przedstawiona płytka podstawowych układów peryferyjnych, która zawiera diody LED, wyświetlacz 7-segmentowy LED i klawiaturę matrycową, rozszerzająca możliwości zestawu FRDM-KL25Z. Następnie, przedstawimy typowy dla przełączników mechanicznych problem drgania styków, który zostanie wyeliminowany przez studentów w przygotowanej aplikacji. Równocześnie, student zacznie wykorzystywać debuger, ważną funkcjonalność środowiska Keil uvision. 2. Płytka podstawowych elementów peryferyjnych Każdy mikrokontroler potrzebuje urządzeń peryferyjnych, aby współpracować z użytkownikiem i środowiskiem zewnętrznym. Jest wiele tzw. płytek peryferyjnych, które można podłączać do FRDM-KL25Z, ale na potrzeby niniejszego laboratoriu zostanie użyta płytka, która oferuje podstawowe potrzebne w ćwiczeniach elelemty. Schemat poniżej przedstawia budowę płytki podstawowych elementów peryferyjnych. 2/12 A schematic Basic Peripheral Board for Microcontrollers Laboratory

Na płytce można znaleźć złącza typu goldpin, osiem diod LED, wyświetlacz 4 LED 7- segmentowy, przyciski oraz obwód wykrywający przyciśnięcia klawisza (D21-D24, R2). 2.1. Złącza goldpin JP1 JP2 JP3 JP4 JP5 JP6 JP7 Zworka JP1 jest używana w celu zmiany funkcjonalności klawiatury matrycowej 4x4 na 4 klasyczne przyciski. Kiedy zworka jest zwarta, przełączniki S1, S2, S3, S4 mogą być bezpośrednio podłączone do portów mikrokonontrolera i odczytywane poprzez stany sygnałów C1, C2, C3 i C4 na złączy JP4. Kiedy zwora JP1 jest otwarta detekcja wciśniętego przycisku S1-S16 wymaga napisania na mikrokontroler specjalnej procedury obsługi klawiatury matrycowej. Pin JP2 może być użyty przez mikrokontroler do detekcji wciśnięcia przycisku klawiatury matrycowej. Pin może być wykorzystany jako źródło zewnętrznego przerwania dla mikrokontrolera. Złącze JP3 to złącze do podłączenia diod LED. Piny należy wysterować wysokim stanem logicznym, aby wybrane diody się zapaliły. Złącze JP4 to złącze klawiatury matrycowej 4x4. Sygnały C1, C2, C3 i C4 są podłączone do kolumn klawiatury, a sygnały R1, R2, R3 i R4 do jej wierszy. Aby odczytać stan przycisków klawiatury należy odczytać aktywną kolumnę i wiersz. Aby odczytać aktywną kolumnę należy podać niski stan logiczny na R1-R4 i aktywować rezystory podciągające (wewnętrzne mikrokontrolera) na liniach C1-C4. Niski stan na linii Cx oznacza wciśnięty przycisk w kolumnie 'x'. Aby odczytać aktywny wiersz należy podać niski stan logiczny na C1-C4 i aktywować rezystory podciągające (wewnętrzne mikrokontrolera) na liniach R1-R4. Niski stan na linii Rx oznacza wciśnięty przycisk w tym wierszu. Kiedy znana jest aktywna kolumna i wiersz znany jest również wciśnięty przycisk. Złącze JP5 to złącze podłączone do katod diod wyświetlacza 7-segmentowego LED. Należy podać niski stan logiczny, aby zapalić odpowiedni segment wybranej cyfry (sprawdź także opis JP6). Złącze JP6 to złącze sterujące potencjałem anod diod wyświetlacza 7-segmentowego LED. Należy podać niski stan logiczny, aby aktywować wybraną cyfrę. Złącze JP7 to złącze zasilające płytkę. Zawsze złącz masy (GND) płytki FRDM i peryferyjnej ze sobą. Dodatni biegun zasilania jest potrzebny w przypadku wykorzystywania wyświetlacza 7-segmentowego. Podłącz dodatni biegun zasilania do napięcia 3,3V lub 5,0V. 3/12

2.2. Płyta drukowana PCB płytki peryferyjnej Aby zbudować obwód pokazany na rysunku powyżej, możliwe jest użycie elementów elektronicznych i uniwersalnej płytki drukowanej lub stykowej ( breadboard ). Jednak na laboratorium będziemy posługiwać się zestawem zbudowanym w oparciu o płytkę drukowaną PCB. Rysunek płytki wraz z rozmieszczeniem elementów przedstawiono poniżej. Płyta PCB płytki podstawowych elementów peryfereryjnych 3. Funkcjonalność GPIO W niniejszym rozdziale, przedstawimy nowe funkcjonalności modułów GPIO mikrokontrolerów Kinetis L. Podstawowe informacje na temat GPIO znalazły się już w ćwiczeniu 1 tego laboratorium pt.: Podstawy programowania mikrokontrolerów w języku C. Rejestry GPIOx_PDDR (Port Data Direction Register) i GPIOx_PDOR (Port Data Output Register) były już omówione wcześniej. Rejestr PDOR służy do sterowania GPIO jako Wyjściem mikrokontrolera. Jednak w rodzinie Kinetis L, dla wygody programisty, do obsługi wyjścia GPIO wyodrębniono jeszcze dodatkowe rejestry. Mamy do dyspozycji rejestry GPIOx_PSOR, GPIOx_PCOR i GPIOx_PTOR odpowiednio dla każdego portu. GPIOx_PSOR (Port Set Output Register) GPIOx_PCOR (Port Clear Output Register) GPIOx_PTOR (Port Toggle Output Register) Zapis do tego rejestru aktualizuje stan odpowiednich bitów rejestru PDOR w następujący sposób: '0': Odpowiedni bit w PDORn nie zmienia się. '1': COdpowiedni bit w PDORn ustawia się na '1'. Zapis do tego rejestru aktualizuje stan odpowiednich bitów rejestru PDOR w następujący sposób: '0': Odpowiedni bit w PDORn nie zmienia się. '1': Odpowiedni bit w PDORn ustawia się na '0'. Zapis do tego rejestru aktualizuje stan odpowiednich bitów rejestru PDOR w następujący sposób: '0': Odpowiedni bit w PDORn nie zmienia się. 4/12

'1': Odpowiedni bit w PDORn zmienia stan na przeciwny. Tabela podaje i opisuje dodatkowe rejestry związane z GPIOx. Kiedy skonfugurujemy rejestr kierunku PDDR jako wyjście, możemy używać rejestrów Set, Clear i Toggle, aby ustawić, skasować lub przestawić bity rejestru wyjściowego PDOR. Dodatkowe rejestry bardzo ułatwiają programiście manipulowanie pojedynczymi bitami portów WE/WY. Na przykład, zapisanie wartości 4 (binarnie 0100) do PCOR wyłączy bit drugi b2 tego portu nie zmieniając stanu pozostałych bitów. Dla każdego portu A-E, do obsługi GPIOx jako wejścia, jest do dyspozycji rejestr wejściowy (GPIOx_PDIR). Kiedy skonfigurujemy bity rejestr kierunku PDDR jako wejście (wpiszemy zero), rejestr PDIR może być odczytywany, aby uzyskać informacje o stanie pinów odpowiedniego portu. Możemy, na przykład, podłączyć przełączniki do portu, aby odczytywać stan (włączony/wyłączony). Zależnie od tego w jakiej konfiguracji przełącznik został podpięty, może być potrzeba włączenia wewnętrznego rezystora podciągającego portu mikrokontrolera. Rezystor może podciągać potencjał wejścia do jedynki (pull-up) lub zera (pull-down). Na poniższym rysunku przestawiono obydwie konfiguracje. Podłączenie przełączników do mikrokontrolera Konfiguracja rezystorów podciągających jest realizowana przez programistę w rejestrze kontrolnym PORTx_PCRn (Pin Control Register). Przy pomocy wybranych bitów tego rejestru możemy włączyć/wyłączyć rezystor podciągający i wybrać pull-up lub pull-down. Bit PE (Pull Enable) rejestru PORTx_PCRn jest używany do włączenia rezystora, a bit PS (Pull Select) służy to wybrania trybu podciągania (jak na rysunku poniżej). 5/12

Bity PS i PE rejestru PORTxPCRn 4. Sposób nazywania bitów w nagłówku MKL25Z4 Programowanie mikrokontroerów bardzo często wymaga ustawiania poszczególnych bitów rejestrów. Każdy bit ma swoją funkcję i musi być sterowany odrębnie. Dostęp do poszczególnych bitów wymaga znajomości ich położenia w rejestrze. Oczywiście można odszukać położenie bitu w dokumentacji, ale lepiej posługiwać się nazwami bitów zdefiniowanymi w MKL25Z4.h. Definicje te kodują pozycję wybranego bitu. Na przykład: Pozycja bitu PE w rejestrze PCR jest zdefiowana jako PORT_PCR_PS_MASK. W definicji njpierw podano nazwę modułu gdzie znajduje się rejestr (PORT), później nazwę rejestru (PCR), a na końcu nazwę bitu (PE). Ponieważ definicja jest używana do modyfikowania (maskownia) bitu na końcu dodano sufiks MASK. Inne przykłady: Bit PE rejestru PCR to PORT_PCR_PS_MASK Bit PORTA rejestru SCGC5 to SIM_SCGC5_PORTA_MASK W taki sam sposób można używać definicji aby maskować pola bitowe (jak na przykład MUX w rejestrze PCR): Pole bitowe MUX rejestru PCR to PORT_PCR_MUX_MASK 6/12

Co więcej, nagłówek MKL25Z zawiera makra, które pozwalają ustawiać wartość bitów i pól bitowych w bardzo wygodny i czytelny sposób. Przykład: //Ustaw bit PORTA rejestru SMGC5 w module SIM SIM->SCGC5 =SIM_SCGC5_PORTA(1); //Ustaw multiplekser pinu 10 w porcie A w pozycji trzeciej funkcji PORTA->PCR[10] =PORT_PCR_MUX(3); Wszelkie wątpliwości dotyczące nazwy definicji dla wybranego pinu można rozstrzygnąć sprawdzając zawartość pliku MKL25Z.h. Aby otworzyć ten plik, należy w edytorze uvision najechać kursorem myszy na nazwę MKL25Z.h i kliknać prawy przycisk myszy. Następnie wybrać z menu ekranowego Open document... ) Ćwiczenie 4.1 W nagłówku MKL25Z4.h znajdź definicje i makra podanych w tabeli poniżej bitów. Bit SBNS (Stop Bit Number Select) rejestru BDH w module UART0. Ten bit ustawia liczbę bitów stop w transmisji szeregowej. Pole bitowe MODE w rejestrze CFG1 modułu ADC. Te bity decydują i rozdzielczości przetwornika AC (8-bit, 10-bit, 12- bit lub 16-bit). 5. Aplikacja przełączania diod LED Ćwiczenie 5.1 1. Podłącz płytę FRDM-KL25Z do płytki peryferyjnej zgodnie ze schematem poniżej. 7/12

Sposób połącznenia FRDM25Z i płytki peryferyjnej 2. W programie uvision, stwórz nowy projekt o nazwie Toggling_LEDs. Stwórz nowy katalog dla nowego projektu. Pamiętaj, aby trzymać swoje projekty w swoim katalogu. 3. W edytorze uvision, stwórz nowy plik main.c, a następnie skopiuj do niego kod źródłowy podany poniżej. /*----------------------------------------------------------------------------- * Name: main.c * Purpose: Toggling_LEDs application * Author: Student *----------------------------------------------------------------------------*/ #include "MKL25Z4.h" /*Device header*/ #define LED_1 0 #define SW_1 0 int main() { //Enable clock for Port B and Port D SIM->SCGC5 =SIM_SCGC5_PORTB(1) SIM_SCGC5_PORTD(1); //Configure Port B pin 0 as GPIO, Output PORTB->PCR[LED_1] =PORT_PCR_MUX(1); PTB->PDDR =(1<<LED_1); //Configure Port D pin 0 as GPIO, Input, Pull-up resistor PORTD->PCR[SW_1] =PORT_PCR_MUX(1) PORT_PCR_PE(1) PORT_PCR_PS(0); PTD->PDDR&=~(1<<SW_1); 8/12

while(1){ if( (PTD->PDIR & (1<<SW_1))==0){ if(ptb->pdor & (1<<LED_1)) PTB->PDOR&=~(1<<LED_1); else PTB->PDOR =(1<<LED_1); } } } while((ptd->pdir & (1<<SW_1))==0); //Wait for SW_1 release 4. Skompiluj i załaduj aplikację na płytkę FRDM-KL25Z. Dioda D1 powinna się przełączać kiedy wciśniesz przycisk SW1. 5. Zmodyfikuj kod aplikacji Toggling_LEDs tak aby możliwe było przełączanie wszystkich czterech diod D1-D4 przy pomocy czterech przycisków S1-S4. Postaraj się napisać aplikację tak, aby program wynikowy był jak najmniejszy. Porównaj wielkość swojego programu z wielkością programów kolegów. Rozmiar binarnego obrazu programu pojawia się w oknie Built Output po skompilowaniu kodu aplikacji. Program Size: Code=... 6. Debuger Keil uvision Debugger to program służący do śledzenia pracy i usuwania błędów z innych programów. Debugger w środowisku uvision może pracować jako symulator (bez płytki z mikrokontrolerem podłączonej do PC) lub jako monitor pracy zewnętrznego systemu z mikrokontrolerem. Symulator to produkt softwarowy, który jedynie emuluje większość funkcji wybranego mikrokontrolera. Monitor to złożony produkt, który zawiera interfejs komunikacyjny z systemem zewnętrznym na którym faktycznie uruchamiany jest testowany program. Aby włączyć debugger w trybie monitora, należy użyć jednej z opcji <Hardware Debugger> z prawej strony okna konfiguracji. 9/12

Kiedy sesja debuggera zostanie uruchomiona w uvision, aplikacja jest ładowana na płytkę i uruchamiana. Następnie wykonywany jest kod startowy mikrokontrolera (start-up code) i program jest zatrzymywany na początku funkcji main programu. Kiedy wykonywanie programu zostaje zatrzymane, uvision otwiera okno tekstowe z wykonywanym kodem, gdzie aktualnie realizowana linia jest podświetlona. Dodatkowo widzimy okno dis-assemblera z kodem maszynowym. W menu uvision pojawiają się nowe funkcje menu: Debug menu Opis Używaj komendy Start/Stop Debug Session command aby uruchomić lub zakończyć sesję debuggera. Aby uruchomić zatrzymany program użyj komendy Run z menu debuggera. Aby zatrzymać uruchomiony program użyj komendy Stop z menu debuggera. Aby ponownie uruchomić program ożyj komendy Reset z menu debuggera lub Debug >Reset CPU z menu programu. Aby krokować wykonywanie programu jednocześnie przechodząc przez kod realizowanych funkcji użyj komendy Step z menu debuggera. TAby krokować wykonywanie programu jednocześnie przeskakując kod realizowanych funkcji użyj komendy Step Over z menu debuggera. Aby wyskoczyć z aktualmnie wykonywanej funkcji poziom wyżej użyj komendy Step Out z menu debuggera. 10/12

6.1. Punkty zatrzymania (breakpoints) W celu sprawdzenia statusu wykonywanego programu, w uvision można ustawiać punkty zatrzymania w wykonywanym kodzie aplikacji. Można ustawić punkty zatrzymania w wybranej linii kodu, aby sprawdzić aktualny stan programu (stos, pamięć). Można również definiować pułapki, które zatrzymają program po wystąpieniu zdefiniowanego zdarzenia. Aby ustawić punkt zatrzymania (Breakpoint) w wybranej linii kodu, należy w edytorze lub oknie dis-assemblera otworzyć menu kontekstowe w tej linii (kliknięcie prawym przyciskiem myszy) i wybrać komendę Insert/Remove Breakpoint. Aby ustawić lub usunąć breakpoint, można również wykonać podwójne kliknięcie lewym przyciskiem myszy na szarym pasku po lewej stronie okna edytora lub dis-assemblera. Punkty zatrzymań są oznaczone czerwoną kropką w odpowiedniej linii programu. 6.2. Podglądanie zmiennych (funkcja Watch) Wybierz aby wyświetlić okna Watch. Domyślnie, okna Watch składają się z czterech zakładek: Locals, aby wyświetlać aktualną wartość aktywnych zmiennych lokalnych programu; dwie zakładki Watch, aby wyświetlić zmienne zdefiniowane przez użytkownika; zakładka Call Stack, aby wyświetlić drzewo wykonywania programu. W oknach Watch można podglądać i modyfikować zmienne programu. Zagnieżdżone wywołania funkcji również są uwidocznione w tym oknie. Zawartość okna jest aktualizowana automatycznie w momencie zatrzymania wykonywania programu i miarę jego krokowania, kiedy opcja View > Periodic Window Update jest ustawiona. W przeciwieństwie do okna Locals, które pokazuje jedynie aktualnie aktywne zmienne, okno Watch pokazuje zmienne zdefiniowane przez użytkownika. Aby zdefiniować zmienną w oknie Watch można: dwu-kliknąć myszą w oknie Watch lub wcisnąć F2, 11/12

dwu-kliknąć wcześniej dodaną zmienną i zmodyfikować jej nazwę, otworzyć menu kontekstowe (prawy przycisk myszy) w oknie debuggera i wybrać Add <item name> to. uvision automatycznie wybierze zmienną pod kursorem myszy i doda ją do okna Watch. Można również zaznaczyć wyażenie i dodać do do Watch. Aby zmodyfikować wartość zmiennej lokalnej podczas przerwy w działaniu programu należy dwu-kliknąć na aktualną wartość zmiennej (lub wybrać i nacisnąć F2) i po prostu ją zmodyfikować. Aby usunąć zmienną z okna Watch, wybierz zmienną i wciśnij przycisk Del Ćwiczenie 6.1 Ustaw breakpoint w wybranym miejscu w Toggling_LEDs. Aktywuj sesję debuggera i uruchom program. Kiedy program się zatrzyma rozpocznij jego krokowanie. Dodaj wybraną zmienną do okna Watch Kontynuuj krokowianie śledząc wartość zmiennych w oknie Locals i Watch 7. Eliminacja drgań styków przycisków Podczas włączania i wyłączania mechanicznych przełączników powstają drgania styków powodując, że zmiana stanu przełącznika nie jest płynna. Raczej, zanim stan przełącznika się ustabilizuje wykonuje on wiele przejść ze stanu włącz do wyłącz. Drganie styków przełącznika mechanicznego Może się zdarzyć, jeżeli mikrokontroler często odczytuje stan przycisku, że pojedyncze wciśnięcie/puszczenie przycisku może zostać odczytane wielokrotnie. W wielu aplikacjach jest ważne, aby wciśnięcia przycisku były zliczane prawidłowo. Prostym rozwiązaniem programistycznym problemu drgań jest wprowadzenie opóźnienia w detekcji zmiany stanu przycisku wprowadzone po wykryciu zmiany jego stanu. Program czeka 10 20 ms po tym jak stan przycisku zmieni się z włącz. na wyłącz. lub odwrotnie. Po tym czasie zestyki powinny być już stabilnie zwarte lub rozwarte. Ćwiczenie 7.1 Do aplikacji Toggling_LEDs dodaj funkcję eliminacji drgań styków. 12/12