Zajęcia stacjonarne:

Wykonać notatki z odpowiedziami na poszczególne pytania.

Zadanie 1 – ocena 3

Funkcje biblioteki pgmspace: link

Zapoznanie się z rodzajami pamięci SRAM, FLASH, EEPROM.

  • czym różnią się poszczególne pamięci?
  • Jaka jest pojemność poszczególnych pamięci w mikrokontrolerze Atmega32a?
  • Jakie są ich wady i zalety?

 

Uwagi:

należy dodać odpowiednie pliki nagłówkowe: #include <avr/eeprom.h> #include <avr/pgmspace.h>

czasem kompilator zauważy, że tablica nie jest używana i może dokonać optymalizacji kodu przez jej usunięcie. W takim przypadku można w pętli “while” wykonać jakaś operację na tablicy np. tab[0]=5;

podgląd rozmiaru programu jest możliwy po jego skompilowaniu w konsoli kompilatora (w programie eclipse znajduje się na dole ekranu w zakładce “Console”) tak jak na rysunku 1.

Rysunek 1. Wynik kompilacji programu, wykorzystanie pamięci.

 

Utworzyć program z nieskończoną pętlą while, skompilować i sprawdzić wykorzystanie pamięci:

  1. przed funkcją “main” utworzyć jednoelementową tablicę typu “uint32_t”, jaki jest rozmiar tak skompilowanego programu w poszczególnych pamięciach?
  2. zmienić tablicę aby zawierała miejsce na 100 elementów, jak teraz zmieni się rozmiar programu? W której pamięci jest przechowywana tablica?
  3. zmienić rozmiar tablicy na 1000 elementów – czy taka tablica jest możliwa do przechowywania w wybranym mikrokontrolerze?
  4. zmodyfikować program aby tablica 1000 elementów została zapisana do pamięci flash. Czy teraz jest możliwe uruchomienie programu? Czy do takiej tablicy możemy zapisywać jakieś zmienne? Do czego można wykorzystać zapisywanie dużych elementów w pamięci flash w czasie kompilacji?

Wykorzystanie pamięci Flash do przechowywania dużych stałych elementów.

  1. Utworzyć nowy program na podstawie poniższego kodu. W jakiej pamięci jest umieszczona zmienna “tab” i “tab2”?
  2. Zmodyfikować program tak aby na wyświetlaczu były wyświetlone zmienne z tablicy “tab” – odczyt należny wykonać z wykorzystaniem funkcji “pgm_read_”

Zadanie 2 – ocena 4

Funkcje biblioteki EEPROM: link

Zrobić program, który po uruchomieniu wyświetla zapisaną liczbę z pamięci eeprom przez 5 sekund w formie “Zapisania liczba: n”. Następnie przechodzi do odliczania wartości od 1-200, naciśnięcie przycisku powoduje zapisanie aktualnej wartości do pamięci eeprom i jest potwierdzone komunikatem “Zapisano: n”.

  • zapis do pamięci EEPROM wykonujemy przy użyciu funkcji “eeprom_write_byte”,
  • odczyt z pamięci EEPROM wykonujemy przy użyciu funkcji “eeprom_read_byte”,
Zadanie 3 – ocena 4,5

Funkcje biblioteki WDT: link

Do czego służy moduł Watchdog? Po co go stosować i kiedy?

Wykorzystać program z poprzedniego zadania i zmodyfikować go:

  • dodać biblioteki do obsługi watchdog,
  • uruchomić moduł wadtchdog aby następowało jego działanie jeśli w ciągu 2s nie zostanie on zrestartowany,
  • dodać obsługę kolejnego przycisku (przycisk 2), który po przyciśnięciu dokonuje restartu modułu watchdog,
  • program powinien odliczać kolejne liczby jak w poprzednim zadaniu, dodatkowo należy cyklicznie wciskać przycisk 2 aby program działał,
  • co się stanie jeśli nie dokonamy restartu modułu watchdog?

 

Zadanie 4 – ocena 5

Utworzyć program obsługujący dwa przerwania na różnych Timerach. Z ich wykorzystaniem zbudować stoper odliczający minuty, sekundy i setki sekund. Wyświetlać pomiary na wyświetlaczu LCD.

  • przerwanie 1 – uruchamiane z częstotliwością 100Hz, służy do odliczania czasu
  • przerwanie 2 – uruchomić z różnymi częstotliwościami (10-50Hz), obsługuje wyświetlanie na ekranie czasu, czas dobrać aby program działał poprawnie i interaktywnie
  • w pętli main programu należy umieścić obsługę stopera, tylko funkcje start i stop (dwa przyciski) ustawiające odpowiednie flagi/ uruchamiające przerwania, reszta kodu powinna znaleźć się w odpowiednich przerwaniach
  • przycisk start uruchamia zawsze nowe odliczanie, przycisk stop zatrzymuje odliczanie i wyświetla zmierzony czas
  • dodać przycisk 3, który po naciśnięciu wykona restart mikrokontrolera przy wykorzystaniu modułu watchdog

 

 

Zajęcia zdalne:

Zakres laboratorium:
  1. Przetwornik A/D
  2. Timer – generator sygnału PWM (link, link2)
  3. Regulator dwustawny (link)
  4. Regulator dwustawny z histerezą
  5. Regulator trójstawny
  6. Regulator PID(link)

 

Przed wysłaniem programu należy sprawdzić jego działanie dla wszystkich wykonanych regulatorów i w każdym zakresie ustawienia potencjometrów.

Czy program poprawnie reaguje na wartości ujemne itd.

Zastanowić się nad przykładami urządzeń, w jakich występują zaprezentowane regulatory, potrafić wymienić minimum 3 urządzenia dla każdego regulatora.

Zadanie 1 – ocena 3

Program realizujący funkcję woltomierza:

  • umieścić na schemacie mikrokontoler, dwa potencjometry zadający napięcie w zakresie 0-5V, dwa mierniki napięcia (Voltimeter) do mierzenia napięcia z potencjometrów i wyświetlacz LCD
  • podłączyć elementy i napisać program, gdzie mikrokontroler wykorzystuje przetwornik A/D do pomiaru napięcia i  wyświetla je na wyświetlaczu LCD
  • w pierwszej linii LCD wyświetlana jest wartość mierzonego napięcia w woltach i wartość od 0-100, proporcjonalnie odpowiadająca mierzonemu napięciu, 0V to 0, 2,5V to 50 itd.
  • w drugiej linii LCD wyświetlamy wartości z drugiego potencjometru

Przełączanie kanałów działa na symulatorze, proszę zapoznać się z rejestrem ADMUX. Najłatwiej przełączyć kanały przez wykorzystanie funkcji:

  • sbi(ADMUX, MUX0) – ustawia 1 w bicie MUX0, ustawia pomiar na 1 kanale
  • cbi(ADMUX, MUX0) – zeru bit MUX0, ustawia pomiar na 0 kanał
Zadanie 2 – ocena 4

Program realizujący funkcję regulatora dwupołożeniowego bez histerezy i z histerezą oraz regulatora trójpołożeniowego:

  • do programu z zadania 1 dodajemy:
    • diodę LED opisaną jako L1
    • diodę LED opisaną jako L2
    • 2 diody LED opisane jako L3A i L3B
  • tworzymy 3 funkcje, jedna funkcja to jeden regulator, funkcja przyjmuje parametr (uint8_t wartośćZadana, uint8_t wartoscRzeczywista)
  • zadaniem każdej funkcji jest realizacja następującego działania:
    • regulator dwupołożeniowy – realizuję działanie regulatora dwustanowego i wyświetla swoje stany na diodzie L1
    • regulator dwupołożeniowy z histerezą – realizuję działanie regulatora dwustanowego z histerezą i wyświetla swoje stany na diodzie L2, histerezę ustawić na 0,5V
    • regulator trójpołożeniowego – realizuję działanie regulatora trójpołożeniowego i wyświetla swoje stany na diodach L3A i L3B
  • wartość zadana to wartość z 1 potencjometru, a wartość rzeczywista to napięcie z 2 potencjometru,
  • jak działają poszczególne regulatory, jakie są ich wady i zalety?
Zadanie 3 – ocena 4,5

Do programu z zadania 2 dodajemy regulator PID:

  • dodajemy funkcję, realizującą zdanie regulatora PID – przyjmuje takie same parametry jak pozostałe funkcje regulatorów
    • w obecnym zadaniu działanie regulatora PID ograniczamy tylko do członu “P”,
    • wyliczamy uchyb regulacji,
    • uchyb przeliczamy przez współczynnik członu proporcjonalnego “Kp” i otrzymujemy wartość sterującą,
    • wartość sterująca powinna być w zakresie 0-100, gdzie 50 to gdy uchyb wynosi 0 a pozostałe wartości są proporcjonalne i wypełniają cały zakres sterowania,
    • wartość wyświetlamy w 3 linijce wyświetlacza LCD (dodatkową linię do LCD można dodać przez wywołanie “Properties” na elemencie wyświetlacza i używamy funkcji LCD_GoTo(20, 0) i LCD_GoTo(20, 1)), MOC:xxx%
Zadanie 4 – ocena 5

Do programu z zadania 3 dodajemy wyjście PWM ustawiane przez regulator PID:

  • należy ustawić Time1 do pracy w trybie PWM, należy wybrać odpowiedni tryb i skonfigurować układ licznikowy,
  • funkcja PID z zdania 3 powinna sterować wypełnieniem sygnału PWM w zakresie 0-100,
  • podłączyć do wyprowadzenia mikrokontrolera (tam gdzie będzie generowany sygnał PWM) oscyloskop, na którym będzie można obserwować sygnał PWM,