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.
- 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.
- 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)
- w założonym folderze tworzymy plik “main.c” i umieszczamy w nim kod programu
- kompilacja: gcc -Wall -o program main.c -lwiringPi
- uruchomienie programu: ./program
- po zakończonych ćwiczeniach należy skopiować kod na swój komputer i skasować utworzony wcześniej folder
- 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.
- 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:
- pracujemy w grupach 1-2 osobowych – jedna grupa, jedno sprawozdanie,
- wyniki z wykonane laboratorium należy umieścić w sprawozdaniu (jedno sprawozdanie-jedno laboratorium),
- 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,
- jedno ćwiczenie/zadanie w ramach laboratorium to jeden rozdział w sprawozdaniu, zadania do wykonania ramach laboratorium są opisane poniżej,
- 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,
- 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
- każda linia tworzonego oprogramowania (kodu, który jest autorski) musi być zaopatrzona w komentarz opisujący funkcję tego kawałka kodu,
- sprawozdanie należy opracować i wysłać przez eportal w wyznaczonym terminie,
- dostarczenie materiałów po terminie skutkuje obniżeniem oceny o 10 punktów za każde 2 tygodnie spóźnienia,
- w celu otrzymania oceny, prezentujemy przygotowane zadania ze sprawozdania w możliwym terminie na zajęciach zdalnych,
- sprawozdanie oceniane jest w skali 0-100 punktów,
- 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)
- prezentacja Raspberry Pi i modułów
- zapoznanie się z systemem linux
- zdalne połączenie z raspberry
- kompilacja przykładowego programu “Hello world: imię autora”
- sterowanie portami – sterowanie diodami LED:
- dioda żółta – pin 27
- dioda zielona – pin 28
- dioda czerwona – pin 29
- napisać program mrugający diodą czerwoną z częstotliwością 1Hz,
- napisać program, z biegającym punktem z wykorzystaniem 3 diod (tylko jedna dioda świeci jednocześnie),
przygotować sprawozdanie:
- program “Hello world”,
- program – sterowanie diodami LED:
- mruganie diodą,
- biegający punkt.
Laboratorium 2 (I2c-MPU6050)
- zapoznajemy się z instrukcją do laboratorium (IK-LAB1.2),
- zapoznać z funkcjami do obsługi I2C: link
- adres modułu: 0x69
- jak działa interfejs I2c, najważniejsze cechy, parametry pracy, przykładowe podłączenie – napisać jeden rozdział w sprawozdaniu,
- ś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)
- zapoznajemy się z instrukcją do laboratorium (IK-LAB1.3),
- 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <wiringPi.h> #include <wiringPiI2C.h> #include <softPwm.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> int fd; int adressEeprom = 0x00; //adres pamieci EEPROM /* Funkcja zapisuje pojedynczy bajt do komorki pamieci eeprom adress - adres komorki pod jaki zapisać value - wartosc do zapisania */ int i2cWriteEEPROM(uint16_t adress, uint8_t value) { wiringPiI2CWriteReg16(fd, (adressEeprom >> 8), ((adress & 0xff)<<8) | value ); delay(20); return 1; } /*Funkcja odczytuje jeden bajt z podanego adresu komorki pamieci */ uint8_t i2cReadEeeprom(uint16_t adress) { wiringPiI2CWriteReg8(fd, (adressEeprom >> 8), (adress & 0xff)); delay(20); return wiringPiI2CRead(fd); } int main(void) { int dane; printf("EEPROM \r\n"); if (wiringPiSetup() == -1) exit(1); if ((fd = wiringPiI2CSetup(adressEeprom)) == -1) { printf("error initialize I2C"); exit(1); } printf("I2C start EEPROM\r\n"); //Zapisuje do komorki 10 wartosc 44 i2cWriteEEPROM(10, 44); //Odczytanie z komorki 10 wartosc dane = i2cReadEeeprom(10); printf("%d ", dane); return 0; } |
Laboratorium 4 (SPI – BMP280)
Zadanie 4.1 (3)
- jak działa interfejs SPI, najważniejsze cechy, parametry pracy, przykładowe podłączenie – napisać jeden rozdział w sprawozdaniu
- zapoznanie się z dokumentacją czujnika ciśnienia BMP280: link
- ś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”
1 2 3 4 5 6 7 |
//Funkcja wysłania po Modbus ASCII komendy zapisu //do urządzenia slave o adresie 5 wartości 1024 w rejestrze 12 /home/student/modbusMaster/modpoll -m ascii -a 5 -b 19200 -p none -r 12 /dev/ttyUSB0 1024 //Funkcja wysłania po Modbus ASCII komendy odczytu //z urządzenia slave o adresie 5, 10 wartości z rejestrów od adresu 12 /home/student/modbusMaster/modpoll -m ascii -a 5 -b 19200 -p none -t 4 -r 12 -c 10 /dev/ttyUSB0 |
Laboratorium 6 (Komunikacja UART – protokół Modbus)
dokończenie laboratorium 5
Laboratorium 7
- ostateczne omówienie sprawozdań, wystawienie ocen,
- 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