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ą…
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:
- Pogadanka na temat mikrokontrolerów
- "hello world" w wersji elektroników - mruganie LED-em
- Budowa układu do programowania
- Skompilowanie i wgranie programu
- Pogadanka co właściwie zrobiliśmy
- Samodzielne uruchomienie własnego programu
- Pogadanka co jeszcze AVR-y potrafią
- Propozycje projektów
- Realizacja własnych pomysłów bądź jednego projektu przez wiele zespołów
- 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ą.