BAB III

advertisement
BAB II
LANDASAN TEORI
2.1 Mikrokontroller Atmega32.
Mikrokontroler merupakan suatu terobasan teknologi mikroprosesor dan
mikrokomputer yang merupakan teknologi semikonduktor dengan kandungan
transistor yang lebih banyak namun hanya membutuhkan ruang yang sangast
kecil, Lebih lanjut, mikrokontroler merupakan system computer yang mempunyai
satu atau beberapa tugas yang sangat spesifik, berbeda dengan PC (Personal
Computer ) yang memiliki beragam fungsi.
Tidak seperti sistem komputer yang mampu menangani berbagai macam
program aplikasi, mikrokontroler hanya bisa digunakan untuk suatu aplikasi
tertentu saja, perbedaan lainnya terletak pada perbandingan RAM dan ROM. Pada
sistem komputer perbandingan RAM dan ROM nya besar, artinya programprogram pengguna disimpan dalam ruang RAM yang relative besar, sedangkan
rutin-rutin antar muka perangkat keras disimpan dalam ruang ROM yang kecil,
Sedangkan pada mikrokontroler, perbandingan ROM dan RAM –nya yang besar,
artinya program kontrol disimpan dalm ROM (bias Masked ROM atau Flash
PEROM) yang ukurannya relatif lebih besar, sedangkan RAM digunakan sebagai
tempat penyimpanan sementara , termasuk register-register yang digunakn pada
mikrokontroler yang bersangkutan.
Mikrokontroler merupakan keseluruhan sistem komputer yang dikemas
menjadi sebuah chip di mana di dalamnya sudah terdapat Mikroprosesor, I/O,
Memori bahkan Analog to Digital Converter (ADC), berbeda dengan
Mikroprosesor yang berfungsi sebagai pemproses data (Heryanto, dkk, 2008:1).
Mikrokontroller AVR (Alf and Vegard’s Risc processor) memiliki arsitektur
8 bit, dimana semua instruksi dikemas dalam kode 16-bit dan sebagian besar
instruksi dieksekusi dalam 1 siklus clock atau dikenal dengan teknologi RISC
(Reduced Instruction Set Computing). Secara umum, AVR dapat dikelompokan
5
6
ke dalam 4 kelas, yaitu keluarga AT90Sxx, keluarga ATMega dan AT86RFxx.
Pada dasarnya yang membedakan masing-masing adalah kapasitas memori,
peripheral dan fungsinya (Heryanto, dkk, 2008:1). Dari segi arsitektur dan
instruksi yang digunakan, mereka bisa dikatakan hampir sama. Berikut ini gambar
Mikrokontroler Atmega32.
.
Gambar 2.1 Mikrokontroler Atmega32
Di bawah ini akan dijelaskan konfigurasi pin (kaki IC) Mikrokontroler
Atmega32 yang terdiri dari 20 kaki pin IC.
Gambar 2.2 Konfigurasi Pin Mikrokontroler Atmega32
Secara umum konfigurasi dan fungsi pin ATMega32 dapat dijelaskan
sebagai berikut :
VCC
: Input sumber tegangan positif (+)
GND
: Ground negative (-)
7
Port A
: Berfungsi sebagai input analog dari ADC (Analog to Digital
Converter). Port ini juga berfungsi sebagai port I/O dua arah, jika
ADC tidak digunakan.
Port B
: berfungsi sebagai port I/O dua arah. Port PB5, PB6 dan PB7 juga
berfungsi sebagai MOSI (Master Out Slave In), MISO (Master In
Slave Out) dan SCK (Serial Clock) yang di pergunakan pada
proses downloading.
Port C
: berfungsi sebagai port I/O dua arah.
Port D
: berfungsi sebagai port I/O dua arah. Port PD0 dan PD1 juga
berfungsi sebagai RXD (Receiver Diversity) dan TXD
(Transmitter Diversity) yang dipergunakan untuk komunikasi
serial.
RESET
: Input reset.
XTAL1
: Input ke amplifier inverting osilator dan input ke sirkuit clock
internal.
XTAL2
: Output dari amplifier inverting osilator.
AVCC
: Input tegangan untuk Port A dan ADC.
AREF
: Tegangan Referensi untuk ADC.
8
Gambar 2.3 Rangkaian Sistem Minimum Atmega32
2.2 Sensor UVTRON
Sensor UVTRON flame detector adalah sensor pendeteksi api produksi
Hamamatsu di fungsikan untuk mendeteksi adanya api lilin. Digunakan 1 buah
sensor UVTRON untuk mendeteksi ada tidaknya api serta memfokuskan posisi
api. Salah satu sensor diberi penutup sedemikian, sehingga radius deteksi api
menjadi lebih sempit.
Gambar 2.4 Flame detector
9
Gambar 2.5 Radius pendeteksian posisi api terhadap flame detektor
Dalam penggunaan sensor UVTron hanya perlu menambahkan jumper
pada pin jumper dan kapasitor 1 F. penambahan jumper dan kapasitor pada
gambar 2.5 hal ini berfungsi untuk mengatur sensitivitas dari sensor. Dan
penambahan kapasitor berfungsi untuk memperlebar sinyal output bila sensor
dapat mendeteksi adanya lilin, Peletakan posisi dari tabung UVTRON yaitu
berdiri hal ini dikarenakan jarak jangkauan dari sensor lebih jauh dibandingkan
dengan posisi tidur dan posisi anoda dari tabung berada didepan hal ini karena
ketika kutub anoda menerima cahaya maka kutub anoda akan mengeksitasi kutub
katoda sehingga sensor aktif.
UV_TRON (SOLD SEPARATELY
ANODA
A
CONSTAN VOLTAGE
CIRCUIT
+
5 VDC
CATODEH
350 VDC
HIGH VOLTAGE
DC-DC
CONVERTER
K
Q
SIGNAL
PROSESING
CIRCUIT
3
5
7
9
-
Q
POWER SUPPLY 12 VDC
GND
OPEN COLECTOR
JUMPER LEAD SETTING
BACKGROUND CENCEL LEVEL
Gambar 2.6 Block diagram R2868
10
2.3 Sensor Pendeteksi Garis
Untuk membedakan ruangan terhadap koridor dipasang garis putih yang
terdapat pada tiap pintu ruangan. Sensor pendeteksi garis (line sensor detector)
disini di fungsikan untuk mendeteksi garis, adapun cara kerja dari sensor ini
sendiri bekerja atas asas pencahayaan inframerah yang dipancarkan dari sensor
inframerah dan akan diterima oleh penerima (Photodioda). Dikarenakan sifat dari
komponen ini akan bekerja sebagai generator arus ketika energi cahaya dengan
panjang gelombang yang benar jatuh pada sambungan Photodioda tersebut.
Output tersebut dikuatkan menggunakan transistor yang difungsikan sebagai
switching sekaligus penguat arus, kemudian dimasukan ke rangkaian comparator
yang di fungsikan sebagai pembanding tegangan untuk menentukan intensitas
penerimaan cahaya yang dipancarkan oleh inframerah, output dari rangkaian
comparator inilah yang selanjutnya dimanfaatkan sebagai alat untuk menentukan
garis yang dideteksi tersebut apakah berwarna terang atau gelap (warna hitam atau
putih), Output detector dipakai sebagai data input untuk pemroses sebagai data
navigasi. Berikut ini gambar 2.6 Module sensor pendeteksi garis.
Gambar 2.7 Module sensor pendeteksi garis.
2.4 Rangkaian Sound Aktivasion
Aktivasi suara adalah rangkaian penerima suara yang digunakan sebagai
start awal pada robot pemadam api. Pada dasarnya rangkaian ini bekerja atas
penerimaan bunyi frekuensi 3 – 4 KHz yang kemudian diolah oleh rangkaian filter
11
LM358 sehingga menghasilkan nilai frekuensi yang lebih besar dan selanjutnya
dimasukan ke rangkaian tone decoder (LM567) sebagai IC perubah frekuensi ke
level tegangan analog. Untuk dapat mengeset nilai kepekaan penerimaan sound
aktif terhadap bunyi frekuensi yang di pancarkan output dari tone decoder
dimasukan ke rangkaian comparator yang selanjutnya data 1/0 pada output dapat
digunakan sebagai data untuk mikrokontroler. Gambar sound activation dapat
dilihat pada gambar 2.8.
Gambar 2.8 Hardware Sound Activation
2.5 Basic Compiler AVR
BASCOM adalah program Basic compiler berbasis windows untuk berbagai
jenis keluarga microcontroller seperti MCS-51 dan AVR. BASCOM, merupakan
pemprograman dengan bahasa tingkat tinggi. Penguasaan program BASCOM ini
sangat didukung oleh pemahaman perangkat keras microcontroller yang baik,
karena setiap langkah dari program ini pasti berhubungan dengan perangkat
kerasnya. Hal itulah yang membedakan BASCOM dengan bahasa pemprograman
lainnya. BASCOM merupakan bahasa pemprograman basic yang dikembangkan
dan dikeluarkan oleh MCS Electronic. Bahasa pemprograman ini memiliki
keuggulan diantaranya :
1. Menggunakan bahasa pemprograman basic sebagai control program.
2. Memiliki jendela simulasi berupa LCD (liquid crystal display), simulasi
port micro dan sebagainya.
12
Interface dari BASCOM AVR dapat dilihat pada gambar dibawah ini :
Gambar 2.9 Tampilan BASCOM-AVR
Keterangan lengkap ikon-ikon dari program BASCOM dapat dilihat pada tabel
dibawah ini :
Tabel 2.1 Ikon-ikon Pada Program BASCOM
13
Untuk menu show result informasi yang akan ditampilkan dapat dilihat pada tabel
berikut ini :
Tabel 2.2 Tampilan Menu Pada Program BASCOM
2.6 Sensor TPA81
Sensor Thermal Array, TPA81 adalah sensor yang membaca radiasi panas.
Sensor ini digunakan untuk mendeteksi inframerah pada panjang gelombang
2µM – 22µM, yang merupakan panjang gelombang dari radiasi panas. Sensor ini
memiliki 8 buah sensor panas yang tersusun dalam satu baris. TPA 81 dapat
mengukur suhu pada 8 titik yang berdekatan secara bersamaan dan dapat
mendeteksi api lilin pada jarak 2 meter dengan tidak terpengaruh oleh cahaya
luar. Secara keseluruhan, TPA81 memiliki range horisontal sebesar 41° dan
range vertikal sebesar 6°. Sensor ini dapat mendeteksi api lilin dari jarak sekitar 2
meter. Data yang dihasilkan dari sensor thermal array berupa data biner 8 bit dari
masing-masing pixel sensor yang merupakan data suhu yang terukur. Misalkan
pada salah satu sensor mendeteksi suhu sebesar 48°C, maka data yang dihasilkan
pada sensor tersebut adalah 48 (30H). Sensor thermal array memiliki 10 register
yang dapat diakses dengan menggunakan protokol I2C. Data suhu dari setiap pixel
sensor terdapat pada register - register berikut ini.
14
Tabel 2.3 Register Pada Sensor TPA 81
Gambar 2.10 Module Sensor TPA 81
Modul sensor Thermal Array dengan komunikasi protokol I2C ini sama
dengan modul kompas elektronik. Alamat fix dari sensor ini adalah 0xD0.
Selanjutnya membaca data register dengan mengirimkan nilai alamat register
yang diinginkan. Data sensor ada pada alamat register 0×02-0×09 untuk data
sensor pixel 1 - pixel 8. Untuk sistem komunikasi I2C secara keseluruhan sama
dengan modul kompas elektronik, yang berbeda hanyalah alamat dari modul dan
register - register yang dibaca. Sedangkan cara-cara komunikasinya sama, yaitu
dengan menggunakan sistem komunikasi standard I2C. Data yang terbaca pada
register - register yang menyimpan data sensor tiap pixel adalah data 8 bit yang
mempresentasikan nilai suhu yang terukur. Secara umum, cara untuk
mendapatkan nilai - nilai suhu dari sensor thermal array sama seperti pada
kompas elektronik, yang berbeda hanyalah pada alamat register yang akan dibaca
dan alamat device-nya.
15
2.6.1 Skema Rangkaian TPA81
Dibawah ini adalah skema rangkaian untuk TPA81 yang terhubung pada
Rangkaian Master Slave Atmega32.
Gambar 2.11 Skema Rangkaian TPA81
2.7 Sensor Ultrasonik Ping
Perpindahan robot dari satu tempat ketempat tertentu, tentunya akan
menjumpai halangan atau rintangan, Agar robot dapat berpindah dan tidak
menabrak dinding atau halangan yang ada didepan robot diperlukan sensor
pendeteksi jarak. Sensor ping menggunakan modul jadi dari parallax seperti pada
gambar 2.12 dan gambar 2.13 Dengan 2 buah pin kontrol, antara lain sebuah pin
input trigger dan sebuah pin output data.
Gambar 2.12 Module Sensor Ultrasonik
16
Gambar 2.13 Pin Koneksi Sensor Ultrasonik
Proses scaning dilakukan tidak secara urut dari sensor 1 – 7, tetapi secara
melompat-lompat. Hal ini dilakukan karena sensor yang bedekatan akan saling
interferensi satu satu sama lain.
Tujuh sensor ultrasonik terpasang pada bagian badan robot, pemasangan
sensor terletak pada sudut yang sama. Hal ini untuk menjangkau semua halangan
yang ada disekitar robot.
Proses scanning dilakukan tidak secara bersamaan
untuk sisi kiri dan kanan sensor.
2.8 Motor Servo
Motor servo merupakan motor yang mampu bekerja dua arah (CW dan
CCW) dimana arah dan sudut pergerakan rotornya dapat dikendalikan hanya
dengan memberikan pengaturan duty cycle sinyal PWM pada bagian pin
kontrolnya. Disamping itu motor servo merupakan sebuah motor DC yang
memiliki rangkaian control dan internal gear untuk mengendalikan pergerakan
dan sudut angularnya. Gambar 2.14 dan gambar 2.15 merupakan gambar
pensinyalan motor servo.
Gambar 2.14 Bentuk Fisik Motor Servo
17
Gambar 2.15 Sinyal Gerak Motor Servo
2.9 SPC Servo Motor Controller
2.9.1 Pendahuluan
Smart Peripheral Controller / SPC SERVO MOTOR CONTROLLER
merupakan sebuah modul pengendali motor servo yang mampu digunakan untuk
mengendalikan 20 buah motor servo secara serentak maupun sekuensial. Modul
ini dilengkapi dengan jalur komunikasi UART RS-232, UART TTL, dan I2C. Jika
menggunakan jalur komunikasi I2C, maka beberapa SPC SERVO MOTOR
CONTROLLER dapat digunakan untuk mengontrol sampai dengan maksimum
160 buah motor servo.
SPC
SERVO
MOTOR
CONTROLLER
dapat
digunakan
untuk
mengendalikan motor servo standar maupun kontinu serta dilengkapi dengan
fasilitas untuk menyimpan sekuen gerakan sehingga sesuai untuk aplikasi-aplikasi
robotik atau aplikasi yang menggunakan motor servo lainnya.
2.9.2 Spesifikasi SPC Servo Motor Controller
Spesifikasi SPC SERVO MOTOR CONTROLLER sebagai berikut:

Catu daya untuk SPC SERVO MOTOR CONTROLLER terpisah dengan
catu daya untuk motor servo.

Catu daya untuk SPC SERVO MOTOR CONTROLLER dapat diperoleh
dari sumber catu daya dengan tegangan 6,5 – 12 Volt.
18

Tiap modul SPC mampu mengendalikan 20 motor servo.

Resolusi pulsa kontrol servo sebesar 1 µs.

Dilengkapi dengan kemampuan servo ramping.

Dilengkapi dengan kemampuan membaca pulsa kontrol (posisi) servo.

Dilengkapi dengan kemampuan Enable dan Disable servo.

Dilengkapi dengan kemampuan menyimpan dan menjalankan sampai
dengan maksimal 32 sekuen gerakan.

Dilengkapi dengan kemampuan menyimpan dan kembali ke posisi home
(default).

Tersedia antarmuka UART RS-232, UART TTL, dan I2C.

Jika menggunakan I2C, SPC SERVO MOTOR CONTROLLER dapat dicascade hingga 8 modul.
19
2.9.3 Kendali Motor Servo Dengan Menggunakan SPC Servo Motor
Controller.
Tabel 2.4 Urutan penulisan program untuk menjalankan Servo
2.10 Protokol Komunikasi I2C (Inter IC Bus) atau TWI (Two Wire Interface).
2.10.1 Pendahuluan
I2C merupakan bus standar yang didesain oleh Philips pada awal tahun
1980an untuk memudahkan komunikasi antar komponen yang tersebar pada
papan rangkaian. I2C merupakan singkatan dari Inter IC atau komunikasi antar
IC, sering disebut juga IIC atau I2C. Pada awalnya, kecepatan komunikasi
maksimumnya diset pada 100kbps karena pada awalnya kecepatan tinggi belum
dibutuhkan pada transmisi data. Untuk yang membutuhkan kecepatan tinggi, ada
mode 400kbps dan sejak 1998 ada mode kecepatan tinggi 3,4Mbps. I2C tidak
20
hanya digunakan pada komponen yang terletak pada satu board, tetapi juga
digunakan untuk mengkoneksikan komponen yang dihubungkan melalui kabel.
Kesederhanaan dan fleksibilitas merupakan ciri utama dari I2C, kedua hal
tersebut membuat bus ini mampu menarik penggunaanya dalam berbagai aplikasi.
Fitur-fitur signifikan dari bus ini adalah :
-
hanya 2 jalur/kabel yang dibutuhkan
-
tidak ada aturan baud rate yang ketat seperti pada RS232, di bus ini IC yang
berperan sebagai master akan mengeluarkan bus clock
-
Hubungan master/slave berlaku antara komponen satu dengan yang lain,
setiap perangkat yang terhubung dengan bus mempunyai alamat unik yang diset
melalui software
-
IC yang berperan sebagai master mengontrol seluruh jalur komunikasi
dengan mengatur clock dan menentukan siapa yang menggunakan jalur
komunikasi. Jadi IC yang berperan sebagai slave tidak akan mengirim data
kalau tidak diperintah oleh Master.
-
I2C merupakan bus yang mendukung multi-master yang mempunyai
kemampuan arbitrasi dan pendeteksi tabrakan data.
2.10.2 Mekanisme Hubungan Antar Komponen
I2C hanya membutuhkan dua jalur/kabel yaitu SDA dan SCL. SCL/serial
clock merupakan jalur clock, digunakan untuk mensinkronkan data transfer antara
Master dan Slave dalam I2C bus. SDA/Serial Data merupakan jalur komunikasi
data dua arah. SDA dan SCL dihubungkan ke seluruh komponen dalam bus I2C.
Selain kedua jalur/kabel masih ada jalur/kabel ketiga yaitu Ground/0 volt serta
jalus Vcc/5v untuk menghidupkan perangkat/komponen. Baik SDA maupun SCL
merupakan tipe open drain. Maksud dari open drain adalah chip bisa membuat
outputnya berlogika 0, tapi tidak bisa membuat outputnya berlogika 1. Sehingga
agar mampu memberikan output 1, diperlukan pull up resistor yang dihubungkan
ke suplai 5v. Jadi kita harus memberikan resistor pull up pada jalur SDA dan SCL
yang ujung satunya dihubungkan ke 5v. Kita hanya memerlukan 1 buah resistor
21
per jalur untuk seluruh I2C bus, tidak perlu satu-persatu untuk tiap perangkat.
Ilustrasinya adalah sebagai berikut:
Gambar 2.16 Ilusrasi hubungan antar komponen
Nilai dari resistor tidak begitu berpengaruh. Dari referensi dibuku dan
percobaan yang dilakukan, didapat bahwa ada yang memakai resistor dengan nilai
mulai 1k8 (18000 ohms) sampai 47k (47000 ohms), untuk penulis sendiri,
berdasar pengalaman cenderung memilih nilai 4k7 (4700ohm). Pemilihan nilai
lain pun tidak masalah, asal masih dalam range tersebut karena berdasar I2C bus
specification yang dirilis oleh NXP pada 2001, pull up device tergantung pada bus
loads. Jika bus load mencapai 200pF, maka pull up devicenya bisa berupa
resistor, juka bus load antara 200-400pF (fast mode) maka pull up device bisa
berupa sumber arus (max 3mA) atau switched resistor circuit (silahkan lihat
gambar dibawah untuk referensi). Jika kita tidak memberikan pull up device
(resistor/sumber arus) maka jalur SDA dan SCL akan selalu berlogika rendah,
hampir 0 volt, dan I2C bus tidak akan bekerja.
2.10.3 Masters dan Slave
Perangkat/komponen dalam bus I2C akan berperan sebagai Master atau
Slave. Master merupakan komponen/perangkat yang mengontrol jalur clock dan
siapa yang berhak menggunakan jalur data. Slave adalah komponen/perangkat
yang merespon pada perintah Master dan tidak bisa mengambil inisiatif
komunikasi. Jadi hanya master saja yang bisa mengambil inisiatif transfer data
dalam I2C bus. I2C bus mendukung multiple slave dalam satu bus dengan hanya 1
master. Pada teorinya, sistem ini mendukung multiple master, tapi tidak akan
22
dibahas karena jarang digunakan. Pada sistem seperti robot, Master adalah
kontrolernya (mikrokontroler/mikroprosesor) dan slave adalah modul sensor
seperti SRF08, CMPS03 atau modul RTC DS1307. Baik master maupun slave
bisa mentransfer data melalui I2C bus, tetapi transfer hanya dikontrol oleh
master.
2.10.4 Protokol Fisik I2C
Ketika master (kontroler) ingin berkomunikasi dengan slave, master akan
mulai mengirim start sequence pada bus I2C. Start sequence adalah salah satu
dari dua sequence spesial pada bus I2C, sekuens spesial lainnya adalah stop. Start
sequence dan stop sequence merupakan tahap spesial dimana merupakan kondisi
dimana SDA (jalur data) boleh berubah ketika SCL (jalur clock) dalam kondisi
high (1). Start sequence menandai awal dari transaksi data dengan perangkat
slave. Stop sequence menandai akhir transaksi data dengan perangkat slave.
Gambar 2.17 Sinyal Start sequence dan Stop sequence pada I2C.
Data dikirim dalam rangkaian/sequence 8bit. Bit dikirim lewat jalur SDA
dimulai dengan MSB (Most Significant Bit). Jalur SCL kemudian dipulsakan
high(1) kemudian low(0). Tanpa pull-up device, chip tidak bisa mengubah line ke
kondisi high (1). Untuk setiap 8 bit yang ditransfer, perangkat penerima data
mengirim balik bit acknowledge (ack), jadi pada kenyataanya ada 9 clock SCL
untuk tiap transfer dari 8 bit data. Jika perangkat penerima mengirim balik sebuah
low ACK bit (ACK=0) maka perangkat tersebut telah menrima data dan siap
menerima data berikutnya. Jika perangkat penerima mengirim balik high ACK bit
(ACK=1) berarti perangkat tersebut tidak bisa lagi menerima data selanjutnya,
sehingga master harus mengakhiri transfer data dengan mengirim stop sequence.
23
2.10.5 Kecepatan I2C
Kecepatan serial clock (SCL) untuk I2C mencapai 100KHz. Untuk yang
membutuhkan kecepatan tinggi, ada fast mode dimana clock bisa mencapai
400Khz dan sejak 1998 ada mode kecepatan tinggi dimana clock bisa mencapai
3,4MHz. Untuk aplikasi seperti robot dan modul embedded yang non vital
biasanya clock yang digunakan masih dibawah 100KHz. Berdasarkan I2C
Specification terbaru yang dikeluarkan NXP/Phillips, untuk transmisi data pada
clock diatas 1Mhz dibutuhkan delay beberapa uS diantara setiap byte yang
dikirim.
.
2.10.6 Pengalamatan Perangkat pada Bus I2C
Teorinya, alamat perangkat pada bus I2C bisa dalam format 7bit maupun
10bit. Namun, pengalamatan 10bit jarang digunakan dan tidak akan dibahas
dalam makalah ini. Modul yang umum digunakan biasanya menggunakan alamat
7bit. Ini berarti anda bisa menggunakan sampai 128 perangkat dalam satu bus
I2C, karena alamat 7 bit adalah angka dari 0 sampai 127. Ketika kita mengirim
alamat 7 bit, kita tetap akan mengirim data 8 bit sesuai format pengiriman data
dalam bus I2C. Bit sisa digunakan untuk menginformasikan pada slave apakah
master akan menulis atau membaca ke perangkat slave tersebut. Jika bit sisa
tersebut bernilai 0 maka master akan menulis ke slave. Jika bit sisa tersebut
bernilai 1 maka master akan membaca data dari slave. Tujuh bit alamat akan
ditempatkan pada 7 bit pertama dari data 8 bit sehingga bit Read/Write (R/W)
terletak di LSB (Least Significant Bit).
Gambar 2.18 Pengalamatan perangkat pada bus I2C
24
Peletakan 7 bit alamat pada 7 bit awal dari data 8 bit biasanya menjadi
sumber kebingungan pemula dalam memahami mekanisme pengalamatan dalam
I2C. Contohnya jika kita ingin menulis pada alamat 21, kita harus mengirim 42
yang berarti 21 digeser 1 bit ke depan. Maka dari itu lebih mudah bagi kita untuk
mengumpamakan bus I2C memiliki alamat 8 bit dimana alamat genap untuk
menulis dan ganjil untuk membaca dari perangkat tersebut. Contohnya adalah
pada CMPS03, untuk menulis digunakan alamat 0xC0 ($C0) dan 0xC1 ($C1)
untuk membaca data darinya. Jadi bit R/W hanya akan membuat alamatnya hanya
berbeda genap dan ganjil.
2.10.7 Protokol Software pada Bus I2C
Pada software (pemrograman) misal lewat bascom, codevision, win avr,
ada perintah-perintah khusus untuk protokol I2C. Yang pertama dilakukan adalah
master akan mengirim start sequence. Start sequence akan membuat semua
perangkat slave bersiap mendengar perintah yang datang dari master. Kemudian
master akan mengirim alamat perangkat yang dituju. Slave yang cocok dengan
alamat yang dikirim oleh master akan melanjutkan ke transmisi berikutnya. Slave
selain yang alamatnya cocok akan mengabaikan transmisi dari mater dan
menunggu sampai alamatnya cocok. Setelah mendapatkan slave yang alamatnya
cocok, master sekarang harus mengirim lokasi internal dari nomor register pada
slave yang akan dibaca atau ditulis oleh master. Kita dapat mengetahui nomor
registernya pada datasheet perangkat/modul. Contohnya CMPS03 mempunyai 16
lokasi (0-15) dan SRF08 mempunyai 36.
Setelah mendapat slave yang alamatnya cocok dan alamat internal register
yang dituju, maka master dapat mulai mengirim data per 8bit (1 byte). Jika slave
sudah mengacknowledged (ACK=0) setelah pengiriman 1 byte data, maka master
dapat mengirim 1 byte data selanjutnya dan proses akan berulang. Data secara
otomatis akan ditempatkan pada internal register selanjutnya (tidak menumpuk
data yang sudah terkirim) karena slave akan mengincrement alamat register
internal setelah menerima 1 byte data. Ketika master sudah selesai menulis
25
seluruh data ke slave, maka master akan mengirim stop sequence yang
mengakhiri transaksi data.
Jadi untuk menulis ke perangkat slave, urutannya adalah:

Mengirim start sequence

Mengirim alamat I2C dari slave dengan bit R/W low (alamat genap)

Mengirim alamat dari internal register yang ingin ditulisi data

Mengirim byte data

Jika data belum tertulis semua, setelah Slave mengirim ACK=0 maka byte
data berikutnya dikirim

Mengirim stop sequence
Untuk contohnya adalah mengirim data ke SRF08, untuk memulai pengukuran
jarak kita harus mengirim perintah 0×51 ke register perintah di alamat 0×00.
Sehingga urutannya:

Mengirim start sequence

Mengirim 0xE0 (alamat I2C dari SRF08 dengan bit R/W low)

Mengirim 0×00 (alamat dari register perintah internal)

Mengirim 0×51 (perintah untuk memulai pengukuran jarak SRF08)

Mengirim stop sequence
2.10.8 Membaca dari Slave
Untuk membaca dari slave, prosesnya sedikit lebih rumit. Sebelum
membaca dari perangkat slave, kita harus memberitahu alamat register internal
mana yang ingin kita baca. Jadi proses pembacaan dari slave juga akan diawali
dengan menulis ke slave dahulu. Jadi awalnya sama saja, kita mengirim start
sequence, alamat I2C dari slave dengan bit R/W low dan alamat internal register
yang kita tulisi. Kemudian kita mengirim kembali sebuah start sequence (restart),
kembali mengirim alamat I2C, kali ini dengan bit terakhir=1 (bit read) dan alamat
internal register yang ingin kita baca. Kemudian kita membaca byte data
sebanyak yang kita inginkan sampai kita mengakhiri transmisi dengan stop
sequence.
26
Jadi untuk membaca arah kompas dalam bentuk byte dari modul CMPS03
urutannya adalah:

Mengirim start sequence

Mengirim 0xC0 ( alamat I2C dari CMPS03 dengan bit R/W low atau
menulis)

Mengirim 0×01 ( alamat register internal dari arah kompas)

Mengirim start sequence lagi

Mengirim 0xC1 ( alamat I2C dari CMPS03 dengan bit R/W high atau
baca)

Membaca byte data dari CMPS03

Mengirim stop sequence.
Gambar 2.19 Contoh pembacaan data dari slave
Download