Pengambilan Nilai Accelerometer dari H48C

uns i gned c har c mps 10 c har r eg { i nt ni l ai ; i 2c _s t ar t ; i 2c _wr i t e 0x C0 ; i 2c _wr i t e r eg ; i 2c _s t ar t ; i 2c _wr i t e 0x C1 ; ni l ai =i 2c _r ead 0 ; i 2c _s t op ; r et ur n ni l ai ; } Proses pengambilan data CMPS10 dimulai dengan kode “i2c_start”. Kode ini memerintahkan mikrokontroler untuk memulai komunikasi I2C. “i2c_write0xC0” akan memerintahkan mikrokontroler untuk menulis kode heksadesimal C0 pada alamat modul kompas, kemudian menulis register yang diinginkan pada kode “i2c_writereg”. Register ini sesuai dengan Tabel 1. Selanjutnya diikuti dengan start bit lagi. Penulisan alamat modul kompas dilakukan dengan kode heksadesimal C1 yang berarti readwrite high. Perintah berikutnya ialah “i2c_read0”. Mikrokontroler akan membaca data yang keluar dari modul kompas CMPS10 tanpa adanya ack acknowledgement. “i2c_stop” memerintahkan mikrokontroler untuk menghentikan komunikasi I2C. Data yang terbaca akan tersimpan pada variabel “nilai”.

4.3.4. Pengambilan Nilai Accelerometer dari H48C

H48C dihubungkan ke mikrokontroler pada PORT yang telah ditentukan. Pendefinisian kaki-kaki H48C yang terhubung dengan mikrokontroler perlu dilakukan. Kode programnya sebagai berikut: def i ne CLK PORTA. 0 def i ne Di PI NA. 1 def i ne Do PORTA. 1 def i ne CS PORTA. 2 “define” merupakan C preprocessor yang digunakan untuk mendefinisikan macro. “define CLK PORTA.0” menandakan bahwa variabel CLK clock H48C dihubungkan ke PORT A.0. Clock ini berfungsi untuk menginisialisasi konversi dan clock out tiap bit konversi yang dilakukan. “define Di PINA.1” menandakan bahwa variabel Di Data In dihubungkan ke PIN A.1. Data In digunakan untuk mengisi kanal konfigurasi data ke dalam alat. “define Do PORTA.1” berarti Do Data Out dihubungkan ke PORT A.1. Data Out befungsi untuk mengatur perubahan hasil keluaran konversi AD analog digital. “define CS PORTA.2” berarti kaki CS H48C dihubungkan ke PORTA.2. CS berfungsi untuk menginisialisasi komunikasi dengan alat dimana ketika berlogika 0 akan menghentikan konversi dan berlogika 1 akan melakukan konversi. Selain mendefisinikan kaki-kaki H48C yang terhubung ke mikrokontroler juga perlu didefinisikan Data In dan Data Out dengan kode berikut: def i ne DATA_I N 0b11111101 def i ne DATA_OUT 0b11111111 Kode di atas mengartikan bahwa “DATA_IN” bernilai 11111101 biner atau FD heksadesimal atau 253 desimal. Bilangan ini digunakan untuk mengubah sinyal dari kondisi hightinggi ke lowrendah. Pemberian nilai 0 dilakukan pada bit 1 dikarenakan Data In didefinisikan pada PINA.1. “DATA_OUT” bernilai FF yang berarti sinyal dibuat ke dalam kondisi high. Komunikasi antara mikrokontroler dengan H48C dilakukan dengan menggunakan beberapa kode program di bawah ini. Langkah pertama ialah membuat fungsi clock yang digunakan untuk mengubah sinyal dari high ke low dengan periode tidak lebih dari 0,1 mikrodetik. Hal ini dikarenakan komponen ADC MCP3204 yang berada di dalam H48C memiliki spesifikasi untuk mengeluarkan 12 data bits dalam waktu maksimum 1,2 milidetik. Kegagalan untuk memenuhi kriteria ini menyebabkan galat linearitas pada konversi. Hal yang perlu menjadi catatan adalah pada seluruh siklus konversi data H48C, ADC MCP3204 tidak membutuhkan kecepatan yang konstan selama spesifikasi timing terpenuhi. Kodenya seperti berikut: v oi d c l oc k { CLK=0; del ay _us 5 ; CLK=1; del ay _us 5 ; } Kode di atas berfungsi untuk membuat sinyal clock dan mengakibatkan sinyal yang dimasukkan ke dalam H48C seperti Gambar 56. Gambar 56. Sinyal CLK pada H48C Langkah berikutnya ialah membaca data dari H48C. Kodenya seperti berikut: i nt r ead_HC uns i gned c har ax i s { i nt l oopi ng, hc ; DDRA=DATA_OUT; CS=0; Do=1; c l oc k ; Do=1; c l oc k ; f or l oopi ng=3; l oopi ng0; l oopi ng- - { Do= ax i s l oopi ng- 1 0x 01; c l oc k ; } DDRA=DATA_I N; Do=1; c l oc k ; c l oc k ; hc =0; f or l oopi ng=0; l oopi ng12; l oopi ng++ { CLK=0; del ay _us 1 ; hc =1; hc | =Di ; CLK=1; del ay _us 1 ; } CS=1; r et ur n hc ; } Pada kode di atas ada inisialisasi variabel “looping” dan “hc” dengan tipe integer. Variabel “looping” digunakan untuk melakukan perulangan. Variabel “hc” digunakan sebagai penyimpan sementara dari nilai accelerometer yang diterima mikrokontroler dari H48C. DDRA=DATA_OUT berarti DDRA difungsikan sebagai DATA_OUT. CS diberi logika 0 untuk menginisialisasi komunikasi antara mikrokontroler dengan H48C. Start bit dimulai saat CS berlogika 0 dan Do dibuat high. Kemudian diberi perintah clock untuk membuat satu sinyal high and low dengan periode 5 mikrodetik. Do dibuat high untuk memilih mode control bit selection pada single input. Kemudian diberi perintah clock lagi Gambar 57. Gambar 57. Sinyal untuk memulai start bit dan pemilihan mode input Biru: start bit; Merah: pemilihan mode input Langkah berikutnya ialah pemilihan kanal konversi, kanal ini dipilih dengan menggunakan fungsi “for”. Fungsi ini melakukan pemilihan kanal dimana kanal yang digunakan adalah kanal 0 untuk variabel axisnya bernilai 0, kanal 1 untuk axis 1, kanal 2 untuk axis 2, kanal 3 untuk axis 3. Pemilihan kanal ini digunakan untuk mengeluarkan data voltase dari tiap axis dimana nilai variabel axis-nya 0 berarti nilai voltase pada axis x, 1 untuk axis y, 2 untuk axis z dan 3 untuk tegangan referensi. Pemilihan kanal ini sesuai dengan Tabel 8. Tabel 8. Pemilihan kanal pengambilan data accelerometer Control Bit Selections Konfigurasi Input Pemilihan Kanal Single Diff D2 D1 D0 1 X 0 Single ended CH0 1 X 1 Single ended CH1 1 X 1 0 Single ended CH2 1 X 1 1 Single ended CH3 Keterangan : X = tidak dihiraukan Setelah pemilihan kanal, DDRA difungsikan sebagai DATA_IN yang akan menerima data dari H48C. Do=1 diberi logika 1 untuk membuat dalam keadaan high. Setelah itu dilakukan clocking sebanyak 2 kali untuk memberitahukan H48C akan waktu pengambilan sampel dan pemberian null bit dengan kode hc=0. Pengambilan data dari H48C dilakukan dengan fungsi “for looping=0; looping12; looping++”. Perulangan dilakukan sebanyak 12 kali dikarenakan bit Data Out dari MCP3204 hasil konversi ada 12 bit dimulai dari bit 0 hingga bit 11. Fungsi ini dimulai dengan membuat CLK berlogika 0. Penundaan waktu CLK dilakukan agar tetap low sebanyak 1 mikrodetik. Kemudian nilai hc sebelumnya digeser ke kiri 1 kali. Nilai hc baru diisi dari nilai Di. CLK diberi logika 1 untuk mengakhiri pengambilan data bit ini dan ditunda 1 mikrodetik. Setelah semua data diambil, CS diberi logika 1 untuk mengakhiri konversi. Pengambilan data accelerometer dari H48C belum memberikan nilai accelerometer yang sesungguhnya. Data ini perlu dikonversi sehingga menjadi nilai g-force. Kode ini didapat dari persamaan 14. Pengkonversian dilakukan oleh fungsi berikut: f l oat k onv er s i i nt v Ref , i nt v Ax i s { f l oat f ; i f v Ax i s =v Ref f = v Ax i s - v Ref 0. 0022; i f v Ax i s v Ref f =- v Ref - v Ax i s 0. 0022; r et ur n f ; }

4.3.5. Pengambilan data suhu dari sensor DS1820