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