Zakres laboratorium:
  1. zapoznanie z Modułem 328
  2. przygotowanie makr do obsługi przycisków i LED
  3. wstęp do biblioteki UART, praca z terminalem – wysyłanie
  4. UART – odbieranie

Zadania na ocenę 5.5:

  • przygotować prezentacje o interfejsie UART/USART (jedna osoba – 15 minut)
1. Zapoznanie z Modułem 328

Podstawowe informacje o Module 328 można znaleźć na stronie MODUŁ 328. Moduł został wykonany w celu umożliwienia studenta zapoznania się z możliwościami i praktycznym wykorzystaniem interfejsów mikrokontrolera takich jak:

  • UART
  • I2C

Moduł został zamknięty w obudowie w celu zabezpieczenia układów wewnętrznych jak i uproszczenia w ilości podłączeń – wymagane jest podłączenie tylko jednym kablem USB do komputera.

Należy również zapoznać się z dokumentacja mikrokontrolera ATmega328P.

Zadania:

  • założyć projekt (instrukcja do środowiska Eclipse):
    • język programowania: C++
    • mikrokontroler:  ATmega328P
    • częstotliwość taktowania: 16 000 000 MHz
    • programator: USBasp
  • dodać do projektu pliki z paczkizip
  • skompilować projekt i wgrać do mikrokontrolera
2. Przygotowanie makr do obsługi przycisków i LED
  • utworzyć plik nagłówkowy “Modul328.h” i dołączyć go do pliku “main.cpp”
  • utworzyć makra w pliku nagłówkowym “Modul328.h” do obsługi diod LED

     
  • utworzyć makra w pliku nagłówkowym “Modul328.h” do obsługi przycisków

     
  • przetestować działanie makr – napisać program:
    • przyciśnięty przycisk czerwony – dioda czerwona uruchomiona
    • przyciśnięty przycisk zielony – dioda zielona uruchomiona
    • przyciśnięte dwa przyciski – uruchomiona tylko dioda żółta

Makra ułatwiają dalsze prace nad programem. Dzięki podpowiedzią programu Eclipse programista nie musi podawać całej nazwy makra – po wpisaniu kilku pierwszych liter, środowisko Eclipse powinno automatycznie podpowiedzieć resztę nazwy (jeśli nie uruchomiło się okno podpowiedzi można je ręcznie wywołać przez kombinację klawiszy ctrl+ spacja). Programista tworząc makra do obsługi peryferiów na początku pracy z nowym modułem powinien dokładnie zapoznać się z podłączeniami w module i przetestować utworzony kod. Tak przygotowany kod w czasie tworzenia programu można łatwo wykorzystać – piszemy “LED_GREEN_ON” i dioda zielona zostanie uruchomiona. Takie uproszczenie pozwala skupić się na działaniu kodu – zwalnia programistę z ciągłego zaglądania do dokumentacji modułu i szukania fizycznego połączenia, dodatkowo zapobiega błędom – sprawdzone makro uruchamiające diodę zieloną zawsze będzie wykonywać to zadanie. Tworzenie makr przyczynia się do rozdzielenie warstwy sprzętowej od programu – dalsze prace nad kodem może wykonywać programista, który zna język c/c++ ale nie ma pojęcia o strukturze mikrokontrolera AVR – przenosi tworzenie kodu na wyższą wartę abstrakcji. Inną zaletą takie podejścia jest duża uniwersalność/przenośność kodu np. mamy przygotowany skomplikowany kod (kilka tysięcy linii kodu), który w wielu miejscach wykorzystuje funkcjonalność zapisaną z wykorzystaniem makra dla prototypu urządzenia. Jednak w wersji finalnej urządzenia okazuje, się że elektronik musiał zamienić dwa porty (diodę czerwoną z przyciskiem zielonym) i konieczna są zmiany. Mając utworzone makra – niższe warstwy, wszystkie zmiany dokonujemy na ich poziomie a cały algorytm pozostaje bez zmian.

 

3. Wstęp do biblioteki UART, praca z terminalem – wysyłanie danych

UART jest to popularny interfejs w mikrokontrolerach. Do swojego działania wykorzystuje dwie linie:

  • Rx – linia odbierająca
  • Tx – linia nadająca

Jeśli w naszym układzie chcemy aby była jednokierunkowa transmisja to wystarczy podłączyć tylko jedną linię w odpowiednim kierunku. W celu komunikacji w dwie strony należy wykorzystać dwie linie i odpowiednio połączyć co zostało zaprezentowane:

Schemat komunikacji z wykorzystaniem UART
Schemat komunikacji z wykorzystaniem UART

Szybkość transmisji ustawia się za pomocą wyboru odpowiedniego “BAUDRATE” nim niższa szybkość transmisji tym mniejsze generowane błędy i można przesyłać dane na większą odległość.

Praca z programem RealTerm:

  • uruchomić program PuTTY- ikona na pulpicie
  • przejść do zakładki drugiej “Port”
    • ustawić “Baud”: 19200
    • wybrać “Port”: port należy odczytać w menadżerze urządzeń systemu np. dla portu COM5 wpisujemy COM5

      PuTTy-serial
      Konfiguracja programu PuTTy do pracy z portem szeregowym
  • kliknąć przycisk “Load”, co spowoduje otwarcie portu i uruchomienie transmisji (nic nie powinno się wyświetlać ponieważ moduł nic nie wysyła)

Zadania:

  • dodać do projektu pliki z paczki (UARTzip) i dołączyć klasę “UART0” do pliku “main.cpp”
  • zapoznać się z funkcjami jakie udostępnia klasa “UART0”, omówić działanie w grupie
  • uzupełnić funkcje: UART0::init() i UART0::sendByte(const uint8_t data)
  • skopiować kod z poniższego przykładu, wyświetlić okno terminala i obserwować działanie – co on robi? Po co “\r\n”?

  •  zaimplementować funkcję która po przyciśnięciu przycisku czerwonego spowoduje wysłanie 10 komunikatów “To działa i!!!” w dostępach 1 sekundy – gdzie i to numer komunikatu (1,2,3…10) – można wykorzystać funkcję sprintf(…)
4. UART – odbieranie danych
  • skopiować kod z poniższego przykładu, w terminalu wpisać swoje imię i nazwisko –  jaką funkcje realizuje poniższy kod?
  • zapoznać się z działaniem funkcji “UART0::receiveByte()” – do czego służy?
  • zaimplementować następującą funkcjonalność:
    • odebranie znaku ‘r’ powoduje włączenie czerwonej diody LED i przesłanie komunikatu do terminala “Świeci: RED”
    • odebranie znaku ‘y’ powoduje włączenie żółtej diody LED  i przesłanie komunikatu do terminala “Świeci: YELLOW”
    • odebranie znaku ‘g’ powoduje włączenie zielonej diody LED  i przesłanie komunikatu do terminala “Świeci: GREEN”
    • odebranie znaku ‘z’ powoduje wyłączenie wszystkich diod LED i przesłanie komunikatu do terminala: “Wyłączono wszystkie diody LED”
  • zaimplementować funkcjonalność menu:
    • po uruchomieniu modułu na ekranie wyświetla się menu z opcjami do wyboru:
      • ‘1 – wlacz diode czerwona’
      • ‘2 – wlacz diode zolta’
      • ‘3 – wlacz diode zielona’
      • 4 – wylacz diode czerwona’
      • ….
      • ‘7 – pokaz stan diod LED’
      • ‘? – wyswietl menu’
    • zaimplementować funkcjonalność menu:
      • przyciśnięci przycisku 1 powoduje uruchomienie diody czerwonej i wysłanie informacji o stanie diod LED, przyciśnięcie przycisku 4 powoduje wyłączenie diody czerwonej i wysłanie informacji o stanie
      • przyciśnięci przycisku 7 wyświetla stan diod LED: “Stan LED 0 1 0” – co oznacza, ze uruchomiona jest tylko dioda żółta
      • ? – wyświetla ponownie menu
  • praca z ciągiem znaków: po wpisaniu PWR terminal odpowiada “Witaj studencie!!!”
  • odczytywanie liczb z terminala: po podaniu swojego roku urodzenia, na terminalu pojawia się napis: “Witaj, masz xx lat.” np. podajemy 1988 i pojawia się komunikat “Witaj, masz 26 lat.”