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.