Ćwiczenie 5
AVR ATmega128. Asembler cz.2
Zakres materiału
Do ćwiczenia potrzebna jest znajomość:
architektury i budowy mikrokontrolera AVR ATMega128
podstaw języka asemblera mikrokontrolera AVR
obsługi programu AVR Studio4
rejestrów i organizacji pamięci mikrokontrolera ATMega128
struktura czasomierzy w mikrokontrolerze AVR
Cel ćwiczenia
Celem ćwiczenia jest opanowanie instrukcji asemblera, utrwalenie obsługi rejestrów, przeglądanie obszarów pamięci, wykorzystanie układów Timer/Licznik. W czasie ćwiczenia należy napisać 2 programy pogłębiające i utrwalające obsługę mikrokontrolera AVR oraz program obsługujący timer0 w trybie odpytywania jako generator fali prostokątnej.
Wprowadzenie
Podstawowe cechy układ timera na przykładzie Timera/Licznika0
Główne cechy 8-bitowego Timera/Licznika0:
- Licznik z pojedynczym kanałem
- Timer z zerowaniem przy zgodności z zadanym warunkiem (samoprzeładowanie)
- Bezhazardowy modulator szerokości impulsu z poprawną fazą
- Generator
- Licznik zdarzeń zewnętrznych
- Źródła przerwań przepełnienia i porównania (TOV0, OCF0)
Rejestr licznika TCNT0 oraz rejestr porównawczy OCR0 są rejestrami 8-bitowymi.
Wszystkie sygnały przerwań są umieszczane w rejestrze TIFR. Każde przerwanie jest indywidualnie maskowane przez rejestr TIMSK.
Licznik może być sterowany wewnętrznie poprzez prescalera lub zewnętrznie poprzez pin T0. Licznik jest nieaktywny, gdy żadne źródło nie jest wybrane.
Układ czasowo-licznikowy może być taktowany bezpośrednio przez zegar systemowy (przez ustawienie CSn 2:0 = 1). Operacje wykonują się wtedy najszybciej z maksymalną częstotliwością zegara układu czasowo-licznikowego równą częstotliwości zegara systemowego (fCLK_I/O). Inne rozwiązanie polega na
użyciu jednego z czterech zaworów (taps) prescalera jako źródła zegarowego. Zegar prescalera ma wówczas częstotliwość równą fCLK_I/O/8, fCLK_I/O/64, fCLK_I/O)/256 lub fCLK_I/O/1024.
Tryb Normalny
Najprostszym trybem operacji jest tryb normalny, w tym trybie licznik zawsze liczy w górę, i nie jest wykonywane czyszczenie licznika. Licznik gdy osiąga swoją maksymalną wartość (MAX=0xFF) zaczyna liczyć od wartości minimalnej (0x00). W tym trybie flaga przekroczenia zakresu TOV0 zostanie ustawiona w tym samym cyklu zegarowym, w którym wartość TCNT0 staje się zerem. W tym przypadku flaga TOV0 zachowuje się jak dziewiąty bit, z wyjątkiem tego że jest tylko ustawiana, nie czyszczona.
Wykorzystanie timera do wygenerowania fali prostokątnej
W celu stworzenia generatora fali prostokątnej np. o częstotliwości 1 kHz, należy po odliczeniu okresu 500 µs zmieniać stan portu na przeciwny, poczym uruchomić odmierzanie kolejnego opóźnienia. Generowany przebieg wyprowadzić na wyjście PB0. Przepełnienie timera/licznika TC0 (przejście od stanu $FF do stanu $00) ustawia flagę TOV0 w rejestrze TIFR. Inkrementacja wartości timera/licznika następuje zgodnie z ustawionym parametrem preskalera w rejestrze TCCR0. Wpisanie do tego rejestru wartości 2 spowoduje inkrementacje co 8 okresów oscylatora systemowego. Przy rezonatorze kwarcowym o częstotliwości 8 MHz, kwant odmierzonego czasu będzie równy 1 µs, a liczba zliczanych odcinków czasu będzie wynosić 500. Należy pamiętać, że 8-bitowy rejestr TCNT0 zliczy nie więcej niż 256 kwantów czasu, a problem zliczenia 500 impulsów rozwiązać programowo (poprzez 2-krotne zliczenie 250 impulsów). Przy kontrolowaniu programowym flagi TOV0 należy pamiętać o jej „ręcznym” zerowaniu poprzez wpisanie bitu o wartości „1” na pozycji TOV0.
Program ćwiczenia
Napisać program, w którym port A będzie przyjmować pierwszą liczbę z szeregu liczb umieszczonych w pamięci SRAM i w tym obszarze pamięci umieścić 20 kolejnych komórek z liczbami o wartości 2 więcej niż poprzednia. Do wpisywania szeregu użyć adresów pośrednich (z inkrementacją). Port B będzie maską (do zadawania kombinacji bitów) do wyszukania spośród ciągu liczb w SRAM-ie. Port C będzie przechowywał informację o ilości liczb z szeregu, w których występuje szukana kombinacja.
Napisać program, w którym porty A i B są wejściami służącymi do zadawania dwóch liczb. Port C służy do pobierania liczby do porównania z wynikiem operacji (dodawanie logiczne, dodawanie algebraiczne) z portów A i B oraz do wyświetlania wyniku. Wejściowy port D służy do zarządzania programem poprzez następujące słowo sterujące:
bit 0 - pobranie liczb z portów A,B,C
bit 1 - dodawanie logiczne
bit 2 - dodawanie algebraiczne
Zmodyfikować program z punktu 2 o funkcje „trigger” - zezwolenie na wykonanie każdą z powyższych instrukcji.
Napisać program generatora fali prostokątnej o częstotliwości 1 kHz
ĆWICZENIE 5 3EB - SYSTEMY MIKROPROCESOROWE
3EB - SYSTEMY MIKROPROCESOROWE ĆWICZENIE 5
2 Katedra Automatyki Napędu i Urządzeń Przemysłowych AGH, Kraków 2011
3 Katedra Automatyki Napędu i Urządzeń Przemysłowych AGH, Kraków 2011