Zakres materiału:

  1. biblioteki arduino – link
  2. interfejs komunikacyjny UART – biblioteka Serial
  3. biblioteka do LCD – LiquidCrystal
  4. interfejs komunikacyjny I2C – biblioteka Wire
  5. układ zegara RTC PCF8563T – dokumentacja
  6. buzzer – biblioteka tone
  7. pamięć EEPROM – biblioteka EEPROM

Zadanie 1 :

Napisać program zegarka, który wyświetla na LCD aktualną godzinę. Czas obliczany jest przy wykorzystaniu opóźnień (funkcja millis()). Format wyświetlanego czasu: 12:15:01

Oprogramować możliwość ustawiania czasu z klawiatury lub portu UART (wybrać opcję).

Jakie wady posiada taki program?

Zadanie 2(ocena 3):

Zapoznać się z układem RTC PCF8563T, dokumentacja techniczna dostępna na górze strony.

Należy odczytać aktualną datę i wyświetlić na LCD.

Układ komunikuje się po interfejsie I2C, wiec należy wykorzystać bibliotekę z Wire.

Czas zapisywany jest w formacie BCD – należy przekonwertować.

Jeśli układ nie działa-nie zmienia się czas to należy ustawić sekundy na dowolną wartość.

Jak działa podtrzymanie bateryjne (zworka J_RTC_bat), do czego to służy?

Należy samemu przygotować bibliotekę/zestaw funkcji do obsługi układu RTC po interfejsie I2C z wykorzystaniem biblioteki komunikacji Wire.

Do obsługi PCF8563T nie wykorzystujemy gotowej biblioteki z internetu.

Zadanie 3 (ocena 3.5):

Napisać program umożliwiający ustawianie daty i godziny w układzie RTC. Datę podajemy z klawiatury lub  z portu UART (wybrać opcję).

Program wyświetla odczytane wartości na LCD w formacie “06/12/2022 12:55:02”

Zadanie 4 (ocena 4):

Napisać program realizujący funkcję budzika. Godzinę budzenia ustawiamy za pomocą klawiatury lub portu UART (wybrać opcję). Po nastąpieniu czasu budzenia, pojawia się sygnał dźwiękowy z buzzera i mruga podświetlenie wyświetlacza LCD. Po wciśnięciu przycisku następuje wyłączenie alarmu.

Zadanie 5 (ocena 4.5):

Co to jest pamięć EEPROM, jakie inne rodzaje pamięci występują w używanym mikrokontrolerze? Czym charakteryzują się poszczególne rodzaje pamięci, jakie są pomiędzy nimi różnice? Jakie są ich pojemności w używanym mikrokontrolerze, ile zmiennych 8 bitowych można zapisać? – zrobić notatkę

Napisać program z licznikiem , który zwiększa swoją wartość, co 1 sekundę. Wartość licznika zapisywana jest do pamięci EEPROM. Program po uruchomieniu odczytuje wartość o stanie ostatniej wartości licznika przed wyłączeniem programu i przetrzymuje taką informacje w zmiennej pomocniczej.  Następnie cyklicznie wysyła na terminal informacje: “Poprzednia wartość licznika: 4, aktualna wartość licznika 1”.  Czy pamięć nieulotna działa prawidłowo?

Zadanie 6 (ocena 5)

Przerobić program z zadania 4 tak aby godzina budzenia była ustawiana i zapisywana w pamięci EEPROM. Umożliwi to uodpornienie budzika na chwilowy zanik napięcia.

Reszta opcji jak w programie 4.

Przetestować działanie budzika po odłączeniu zasilania. Czy układ RTC działa przy wyłączonym zasilaniu? Dlaczego tak/dlaczego nie? Czy ustawienia budzika zostały zachowane?

 

Należy przygotować notatkę (każda osoba indywidualnie) dotyczącą poznanych interfejsów komunikacyjnych I2C, UART:

  • jak działa interfejs komunikacyjny? Ile można podłączyć urządzeń i w jakiej konfiguracji?
  • jakie występują linie komunikacyjne, jakie są ich funkcje i nazwy,
  • narysować przykładowy schemat podłączenia urządzeń w danym interfejsie.

 

 

 

 

 

 

 

Zakres laboratorium 2017-2021 (nie aktualne)

Zajęcia stacjonarne:

  • STM32-projekt
  • zapoznanie z Cube i bibliotekami HAL
  • debugger
  • komunikacja UART

Zapoznać się z kursem: link

 

Zadanie 1 – 3

Zapoznać się z płytką Nucleo i tworzeniem projektu w STM32IDE.  Co to jest biblioteka HAL i LL, jak z nich korzystać? Uruchomić program migający diodą. Zapoznać się z obsługa i możliwościami debuggera.

Zadanie 2 – 3,5

Komunikacja z komputerem, wykorzystanie interfejsu UART – “HAL_UART_Transmit“.

Przesłać do terminala komunikat z imionami autorów i liczbą x, gdzie x to inkrementowana liczba co 1 sekundę.

Zadanie 3 – 4

Utworzyć program, który steruje dioda led  z poziomu terminala PC – “HAL_UART_Receive”.

Wysłanie litery “a” uruchamia diodę LED, litery “w” wyłączy diodę LED. Inne znaki są pomijane.

Dodatkowo włączenie/wyłączenie diody przesyła odpowiedni komunikat do konsoli, komunikat wysyłany tylko raz na zmianę stanu.

Zadanie 4 – 4,5

Utworzyć program obliczający wiek. Rok urodzenia podajemy przy wykorzystaniu konsoli na komputerze PC.

Program po uruchomieniu wysyła informacje o swojej nazwie i funkcjonalności, prosi o podanie roku urodzenia, oblicza wiek i wyświetla go.

Zadanie 4 – 5

Utworzyć program, którzy po uruchomieniu wyświetla  menu i obsługuje opcje:

  1. Informacje o programie
  2. Sterowanie diodą LED
  3. Odliczanka od 10 do 0
  4. Ponowne wyświetleniu menu

Wybranie odpowiedniej cyfry uruchamia odpowiednią opcję programu. Wyjście do menu z wybranej opcji po przyciśnięciu przycisku powrotu: “x”

“Informacje o programie” – wyświetla komunikat z opisem programu i autorów (imię i numer indeksu)

“Sterowanie diodą LED” – program działa jak z zadania 3

“Odliczanka od 10 do 0” – program po uruchomieniu odlicza od 10 do 0. Po odliczeniu do zera wyświetla komunikat. Program można w każdej chwili przerwać przez przycisk powrotu

“Ponowne wyświetleniu menu” – ponownie wyświetla menu

 

 

Zajęcia zdalne:

Zakres laboratorium:
  • zapoznanie się z rodzajami pamięci SRAM, FLASH, EEPROM,
  • obsługa wybranych pamięci, wykorzystanie pamięci FLASH do przechowywania dużych niezmiennych danych,
  • zastosowanie pamięci EEPROM do zapisywania danych pomiarowych.

Materiały dodatkowe: link1, link2, link3

 

Forma oceny:

  • sporządzić notatkę z wykonanych zadań 1-2, zawierającą wyniki, odpowiedzi na pytania, kody źródłowe programów (tylko fragmenty, które były istotne w zadaniu), notatkę wysłać przez eportal w wyznaczonym terminie,
  • dla zadań 3-5 należy umieścić całe programy przez eportal.

 

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.

 

symulator SimulIDE nie wykonuje prawidłowo wszystkich operacji na różnych pamięciach, dlatego dla niektórych zadań wyświetlany wynik będzie dla dwóch rozpatrywanych przypadków taki sam. W fizycznym mikrokontrolerze wyniki byłby inne. Pewne funkcje zostały poprawione w wersji symulatora 0.4.13, więc zaleca się jej używanie.

 

Zadanie 1 – ocena 3

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

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?
Zadanie 2 – ocena 3,5

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

  1. Utworzyć nowy program na podstawie poniższego kodu. Dodać biblioteki do obsługi LCD. Utworzyć symulacje z wyświetlaczem LCD 16×2. Jak działa ten program? 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 3 – ocena 4

Praca z pamięcią eeprom.

  • wykorzystać symulację z poprzedniego zadania, dodać przycisk,
  • utworzyć program, który w pętli głównej co jedną sekundę zwiększa licznik o 1 – sekundnik, licznik może mieć wartości od 0-255, stan licznika wyświetlany jest w pierwszej linii LCD,
  • po wciśnięcia przycisku należy odczytać aktualny licznik i zapisać jego wartość do pamięci eeprom przy użyciu funkcji “eeprom_write_byte”,
  • każde kolejne wciśnięcie przycisku jest zapisywane do kolejnej komórki pamięci eeprom, maksymalnie może być 100 zapisanych wartości,
  • indeks aktualnie zapisywanej komórki należy wyświetlić w drugiej linijce wyświetlacza LCD,
  • sprawdzić czy poprawnie są zapisywane wartości do pamięci eeprom przez podgląd pliku pamięci, w tym celu po wykonaniu kilku przyciśnięć przycisku należy wykonać operację “Save EEPROM data” dostępne w opcjach mikrokontrolera. Zapisany plik można podglądnąć w notatniku. Powinien zawierać kolejne zapisane czasy naszego programu.
Zadanie 4 – ocena 4,5

Utworzyć program, który będzie odczytywał kolejne liczby z pamięci eeprom:

  • symulacja zawiera wyświetlacz LCD,
  • po załadowaniu programu i należy załadować plik z zapisem pamięci eeprom,
  • w pliku zapisana są dane, liczby od 1 do 10 a następnie występuje liczba 255, która oznacza koniec odczytywania,
  • program powinien odczytywać kolejne liczby z pamięci EEPROM przy użyciu funkcji “eeprom_read_byte”, wyświetlacz na wyświetlaczu kolejną liczbę co 1 sekundę i zakończyć działanie po osiągnięciu oznaczenia końca liczb,
  • w czasie oceniania plik z zapisem pamięci eeprom może być inny, więc program powinien działać prawidłowo na różnych plikach, maksymalna ilość liczb do wczytania to 20.

 

Zadanie 5 – ocena 5

Utworzyć program, który loguje dane pomiarowe.

  • symulacja powinna zawierać wyświetlacz LCD, potencjometr do zadawania napięcia-dane pomiarowe,
  • program maksymalnie może zapisać 10 pomiarów w pamięci eeprom,
  • zapis nowego pomiaru,napięcia dokonywany jest co 5 sekund,
  • należy zastanowić się jak zapisać napięcie w pamięci eeprom-jaki typ danych,
  • po dokonaniu zapisu 10 pomiarów, na wyświetlaczu pojawia się komunikat o końcu logowania i następuje wyświetlanie po kolei zapisanych wyników w postaci pomiar1:x.x – gdzie x.x to napięcie w formacie 2.5V,
  • po wyświetleniu wszystkich pomiarów program kończy swoje działanie.