i
IMPLEMENTASI PROTOKOL USB PADA PENGONTROL MIKRO ATMEGA8 UNTUK AKUISISI DATA SINYAL
ELEKTROKARDIOGRAM
Disusun Oleh :
Innocentio Aloysius Loe (0922045)
Jurusan Teknik Elektro, Fakultas Teknik
Universitas Kristen Maranatha
Jl. Prof. Drg. Suria Sumantri 65, Bandung 40164, Indonesia
ABSTRAK
Protokol USB diimplementasikan pada pengontrol mikro yang
sesungguhnya tidak mendukung komunikasi dengan protokol USB untuk
keperluan akusisi data. Pengontrol mikro yang digunakan dalam rancangan sistem
adalah Atmel AVR ATMEGA8 dengan basis firmware V-USB.
Pengujian dilakukan dengan instrumen elektrokardiogram (EKG) yang
dirancang sendiri, dengan konfigurasi pengukuran Limb Lead (LL) II. Data yang
didapat diolah untuk mengukur detak jantung menggunakan algoritma
Pan-Tompkins. Sinyal EKG serta hasil pengukuran detak jantung ditampilkan pada
suatu GUI (Graphical User Interface).
Hasil pengujian menunjukkan bahwa pengontrol mikro dapat dideteksi
sebagai USB device. Dari pengujian didapat kecepatan transmisi maksimum 24
kbps dengan error rate 0%. Keluaran sinyal EKG pada GUI sesuai dengan hasil
keluaran instrumen serta memiliki bentuk yang sesuai dengan bentuk umum
sinyal EKG LL II.
ii
USB PROTOCOL IMPLEMENTATION ON ATMEGA8 MICROCONTROLLER FOR DATA ACQUISITION OF
ELECTROCARDIOGRAM SIGNAL
Composed by :
Innocentio Aloysius Loe (0922045)
Department of Electrical Engineering, Faculty of Engineering
Maranatha Christian University
Jl. Prof. Drg. Suria Sumantri 65, Bandung 40164, Indonesia
ABSTRACT
USB protocol is implemented on a microcontroller which actually does not
support USB protocol communication. The microcontroller used in the system
design is Atmel AVR ATMEGA8, where V-USB is used as the base firmware.
The test is done with self-designed electrocardiogram (ECG) instrument
using Limb Lead (LL) II configuration. The acquired data is processed to measure
heart rate using Pan-Tompkins algorithm. Both the ECG signal and the measured
heart rate are displayed on a GUI (Graphical User Interface).
The result shows that the microcontroller is able to be detected as a USB
device. The maximum transmission rate is approximately 24 kbps with 0% error
rate. The displayed ECG signal on the GUI matched the instrument output with
waveforms that correspond to the common form of LL II ECG signal.
iii
DAFTAR ISI
HALAMAN JUDUL LEMBAR PENGESAHAN
PERNYATAAN ORISINALITAS LAPORAN PENELITIAN PERNYATAAN PUBLIKASI LAPORAN PENELITIAN
ABSTRAK ... i
ABSTRACT ... ii
Kata Pengantar... iii
DAFTAR ISI ... iv
DAFTAR GAMBAR ... viii
DAFTAR TABEL... x
BAB 1 PENDAHULUAN ... 1
1.1. Latar Belakang ... 1
1.2. Rumusan Masalah ... 2
1.3. Tujuan Pembahasan ... 2
1.4. Batasan Masalah ... 2
1.5. Sistematika Penulisan ... 3
BAB 2 DASAR-DASAR UNIVERSAL SERIAL BUS (USB) ... 5
2.1. Arsitektur Protokol USB ... 5
2.1.1. Topologi Jaringan ... 5
2.1.2. USB Host ... 6
2.1.3. USB Device ... 7
2.1.4. Tipe Aliran Data ... 8
2.2. Enumerasi USB Device ... 8
2.3. Klasifikasi USB Device ... 11
2.4. Human Interface Device (HID) ... 12
2.4.1. Antarmuka HID ... 12
2.4.2. Device Descriptor HID ... 13
2.4.3. HID Descriptor ... 14
iv
2.5. Dasar Komunikasi USB ... 14
2.5.1. Spesifikasi Elektrik Komunikasi USB ... 14
2.5.2. Sistem Transasksi Paket ... 16
2.5.3. HID USB Request ... 18
2.6. HID Control Transfer ... 19
2.6.1. Enumeration Control Transfer ... 20
2.6.2. HID Report Transfer ... 21
2.7. V-USB Driver API ... 22
BAB 3 DASAR-DASAR ELEKTROKARDIOGRAM (EKG) ... 23
3.1. Terminologi Pokok ... 23
3.2. Fisiologi Jantung Manusia dalam Kaitannya dengan EKG ... 24
3.3. Cara Pengambilan Sinyal EKG ... 26
3.3.1. Mean-Electrical Axis ... 26
3.3.2. Aturan Pembacaan EKG ... 27
3.3.3. Sistem Limb Lead II ... 27
3.4. Pembacaan Sinyal EKG Limb Lead II ... 28
3.5. Masalah Umum dalam Perancangan Instumen EKG ... 30
3.5.1. Tegangan Common Mode ... 30
3.5.2. Baseline Wander dan Motion Artifact ... 31
3.5.3. Sumber-sumber Noise ... 31
3.5.4. Grounding dan Right Leg Drive (RLD) ... 32
3.5.5. Isolasi Sistem Penguat ... 33
BAB 4 PERANCANGAN DAN REALISASI ... 35
4.1. Rancangan Umum ... 35
4.1.1. Diagram Blok Sistem ... 35
4.1.2. Flowchart Sistem ... 36
4.2. Perancangan Instrumen Elektrokardiogram ... 37
4.2.1. Pemilihan Elektroda ... 37
v
4.2.3. Regulasi Arus dan Prefiltering ... 38
4.2.4. Instrumentation Amplifier ... 40
4.2.5. Penanggulangan Baseline Wander ... 41
4.2.6. Right Leg Drive dan Shield Driver ... 43
4.2.7. Penguat Tingkat Kedua ... 47
4.2.8. Notch Filter ... 48
4.3. Perancangan Protokol USB pada Pengontrol Mikro ATMEGA8 ... 49
4.3.1. Spesifikasi yang Ingin Dicapai ... 49
4.3.2. Perancangan Perangkat Keras ... 50
4.3.3. Device-Side Software ... 51
4.4. Host-side Software ... 58
4.4.1. Notch Filter Digital ... 59
4.4.2. Highpass Filter Digital ... 62
4.4.3. Pengukuran Laju Detak Jantung... 63
4.4.4. Transmisi Data ... 64
4.4.5. Graphical User Interface (GUI) ... 66
BAB 5 HASIL DAN ANALISIS ... 67
5.1. Hasil dan Analisis Protokol USB ... 67
5.1.1. Deteksi USB-ECG Sebagai HID ... 67
5.1.2. Laju Transmisi Data ... 68
5.1.3. Performansi Transmisi Data ... 69
5.2. Hasil dan Analisis Instrumen Elektrokardiogram ... 69
5.2.1. Rasio CMR ... 69
5.2.2. Respon Frekuensi Penguat ... 70
5.2.3. Impedansi Masukan Penguat ... 72
5.2.4. Sinyal EKG pada Keluaran Penguat ... 73
5.2.5. Sinyal Keluaran Filter Digital ... 77
5.2.6. Perhitungan Laju Detak Jantung ... 80
vi
BAB 6 PENUTUP ... 84 6.1. Kesimpulan ... 84 6.2. Saran ... 84
DAFTAR PUSTAKA
LAMPIRAN A : USB Device Descriptor LAMPIRAN B : HID Report Descriptor
vii
DAFTAR GAMBAR
1. Gambar 2.1 Topologi Jaringan USB ... 6
2. Gambar 2.2 Skematik Konektor USB host ... 9
3. Gambar 2.3 Skema Low Speed dan High Speed USB Device ... 10
4. Gambar 2.4 Encoding NRZI ... 15
5. Gambar 2.5 Koneksi USB Low Speed Device ... 15
6. Gambar 3.1 Anatomi Jantung Manusia... 25
7. Gambar 3.2 Sistem mean-electrical axis ... 26
8. Gambar 3.3 Contoh skema pemasangan elektroda sistem Limb Lead II ... 28
9. Gambar 3.4 Contoh umum sinyal EKG Limb Lead II ... 29
10. Gambar 3.5 Model pengaruh jala-jala listrik dan stray capacitance ... 33
11. Gambar 3.6 Rangkaian ekuivalen common mode sistem Gambar 3.5 ... 34
12. Gambar 4.1 Diagram blok sistem analog ... 35
13. Gambar 4.2 Diagram blok sistem digital ... 36
14. Gambar 4.3 Flowchartsistem ... 36
15. Gambar 4.4 Elektroda 3M RedDot 2560 ... 37
16. Gambar 4.5 Model elektronika elektroda EKG ... 38
17. Gambar 4.6 Realisasi rangkaian prefilter keseluruhan ... 39
18. Gambar 4.7 Skematik INA114 ... 40
19. Gambar 4.8 Pengaturan penguatan pada INA114 ... 41
20. Gambar 4.9 Penggunaan integrator sebagai umpanbalik ... 42
21. Gambar 4.10 Aplikasi tegangan common mode untuk shield driver ... 43
22. Gambar 4.11 Rangkaian ekuivalen common mode sistem RLD ... 44
23. Gambar 4.12 Sistem RLD closed-loop ... 44
24. Gambar 4.13 Bode plot sistem RLD ... 45
25. Gambar 4.14 Realisasi rangkaian RLD... 46
26. Gambar 4.15 Sistem closed-loop RLD terkompensasi ... 46
27. Gambar 4.16 Bode plot sistem RLD terkompensasi ... 47
28. Gambar 4.17 Penguat tingkat kedua ... 47
viii
30. Gambar 4.19 Skematik perangkat keras ATMEGA8 ... 50
31. Gambar 4.20 Flowchart proses enumerasi USB device ... 55
32. Gambar 4.21 Flowchart Interrupt Service Routine INT0 ... 56
33. Gambar 4.22 Flowchart fungsi usbPoll ... 57
34. Gambar 4.23 Flowchart program utama device-side software ... 58
35. Gambar 4.24 Pergeseran frekuensi notch dari notch filter digital ... 60
36. Gambar 4.25 Notch filter digital dengan kompensasi model analog ... 60
37. Gambar 4.26 Respon frekuensi highpass filter digital ... 62
38. Gambar 4.27 Ilustrasi pemrosesan sinyal algoritma Pan-Tompkins ... 64
39. Gambar 4.28 Flowchart program host-side software ... 65
40. Gambar 4.29 Graphical User Interface (GUI) ... 66
41. Gambar 5.1 Deteksi USB-ECG sebagai HID ... 67
42. Gambar 5.2 Grafik rasio CMR ... 70
43. Gambar 5.3 Respon frekuensi penguat ... 71
44. Gambar 5.4 Impedansi masukan penguat ... 73
45. Gambar 5.5 Sinyal EKG diukur pada kondisi (a) ... 74
46. Gambar 5.6 Sinyal EKG dengan noise 50 Hz ... 75
47. Gambar 5.7 Sinyal noise 50 Hz muncul pada kondisi (b) ... 75
48. Gambar 5.8 Baseline wander akibat pernapasan ... 76
49. Gambar 5.9 Sinyal pada pengukuran kondisi (d) ... 76
50. Gambar 5.10 Respon frekuensi keseluruhan... 77
51. Gambar 5.11 Pengaruh filter digital pada kondisi (a) ... 78
52. Gambar 5.12 Pengaruh filter digital pada kondisi (b) ... 78
53. Gambar 5.13 Pengaruh filter digital pada kondisi (c) ... 79
54. Gambar 5.14 Pengaruh filter digital pada kondisi (d) ... 80
55. Gambar 5.15 Hasil implementasi algoritma Pan-Tompkins ... 80
56. Gambar 5.16 Hasil pengukuran laju detak jantung dalam BPM... 81
ix
DAFTAR TABEL
1. Tabel 2.1 Klasifikasi USB device berdasarkan device class ... 11
2. Tabel 2.2 Contoh Device Descriptor HID ... 13
3. Tabel 2.3 Format HID Descriptor ... 14
4. Tabel 2.4 PID Value yang mungkin pada Low-Speed USB Device... 16
5. Tabel 2.5 Penjelasan isi USB Request ... 18
6. Tabel 2.6 USB Request GET_DESCRIPTOR ... 19
7. Tabel 2.7 USB Request GET_REPORT ... 19
8. Tabel 4.1 Device Descriptor USB-ECG ... 51
9. Tabel 4.2 Configuration Descriptor USB-ECG ... 52
10. Tabel 4.3 Interface Descriptor USB-ECG ... 52
11. Tabel 4.4 HID Descriptor USB-ECG ... 53
12. Tabel 4.5 Report Descriptor USB-ECG ... 53
13. Tabel 5.1 Laju transmisi data USB-ECG ... 68
14. Tabel 5.2 Data pengukuran rasio CMR ... 69
15. Tabel 5.3 Data pengukuran respon frekuensi... 71
16. Tabel 5.4 Data pengukuran impedansi masukan penguat ... 72
1
Universitas Kristen Maranatha
BAB 1
PENDAHULUAN
Bab ini membahas tentang latar belakang masalah, perumusan masalah,
tujuan pembahasan, batasan masalah, dan sistematika penulisan tugas akhir.
1.1. Latar Belakang Masalah
Perkembangan teknologi pengontrol mikro pada masa sekarang sangat pesat,
sehingga dapat diaplikasikan dalam banyak bidang. Salah satu bidang yang umum
menggunakan pengontrol mikro adalah instrumentasi (pengukuran).
Dalam bidang instrumentasi, pengontrol mikro umumnya digunakan dalam
instrumen (alat ukur) untuk mengubah besaran terukur menjadi sinyal atau data
digital. Terkadang data tersebut perlu diproses lebih lanjut di komputer (misal
untuk ditampilkan dalam bentuk grafik, dicari hubungannya dengan data lain, dll.),
sehingga dibutuhkan suatu cara pengiriman (transmisi) data dari pengontrol mikro
ke komputer.
Protokol transmisi yang umum digunakan untuk komunikasi pengontrol
mikro ke komputer adalah protokol serial. Pengontrol mikro memiliki protokol
serial UART, sedangkan pada komputer terdapat protokol serial RS-232.
Kecepatan transmisi protokol ini maksimum 250 kbps dengan penggunaan daya
yang cukup besar (RS-232 membutuhkan tegangan positif dan negatif minimal 3
V).
Sejak protokol Universal Serial Bus (USB) dirilis pada tahun 1996,
penggunaan protokol serial RS-232 maupun UART semakin jarang
diperhitungkan dalam desain perangkat-perangkat keras. Protokol USB bisa
dikatakan jauh lebih unggul dari RS-232 maupun UART dengan kecepatan
transmisi hingga 480 Mbps dengan penggunaan daya yang jauh lebih kecil
(maksimum 500 mW pada tegangan 5 V).
Desain motherboard komputer maupun notebook sekarang umumnya sudah
tidak memiliki periferal serial RS-232 yang terintegrasi. Hanya tersedia konektor
BAB 1 PENDAHULUAN 2
Universitas Kristen Maranatha komunikasi pengontrol mikro dengan komputer karena tidak semua pengontrol
mikro memiliki periferal USB.
Salah satu pemecahan masalah ini adalah hadirnya USB-to-Serial Converter
sebagai antarmuka antara pengontrol mikro dengan komputer. Meskipun
demikian penambahan alat tersebut ke dalam desain suatu instrumen juga
menambah kebutuhan periferal serta biaya produksi. Dibutuhkan suatu cara
sehingga pengontrol mikro dapat melakukan komunikasi USB secara langsung
dengan komputer tanpa perlu menggunakan periferal tambahan dalam desain
instrumen.
Dalam tugas akhir ini akan dirancang suatu instrumen elektrokardiogram
(EKG) menggunakan pengontrol mikro Atmel AVR ATMEGA8 yang diharapkan
dapat melakukan transmisi data secara langsung dengan komputer melalui
komunikasi USB. Cara kerja protokol USB akan dipelajari dan kemudian
diimplementasikan dalam pemrograman pengontrol mikro sehingga dapat
dilakukan akuisisi data sinyal EKG ke dalam komputer.
1.2. Rumusan Masalah
Permasalahan yang dibahas dalam tugas akhir ini adalah “Bagaimana
merancang instrumen EKG dengan sistem akuisisi data menggunakan protokol
USB?”.
1.3. Tujuan Pembahasan
Tujuan pembahasan tugas akhir ini adalah “merealisasikan instrumen EKG
dengan sistem akuisisi data menggunakan protokol USB”.
1.4. Batasan Masalah
Batasan masalah tugas akhir ini adalah sebagai berikut :
1. Pengontrol mikro yang digunakan adalah Atmel AVR ATMEGA8.
2. USB device yang dirancang merupakan class HID (Human Interface
Device), low-speed device.
BAB 1 PENDAHULUAN 3
Universitas Kristen Maranatha 4. Akuisisi sinyal EKG hanya menggunakan tiga elektroda dengan
konfigurasi Limb Lead II.
5. Analisa yang dilakukan terhadap sinyal EKG adalah pengukuran laju
detak jantung saja.
1.5. Sistematika Penulisan
Laporan tugas akhir ini disusun dalam enam bab sebagai berikut :
1. BAB 1 PENDAHULUAN
Bab ini membahas tentang latar belakang masalah, perumusan
masalah, tujuan pembahasan, batasan masalah, dan sistematika penulisan
tugas akhir.
2. BAB 2 DASAR-DASAR UNIVERSAL SERIAL BUS (USB)
Bab ini membahas teori dasar protokol USB yang meliputi arsitektur,
klasifikasi peralatan USB, Human Interface Device (HID), proses transfer
data pada HID, serta firmware V-USB yang akan digunakan pada
perancangan.
3. BAB 3 DASAR-DASAR ELEKTROKARDIOGRAM (EKG)
Bab ini membahas teori dasar elektrokardiogram yang meliputi
terminologi dasar, fisiologi jantung, cara pengambilan sinyal, serta
masalah-masalah yang sering terjadi dalam perancangan instrumen EKG.
4. BAB 4 PERANCANGAN DAN REALISASI
Bab ini membahas proses perancangan dan realisasi alat yang
digunakan untuk melakukan akuisisi data sinyal elektrokardiogram serta
BAB 1 PENDAHULUAN 4
Universitas Kristen Maranatha 5. BAB 5 HASIL DAN ANALISIS
Bab ini berisi data pengamatan yang didapat dari hasil percobaan serta
analisa terhadap data-data tersebut. Analisa meliputi perfoma transmisi data
melalu protokol USB serta performansi instrumen dan algoritma
pemrosesan sinyal yang telah dirancang dan direalisasikan.
6. BAB 6 PENUTUP
Bab ini berisi kesimpulan yang diperoleh dari hasil percobaan serta
84
Universitas Kristen Maranatha
BAB 6
PENUTUP
Bab ini berisi kesimpulan yang diperoleh dari hasil percobaan serta
saran-saran yang dapat digunakan untuk acuan penelitian lebih lanjut.
6.1. Kesimpulan
Berdasarkan hasil dan analisa data yang didapat, diperoleh kesimpulan
berikut :
1. Kecepatan transmisi data yang mencapai 23,79 kbit/s memungkinkan
pengontrol mikro ATMEGA dengan firmware berbasis V-USB
digunakan untuk akuisisi sinyal-sinyal frekuensi rendah.
2. Alat yang dirancang dapat digunakan untuk akuisisi data sinyal EKG
dengan frekuensi sampling 200 Hz, sehingga hanya dapat digunakan
untuk analisa laju detak jantung.
3. Instrumen EKG yang dirancang masih rentan terhadap sumber-sumber
noise sehingga harus digunakan pada kondisi yang tepat.
6.2. Saran
Saran berikut dapat dijadikan bahan pertimbangan jika akan diadakan
penelitian lebih lanjut :
1. Implementasi V-USB sebagai communication class device (CDC)
untuk memungkinkan transmisi data yang lebih cepat.
2. Penggunaan process pipe untuk transfer data host software dengan
GUI untuk meningkatkan kecepatan pemrosesan data.
3. Perancangan instrumen EKG yang lebih baik agar tahan terhadap
Daftar Pustaka
[1]
Technology and Applications
Kaur, Singh, Ubhi, & Rani. 2011. “Digital Filteration of ECG Signal for Removal of Baseline Drift”. International Conference on Telecommunication
[2]
Kugelstadt, T. 2005. “Getting the most out of your instrumentation amplifier
design”. Texas Instrument Analog Applications Journal
[3]
M.W. Hann. “Ultra Low Power, 18 bit Precision ECG Data Acquistion
System”. Texas Instrument Precision Design
[4]
Merck, “Electrical Injuries”. 1997. Pennsylvania : Merck.
[5]
Ogata, K. 1970. “Modern Control Engineering”. New Jersey : Prentice Hall
[6]
Pan, J. Tompkins, W.J. 1985. “A Real-Time QRS Detection Algorithm”. IEEE
Transactions on Biomedical Engineering
[7]
Townsend, Neil. 2001. “Medical Electronics”
[8]
USB.org. 2000. “Universal Serial Bus Spesification”. USB.org
[9]
USB.org. 2001. “Device Class Definition for Human Interface Devices
(HID)”. USB.org [10]
Van Valkenburg, M.E. 1982. “Analog Filter Design”. Oxford University
Press
[11]
Winter, B.B. Webster, J.G. 1983. “Driven-Right-Leg Circuit Design”. IEEE
Lampiran A : USB Device Descriptor
Device Descriptor
Item Keterangan
bLength Panjang device descriptor, selalu 18 byte bDescriptorType Tipe 1 (device descriptor)
bcdUSB Versi USB (1.0, 1.1, atau 2.0) dala m BCD bDeviceClass Nilai tergantung pada kelas device
bDeviceSubClass Perincian kelas device bDeviceProtocol Kualifikasi kelas device bMaxPacketSize Jumlah data paket maksimum idVendor Identifikasi pembuat USB
idProduct Identifikasi produk USB berdasarkan pembuat bcdDevice Seri device dalam BCD
iManufacturer String descriptor pembuat USB iProduct String descriptor produk USB iSerialNumber String descriptor seri device bNumConfigurations Jumlah configuration descriptor
Configuration Descriptor
Item Keterangan
bLength Panjang configuration descriptor, selalu 9 byte bDescriptorType Tipe 2 (configuration descriptor)
wTotallength Panjang keseluruhan device descriptor bNumInterfaces Jumlah antarmuka yang didukung
bConfigurationValue Nilai untuk argumen request SET_CONFIG iConfiguration Indeks untuk string descriptor
bmAttributes Sifat khusus konfigurasi
bMaxPower Arus maksimum pada USB bus
Interface Descriptor
Item Keterangan
bLength Panjang interface descriptor, selalu 9 byte bDescriptorType Tipe 4 (interface descriptor)
bInterfaceNumber Indeks antarmuka
bAlternateSetting Aturan khusus pada antarmuka
bNumEndpoints Jumlah endpoint yang digunakan antarmuka bInterfaceClass Serupa dengan device descriptor
bInterfaceSubClass Serupa dengan device descriptor bInterfaceProtocol Serupa dengan device descriptor
Lampiran B : HID Report Descriptor
Report Descriptor disusun berdasarkan aturan USB.org, yang tersusun atas
tiga tipe item : Main, Global, dan Local. Main item meliputi Input, Output,
Feature, Collection, dan End Collection. Global dan Local item menjelaskan
properti Main item.
Contoh di bawah adalah HID Report Descriptor dari USB-ECG. Mengingat
ada banyak sekali konten report descriptor, maka pada bagian ini hanya diberikan
satu contoh saja. Rincian lengkap dari HID report descriptor dapat dilihat pada
http://www.usb.org/developers/hidpage.
0x06, 0x00, 0xFF, // USAGE_PAGE (Vendor Defined Page 1); Global Item
0x09, 0x01, // USAGE (Vendor Usage 1); Local Item
0xA1, 0x01, // COLLECTION (Application); Main Item
0x15, 0x00, // LOGICAL_MINIMUM (0); Global Item
0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255); Global Item
0x75, 0x08, // REPORT_SIZE (8); Global Item
0x95, 0x02, // REPORT_COUNT (2); Global Item
0x09, 0x00, // USAGE (Undefined) ; Local Item
0xB2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf); Main Item
0xC0 // END_COLLECTION (Application); Main Item
Karena USB-ECG adalah custom device, maka digunakan USAGE dan
USAGE PAGE yang bersifat Vendor Defined. COLLECTION menandakan awal
dari suatu report data. Nilai report dibatasi dari 0 hingga 255.
Panjang report 8 bit, dengan count 2. Artinya dalam satu kali transmisi,
report buffer berisi 16 bit data. Karena fungsinya tidak spesifik, maka diberi
USAGE Undefined. Tipe report adalah FEATURE (bidirectional). END
Lampiran C : Skematik dan PCB USB-ECG
2) Realisasi Alat
3) Tes Alat
Hasil monitoring pada subyek, dilihat pada osiloskop dan GUI
USB-ECGLampiran D : Listing Program
1)
Device-side Software
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include "usbdrv.h"
#include "func_init.h"
/*---USB INTERFACE---*/
PROGMEM const char usbHidReportDescriptor[22] = { //22
0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined
Page 1)
0x09, 0x01, // USAGE (Vendor Usage 1)
0xa1, 0x01, // COLLECTION (Application)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x26, 0xff, 0x00, // LOGICAL_MAXIMUM (255)
0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x02, // REPORT_COUNT (2)
0x09, 0x00, // USAGE (Undefined)
0xb2, 0x02, 0x01, // FEATURE (Data,Var,Abs,Buf)
0xc0 // END_COLLECTION
};
static uchar bytesRemaining;
static int adc_w;
static uchar adc_h;
usbMsgLen_t usbFunctionSetup(uchar data[8])
{
usbRequest_t *rq = (void *)data;
if((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_CLASS)
{ /* HID class request */
if(rq->bRequest == USBRQ_HID_GET_REPORT) {
bytesRemaining = 2;
return USB_NO_MSG;
}
}
return 0;
}
uchar usbFunctionRead(uchar *data, uchar len)
{
if(len > bytesRemaining)
len = bytesRemaining;
bytesRemaining -= len;
*(data) = adc_h;
*(data+1) = adc_l;
return len;
}
/*---MAIN LOOP---*/
int main(void) {
uchar i;
wdt_enable(WDTO_1S);
usbInit();
usbDeviceDisconnect();
i = 0;
while(--i) {
wdt_reset();
_delay_ms(1);
}
adc_init();
sei();
for(;;) {
wdt_reset();
usbPoll();
adc_w = read_adc();
adc_h = (adc_w >> 8);
adc_l = adc_w & 0xff;
}
return 0;
}
/* --- */
2)
Host-side Software
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "hiddata.h"
#include "../firmware/usbconfig.h"
#include "stdafx.h"
/*Kalau ada Error*/
static char *usbErrorMessage(int errCode)
{
static char buffer[80];
switch(errCode) {
case USBOPEN_ERR_ACCESS: return "Access to device denied";
case USBOPEN_ERR_NOTFOUND: return "Specified device not found";
case USBOPEN_ERR_IO: return "Communication error with
device";
default: sprintf(buffer, "Unknown USB error %d", errCode);
return buffer;
}
return NULL; /* not reached */
/*Cari USB Device dengan VID dan PID yang sesuai*/
static usbDevice_t *openDevice(void)
{
usbDevice_t *dev = NULL;
unsigned char rawVid[2] = {USB_CFG_VENDOR_ID}, rawPid[2] =
{USB_CFG_DEVICE_ID};
char vendorName[] = {USB_CFG_VENDOR_NAME, 0},
productName[] = {USB_CFG_DEVICE_NAME, 0};
int vid = rawVid[0] + 256 * rawVid[1];
int pid = rawPid[0] + 256 * rawPid[1];
int err;
if((err = usbhidOpenDevice(&dev, vid, vendorName, pid,
productName, 0)) != 0) {
fprintf(stderr, "1. Error finding %s: %s\n", productName,
usbErrorMessage(err));
return NULL;
}
else {
fprintf(stderr, "2. No Error\n");
return dev;
}
}
static int data_buff, bpm_buffer;
static void DataDump(char *buffer)
{
data_buff = (unsigned int)buffer[0]*256 + (unsigned int)buffer[1];
data_buff = Filter(data_buff);
bpm_buffer = PanTom(data_buff);
fprintf(stdout,"%d\n",data_buff);
int main(int argc, char **argv) {
clock_t start;
usbDevice_t *dev;
char buffer[3];
int err;
if(argc < 2) {
exit(1);
}
if((dev = openDevice()) == NULL) exit(1);
int len = sizeof(buffer);
if(strcasecmp(argv[1], "read") == 0) {
start = clock();
while(1) {
if (difftime(clock(),start) >= 5) {
if((err = usbhidGetReport(dev, 0, buffer, &len)) == 0) {
DataDump(buffer + 1);
BPM_count(bpm_buffer);
}
start = clock();
}
}
}
usbhidCloseDevice(dev);
return 0;
3)
Graphical User Interface
public int x_scale, y_scale, bpm;public String bpm_buffer; pb_Graph.Image = imgGraph
private void bt_Start_Click(object sender, EventArgs e)
gpcPath.AddLine(x0 >> x_scale,
private void errorData(object sender, DataReceivedEventArgs e) {
if (e.Data.StartsWith("1")) {
if (MessageBox.Show("An error has occured. Reconnect USB- ECG and restart the application!", "Error",
MessageBoxButtons.OK, MessageBoxIcon.Error) ==
DialogResult.OK) IsStarted = false;
else {
proc.CancelErrorRead(); IsRec = true;
} }
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
if (IsStarted && proc.HasExited == false)
{
proc.CancelOutputRead();
proc.Kill();
} }
} }
Source code lengkap dengan linker dependencies dapat diakses pada CD Tugas