Operasi SPI Bus USB Host Shield

Tabel 2.2 Lanjutan State pada Koneksi USB [3] Bus State Levels Idle State: Low-speed Full-speed D- high, D+- low D+ high, D- low Resume State Data K state Start of Packet SOP Data lines switch from idle to K state End of Packet EOP SE0 for 2 bit times followed by J state for 1 bit time Disconnect SE0 for = 2us Connect Idle for 2.5us Reset SE0 for = 2.5 us Gambar 2.15 Contoh Pengiriman Data USB [18] Tabel 2.3 merupakan paket data yang dikirimkan gamepad ke mikrokontroler. Tabel 2.3 Data Hex dari Gamepad No. Tombol yang digunakan Data Hex 1 Netral tidak ada tombol yang ditekan 01 00 00 00 00 00 87 87 83 7A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 EF 14 00 00 00 00 23 6D 77 01 1D 01 FF 01 FB 01 90 02 00 Tabel 2.3 Lanjutan Data Hex dari Gamepad No. Tombol yang digunakan Data Hex 2 Nav. Up 01 00 10 00 00 00 87 87 83 79 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 EF 14 00 00 00 00 23 6D 77 01 1D 01 F5 01 F8 01 90 02 00 3 Nav. Right 01 00 20 00 00 00 87 87 83 7A 00 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 03 EF 14 00 00 00 00 23 6D 77 01 1D 01 EC 02 02 01 91 02 00 4 Nav. Down 01 00 40 00 00 00 87 87 83 7A 00 00 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 00 03 EF 14 00 00 00 00 23 6D 77 01 1D 01 FA 01 FD 01 8F 02 00 5 Nav. Left 01 00 80 00 00 00 87 87 83 79 00 00 00 00 00 00 00 FF 00 00 00 00 00 00 00 00 00 00 00 03 EF 14 00 00 00 00 23 6D 77 01 1D 01 F4 02 07 01 90 02 00 6 Triangle 01 00 00 10 00 00 87 87 83 7A 00 00 00 00 00 00 00 00 00 00 00 00 FF 00 00 00 00 00 00 03 EF 14 00 00 00 00 23 6D 77 01 1D 02 1C 02 0F 01 93 02 00 7 Circle 01 00 00 20 00 00 87 87 83 7A 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 00 00 00 00 00 03 EF 14 00 00 00 00 23 6D 77 01 1D 02 2D 01 D1 01 A5 02 00 Data yang keluar dari gamepad terdiri dari 49 Byte, yang mana setiap bit memiliki konfigurasi alamat fungsi. Pada Tabel 2.4 dijabarkan tentang paket data dari gamepad secara detil. Tabel 2.4 Paket Data Gamepad [17] Byte index bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Info report ID always 0x01 1 reserved 2 D left D down D right D up Start R3 L3 Sele ct 1 means pressed, 0 means released 3 Squar e X Circle Triangl e R1 L1 R2 L2 4 Unknown PS 5 Unknown 6 Left stick X axis 7 Left stick Y axis 8 Right stick X axis 9 Right stick Y axis 10 Unknown, seems to count downwards, non-random pattern 11 Unknown, seems to count upwards by 3, but by 2 when [10] underflows 12 Unknown yet, 0x03 or 0x04 13-24 analog button data 00 is released and FF is fully pressed 25-39 unknown 40-41 acceleromerer X axis, little endian 10 bit unsigned 42-43 acceleromerer Y axis, little endian 10 bit unsigned 44-45 acceleromerer Z axis, little endian 10 bit unsigned 46-47 gyroscope, little endian 10 bit unsigned 48-49 unknown

2.6. Mikrokontroler ATmega328P

ATmega328 pada Gambar 2.16 dan diagram bloknya pada Gambar 2.17 adalah mikrokontroler keluaran dari atmel yang mempunyai arsitektur RISC Reduce Instruction Set Computer yang dimana setiap proses eksekusi data lebih cepat dari pada arsitektur CISC Completed Instruction Set Computer. ATmega328 memiliki fitur 32 kByte downloadable flash memory, 1 kByte Electrically Erasable Programmable Read-Only Memory EEPROM, 2 kByte internal Static Random-Access Memory SRAM, 2 TimerCounter 8 bit dan 1 TimerCounter 16 bit, 6 kanal PWM, Serial USART yang dapat diprogram, dan frekuensi kerja sampai dengan 20 MHz[4]. Gambar 2.16 Konfigurasi Pin Atmega328P dengan Fungsi Pada Arduino [7] ATmega328 memiliki beberapa mode komunikasi. Salah satu di antaranya adalah USART. Universal Synchronous dan Asynchronous serial Receiver and Transmitter USART adalah salah satu mode pengiriman dan penerimaan data secara serial. USART dapat dipakai untuk transfer data antar mikrokontroler dan komputer yang memiliki fitur UART Universal Asynchronus serial Receiver anf Transmitte. Untuk komunikasi dua arah bi-directional, USART memiliki tiga sambungan, yaitu Rx Receiver, Tx Tramsmitter, dan GND Ground[4]. Setiap pin dapat memberikan atau menerima suatu arus maksimum 40 mA dan mempunyai sebuah resistor pull-up terputus secara default 20-50 KOhm. Hampir semua AVR memiliki format 16-bit. Setiap alamat memori program terdiri dari instruksi 16-bit atau 32-bit. Terdapat register lain yang terpetakan dengan teknik memory mapped IO selebar 64 byte. Beberapa register ini digunakan untuk fungsi khusus, antara lain sebagai register kontrol timer counter, Interupsi, ADC, USART, SPI, EEPROM, dan fungsi IO lainnya. Register – register ini menempati memori pada alamat 0x20h – 0x5Fh[4].