Mikrokontrolery AVR

Szymon Gut

Opis

Mikrokontrolery AVR to rodzina układów scalonych, które w pojedynczej obudowie zawierają kompletny zestaw podzespołów: procesor, pamięć RAM, pamięć trwałą i układy wejścia-wyjścia. Za pomocą "nóżek" można odczytywać wartości napięć z otoczenia i sterować elektroniką na zewnątrz.

Parametry wewnętrzne oczywiście nie są powalające. ATmega8, mikrokontrolery, którymi będziemy się bawić, mają 8-bitowe procesorki (tak, w rejestrze mieści się bajt i nic więcej), pracują z częstotliwością do 16MHz, a pojemność pamięci RAM wynosi 1kB. Często jednak jest to dużo więcej, niż potrzeba.

Taki mikrokontroler można zaprogramować przez USB skompilowanym kodem napisanym w C. AVR-y są szczególnie przyjazne początkującym, ponieważ łatwo je zaprogramować i uruchomić. Nie wymagają do działania żadnego układu zewnętrznego.

Programowanie mikrokontrolerów otwiera nowe możliwości w porównaniu do pisania programów na PC-ty. Dużo łatwiej jest mrugać diodami, rozmawiać bezpośrednio ze sprzętem i tworzyć projekty, które świecą, grają i ruszają się. Można zrobić własny zegar cyfrowy, pianinko, klawiaturę PS/2, wentylatorek sterowany temperaturą…

atmega8.jpg

Forma zajęć

Zajęcia będą miały charakter częściowo wykładu, na którym będę opowiadał o AVR-ach, a częściowo laboratorium, na którym uczestnicy będą pracowali w zespołach ok. 2-3 osobowych. Programowanie i wgrywanie kodu będzie się odbywało na komputerze uczestników. Pozostały sprzęt i potrzebne elementy zapewniam ja, więc można się o nie nie martwić.

Plan:

  1. Pogadanka na temat mikrokontrolerów
  2. "hello world" w wersji elektroników - mruganie LED-em
    1. Budowa układu do programowania
    2. Skompilowanie i wgranie programu
  3. Pogadanka co właściwie zrobiliśmy
  4. Samodzielne uruchomienie własnego programu
  5. Pogadanka co jeszcze AVR-y potrafią
  6. Propozycje projektów
  7. Realizacja własnych pomysłów bądź jednego projektu przez wiele zespołów
  8. Prezentacje efektów prac

Wymagania

  • ogólne ogarnięcie prądu stałego na poziomie fizyki w liceum
  • umiejętność programowania w czystym C
  • dostęp do laptopa z Linuksem z zainstalowanymi nadzędziami do cross-kompilacji i programowania: gcc-avr, avr-libc, binutils-avr, usbutils, avrdude (starałem się wpisać zgodnie z nazwami paczek w ubuntach, wystarczy jeden taki komputer na zespół)

Nie będzie potrzebne doświadczenie z elektroniką, ani tym bardziej mikrokontrolerami.

Zadania kwalifikacyjne

Z1
Co stanie się, gdy czerwoną diodę LED podłączymy do źródła napięcia 5V? Rozważ przypadki, gdy dioda podłączona jest:
a) anodą do zacisku +, katodą do -
b) odwrotnie.
Odpowiedź krótko uzasadnij.

hint: zapoznaj się z charakterystyką I(U) diody.
hint2: jeśli ciągle nie wiesz, wykonaj eksperyment.

Z2
Masz do dyspozycji (idealne) elementy: źródło napięcia 5V, przycisk, dowolne dużo oporników o dowolnych rezystancjach, woltomierz.
Przedstaw schemat układu, w którym naciskając przycisk można zmieniać wskazania woltomierza z 0V na 5V.

Z3
Zaimplementuj w czystym C dynamiczną tablicę intów. Powinna obsługiwać operacje:
a) inicjalizowania/kasowania
b) pobrania i ustawienia liczby o podanym indeksie
c) dodawania i zdejmowania inta z końca.
d) pobrania rozmiaru tablicy
W funkcji main przetestuj działanie struktury danych, korzystając jednocześnie z dwóch tablic. Złożoność pamięciowa powinna być liniowa liniowa względem rozmiaru, a operacje dodania i zdjęcia elementu z końca powinny się wykonywać w czasie amortyzowanym stałym. Program powinien kompilować się na Linuksie poleceniem gcc bez warningów.

Z4
Załóżmy, że w przestrzeni adresowej mikrokontrolera pod adres 0x123 mapowany jest jeden z jego rejestrów, o rozmiarze równym rozmiarowi zmiennej typu int. Dokończ makrodefinicję: #define REG … tak, aby możliwe było korzystanie z REG tak, jak ze zmiennej typu int, tzn. tak, aby działały operacje:

int a = REG*4;
REG = 4;
int* p = ®

Pamiętaj, że zawartość takiego rejestru może się zmienić niezależnie od wykonywanego kodu, np. odzwierciedlając jakieś zdarzenia zewnętrzne.

Rozwiązania proszę przesyłać na maila. Za każde zadanie można otrzymać 0, 0.5 lub 1 punkt. Nie ma możliwości poprawiania nadesłanych rozwiązań.

Edit: zakwalifikowałem wszystkich, którzy uzyskali co najmniej 2 punkty.

Dodatkowe informacje

Jeśli ktoś dysponuje multimetrem lub płytką stykową, to zachęcam do zabrania ich ze sobą.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License