Konfiguracja i programowanie Gamepad'a PlayStation2 na mikrokontrolerze STM32

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

Komunikacja w mikrokontrolerach Laboratorium

Mikroprocesory i Mikrosterowniki Laboratorium

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

INSTRUKCJA OBSŁUGI. Przekaźnik czasowy ETM ELEKTROTECH Dzierżoniów. 1. Zastosowanie

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

ISP ADAPTER. Instrukcja obsługi rev.1.1. Copyright 2009 SIBIT

Przemysłowy odtwarzacz plików MP3

interfejs szeregowy wyświetlaczy do systemów PLC

CENTRALA STERUJĄCA SMART CONTROL

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

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

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

MIKROKONTROLERY - MAGISTRALE SZEREGOWE

Expandery wejść MCP23S17 oraz MCP23017

MultiTool instrukcja użytkownika 2010 SFAR

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

1. Cel ćwiczenia. Celem ćwiczenia jest zestawienie połączenia pomiędzy dwoma sterownikami PLC za pomocą protokołu Modbus RTU.

Opis czytnika TRD-FLAT CLASSIC ver Naścienny czytnik transponderów UNIQUE w płaskiej obudowie

Programowanie mikrokontrolerów 2.0

dokument DOK wersja 1.0

Instytut Teleinformatyki

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Opis czytnika TRD-80 CLASSIC ver Moduł czytnika transponderów UNIQUE z wbudowaną anteną

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

Ultradźwiękowy generator mocy MARP wersja Dokumentacja techniczno-ruchowa

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

Zastosowanie procesorów AVR firmy ATMEL w cyfrowych pomiarach częstotliwości

Parametryzacja przetworników analogowocyfrowych

Programowanie mikrokontrolerów 2.0

Mikroprocesory i mikrosterowniki Wydział Elektroniki Mikrosystemów i Fotoniki Politechniki Wrocławskiej Ćwiczenie nr 4

Technika mikroprocesorowa. Konsola do gier

Mikrokontrolery ARM. Elektroniczny zegar / budzik / kalendarz z wyświetlaczem NIXIE. Opis projektu

INSTRUKCJA OBSŁUGI. Licznik amperogodzin ETM ELEKTROTECH Dzierżoniów. 1. Zastosowanie

1. Cel ćwiczenia. 2. Podłączenia urządzeń zewnętrznych w sterowniku VersaMax Micro

Instrukcja do oprogramowania ENAP DEC-1

Metody obsługi zdarzeń

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

Hardware mikrokontrolera X51

ĆWICZENIE 5. TEMAT: OBSŁUGA PORTU SZEREGOWEGO W PAKIECIE KEILuVISON WYSYŁANIE PORTEM SZEREGOWYM

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

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

Zastosowania mikrokontrolerów w przemyśle

ADAM.E ADAM.E8 Instrukcja użytkownika Aktualizacja: /8

Instytut Teleinformatyki

micro Programator ISP mikrokontrolerów AVR zgodny z STK500v2 Opis Obs³ugiwane mikrokontrolery Wspó³praca z programami Podstawowe w³aœciwoœci - 1 -

MCAR Robot mobilny z procesorem AVR Atmega32

Sterownik procesorowy S-2 Komunikacja RS485 MODBUS

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

Instrukcja obsługi programatora AVR Prog USB v2

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

INSTRUKCJA instalacji interfejsu USB-RS422/485

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

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

ROGUE RF. Instrukcja obsługi (wersja poprawiona) Wireless Gamepad PC with headphones MT1503

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

2. Architektura mikrokontrolerów PIC16F8x... 13

Odbiornik pilotów RC-5. z interfejsem RS-485 / MODBUS

Instytut Teleinformatyki

SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701. SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701.

OPIS PROGRAMU USTAWIANIA NADAJNIKA TA105

Instytut Teleinformatyki

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Komunikacja w sterownikach Horner APG w sieci CsCAN

Instytut Teleinformatyki

Modem Bluetooth MBL-232/UK

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

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Kod produktu: MP01105

MiniModbus 4DI. Moduł rozszerzający 4 wejścia cyfrowe. Wyprodukowano dla

Standard transmisji równoległej LPT Centronics

CONV5 - B, C wersja 1.3 Konwerter protokołu Pelco na Sensormatic INSTRUKCJA OBSŁUGI

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

Licznik prędkości LP100 rev. 2.48

Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1

1.2. Architektura rdzenia ARM Cortex-M3...16

SML3 październik

INSTRUKCJA PODŁĄCZENIA/OBSŁUGI i KONFIGURACJI LICZNIKA KLIENTÓW w oparciu o stertownik Internetowy PLC STERBOX

KARTA KATALOGOWA. Moduł ściemniacza MTR-8s.

Site Installer v2.4.xx

Terminal WSP dla sygnalizatorów wibracyjnych

Programowanie mikrokontrolerów 2.0

SZYMAŃSKI ŁÓDŹ Ul. Wiskicka 22 Tel./fax. (042) Tel./fax. (042) Kom

Instrukcja obsługi programatora AVR Prog USB v2

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Szkolenia specjalistyczne

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Kurs Elektroniki. Część 5 - Mikrokontrolery. 1/26

Kod produktu: MP-BTM222-5V

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

Instrukcja obsługi Routera WiFi opracowana przez EVE tech Sp. z o. o. Sp. k.

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

Elastyczne systemy wytwarzania

Universal MIDI controller. Uniwersalny sterownik MIDI

Deklaracja zgodności nr 49/2011

Licznik rewersyjny MD100 rev. 2.48

Instrukcja obsługi sterownika Novitek Triton

1. Opis aplikacji. 2. Przeprowadzanie pomiarów. 3. Tworzenie sprawozdania

Transkrypt:

Konfiguracja i programowanie Gamepad'a PlayStation2 na mikrokontrolerze STM32 Autor: Dawid Lubomski Data opracowania streszczenia (wersja 2): 23.04.2018 Data wygłoszenia referatu: 06.04.2018 Wprowadzenie W moim referacie przedstawię jak podłączyć odbiornik bezprzewodowego Gamepad'a Playstation2 (DualShock 2, PS2) do mikrokontrolera STM32F411RE, skonfigurować środowisko STM32CubeMX oraz prawidłowo obsłużyć komunikaty aby móc kontrolować inne urządzenia. Gamepad oprócz standardowego zastosowania, jakim jest kontrola konsoli PlayStation, może mieć również inne wykorzystanie np. sterowanie robotów. Program STM32CubeMX generuje projekt, który później należy otworzyć w edytorze System Workbench for STM32, opartym na popularnej platformie Eclipse. Mikrokontroler programuje się w języku C/C++. Opis Gamepad'a PlayStation2 Standardowy kontroler konsoli wygląda następująco: Posiada on 2 gałki analogowe oraz 15 przycisków funkcyjnych. 4 z nich to tzw. D-pad czyli przyciski odpowiadające czterem kierunkom. Przyciski L1, L2, R1, R2, trójkąt, kółko, krzyżyk, kwadrat służą do grania. Zawiera on również, przyciski takie jak: Select, Start i Mode (zamienna nazwa Analog), których funkcje to dodatkowe ustawienia oraz włącznik. Kontroler ten ma w sobie 2 serwomechanizmy z niesymetrycznymi ciężarkami na osiach wzbudzające wstrząsy o różnym nasileniu (drgania Gamepad'a w ręku użytkownika). Drgania występują w zależności od tego, co dzieje się w grze w celu zwiększenia doznań. 1

W celu uruchomienia silników, w wersji bezprzewodowej kontrolera należy wysłać odpowiedni ciąg bajtów, co spowoduje zmianę trybu pracy urządzenia. Odbiornik PS2 posiada następujące wyjścia oraz wejścia: - Pin,,dane - przesyła informacje do kontrolera (wyjście); - Pin,,komendy - odbiera informacje od kontrolera (wejście); - Pin,,zasilanie silników powodujących wstrząsy - musi być zasilany napięciem 7V-11V, ma zastosowanie tylko w przewodowej wersji Gamepad'a. Modele bezprzewodowe nie używają tego pinu; - Pin,,uziemienie - pin techniczny (masa); - Pin,,zasilanie - pin zasilający odbiornik napięciem 3.3V; - Pin,,attention - pin umożliwiający wybór odbiornika danego Gamepad'a, jest to również pin załączający (należy podać stan wysoki przed wysyłaniem komend); - Pin,,zegar - na ten pin należy generować sygnał zegarowy; -,,Pin wolny - do tego pinu nie trzeba niczego podłączać; - Pin,,ACK (ang. acknowledge) - pin, który przybiera stan wysoki kiedy odbiornik poprawnie odebrał pakiet informacji. Krótkie przedstawienie połączeń Aby poprawnie podłączyć odbiornik do mikrokontrolera, należy przeanalizować nazwy pinów używanych w STM32CubeMX z poniższego schematu, oraz dopasować je do nazw na płytce. pł Źródło: https://encrypted-tbn0.gstatic.com/images?q=tbn:and9g crdxkipya_sff2kqs2rsimedeob2-avf54ohxsl6c4wbhktfj7w0q Źródło: https://botland.com.pl/12291-thickbox_default/st m32-nucleo-f401re-stm32f401re-arm-cortex-m4.jpg Niezbędne jest wykorzystanie pinów,,sck/d13 (zegar, PA5),,,MISO/D12 (dane, PA6),,,PWM/MOSI/D11 (komendy, PA7), dowolnego uziemienia (GND) oraz dowolnego pinu, jako,,attention (pin załączający) - innego wolnego pinu np. PA4. Konfiguracja projektu w STM32CubeMX Tworzymy nowy projekt i konfigurujemy piny o nazwach: PA4 jako CS (Attention), PA5 jako SCK, PA6 jako MISO oraz PA7 jako MOSI. Nadane nazwy mogą być zupełnie przypadkowe, jednak należy o nich pamiętać później w trakcie pisania programu. 2

Piny PA nie mogą zostać wybrane przypadkowo i w trakcie konfiguracji, trzeba nadać im odpowiednie funkcje. SPI (ang. Serial Peripheral Interface) to szeregowy interfejs urządzeń peryferyjnych stosowany w komunikacji pomiędzy mikroprocesorem a innym układem. W momencie kiedy wybierzemy opcję,,full-duplex Master z bocznego menu, piny PA5, PA6 i PA7 automatycznie się skonfigurują jako zegar, wejście oraz wyjście. Pin PA4 należy ręcznie ustawić jako wyjście mikrokontrolera. Następnie ustawiamy taktowania zegarów. Dzięki ustaleniu odpowiednich wartości możemy poprawnie komunikować się z odbiornikiem PS2. Wymaga on prędkości przesyłu 125KBps (dane zawarte w dokumentacji Gamepad'a). Aby uzyskać taką wartość musimy w konfiguracji głównego zegara ustawić następujące wartości: APB1 Timer clocks(mhz) jest to magistrala typu low-speed. Może być taktowana maksymalnie z częstotliwością 50MHz. Na tej magistrali znajduje się interfejs SPI1. W konfiguracji SPI1 ustawiamy wielkość przesyłanych pakietów na 8 bitów. Pierwszy bit znaczący zaczyna się od lewej strony - jest to konieczne aby poprawnie połączyć się z odbiornikiem. Stanowi on o stronie od której zacznie się transmisja bajtu. W tym przypadku od bitu [0] do bitu [7]. Prescaler (dzielnik częstotliwości) ustawiamy na 64 aby otrzymać 125kHz (prędkość przesyłu 125KBps). Dzielnik ten, wpływa na magistralę APB1. 8Mhz podzielone przez 64 da 125kHz. Kolejne wartości jak CPOL, CPHA (polaryzacja i faza zegara) pobieramy z dokumentacji. Ustawienia SPI. 3

Kolejnym ważnym aspektem jest ustawienie timer'ów. Timer TIM3 w programie umożliwia wykonanie odstępów czasowych co 15μs - niezbędnych do komunikacji z odbiornikiem. Wartości timera przelicza się według "wzoru generowania przerwania impulsu": FREQ = TIM_CLK / ((ARR+1)(PSC+1)(CKD+1)) gdzie: FREQ - częstotliwość generowanego przerwania (ilość okresów w sekundzie); TIM_CLK - częstotliwość taktowania magistrali, na której umieszczony jest timer; PSC+1 - dzielnik częstotliwości wewnętrznego zegara timera (rejestr); ARR+1 - poziom wypełnienia impulsu, wartość do której zlicza timer; CKD+1 - dzielnik częstotliwości zegara timera (rejestr dodatkowy). Źródło: własne, ustawienia licznika TIM3 Timer działa w następujący sposób: na początku wartość rejestru licznika wynosi 0. Każdy cykl zliczenia odbywa się z częstotliwością zadaną przez taktowanie zegara timera, która podzielona jest przez wartość PSC oraz CKD. Kiedy wartość liczona będzie równa ARR następuje przerwanie i rejestr licznika jest zerowany. Zatem aby otrzymać opóźnienie 15μs należy: - policzyć ile w 1 sekundzie odbywa się takich cykli - jest to ok. 66 667, wartość do której będzie zliczał timer. Niestety takiej wartości nie można ustawić jako ARR bo maksymalna wartość to 65535 (16 bitów). Założyłem że 60 000 będzie wartością optymalną. - podstawić do przekształconego wzoru dane: (PSC+1) = TIM_CLK / FREQ (ARR+1)(CKD+1) (PSC+1)= 8 000 000Hz / 60 000 (15+1)(0+1) (PSC+1)= 8 000 000Hz/ 960 000 (PSC+1) 8,33 PSC=7,33 - ja wpisałem wartość 7 więc opóźnienie wynosi wtedy ok. 16,7μs - tak również jest dobrze gdyż prawdopodobnie istnieje jakiś zakres tolerancji. Programowanie w System Workbench for STM32 Aby rozpocząć programowanie trzeba zaimportować projekt do programu, podłączyć płytkę STM32 do komputera kablem MiniUSB oraz odpowiednio połączyć odbiornik z mikrokontrolerem. W pliku main.c najpierw powinno się zadeklarować zmienne prywatne dla ustalania poziomu wysokiego lub niskiego na pinie CS w celu "otwierania drogi" wysyłanym bajtom: Definiowanie zmiennych. Funkcja HAL_GPIO_WritePin umożliwia ustalanie na danym pinie stanu wysokiego lub niskiego. 4

Funkcja delay_us, to funkcja umożliwiająca tworzenie opóźnień: Funkcja tworząca opóźnienie. volatile - wyłączenie optymalizacji w stosunku do zmiennej, tej składni używa się w przypadku gdy zmienna modyfikowana jest przez funkcję przerwania. uint32_t - typ liczb całkowitych gdzie maksymalna wartość liczby może być zapisana na 32 bitach. Funkcja wysyłająca i odbierająca komendy(1 bajt) poprzez protokół SPI: Funkcja wysyłająca komendy protokołem SPI. uint8_t - typ liczb całkowitych gdzie maksymalna wartość liczby może być zapisana na 8 bitach. HAL_SPI_GetState(&hspi1) - funkcja służąca do sprawdzenia czy transmisja bajtu została zakończona na interfejsie SPI1. HAL_SPI_TransmitReceive - funkcja, która służy do wysyłania bajtu danych i jednocześnie odbiera wartości liczbowe z odbiornika do tablicy interfejsem SPI1 (hspi1). Funkcja Get_PS2Dat wysyła ciąg bajtów co ok.15μs. Wartości zwrotne, które otrzymujemy zapisywane są w tablicy. Dany indeks tablicy odpowiada kilku wciśniętym przyciskom na padzie (różne wartości odebrane): Funkcja wysyłająca ciąg bajtów. Następnie w funkcji main należy ręcznie uruchomić zegar dla SPI1: 5

Główną częścią programu jest nieskończona pętla (przedstawia poniższy obrazek), która obsługuje przyciski z pada. Główna pętla programu. PS2buf jest tutaj zmienną tablicową przyjmującą określone wartości z zakresu 0-255. Pobrana liczba oznacza wciśnięty przycisk na kontrolerze PS2. Po wysłaniu informacji: 0x01 0x42 0x00 0x00 0x00 otrzymujemy: 0xFF 0x41 0x5A 0xFF 0xFF w przypadku kiedy żaden przycisk nie jest wciśnięty. Pierwszy bajt odpowiada przyciskowi mode. Na 3 i 4 bajcie pojawiają się informacje odnośnie wciśniętych klawiszy. Bajty: 5,6,7,8 - to działanie analogów. W celu uruchomienia silników pada, należy w pierwszej kolejności, wysłać odpowiedni ciąg bajtów aby przestawić tryb działania pad'a. Wartości odebrane znajdują się wtedy na podobnych indeksach tablicy. 6