Systemy Wbudowane. Raspberry Pi komunikacja szeregowa (wersja 2019) Higiena pracy z Qt. Komunikacja szeregowa. Qt Creator i uruchamianie.

Podobne dokumenty
Systemy Wbudowane. Arduino - rozszerzanie. Podłączanie wyświetlacza LCD. Podłączanie wyświetlacza LCD. Podłączanie wyświetlacza LCD

SCL > Pin 21 SDA > Pin 20 VCC > 5V GND > GND

Kod produktu: MP01105

o Instalacja środowiska programistycznego (18) o Blink (18) o Zasilanie (21) o Złącza zasilania (22) o Wejścia analogowe (22) o Złącza cyfrowe (22)

Instrukcja dla: Icomsat v1.0 SIM900 GSM/GPRS shield for Arduino oraz dla GPRS Shield produkcji Seeedstudio.

Wbudowane układy komunikacyjne cz. 1 Wykład 10

Arduino dla początkujących. Kolejny krok Autor: Simon Monk. Spis treści

Systemy Wbudowane. Arduino C. Arduino C - stałe. Arduino C - Stałe. Arduino C - Stałe. Funkcje matematyczne. Arduino C - Stałe

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

Projekt MARM. Dokumentacja projektu. Łukasz Wolniak. Stacja pogodowa

Komunikacja w mikrokontrolerach. Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface

dokument DOK wersja 1.0

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Mikroprocesory i Mikrosterowniki Magistrala szeregowa I2C / TWI Inter-Integrated Circuit Two Wire Interface

Systemy Wbudowane. Arduino dołączanie urządzeń Wersja Arduino więcej portów I/O. Układy serii 74. Układy serii 74xx a seria 40xx

Instytut Teleinformatyki

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Szkolenia specjalistyczne

NX700 PLC

Komunikacja w mikrokontrolerach Laboratorium

AVR DRAGON. INSTRUKCJA OBSŁUGI (wersja 1.0)

Kod produktu: MP01105T

Programowanie Mikrokontrolerów

Materiały dodatkowe Krótka charakterystyka protokołu MODBUS

Zewnętrzne układy peryferyjne cz. 1 Wykład 12

Sterownik Spid Pant 8 i Ant 8. Podręcznik użytkowania

Kod produktu: MP01611

Politechnika Wrocławska

MultiTool instrukcja użytkownika 2010 SFAR

Magistrala I 2 C. Podstawy systemów mikroprocesorowych. Wykład nr 5 Interfejsy szeregowe c.d.

MIKROKONTROLERY - MAGISTRALE SZEREGOWE

interfejs szeregowy wyświetlaczy do systemów PLC

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

KOMUNIKACJA Z OTOCZENIEM MIKROKONTROLERA

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.

Sterownik procesorowy S-2 Komunikacja RS485 MODBUS

Systemy Wbudowane. Arduino rozszerzanie Wersja Plan. Biblioteka EPROM Arduino bez płytki Arduino. Czyli... Co musimy mieć, aby uruchomić chip?

Przemysłowy odtwarzacz plików MP3

Zaliczenie Termin zaliczenia: Sala IE 415 Termin poprawkowy: > (informacja na stronie:

Systemy Wbudowane. Arduino, AVR. Arduino. Arduino. Arduino. Oprogramowanie. Mikrokontroler. Mikrokontroler Platforma Arduino. Arduino IDE: Arduino C:

INSTRUKCJA UŻYTKOWNIKA MPCC

m e d i a s e r v i c e Moduł kamery JPEG z komunikacją szeregową CJ0706A

Interfejsy komunikacyjne pomiary sygnałów losowych i pseudolosowych. Instrukcja do ćwiczenia laboratoryjnego

1. INSTALACJA SERWERA

MOBOT-RCR v2 miniaturowe moduły radiowe Bezprzewodowa transmisja UART

UW-DAL-MAN v2 Dotyczy urządzeń z wersją firmware UW-DAL v5 lub nowszą.

Technika Mikroprocesorowa

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

2. Architektura mikrokontrolerów PIC16F8x... 13

Expandery wejść MCP23S17 oraz MCP23017

Systemy Wbudowane. Arduino dołączanie urządzeń Wersja Arduino bez płytki Arduino. Czyli... Eliminowanie modułu z projektu. Na płytce...

Rozproszony system zbierania danych.

RSD Uniwersalny rejestrator danych Zaprojektowany do pracy w przemyśle

BF20 JTAG dla ARM ów z interfejsem USB Instrukcja obsługi

Architektura komputerów

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

Centrala alarmowa ALOCK-1

Opis procedur asemblera AVR

Zestaw Startowy EvB. Więcej informacji na stronie:

PROJECT OF FM TUNER WITH GESTURE CONTROL PROJEKT TUNERA FM STEROWANEGO GESTAMI

ZL8AVR. Płyta bazowa dla modułów dipavr

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

Klawiatura matrycowa

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Cyfrowy rejestrator parametrów lotu dla bezzałogowych statków powietrznych. Autor: Tomasz Gluziński

Mikrokontrolery AVR Wprowadzenie

Instytut Teleinformatyki

Interface sieci RS485

Moduł komunikacyjny Modbus RTU do ciepłomierza SonoMeter 30

Terminal TR01. Terminal jest przeznaczony do montażu naściennego w czystych i suchych pomieszczeniach.

Uniwersalny sterownik silnika krokowego z portem szeregowym RS232 z procesorem AT90S2313 na płycie E200. Zestaw do samodzielnego montażu.

Instrukcja obsługi. PROGRAMATOR dualavr. redflu Tarnów

Dostęp do menu drukarki

Interfejsy: Ethernet do połączenia z siecią LAN Serial do połączenia z siecią WAN. pełną konfigurację urządzenia. Zadanie

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

ZASTOSOWANIE PLATFORM CYFROWYCH ARDUINO I RASPBERRY PI W NAUCZANIU STEROWANIA OBIEKTEM PNEUMATYCZNYM

Mikroprocesory i Mikrosterowniki Laboratorium

Obługa czujników do robota śledzącego linie. Michał Wendland czerwca 2011

Termometr internetowy

Instrukcja do oprogramowania ENAP DEC-1

ĆWICZENIE 5 WPŁYW KONWEKCJI NA ROZKŁAD TEMPERATURY W POMIESZCZENIU

Schemat blokowy architektury AVR

INTERFEJS DIAGNOSTYCZNY BMW INPA / ADS/ GT1/ DIS / EDIABAS INSTRUKCJA OBSŁUGI Strona 1

Kod produktu: MP01611-ZK

Instrukcja integracji urządzenia na magistrali Modbus RTU. wersja 1.1

Magistrala SPI. Linie MOSI i MISO sąwspólne dla wszystkich urządzeńna magistrali, linia SS jest prowadzona do każdego Slave oddzielnie.

Przygotowanie do konfiguracji parametrów sterownika GSM-44

Urządzenia zewnętrzne

Urządzenia zewnętrzne Instrukcja obsługi

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Kod produktu: MP-IKP1W-USB

Dokumentacja Techniczna. Konwerter USB/RS-232 na RS-285/422 COTER-24I COTER-24N

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

High Speed USB 2.0 Development Board

MSA-1 Mikroprocesorowy sterownik do przełącznika antenowego

Uruchomienie Raspberry Pi

1. Podstawowe wiadomości Możliwości sprzętowe Połączenia elektryczne Elementy funkcjonalne programów...

UNIPROD GLIWICE ul. Sowińskiego 3 tel: , fax kontakt@uniprod.pl

Transkrypt:

Higiena pracy z Qt W miarę możliwości tworzymy projekt z szablonu "Qt Console Application", Jeżeli nie kompiluje: Systemy Wbudowane Otworzyć plik projektu w edytorze Qt Creatora, Dodać: Raspberry Pi komunikacja szeregowa (wersja 2019) LIBS += -lpigpio mgr inż. Marek Wilkus http://home.agh.edu.pl/~mwilkus Wydział Inżynierii Metali i Informatyki Przemysłowej AGH Kraków 1 Zapisać plik Skompilować ponownie. 2 Qt Creator i uruchamianie Komunikacja szeregowa Aby uruchomić nasz eksperymentalny program z uprawnieniami roota (pigpio tego wymaga), najłatwiej "trzymać" sobie okienko terminala z katalogiem, do którego budowany jest plik binarny (katalog wyżej od katalogu projektu, i podkatalog build-.debug/release) Gdy chcemy uruchomić korzystamy z terminala sudo./testowyprojekt Po skończeniu testu kończymy program za pomocą klawiszy Ctrl-C. 3 Przykłady Bity wysyłane są "jeden po drugim" na jednej linii, Skąd wiadomo, który to kolejny bit? Stała czasowa (stała prędkość) (np. RS232), Linia zegara, Linia "latch". + + + + z Mała ilość zajmowanych linii, Możliwość pracy w magistrali, Protokoły umożliwiające np. ustalenie szybkości, Możliwe rozszerzenia "Clock skew" przy dużych prędkościach, Czasami wymagają kosztownego czasowo multipleksowania, Wysokie prędkości wysokie częstotliwości. I wszystkie związane 4 nimi kłopoty Shift register - 74HC595 Programowanie rejestru przesuwnego RS232 I2C SPI CAN, USB, SATA... Piny wejścia: SH_CP Linia zegara, DS Linia danych, ST_CP "zatrzaśnięcie" wartości wprowadzonej na wyjściu. Dodatkowo: /OE (output enable), /MR (reset na 00000000). Wyjścia: 8 wyjść cyfrowych - 0/1, wyłączanych linią /OE, Q7 - wyjście "przeładowania" do podłączania kolejnego rejestru. 5 6

Działanie 74HC595 Podłączenie 74HC595 3.3V Wyjścia DATA (GPIO) LOW Zegar Dane ST_CP 1. ST_CP (latch) LOW 2. Zegar dwa razy LOW (przy danych na HIGH) Wprowadzam 11 3. Dane LOW, zegar 4 razy, Wprowadzam 0000 4. Dane HIGH, zegar 2 razy, Wprowadzam 11 5. ST_CP (latch) HIGH wyprowadzenie danych na wyjścia WYNIK: 11000011 LATCH (GPIO) CLOCK (GPIO) HIGH GND - wyjścia rejestru 7 8 Implementacja C++/Qt A może więcej pinów? 8 16 9 Magistrala I2C 10 24... Przykład: Żyroskop/akcelerometr Często stosowana do komunikacji między urządzeniami, Rpi ma wbudowany interfejs I2C Założenia: Kiedy jedno urządzenie komunikuje się, reszta czeka. Tylko konkretne urządzenia odbierają, Manipulacja danymi przez dostęp do rejestrów oferowanych przez urządzenie. SCL - Clock SDA - data Urządzenie 1: Żyroskop/akcelerometr Urządzenie 2: Termometr/barometr 11 12

Wiele urządzeń I2C na Rpi: Dlaczego urządzenia nie wchodzą sobie w drogę? Zróżnicowana mapa rejestrów Możliwość "wybrania" urządzenia po adresie (ustawionym na etapie tworzenia urządzeń), Niektóre urządzenia umożliwiają zmianę adresu a w najgorszym razie... Linia ENABLE, I2C jest wykorzystywana m.in.: Podłączanie czujników Programowanie układów Pamięci ustawień Magistrale sterujące I wiele innych 13 14 14 Pełna procedura: 1) sudo nano /etc/modules Odkomentować lub dodać: su d a sp or i -co Warstwa fizyczna g nf Linie stale podciągnięte do zasilania. MASTER urządzenie nadające zegar, rozpoczynające komunikację. SLAVE urządzenie odpowiadające urządzeniu MASTER. Zmiana stanu linii danych odbywa się tylko gdy CLK jest w stanie niskim (poza rozpoczęciem i zakończeniem). i2c-bcm2708 i2c-dev 2) sudo nano /etc/modprobe.d/raspi-blacklist.conf Zakomentować lub usunąć: #blacklist spi-bcm2708 #blacklist i2c-bcm2708 3) Zainstalować narzędzia: sudo apt-get install i2c-tools 4) Sprawdzić dostępne magistrale sudo i2cdetect -l 5) Pobrać adres urządzenia dla jednej z magistrali: sudo i2cdetect -y 1 15 Warstwa fizyczna 16 Format danych Wyjścia nie mogą dać stanu "1", tylko Hi-Z typu "otwarty kolektor" nawet w razie konfliktu nie dojdzie do uszkodzenia. Read Jeżeli w razie nadania "1" na wyjściu jest jednak "0" inne urządzenie nadaje "0" KONFLIKT zaprzestanie nadawania. Niestandardowo może pracować kilka przełączających się urządzeń Master. Write I2C w Rpi znajduje się wraz z innymi pinami GPIO: 17 18

Komunikacja z urządzeniem Komunikacja burst read Pobieranie kilku bajtów z rejestrów: (SDA) (SCL) Opcjonalne (SDA) (SCL) Opcjonalne Pobieranie pojedynczego bajtu z rejestru Np. rejestr dwubajtowy Informacje na magistrali: 1. 2. 3. 4. Wyślij do Adres bajt Numer rejestru + 0 // (opracja 1) Odczytaj odebrany bajt // bajt1 // (opracja 2) Wyślij do Adres bajt Numer rejestru + 1 // (opracja 1) Odczytaj odebrany bajt // bajt2 // (opracja 2) 5. Złóż bajt1 i bajt2 wynik = (bajt1 << 8) bajt2 lub wynik = (bajt2 << 8) bajt1 1. 2. 3. 4. 5. 6. 7. Start bit (master->slave) 7 bit adres (slave address) (master->slave) R/W bit 0 write mode (master->slave) ACK bit (slave->master) Write 8 bits (Register number) (master->slave) ACK (slave->master) // Stop bit (master->slave) 8. 9. 10. 11. 12. 13. 14. Start bit (master->slave) 7 bit adres (slave address) (master->slave) R/W bit 1 read mode (master->slave) ACK bit (slave->master) Read 8 bits (Register value) (slave->master) ACK bit (master->slave) Stop bit (master-> slave) 19 I2c tools 20 Linuksowe API do I2C i2cset zapisuje wartości do urządzenia I2C i2cset -y W X Y Z W numer magistrali (1) X adres urządzenia Y adres rejestru Z bajt do zapisania i2cget pozyskanie bajtu z urządzenia I2C i2cget -y W X Y W numer magistrali (1) X adres urządzenia Y adres rejestru 21 Programowanie przez urządzenie 22 Rejestry 23 24

Odczyt "burst" i zapis Wymagania projektowe I2C nie jest źródłem zasilania. "Otwarty koniec" magistrali (np. złącze serwisowe) powinien zapewniać dostęp tylko do tych urządzeń, których serwisowania dotyczy (np. pamięć EEPROM)....a pozostawianie tam całej magistrali systemu to proszenie się o kłopoty. Ograniczeniem dla I2C jest długość magistrali i pojemność linii. Szczególnie niskie prędkości (<100kbit/s) są warunkowo dopuszczalne, jednak nie wszystkie urządzenia działają w takim przypadku prawidłowo. W systemach Linux wymagane jest załadowanie modułu jądra. 25 1-Wire 26 1-Wire Interfejs szeregowy dla urządzeń wykorzystujący masę i jeden przewód danych, Mniejsze urządzenia mogą być zasilane z linii danych, Z reguły tylko 1 urządzenie na danym pinie, Przykłady: Czujnik temperatury DS18B20, czujniki, transceivery, niewielkie pamięci. Linia podciągnięta do Vcc, Komunikacja oparta o czasy impulsów: Master daje L na 480µs inicjalizacja, urządzenia resetują się i odpowiadają nadając L na 60µs gdy linia jest wolna. Master wysyła "1" impulsem L 1-15µs, "0" impulsem L 60µs. Odbieranie danych: Master inicjuje wysłanie każdego bitu krótkim impulsem L (>15µs). Jeżeli Slave nada L na 60µs odebrano 0, else 1. 27 1-Wire Z reguły Reset 8-bitowe polecenie odbiór wyników. 28 1-Wire w RPi Domyślnie GPIO 4 Wsparcie systemu Sprawdzenie urządzeń: ls /sys/bus/w1/devices/ Podkatalogi tego katalogu odpowiadają urządzeniom 1Wire na magistrali. Najprostszy odczyt rejestrów z urządzenia: cat /sys/bus/w1/devices/28-000003f5a14e/w1_slave 29...spowoduje odczyt rejestrów i zwrócenie ich w formie szesnastkowej (hex). 30

Własny protokół komunikacyjny Komunikacja Rpi czujniki oparte o mikrokontrolery (np. Arduino, Espressif), Komunikacja szeregowa: Mało przewodów, Możliwość "puszczenia" po innym rodzaju przewodu lub wręcz bezprzewodowo (BT można sprowadzić do "portu szeregowego bez kabla"), Łatwość implementacji. Komunikacja równoległa:...z innymi urządzeniami by umożliwić wymianę informacji....z istniejącym systemem sieciowym by usprawnić przetwarzanie danych...z komputerem by używać urządzenia. Musimy opracować: Więcej przewodów (patrz np. podłączenie LCD), Większa szybkość transmisji (szczególnie gdy urządzenie wykorzystuje np.. 8-bitowy port wysłanie przez przypisanie wartości do rejestru), Implementacja bardziej wymagająca. Interfejs Protokół komunikacyjny 31 32 Protokoły komunikacyjne Interfejs komunikacyjny Niezbędne jest użycie istniejącego lub utworzenie nowego języka komunikacji urządzeń protokołu Jeżeli urządzenie ma udawać inne, np. klawiatura dobrze udokumentowane protokoły już istnieją...ale jeżeli tworzymy całkowicie nowe urządzenie, istniejące standardy, choć mocno naginane, mogą okazać się niewystarczające. np. Port szeregowy oferowany przez Arduino USB i emulacja USB przez AVR Sieć przy użyciu układu NIC Wi-fi (np.. układ ESP8266) Magistrale szeregowe oferowane przez AVR Własne interfejsy szeregowe i równoległe 33 Opracowywanie protokołu 34 RS232 ASCII czy binarny? ASCII łatwy w debugowaniu, możliwe ręczne testy, ale małe możliwości transmisji. Binarny możliwość przesłania dużej ilości danych, większa szybkość (brak złożonego dekodowania), ale trudniejszy w weryfikacji i przeprowadzaniu testów. Ściśle zależne od tego, jaką funkcję ma wykonywać urządzenie. Inny protokół będzie opracowany dla kontrolerów sterowanych przez komputer, a inny dla sterowników IoT. O ile to możliwe należy użyć istniejących interfejsów (np.. USB, Bluetooth, RS232), a protokoły powinny być udokumentowane! Jeżeli wykonujemy proste zadania stosunkowo rzadko (np. sterowanie przekaźnikami, sprawdzanie czujnika) możemy użyć protokołu w ASCII. 35 36

Co powinno być w protokole? Minimum Przykład Identyfikacja - komunikat, który powoduje odesłanie przez urządzenia informacji o sobie. Umożliwia wybranie urządzenia i uzyskanie informacji o jego wersji, możliwościach, funkcji. Reset - komunikat, który powoduje natychmiastowe przywrócenie wejść/wyjść do stanu pierwotnego, wywołującego najmniej możliwych negatywnych konsekwencji. Wykonywane na starcie urządzenia oraz w przypadku problemów z programem klienckim. Sterownik klawiatury akordowej: Interfejs: USB, emulacja klawiatury USB, Protokół klawiatury USB, Użycie protokołu: Niestandardowe naciśnięcie przycisku wywołuje emulację wciśnięcia jednej kombinacji klawiszy, zwolnienie innego. 37 38 Przykład c.d. Komunikacja z własną aplikacją #include "UsbKeyboard.h" Użycie istniejącego protokołu całkowicie załatwia nam kwestię identyfikacji (urządzenie zgłosi się jako klawiatura USB) i resetu. Istnieje gotowa biblioteka do low-speed USB: V-USB. Wystarczy oprogramować naciskanie i zwalnianie klawiszy w kodzie dla AVR. Przykład: Sterowanie płytką przekaźników przez komputer. Arduino będzie spełniać role interfejsów podłączanych do RPi. void setup() { TIMSK0 &=!(1<TOIE0); //atmega328 cli(); // Clear interrupts UsbDeviceDisconnect(); //make pc re-discover delayms(250); usbdeviceconnect(); sei(); // Set interrupts again pinmode(key_1, INPUT_PULLUP); void loop() { UsbKeyboard.update(); Więc: Interfejs: RS232 (lub I2C) do RPi. Protokół: ASCII. Polecenia: (...) if (digitalread(key_1) == LOW) { UsbKeyboard.sendKeyStroke(CODE1_DOWN, MODIFIER); delay(100); Identyfikacja konkretnego modułu Reset Ustaw Odczytaj stan (...) 39 40 Przykład: c.d. Kod Arduino wersja dla jednego modułu #define... Np. tak: void setup() { Serial.begin(9600); pinmode(relay1,output);... pinmode(relay5,output); reset(); PC->AVR Funkcja Użycie / Odpowiedź I IDENTIFY Łańcuch tekstu zawierający INTERFACE x (x ID modułu) R[ID] RESET Wszystkie przekaźniki wyłączone. AVR odpowiada O jak OK. S[ID]xx.0, S[ID]xx.1 SET Ustawia przekaźnik xx w stan 0 lub 1. AVR odpowiada O jak OK. G[ID].xx. GET Pobiera informację o stanie przekaźnika. AVR odpowiada 0 lub 1. void reset() { digitalwrite(relay1,low);... digitalwrite(relay5,low); byte getstate(byte relay) { if (relay==1) return digitalread(relay1);... if (relay==5) return digitalread(relay5); return 255; //error condition 41 void setstate(byte relay, byte state) { if (relay==1) digitalwrite(relay1,state);... if (relay==5) digitalwrite(relay5,state); void loop() { if (Serial.available()) { char k=serial.read(); delay(10); switch (k) { case 'I': { Serial.print("RELAY INTERFACE v. 1.0"); break; case 'R': { reset(); Serial.print("O"); break; case 'G': { byte which=serial.read()-'0'; Serial.print(getState(which)); break; case 'S': { byte which=serial.read()-'0'; byte what=serial.read(); //dot what=serial.read()-'0'; setstate(which,what); Serial.print("O"); break; 42

Aplikacja Łączność modemy szeregowe Dla Arduino istnieje wiele urządzeń dołączanych do portu szeregowego. Urządzenia te zachowują się jak modemy. Obsługa np. Bluetooth Wi-fi (ESP8266) GSM (SIM800) GPS (SIM900 i późne SIM800) I wiele innych 43 Sterowanie odbywa się poleceniami modemowymi (Hayesa) i ich rozszerzeniami. 44