Ć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)