Wytyczne, instrukcje do zajęć prowadzonych w formie zdalnej

zajęcia są wykonywane przy użyciu minikomputera Raspberry PI z podłączonymi modułami.Szczegółowe informacje o RP i sposobie wykorzystania interfejsów można znaleźć w internecie.

Adres IP do połączenia: 156.17.40.216 port:2020

Kod programu tworzymy w języku C.

Raspberry Pi to minikomputer z zainstalowanym system linux. Adres komputera podany przy laboratorium.

  1. Logowanie: login:student hasło:PWR2020 – dostęp po ssh (np. program putty). Do łatwego kopiowania plików pomiędzy raspberry a własnym komputerem/tworzenia katalogów/ kasowania plików można skorzystać z oprogramowania WinSCP.
  2. Po zalogowaniu przechodzimy do /home/student i tworzymy nowy katalog o nazwie LAB1.1-14587 (gdzie LAB1.1 to numer laboratorium, 14587 – numer indeksu jednej osoby z grupy)
  3. w założonym folderze tworzymy plik “main.c” i umieszczamy w nim kod programu
  4. kompilacja: gcc -Wall -o program main.c -lwiringPi
  5. uruchomienie programu: ./program
  6. po zakończonych ćwiczeniach należy skopiować kod na swój komputer i skasować utworzony wcześniej folder
  7. zalecane jest aby jednocześnie pracowała jedna grupa, w przeciwnym razie mogą powstać konflikty dostępu do podłączonych modułów i błędy – można to sprawdzić po istnieniu folderu LABxxx – dlatego rozpoczynając pracę sprawdzamy czy jest taki folder, jeśli ie ma to tworzymy nowy, wykonujemy prace, kasujemy.
  8. Biblioteka: WiringPi

Podstawowe polecenia systemu linux:

  • mkdir LAB1.1-14587 – tworzy folder LAB1.1-14587
  • ls – wyświetla listę plików/folderów w danej lokalizacji
  • pwd- wyświetla ścieżkę danej lokalizacji
  • cd LAB1.1-14587 – wchodzi do katalogu LAB1.1-14587
  • cd .. – wychodzi do katalogu nadrzędnego
  • gcc -Wall -o program main.c -lwiringPi – kompiluje plik main.c zawierający program do programu o nazwie: program
  • rm -r LAB1.1-14587 – kasuje katalog LAB1.1-14587
  • ctl+c lub ctrl+x – zakończenie uruchomionego programu
Wytyczne do przygotowania sprawozdania/zaliczenia przedmiotu:
  1. pracujemy w grupach 1-2 osobowych – jedna grupa, jedno sprawozdanie,
  2. wyniki z wykonane laboratorium należy umieścić w sprawozdaniu (jedno sprawozdanie-jedno laboratorium),
  3. sprawozdanie tworzymy w formacie A4, strona pierwsza musi zawierać: tytuł kursu, temat laboratorium, autorów sprawozdania, datę wykonania, imię i nazwisko prowadzącego (przykładowa strona), wysyłamy w formacie PDF,
  4. jedno ćwiczenie/zadanie w ramach laboratorium to jeden rozdział w sprawozdaniu, zadania do wykonania ramach laboratorium są opisane poniżej,
  5. w rozdziale umieszczamy opis wykonanych prac, schemat podłączenia modułu, kod oprogramowania realizujący założenia ćwiczenia (kompletny kod z pliku main.c), jeśli są jakieś inne pliki to należy również umieścić ten kod w sprawozdaniu,
  6. do każdego zadania należy umieścić zdjęcie z terminala, gdzie program wyświetli w jednej linii “Praca studentów: 1458,1478 -6.05.2020”, czyli numery indeksów i date wykonania a pod spodem wyniki z zadania
  7. każda linia tworzonego oprogramowania (kodu, który jest autorski) musi być zaopatrzona w komentarz opisujący funkcję tego kawałka kodu,
  8. sprawozdanie należy opracować i wysłać przez eportal w wyznaczonym terminie,
  9. dostarczenie materiałów po terminie skutkuje obniżeniem oceny o 10 punktów za każde 2 tygodnie spóźnienia,
  10. w celu otrzymania oceny, prezentujemy przygotowane zadania ze sprawozdania w możliwym terminie na zajęciach zdalnych,
  11. sprawozdanie oceniane jest w skali 0-100 punktów,
  12. przed wystawieniem oceny końcowej wszystkie laboratoria powinny być zaliczone, brak zaliczonego laboratorium oznacza otrzymanie za nie 0 punktów.
Progi ocen:
  • 5,0 – 91 – 100
  • 4,5 – 81 – 90
  • 4,0 – 71 – 80
  • 3,5 – 61 – 70
  • 3,0 – 51 – 60
  • 2,0 –  poniżej 50
Laboratorium 1 (wprowadzenie do obsługi Raspberry)
  1. prezentacja Raspberry Pi i modułów
  2. zapoznanie się z systemem linux
  3. zdalne połączenie z raspberry
  4. kompilacja przykładowego programu “Hello world: imię autora”
  5. sterowanie portami – sterowanie diodami LED:
    • dioda żółta – pin 27
    • dioda zielona – pin 28
    • dioda czerwona – pin 29
  6. napisać program mrugający diodą czerwoną z częstotliwością 1Hz,
  7. napisać program, z biegającym punktem z wykorzystaniem 3 diod (tylko jedna dioda świeci jednocześnie),

przygotować sprawozdanie:

  1. program “Hello world”,
  2. program – sterowanie diodami LED:
    1. mruganie diodą,
    2. biegający punkt.

 

Laboratorium 2 (I2c-MPU6050)
  1. zapoznajemy się z instrukcją do laboratorium (IK-LAB1.2),
  2. zapoznać z funkcjami do obsługi I2C: link
  3. adres modułu: 0x69
  4. jak działa interfejs I2c, najważniejsze cechy, parametry pracy, przykładowe podłączenie – napisać jeden rozdział w sprawozdaniu,
  5. ściągnąć plik: I2C_MPU6050
Zadanie 2.1 (3)

Uzupełnić kod programu tak aby dokonał odczytu wartości rejestru o nazwie “WHO_AM_I”. Wartość wyświetlić na ekranie i porównać z dokumentacją. Do czego służy taki rejestr?

Zadanie 2.2(3,5)

Napisać program, który odczyta temperaturę (rejestry “TEMP_OUT_H” i “TEMP_OUT_L”) i wyświetli ją w stopniach Celsjusza. Należy zwrócić uwagę na typy zmiennych TEMP_OUT – “16-bit signed value”.

Zadanie 2.3(4,5)

Jak działa żyroskop cyfrowy i akcelerometr. Opisać działanie.

Napisać program, który odczyta dane z żyroskopu i akcelerometru (rejestry “ACCEL_XOUT_H”, ….  i “GYRO_XOUT_H”,…) dla każdej osi, przeliczyć i wyświetlić.

Zadanie 2.4 (5)

Wykorzystać dane z zadania 3 do zrobienia cyfrowej poziomnicy. Wyświetla stopnie w zależności od położenia czujnika.

 

Laboratorium 3 (I2C – RTC, EEPROM)
  1. zapoznajemy się z instrukcją do laboratorium (IK-LAB1.3),
  2. wykorzystać funkcję do obsługi I2C z poprzedniego laboratorium,
Zadanie 3.1 (3)

Co to jest układ RTC? Do czego się go wykorzystuje, gdzie można znaleźć? Do czego służy wyprowadzenie “SQW/OUT”?

Co to jest pamięć EEPROM? Czy różni się od pamięci Flash i RAM? Do czego służą wyprowadzenia A0,A1,A2? Jak działa i co możemy uzyskać za pomocą wyprowadzenia “WP”?

Zadanie 3.2 (3,5)

Przygotować program, który odczytana datę z układu RTC i wyświetli w formacie: 2020-05-14 12:30:20.

Zadanie 3.3 (4)

Przygotować program, który umożliwi ustawienie daty w układzie RTC.

Zadanie 3.4 (4,5)

Przygotować program, który umożliwi odczyt pojedynczej liczby 8-bitowej z podanego adresu pamięci EEPROM.

Zadanie 3.5 (5)

Przygotować program, który umożliwi zapis pojedynczej liczby 8-bitowej do podanego adresu w pamięci EEPROM.

Przykładowy program dla pamięci EEPROM:

 

 

Laboratorium 4 (SPI – BMP280)
Zadanie 4.1 (3)
  1. jak działa interfejs SPI, najważniejsze cechy, parametry pracy, przykładowe podłączenie – napisać jeden rozdział w sprawozdaniu
  2. zapoznanie się z dokumentacją czujnika ciśnienia BMP280: link
  3. ściągnąć pliki: link
Zadanie 4.2 (4)

Uruchomić program z paczki, co robi program. Czy odczytywana wartość jest zgodna z dokumentacją? Odczytać temperaturę mierzoną przez układ, przeliczyć na stopnie Celsjusza i wyświetlić.

Zadanie 4.3 (5)

Odczytać ciśnienie atmosferyczne mierzone przez układ, przeliczyć na hPa i wyświetlić.

 

Uwagi: odczyt danych po SPI jest zamieszczony w przykładowym pliku, więc analogicznie należy odczytać kolejne rejestry. Aby przeliczyć temperaturę i ciśnienie należy zastosować formułę podaną na stronie 22 dokumentacji.

Konfiguracja:

  • rejestr “ctrl_meas” – ustawić tryb “Normal” – diagram na stronie 17,  oversampling – dla pomiaru ciśnienia i temperatury,
  • rejestr “config” – ustawić bity “t_sb”.
Laboratorium 5  (Komunikacja UART – protokół Modbus)

Zalecana biblioteka: Wiring PI Serial Library (link, przykład1, przykład2)

Zapoznać się z protokołem transmisji Modbus w trybie ASCII (link1, link2, link3, link4)

Zapoznać się z narzędziem do obsługi Modbus master modpoll (link) – narzędzie posłuży do komunikacji z Modbus slave

 

Napisać w języku C program do obsługi Modbus slave:

  • komunikacja odbywa się przy wykorzystaniu interfejsu UART, port dla urządzenia slave “/dev/ttyUSB1”, prędkość transmisji 19200
  • przy implementacji nie należy korzystać z gotowych bibliotek
  • zaimplementować obsługę Modbus ASCII dla modułu slave
  • program powinien obsługiwać prawidłową komunikację (sprawdzenie sumy kontrolnej otrzymanego zapytania, przesyłanie ramek zwrotnych)
  • należy zaimplementować następujące funkcje:
    • obsługa adresowania urządzenia – możliwość ustawienia adresu modułu slave
    • obsługa odczytu “Read Holding Registers” (funkcja 0x03), odczyt pojedynczego rejestru jak i wielu, zgodnie ze specyfikacją funkcji
    • obsługa zapisu “Write Single Register” (funkcja 0x06), zapis pojedynczej wartości
    • zakres adresów dla odczytu to 1-200, gdzie adresy 1-100 pochodzą z pliku “read.csv” a 101-200 z pliku “write.csv”
    • zakres adresów do zapisu to 1-100
    • dane pobierane dla rejestrów odczytu (rejestry 1-100) powinny znajdować się w pliku “read.csv” rozdzielonym przecinkami
    • dane zapisywane powinny być umieszczane w pliku “write.csv”, startowo plik posiada same “0” rozdzielone przecinkami
    • pliki CSV posiadają liczby rozdzielone przecinkami, ich pozycja odpowiada numerowi rejestru
  • program obsługuje operacje na dwóch funkcjach zgodnie ze specyfikacją protokołu.

W celu przetestowania prawidłowej implementacji programu należy wykorzystać program “modpool”

 

Laboratorium 6 (Komunikacja UART – protokół Modbus)

dokończenie laboratorium 5

 

Laboratorium 7
  1. ostateczne omówienie sprawozdań, wystawienie ocen,
  2. prowadzący może zadać pytania do wykonanych ćwiczeń i zakresu materiału.
Przykładowe programy:
  • “MPU_6050” – polecenie: “/home/test/mpu6050.out” – odczytuje dane z modułu MPU6050
  • “RTC_test_read” – polecenie: “/home/test/RTC_test_read.out” – odczytuje ustawiony czas w module RTC
  • “RTC_test_reset” – polecenie: “/home/test/RTC_test_reset.out” – zeruje czas w module RTC
  • “BMP280” – polecenie: “/home/test/BMP280_run.out” – odczytuje dane z modułu BMP280