Strona przedmiotu
Wykłady
Materiały do laboratoriów
Instrukcja płytki prototypowej (atmega32)
NOTA KATALOGOWA

Ważna informacja, znaczek stopnia można zrobić tak printf("%c\n",0xf8);.
Instrukcja do zajęć
Kod
Wykład, który może pomóc
Lista poleceń (krok po kroku polecenia są w instrukcji):
- Zaświecenie diody LED z wykorzystaniem portu mikrokontrolera.
- Odebranie informacji z przycisku i sterowanie diodami LED.
- Miganie diody LED.
- Sterowanie pracą silnika krokowego.
Konfiguracja portów:
DDR(X) = 0xff (wszystkie na wyjście z X) / 0x00 (wszystkie na wejście z X)
PORT(X) |= (1<<PXY) (ustawienie bitu Y portu X na 1, bez modyfikacji pozostałych)
PORT(X) &= ~(1 << PXY) (ustawienie bitu Y portu X na 0 bez modyfikacji pozostałych)
if (!(PINA & (1 << nrbitu))) <- Sprawdzanie ustawienia bitu
Inne:
Static - zmienna jest umieszczana w tej samej pamięci, co zmienna globalna i nie jest usuwana wraz z zakończeniem funkcji.
MIGANIE:
for(;;) { // wieczna pętla (albo tak: while(1){})
PORTD^=0xFF; // migamy
_delay_ms(CZAS); // czekamy 100 milisekund
}Lab2 (Przerwania, priorytety przerwań, przerwania zewnętrzne) (zapalanie liczby zliczeń w postaci binarnej z wykorzystaniem diody led)
Instrukcja do zajęć
Kod
Wykład, który może pomóc
avr-libc z przerwaniami (wektory przerwań)
Lista poleceń:
- Na podstawie instrukcji mikrokontrolera (nota katalogowa ATmega32) zapoznać się z działaniem układu przerwań.
- Znaleźć numer wyprowadzenia układu związany z pierwszym dostępnym przerwaniem zewnętrznym (INT0) oraz w dokumentacji biblioteki interrupt.h znaleźć nazwę wektora przerwania odpowiadającą temu przerwaniu.
- Podłączyć 8 diod LED do wyprowadzeń portu C mikrokontrolera (kolejne diody LEDS od PC0 do PC7), a przycisk będący generatorem zdarzeń do wyprowadzenia znalezionego w punkcie 2.
- W programie włączyć i skonfigurować pierwsze dostępne przerwanie zewnętrzne, tak aby reagować na zbocze opadające.
- W obsłudze przerwania wykonać zliczenie wartości pojawiających się zboczy sygnału (do przechowywania liczby zdarzeń wykorzystać zmienną globalną).
- W pętli głównej wykonać wyświetlenie się liczby zliczeń w postaci binarnej z wykorzystaniem diody LED.
Żeby zrobić przerwanie trzeba dodać bibliotekę #include <avr/interrupt.h>. Poza tym, trzeba dodać taką strukturę przed mainem:
ISR(„nazwa wektora przerwania zdefiniowana w dokumentacji biblioteki interrupt.h”)
{
....... //instrukcje wykonywane w procedurze
}Nazwy wektorów najwygodniej znaleźć w wersji html instrukcji do biblioteki avr-libc. Trzeba pamiętać, że szukamy takiego, który wgl istnieje w atmega32 ;)
Źródło, które będzie nam generować przerwanie trzeba podpiąć do odpowiedniej nóżki mikrokontrolera, w tym celu można skorzystać ze zdjęcia które pojawia się na początku tego repozytorium, albo moża mi zaufać, że wyjście INT0, które nas interesuje w tym przypadku to jest nóżka PD2 xD
Ponadto chcemy reagować tutaj na zbocze opadające, a to znaczy że trzeba ustawić konkretne bity rejestru MCUCR (MCU Control Register), a oto ściąga z wykładu:

W tej ściądze jest informacja na temat INT0 i INT1, jeszcze z takich łatwo dostępnych jest INT2, ale polecam sobie w tym celu doczytać wykład, który załączyłam do tego ćwiczenia c:
Jeszcze włączamy przerwania zewnętrzne jako ogół ustawiając dobry bit na rejestrze GICR (General Interrupt Control Register). W tym przypadku GICR |= (1<<INT0);.A poza tym włączamy "główny zawór przerwań" pisząc sei();
Lab3 (Obsługa wyświetlacza alfanumerycznego LCD, czyli początek pięknej przygody z wyświetlaczem LCD)
Instrukcja do zajęć
Kod
Nota katalogowa wyświetlacza LCD (tzw. instrukcja czarno-biała), czyli jak zrobić, żeby wyświetlacz wyczyścić, przesunąć kursor, wyłączyć miganie i inne takie bajery, a ponadto jak zrobić konkretne literki!
Algorytmy poszczególnych funkcji (tzw. instrukcja kolorowa)
Lista poleceń:
- Podłączyć wyświetlacz LCD do wyprowadzeń mikrokontrolera
- W programie głównym zainicjować wyświetlacz oraz skonfigurować go do pracy w zadanym trybie.
- Wyświetlić przykładowy znak, przesunąć kursor i wyświetlić znak w innym miejscu, wyświetlić napis znajdujący się w pamięci programu.
- Na podstawie dokumentacji biblioteki stdio.h, stworzyć funkcję obsługującą standardowe wyjście (stdout) z wykorzystaniem wyświetlacza LCD oraz utworzyć własne standardowe wyjście i przekierować do niego stdout, tak aby używając funkcji printf wyświetlać na nim informacje.
- Zbadać wpływ włączenia obsługi liczb zmiennoprzecinkowych na objętość programu oraz możliwości wyświetlania za pomocą funkcji printf.
Jak podpiąć to ustrojstwo?
<- często będziemy to robić w przyszłości, więc warto pamiętać
Instrukcja do zajęć
Wykład, który może się przydać <- druga połowa prezentacji
Kod
Lista poleceń:
Część I
- Podłączenie przycisku do PD6 i diody do PC0
- Obliczenia... Skonfigurować licznik do pracy z zadana częstotliwością wejściową. Należy w tym przypadku
wyznaczyć najlepszą możliwą częstotliwość sygnały podawanego na wejście licznika Timer/Counter1 tak, aby odmierzanie czasu było jak najdokładniejsze.
UWAGA! Częstotliwość zegara mikrokontrolera dla płytek EvB 5.1 wyznacza kwarc zewnętrzny F_CPU = 16 MHz - Zdefiniować w programie głównym opóźnienie realizowane przez licznik 1, a następnie zadeklarować zmienną określającą wartość początkową licznika (bądź końcową w zależności od wyboru trybu pracy) obliczaną dynamicznie na podstawie wpisanego wyżej opóźnienia.
- Skonfigurować licznik zgodnie z założonym trybem pracy.
- W obsłudze przerwania (generowanego w momencie przepełniania licznika bądź porównania) wykonać sprawdzanie stanu przycisku, a informacje o włączeniu bądź wyłączeniu urządzenia przekazać do pętli głównej programu.
- W pętli głównej programu umieścić sterowanie (wł/wył) diody LED w zależności od stanu urządzenia.
Część II
- Zapoznać się ze sposobem sterowania wyświetlaczem LED dostępnym w zestawie.
- Podłączenie katod: A-G <–> PD0-PD6, Dot <–> PD7, podłączenie anod (sterowanie przez tranzystory pnp, więc stan aktywny 0): Digit 1-4 <–> PC3-PC0.
- Skonfigurować licznik (Timer/Counter0) tak aby co 2 ms wykonywał zapalenie kolejnej cyfry na wyświetlaczu. Wartości cyfr do wyświetlenia należy przechowywać w zmiennych globalnych (np. j,d,s,t).
- Napisać funkcję, która przyjmować będzie jeden argument (typu np. uint16_t czyli liczbę do wyświetlenia) i na tej podstawie wyznaczać cyfry jedności, dziesiątek, setek i tysięcy oraz wpisywać te wartości do zmiennych globalnych z punktu 3.
- Wykorzystać w pętli głównej programu funkcję z punktu 4 tak aby kolejne liczby od 0 do 9999 pojawiały się co zadany okres czasu.
Tutaj zrobiłam całe dwa przerwania. Ten z timer1 robi brzęczyk, w momencie w którym czas jest zerowy, ten z timer0 wyświetla czas na wyświetlacz LCD. Ten brzęczyk to jest moja wariacja na temat, w poleceniu jest żeby po prostu czas leciał do przodu, więc trzeba zmienić count--; na count++; i usunąć fragment brzęczykowy wgl xD.
Kolejna ważna ściąga:


Instrukcja do zajęć
Wykład, który może pomóc
Kod
Lista poleceń:
- Napisać program, który będzie odbierał pojedyncze znaki wysyłane za pomocą magistrali RS232 z komputera PC. Jeśli odebranym znakiem będzie ‘x’ należy odesłać ciąg znaków “ok\n”
- Przygotować kalkulator RPN (Reverse Polish Notation) w ramach interfejsu RS232. Użytkownik z podłączonego terminala wpisuje liczbę i zatwierdza znakiem nowej linii (‘\n’). Mikrokontroler odczytuje liczbę i zapisuje do zmiennej y (przed tym zmienną y przepisuje do zmiennej x). Użytkownik wpisuje drugą liczbę i zatwierdza znakiem nowej linii (‘\n’). Mikrokontroler przepisuje zmienną y do zmiennej x i zapisuje odczytaną z RS232 liczbę do zmiennej y. Użytkownik wpisuje działanie (‘+’, ‘-’, ‘*’, ‘/’) i zatwierdza znakiem nowej linii (‘\n’). Mikrokontroler oblicza wartość: x y i wynik zapisuje do zmiennej y oraz przesyła w postaci tekstowej poprzez RS232. Należy obsłużyć sytuacje wyjątkowe ( np. przez wysłanie komunikatu o błędzie) typu dzielenie przez 0, niewłaściwa komenda itp.
Tutaj używa się cutecom, warto ogarnąć jak to działa, bo to zagadnienie się często na miniprojekcie pojawia ;)
Ma dwie linie transmisyjne RxD i TxD i tryb pracy asynchroniczny i synchroniczny.
Instrukcja do zajęć <- tutaj jest schemat podłączeń też, warto zobaczyć
Wykład, który może pomóc
Kod
Lista poleceń:
- Napisać program główny, który będzie wyświetlał na wyświetlaczu LCD odczytany stan konwersji w postaci liczby oraz zmierzone napięcie w woltach [V] w postaci liczby zmiennoprzecinkowej (z 3 miejscami po przecinku).
- Wzbogacić program o wyznaczanie wartości średniej z np. 20 pomiarów i wyświetlanie jej pod mierzoną wartością chwilową. Można przygotować procedurę wyznaczania średniej kroczącej (liczona w każdym momencie - bufor cykliczny), albo wyznaczana i wyświetlana po zebraniu 20 próbek za każdym razem od początku.
Instrukcja do zajęć
Kod
Nota katalogowa serwomechanizmu
Jakaś kolejna nota katalogowa do serwomechanizmu
Lista poleceń:
- sterowanie serwomechanizmu o podłączenie poprzez interfejs RS232 z komputera. Użytkownik powinien podać kąt nastawy serwa w zakresie ±90 stopni w terminalu szeregowym, w wyniku czego mikrokontroler powinien ustawić we właściwy sposób rejestr OCR1A i serwo powinno ustawić się w zadanym położeniu
Celem tego ćwiczenia jest zapoznanie się z metodą sterowania urządzeń za pomocą modulacji szerokości
impulsu (PWM) z wykorzystaniem odpowiednich trybów liczników wbudowanych w mikrokontroler
ATmega32. Sterowanymi elementami są serwomechanizm modelarski oraz dioda LED.
Instrukcja do zajęć
Kod
Wykład, który może pomóc
Lista poleceń:
- Wykonać program, który ustawi zegar RTC oraz będzie wyświetlał czas oraz datę na wyświetlaczu LCD, tak aby kolejne wyświetlenia wykonywały się co 1 sekundę (w obsłudze przerwania zewnętrznego INT0). Do wyprowadzenia INT0 mikrokontrolera doprowadzić sygnał z pinu CLK obok układu PCF8563. Wytwarzanie zbocza narastającego na wyjściu układu PCF8563 skonfigurować w funkcji RTC_init().
Ważna ściąga:

Bardzo przydatny interfejs szeregowy, jakby się chciało np jak na zajęciach podpiąć układ zegarkowy RTC! Można normalnie z niego odczytać godzinę i wczytać na ekran LCD i to właśnie będziemy robić, super opcja.
Działa to na zasadzie magistrali do której podpina się master i slave, więc można tak podpiąć inne rzeczy np: akcelerometr, żyroskop, komas, wyświetlacz LCD.
Instrukcja do zajęć
Wykład, który może pomóc
Kod
Kod, tzw przedsmak kolosa
Lista poleceń:
- Przygotować program główny, który na wyświetlaczu LCD prezentować będzie aktualną temperaturę otoczenia. Wyświetlana wartość temperatury powinna zawierać wartości ułamkowe. Można to prosto uzyskać bez korzystania z liczb zmiennoprzecinkowych (double).
Lista poleceń:
- Przygotować program loggera temperatury na kartę SD, który co sekundę będzie dokonywał pomiaru temperatury, a następnie zapisywał do pliku tekstowego data.txt na karcie SD w formacie: numer pomiaru, znak tabulacji, wartość rzeczywista temperatury,znaki końca linii (‘\r’ i ‘\n’). Podłączony przycisk wykorzystać jako sygnał do zakończenia zapisywania temperatur na kartę SD (zamknięcie pliku i przerwanie akwizycji danych a następnie wejście w pętlę nieskończoną).
- Rozszerzyć program o tworzenie nowych plików - nazwa z numerem: np. data0.txt data1.txt za każdym ponownym uruchomieniem (tak aby starsze pliki pozostawały na karcie).