• Tidak ada hasil yang ditemukan

Pengambilan nilai accelerometer dari H48C

4. HASIL DAN PEMBAHASAN

4.3. Program Mikrokontroler

4.3.4. Pengambilan nilai accelerometer dari H48C

Proses pengambilan data CMPS10 dimulai dengan kode “i2c_start()”. Kode ini memerintahkan mikrokontroler untuk memulai komunikasi I2C. “i2c_write(0xC0)” akan memerintahkan mikrokontroler untuk menulis kode heksadesimal C0 pada alamat modul kompas, kemudian menulis register yang diinginkan pada kode “i2c_write(reg)”. Register ini sesuai dengan Tabel 1. Selanjutnya diikuti dengan start bit lagi. Penulisan alamat modul kompas dilakukan dengan kode heksadesimal C1 yang berarti read/write high. Perintah berikutnya ialah “i2c_read(0)”. 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:

#define CLK PORTA.0 #define Di PINA.1 #define Do PORTA.1 #define 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:

#define DATA_IN 0b11111101 #define 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 high/tinggi ke low/rendah. 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:

void clock() { CLK=0; delay_us(5); CLK=1; delay_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:

int read_HC(unsigned char axis) { int looping, hc; DDRA=DATA_OUT; CS=0; Do=1; clock(); Do=1; clock(); for(looping=3;looping>0;looping--) { Do=(axis>>(looping-1)) & 0x01; clock(); } DDRA=DATA_IN; Do=1; clock();

clock(); hc=0; for(looping=0;looping<12;looping++) { CLK=0; delay_us(1); hc<<=1; hc|=Di; CLK=1; delay_us(1); } CS=1; return 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 0 Single ended CH0

1 X 0 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; looping<12; 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:

float konversi(int vRef,int vAxis) { float f;

if (vAxis>=vRef)f=(vAxis-vRef)*0.0022; if(vAxis<vRef)f=-(vRef-vAxis)*0.0022; return f;

}

Dokumen terkait