Ćwiczenie 1,2
Transkrypt
Ćwiczenie 1,2
Ćwiczenie 4 Porty mikrokontrolera AVR 1. Cel ćwiczenia Celem ćwiczenia jest zapoznanie się z architekturą mikrokontrolera AVR (ATmega) oraz portami mikrokontrolera. Ćwiczenie stanowi również wprowadzenie do programowania mikrokontrolera w języku C. 2. Przygotowanie do ćwiczenia Układy peryferyjne mikrokontrolera AVR można dołączać do czterech portów poprzez rejestry we/wy – 8-bitowe rejestry we/wy znajdują się w przestrzeni adresowej pamięci danych. Możliwe jest zapisywanie do portów/rejestrów we/wy lub odczytywanie z nich podobnie jak z pamięci danych. W zbiorze instrukcji języka maszynowego mikrokontrolera AVR istnieją też specjalne rozkazy służące do odczytu i zapisu zawartości rejestrów we/wy oraz rozkazy do manipulowania pojedynczymi bitami rejestrów. Z każdym z równoległych portów we/wy: A, B, C i D powiązane są po trzy rejestry I/O, o nazwach: DDRx, PORTx, PINx, (gdzie x oznacza port A, B, C lub D. Stan poszczególnych bitów rejestrów DDRx (ang. Port Data Direction Register) decyduje czy odpowiadające im linie są wejściami czy wyjściami (0-wejście, 1-wyjście). Jeżeli dana linia we/wy pracuje jako wyjście, wtedy ustawiając na wartość 1 odpowiadający tej linii bit w rejestrze PORTx (ang. Port Data Register) na wyprowadzeniu wymuszany jest stan wysoki, a ustawiając wartość bitu na 0 – stan niski. Jeżeli linia portu została skonfigurowana jako wejście, poziom logiczny na wyprowadzeniu sprawdza się odczytując wartość odpowiadającego tej linii bitu w rejestrze PINx (ang. Port Input Pins Address). Dodatkowo, gdy linia jest wejściem i odpowiadający tej linii bit w rejestrze PORTx ma wartość 1, wtedy wyprowadzenie jest wewnętrznie podciągnięte do napięcia zasilania. Dla dowolnego pinu jednego z portów konfiguracja przedstawia się następująco: DDRx.n 0 0 1 PORTx.n 0 1 0 lub 1 Px.n wejście wejście podciągnięte do Vcc wyjście Przykładowo, ustawiając wszystkie linie portu B jako wyjścia należy do rejestru DDRB wpisać wartość 0xff. 3. Pierwszy program Kompilacja programu odbywa się w środowisku AVR Studio. Domyślnie środowisko pozwala na pisanie programu w asemblerze oraz jego symulację. Wcześniejsze zainstalowanie kompilatora avrgcc (WinAVR) umożliwia kompilowanie kodów źródłowych programów w C poprzez AVR Studio. Uniwersytet Kazimierza Wielkiego w Bydgoszczy Instytut Mechaniki i Informatyki Stosowanej Systemy wbudowane (2009/2010) W zestawie uruchomieniowym należy podłączyć piny linijki diodowej z pinami portu D mikrokontrolera, a następnie skompilować poniższy program: #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { /* Wszystkie linie portu D jako wyjscia */ DDRD = 0xFF; /* 0xFF binarnie 1111 1111 */ /* Początek nieskończonej pętli */ while(1) { PORTD = 0xaa; /* 0xaa binarnie 1010 1010 */ _delay_ms(330); PORTD = 0x55; /* 0x55 binarnie 0101 0101 */ _delay_ms(330); } } Uniwersytet Kazimierza Wielkiego w Bydgoszczy Instytut Mechaniki i Informatyki Stosowanej Systemy wbudowane (2009/2010) 4. Programowanie Aplikacja PonyProg2000 jest przeznaczona do programowania układów z pamięcią Flash lub EEPROM, które mogą być programowane szeregowo. Obsługuje przy tym różne standardy szeregowej transmisji takie jak magistrala I2C, microwire i SPI. Za pomocą aplikacji można zaprogramować większość popularnych mikrokontrolerów jednoukładowych AVR wyposażonych w interfejs SPI (ang. Serial Peripherial Interface), niektóre z mikrokontrolerów ATMEL z serii AT89S, mikrokontrolery PIC serii PIC16X84 oraz pamięci szeregowe EEPROM. 5. Program w assemblerze Dla porównania otwórz nowy projekt AVRStudio w języku assembler: .nolist .include „m32def.inc” .list .cseg .org 0 ldi R16, 0b00000011 out DDRB, R16 ldi R16, 0b00000011 out DDRB, R16 petla: ljmp petla 6. Zadanie Do pinu 7 portu B podłącz klawisz. Skonfiguruj port D i zmodyfikuj powyższy program, aby po naciśnięciu klawisza diody świeciły z dwukrotnie wyższą częstotliwością. Uniwersytet Kazimierza Wielkiego w Bydgoszczy Instytut Mechaniki i Informatyki Stosowanej Systemy wbudowane (2009/2010) 7. Literatura [1] Baranowski R., Mikrokontrolery AVR ATmega w praktyce, BTC, Warszawa 2005, [2] Witkowski A., Mikrokontrolery AVR programowanie w języku C, PAN, Katowice 2006, [3] Doliński J., Mikrokontrolery AVR w praktyce, BTC, Warszawa 2003. Uniwersytet Kazimierza Wielkiego w Bydgoszczy Instytut Mechaniki i Informatyki Stosowanej Systemy wbudowane (2009/2010)