Wytyczne, instrukcje do zajęć prowadzonych w formie zdalnej
zajęcia są wykonywane przy użyciu minikomputera Raspberry Pi 3 B+ 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.205 port:2020
Uwaga – nowe warunki zaliczenia, wytyczne do kolejnych laboratoriów opisane na dole strony.
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.
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 z LAB 1.2:
- 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),
- 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 wysłać z adresu email uczelnianego jednego z autorów na adres prowadzącego zajęcia. Przykładowy temat wiadomości: IK-LAB1.1-1458,1478 (gdzie LAB1.1 – numer aktualnie wykonywanego laboratorium, 1458,1478- numery indeksów autorów sprawozdania),
- kompletne i własne sprawozdania należy wysyłać do określonego terminu. Za brak sprawozdania w terminie będzie wystawiana ocena 2.0.
Konsultacje:
Informacje na stronie: http://w-tarnawski.pl/o-mnie/
Laboratorium 1.2 (I2c-MPU6050)
- zapoznajemy się z instrukcją do laboratorium (IK-LAB1.2),
- zapoznać z funkcjami do obsługi I2C: link
- 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 1
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
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 3
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 4
Wykorzystać dane z zadania 3 do zrobienia cyfrowej poziomnicy. Wyświetla stopnie w zależności od położenia czujnika.
Na dole strony został zamieszczone przykładowe programy, można uruchomić i sprawdzić odczyty z układów w danym momencie.
Utworzyć sprawozdanie z wykonanych zadań i przesłać do prowadzącego do dnia 13.05.2020
Laboratorium 1.3 (I2C – RTC, EEPROM)
- zapoznajemy się z instrukcją do laboratorium (IK-LAB1.3),
- wykorzystać funkcję do obsługi I2C z poprzedniego laboratorium,
Ćwiczenie 1
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”?
Ćwiczenie 2
Przygotować program, który odczytana datę z układu RTC i wyświetli w formacie: 2020-05-14 12:30:20.
Ćwiczenie 3
Przygotować program, który umożliwi ustawienie daty w układzie RTC.
Ćwiczenie 4
Przygotować program, który umożliwi odczyt pojedynczej liczby 8-biotwej z podanego adresu pamięci EEPROM.
Ćwiczenie 5
Przygotować program, który umożliwi zapis pojedynczej liczby 8-biotwej 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 |
#include <wiringPi.h> #include <wiringPiI2C.h> #include <softPwm.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> int fd; int adress = 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, (adress >> 8), ((adress & 0xff)<<8) | value ); delay(20); } /*Funkcja odczytuje jeden bajt z podanego adresu komorki pamieci */ uint8_t i2cReadEeeprom(uint16_t adress) { wiringPiI2CWriteReg8(fd, (adress >> 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(adress)) == -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; } |
Na dole strony został zamieszczone przykładowe programy, można uruchomić i sprawdzić odczyty z układów w danym momencie.
Ćwiczenie i notatki z wykonanych zadań należy wykonać do dnia 20.05.2020 – szczegóły formy zaliczenia na końcu strony.
Laboratorium 1.4 (SPI – BMP280)
- 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 1
Uruchomić program z paczki, co robi program. Czy odczytywana wartość jest zgodna z dokumentacją?
Zadanie 2
Odczytać temperaturę mierzoną przez układ, przeliczyć na stopnie Celsjusza i wyświetlić.
Zadanie 3
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”.
Na dole strony został zamieszczone przykładowe programy, można uruchomić i sprawdzić odczyty z układów w danym momencie.
Ćwiczenie i notatki z wykonanych zadań należy wykonać do dnia 7.06.2020 – szczegóły formy zaliczenia na końcu strony.
Laboratorium 1.5 (program końcowy)
Adres modułu MPU6050 na I2C zmienił się i obecnie wynosi: 0x69.
Przygotować program końcowy, który będzie posiadał menu. Wybór opcji z menu odbywać będzie się na podstawie wybranego numeru zgodnego z następującą listą:
- „1” – odczytanie temperatury z modułu MPU6050
- „2” – odczytanie wartości pomiarów z akcelerometru i żyroskopu
- „3” – odczytanie aktualnej daty z modułu RTC, forma wyświetlenia: 2020-05-14 12:30:20
- „4” – możliwość ustawienia nowej daty dla modułu RTC – datę należy wprowadzić na terminalu
- „5” – odczytanie 16-bitowej wartości z pamięci EEPROM spod podanego adresu, użytkownik jest pytana spod jakiego adresu chce odczytać wartość
- „6” – możliwość zapisania 16-bitowej wartości do pamięci EEPROM pod podany adres, użytkownik wprowadza najpierw adres a potem liczbę do zapisania
- „7” – BMP280 – odczytanie ID modułu, temperatury i ciśnienia atmosferycznego
- „9” – wyświetlenie informacji o autorach (imię, nazwisko, numer indeksu)
- „0” – wyświetla informacje o dostępnych opcjach do wyboru, wyświetla listę funkcji
wszystkie funkcje powinny prezentować wynik na terminalu i być możliwe do uruchomienia na prezentacji programu.
Laboratorium 1.6
- Termin 9-10.06.2020 lub 15-16.06.2020 w postaci konsultacji online, będzie dostępna lista gdzie można będzie rezerwować termin,
- długość na jedną grupę to 10-15 minut, (5 minut na przygotowanie oprogramowania, 10 minut prezentacja i rozmowa),
- ostateczne omówienie sprawozdań, wystawienie ocen,
- prowadzący może zadać pytania do wykonanych ćwiczeń i zakresu materiału.
Warunki zaliczenia:
- wysłanie sprawozdania do LAB 1.2 w podanym terminie,
- wykonanie ćwiczeń w ramach LAB 1.3 – 1.5, studenci tworzą notatki, programy w celu zapoznania się z interfejsami i układami na własny użytek,
- po wykonaniu ćwiczenia należy zaimplementować odpowiednie funkcje w ramach programu końcowego (LAB1.5)
- przygotowanie sprawozdania końcowego, zawierającego opis z wykonanych prac realizujących zakres programu z LAB 1.5, wysłanie do dnia 8.06.2020,
- prezentacja online działania programu w ramach konsultacji w terminie laboratorium 1.6,
- po prezentacji, zapoznaniu się ze sprawozdaniem końcowym przez prowadzącego nastąpi wystawienie oceny końcowej.
Wytyczne do przygotowania sprawozdania końcowego:
- pracujemy w grupach 1-2 osobowych – jedna grupa, jedno sprawozdanie,
- 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),
- do każdego funkcji należy umieścić zdjęcie z terminala przedstawiające jej działanie,
- 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 wysłać z adresu email uczelnianego jednego z autorów na adres prowadzącego zajęcia. Przykładowy temat wiadomości: IK-SPR-końcowe-1458,1478 (gdzie 1458,1478- numery indeksów autorów sprawozdania),
- sprawozdawanie to jeden plik PDF o nazwie (IK-SPR-1458_1478.pdf), w sprawozdaniu mają być umieszczone kody programu końcowego, nie umieszczamy programu jako załączniki,
- kompletne i własne sprawozdanie końcowe należy wysyłać do określonego terminu.
Schemat sprawozdania końcowego:
- 1 – „Interfejs I2C” – opisać jak działa interfejs, krótki opis i przykładowy schemat podłączenia
- 1.1 – „Układ MPU6050” – opisać funkcje układu, zamieścić treści dotyczące funkcji 1 i 2
- 1.2 – „Układ DS1307” – opisać funkcje układu, zamieścić treści dotyczące funkcji 3 i 4
- 1.3 – „Układ AT24C32” – opisać funkcje układu, zamieścić treści dotyczące funkcji 5 i 6
- 2 – „Interfejs SPI” – opisać jak działa interfejs, krótki opis i przykładowy schemat podłączenia
- 2.1 „Układ BMP280” – opisać funkcje układu, zamieścić treści dotyczące funkcji 7
- 3 „Wnioski” – co udało się nauczyć w ramach laboratoriów, co było łatwe a co stwarzało największe problemy. Czy forma zdalnych zajęć i nauka na Raspberry Pi była ciekawą formą zastąpienia standardowych laboratoriów?
Przykładowe programy:
- „MPU_6050” – polecenie: „zostanie uzupełnione” – 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