BAB II

advertisement
BAB II
TEORI PENUNJANG
2.1 Mikrokontroler
2.1.1 Gambaran Umum
Microcontroller pada dasarnya adalah rangkaian terintregrasi (Integrated Circuit-IC)
yang telah mengandung secara lengkap berbagai komponen pembentuk sebuah computer atau
sebagai sebuah “one chip solution”. Berbeda dengan penggunaan microprocessor yang masih
memerlukan komponen luar tambahan seperti RAM, ROM, Timer, dan sebagainya untuk
sistem microcontroller, tambahan komponen diatas secara praktis hampir tidak dibutuhkan
lagi. Hal ini disebabkan semua komponen penting tersebut telah ditanam bersama dengan
sistem prosesor ke dalam IC tunggal microcontroller bersangkutan. Dengan alasan itu sistem
microcontroller dikenal juga dengan istilah populer the real Computer On a Chip-komputer
utuh dalam keping tunggal, sedangkan sistem microprocessor dikenal dengan istilah yang
lebih terbatas yaitu Computer On a Chip-komputer dalam keping tunggal.
2.1.2 Mikrokontroler AVR ATmega 16
AVR merupakan seri mikrokontroler CMOS 8-bit buatan Atmel, berbasis arsitektur
RISC (Reduced Instruction Set Computer) yang ditingkatkan. Hampir semua instruksi
dieksekusi dalam satu siklus clock. AVR mempunyai 32 register general-purpose,
timer/counter fleksibel dengan mode compare, interrupt internal dan eksternal, serial UART,
programmable Watchdog Timer, dan mode power saving. Mempunyai ADC dan PWM
internal. AVR juga mempunyai In-System Programmable Flash on-chip yang mengijinkan
memori program untuk diprogram ulang dalam sistem menggunakan hubungan serial SPI.
ATmega16 adalah mikrokontroler CMOS 8-bit daya-rendah berbasis arsitektur RISC yang
ditingkatkan.
Gambar 2.1 Blok Diagram Arsitektur ATmega16
2.1.3 Konfigurasi Pin AVR ATmega 16
Pin-pin pada ATmega16 dengan kemasan 40-pin DIP (dual inline package)
ditunjukkan oleh gambar 2.2. Kemasan pin tersebut terdiri dari 4 Port yaitu Port A, Port B,
Port C,Port D yang masing masing Port terdiri dari 8 buah pin. Selain itu juga terdapat
RESET, VCC, GND 2 buah, VCC, AVCC, XTAL1, XTAL2 dan AREF.
Gambar 2.2 Pin-pin ATmega16 kemasan 40-pin
Diskripsi dari pin-pin ATmega 16 adalah sebagai berikut :
1. VCC : Supply tegangan digital.
2. GND : Ground
3. Port A : Port A sebagai input analog ke A/D konverter. Port A juga sebagai 8-bit bidirectional port I/O, jika A/D konverter tidak digunakan. Pin-pin port dapat menyediakan
resistor-resistor internal pull-up. Ketika port A digunakan sebagai input dan pull eksternal
yang rendah akan menjadi sumber arus jika resistor-resistor pull-up diaktifkan. Pin-pin
port A adalah tri-state ketika kondisi reset menjadi aktif sekalipun clock tidak aktif.
4. Port B :Port B adalah port I/O 8-bit bi-directional dengan resistor-resistor internal pull-up.
Buffer output port B mempunyai karaketristik drive yang simetris dengan kemampuan
keduanya sink dan source yang tinggi. Sebagai input, port B yang mempunyai pull
eksternal yang rendah akan menjadi sumber arus jika resistor-resistor pull-up diaktifkan.
Pin-pin port B adalah tri-state ketika kondisi reset menjadi aktif sekalipun clock tidak
aktif.
5. Port C : Port C adalah port I/O 8-bit bi-directional dengan resistor-resistor internal pull-up.
Buffer output port C mempunyai karaketristik drive yang simetris dengan kemampuan
keduanya sink dan source yang tinggi. Sebagai input, port C yang mempunyai pull
eksternal yang rendah akan menjadi sumber arus jika resistor-resistor pull-up diaktifkan.
Pin-pin port C adalah tri-state ketika kondisi reset menjadi aktif seklipun clock tidak aktif.
Jika antarmuka JTAG enable, resistor-resistor pull-up pada pin-pin PC5(TDI), PC3(TMS),
PC2(TCK) akan diktifkan sekalipun terjadi reset.
6. Port D : Port D adalah port I/O 8-bit bit-directional dengan resistor-resistor internal pullup. Buffer output port D mempunyai karaketristik drive yang simetris dengan kemampuan
keduanya sink dan source yang tinggi. Sebagai input, port D yang mempunyai pull
eksternal yang rendah akan menjadi sumber arus jika resistor-resistor pull-up diaktifkan.
Pin-pin port D adalah tri-state ketika kondisi reset menjadi aktif seklipun clock tidak aktif.
7. Reset : Sebuah low level pulsa yang lebih lama daripada lebar pulsa minimum pada pin ini
akan menghasilkan reset meskipun clock tidak berjalan.
8. XTAL1 : Input inverting penguat Oscilator dan input internal clock operasi rangkaian.
9. XTAL2 : Output dari inverting penguat Oscilator.
10. AVCC : Pin supply tegangan untuk PortA dan A/D converter. Sebaiknya eksternalnya
dihubungkan ke VCC meskipun ADC tidak digunakan. Jika ADC
digunakan seharusnya dihubungkan ke VCC melalui low pas filter.
11. AREF : Pin referensi analog untuk A/D konverter.
2.1.4 Struktur Memori
AVR menggunakan arsitektur Harvard (dengan memori dan bus terpisah untuk
program dan data). Instruksi pada memori program dieksekusi dengan pipelining single level.
saat sebuah instruksi sedang dikerjakan, instruksi berikutnya diambil dari memori program.
1. Flash Memori
ATmega16 memiliki 16K byte flash memori dengan lebar 16 atau 32 bit. Kapasitas
memori itu sendiri terbagi manjadi dua bagian yaitu bagian boot program dan bagian
aplikasi program.
Gambar 2.3 Peta Memori Flash
Flash memori memiliki kemampuan mencapai 10.000 write dan erase.
2. Memori SRAM
Penempatan memori data yang lebih rendah dari 1120 menunjukkan register, I/O
memori, dan data internal SRAM. 96 alamat memori pertama untuk file register dan memori
I/O, dan 1024 alamat memori berikutnya untuk data internal SRAM. Lima mode
pengalamatan yang berbeda pada data memori yaitu direct, indirect, indirect dis-placement,
indirect pre-decreament dan indirect post-increament .Pada file register, mode indirect mulai
dari register R26-R31. Pengalamatan mode direct mencapai keseuruhan kapasitas data.
Pengalamatan mode indirect dis-placement mencapai 63 alamat memori dari register X atau
Y. Ketika meggunakan mode pengalamatan indirect dengan pre-decrement dan post
increment register X, Y, dan Z akan di-dicrement-kan atau di-increment-kan. Pada
ATmega16 memiliki 32 register, 64 register I/O dan 1024 data internal SRAM yang dapat
mengakses semua mode-mode pengalamatan.
Gambar 2.4 Peta Memori SRAM
3. Memori EEPROM
Pada EEPROM ATmega16 memiliki memori sebesar 512 byte dengan daya tahan
100.000 siklus write/read. Register-register pada memori EEPROM :
•
Bit 15..9 – Res:reserved bits
Bit ini sebagai bit-bit bank pada ATmega16 dan akan selalu membaca zero.
Gambar 2.5 Register alamat EEPROM Bit 15-8
•
Bit 8..0 – EEAR8..0:EEPROM address
Bit-bit ini sebagai alamat EEPROM.
•
Bit 7..0 – EEDR7..0:EEPROM data
Bit-bit ini sebagai data EEPROM.
Gambar 2.6 Register data EEPROM Bit Bit 7…0
•
Bit 7..4 – Res:reserved bits
Bit-bit ini terdapat pada register kontrol.
Bit ini sebagai Enable Interupt Ready pada EEPROM.
Gambar 2.7 Register kontrol EEPROM Bit Bit 7….0
•
Bit 2
Bit ini sebagai Enable Interupt Master pada EEPROM.
•
Bit 1
Bit ini sebagai write enable pada EEPROM.
•
Bit 0
Bit ini sebagai read enable pada EEPROM.
2.1.5 Interupt
Tabel 2.1 Interupt vektor
2.1.6 Port sebagai input/output digital
ATmega16 mempunyai empat buah port yaitu PortA, PortB, PortC, dan PortD.
Keempat port tersebut merupakan jalur bidirectional dengan pilihan internal pull-up. Tiap
port mempunyai tiga buah register bit, yaitu DDxn, PORTxn, dan PINxn. Huruf ‘x’mewakili
nama huruf dari port sedangkan huruf ‘n’ mewakili nsomor bit. Bit DDxn terdapat pada I/O
address DDRx, bit PORTxn terdapat pada I/O address PORTx, dan bit PINxn terdapat pada
I/O address PINx. Bit DDxn dalam regiter DDRx (Data Direction Register) menentukan arah
pin. Bila DDxn diset 1 maka Px berfungsi sebagai pin output. Bila DDxn diset 0 maka Px
berfungsi sebagai pin input. Bila PORTxn diset 1 pada saat pin terkonfigurasi sebagai pin
input, maka resistor pull-up akan diaktifkan.
Tabel 2.2 Konfigurasi pin Port
Bit 2 – PUD : Pull-up Disable
Bila bit diset bernilai 1 maka pull-up pada port I/O akandimatikan walaupun register
DDxn dan PORTxn dikonfigurasikan untuk menyalakan pull-up (DDxn=0, PORTxn=1).
2.1.7 Port sebagai Analag Digital Converter (ADC)
ATmega16 memiliki fitur ADC (Analog to Digital Converter) pada internal kaki
PINA yang mengacu pada pada datasheet :
•
10-bit Resolution
•
65 - 260 µs Conversion Time
•
Up to 15 kSPS at Maximum Resolution
•
8 Multiplexed Single Ended Input Channels
•
Optional Left Adjustment for ADC Result Readout
•
0 - VCC ADC Input Voltage Range
•
Selectable 2.56V ADC Reference Voltage
•
Free Running or Single Conversion Mode
•
ADC Start Conversion by Auto Triggering on Interrupt Sources
•
Interrupt on ADC Conversion Complete
•
Sleep Mode Noise Canceler
Register-register yang dipakai untuk mengakses ADC adalah:
1. ADMUX – ADC Multiplexer Selection Register
Gambar 2.8 Register ADMUX
•
Bit 7:6 – REFS1:0 : Bit Pemilih tegangan referensi
Bit ini berfungsi untuk memilih tegangan referensi ADC yang tertera pada table
dibawah ini.
Tabel 2.3 Bit pemilih tegangan ref
•
Bit 5 – ADLAR : ADC Left Adjust Result
•
Bit 4:0 – MUX4:0 : Bit pemilih Analog Channel dan Gain
2. ADCSRA – ADC Control and Status Register
Gambar 2.9 Register ADCSRA
•
Bit 7 – ADEN : ADC Enable
Diisi 1 untuk mengaktifkan ADC, diisi 0 untuk mematikan ADC sekaligus
memberhentikan konversi yang sedang berlangsung.
•
Bit 6 – ADSC : ADC Start Conversion
Pada mode single-conversion, set bit ini untuk memulai tiap konversi. Pada mode
free-running, set bit ini untuk konversi pertama kalinya.
Bit ADSC bila dibaca akan bernilai 1 selama proses konversi, dan bernilai 0 bila
konversi selesai. Mengisi bit ini dengan nilai 0 tidak akan mempunyai dampak.
•
Bit 5 – ADATE : ADC Auto Trigger Enable
Bila bit ini diisi 1 maka auto trigger ADC akan diaktifkan. ADC akanmemulai
konversi pada saat tepi positif dari sumber sinyal trigger yang dipilih. Sumber sinyal
trigger ditentukan dengan menseting bit ADTS pada register SFIOR.
•
Bit 4 – ADIF : ADC Interrupt Flag
Bit ini akan bernilai 1 pada saat ADC selesai mengkonversi dan Data register telah
diupdate. ADC Conversion Complete Interrupt akan dijalankan bila bit ADIE dan bit-
I pada register SREG diset 1. ADIF akan di-clear secara hardware bila mengerjakan
penanganan vector interrupt yang bersesuaian. Alternatifnya, ADIF dapat di-clear
dengan menuliskan 1. Hati-hati bila bekerja dengan Read-Modify-Write pada
ADCSRA, interrupt yang tertunda dapat dinonaktifkan/batal. Hal ini juga berakibat
sama bila instruksi SBI dan CBI digunakan.
•
Bit 3 – ADIE : ADC Interrupt Enable
Mengisi bit ini dan bit-I pada register SREG menjadi 1 akan mengaktifkan ADC
Conversion Complete Interrupt.
•
Bit 2:0 – ADPS2:0 – Bit pemilih ADC Prescaler
Menentukan bilangan pembagi antara sumber clock XTAL ke clock ADC.
3. ADCL, ADCH – ADC data register
•
Bila ADLAR = 0
Gambar 2.10 Register ADCLAR = 0
•
Bila ADLAR = 1
Gambar 2.11 Register ADCLAR = 1
4. SFIOR – Special Function I/O Register untuk sumber auto trigger
Gambar 2.12 Register SFIOR
Dengan konfigurasi seperti dibawah maka dapat memilih mode start ADC, ADC akan
konversi ketika berdasarkan mode yang dipilih.
Tabel 2.4 Pemilihan scaning ADC
•
Bit 7:5 – ADTS2:0 : ADC Auto Trigger Source Bila ADATE dalam register
ADCSRA diset 1, maka nilai dalam bitbit ini akan menentukan sumber mana yang
akan mentrigger konversi ADC. Bila bit ADATE bernilai 0, maka bit-bit ini tidak
akan mempunyai efek. Sebuah konversi ditrigger oleh sinyal rising-edge dari interrupt
flag yang dipilih. Perlu diingat bahwa memindah sumber trigger yang di-clear ke
sumber trigger lain yang di-set akan menyebabkan positive-edge pada sinyal trigger.
Bila ADEN dalam register ADCSRA diset, juga akan memulai konversi. Memindah
mode ke mode freerunning tidak akan menyebabkan pulsa trigger, meskipun bila flag
interrupt ADC diset.
•
Bit 4 – RES : Reserved bit
Bit cadangan, bila dibaca hasilnya nol.
2.1.8 Timer
Timer/couter adalah tujuan umum single channel, module 8 bit timer/counter.
Beberapa fasilitas chanel dari timer counter antara lain:
•
Counter channel tunggal
•
Pengosongan data timer sesuai dengan data pembanding
•
Bebas -glitch, tahap yang tepat Pulse Width Modulator (PWM)
•
Pembangkit frekuensi
•
Event counter external
.
Gambar 2.13 Blok diagram timer/counter
Gambar diagram block timer/counter 8 bit ditunjukan pada gambar di bawah ini.
Untuk penempatan pin I/O telah di jelaskan pada bagian I/O di atas. CPU dapat diakses
register I/O, termasuk dalam pinpin I/O dan bit I/O. Device khusus register I/O dan lokasi bit
terdaftar pada deskripsi timer/counter 8 bit pada gambar 2.33
3. Register Timer/Counter TCNT0
Gambar 2.14 Register timer TCNT0
Register timer/counter memberikan akses secara langsung, keduanya digunakan untuk
membaca dan menulis operasi, untuk penghitung unit 8-bit timer/counter. Menulis ke blokblok register TCNT0 ( removes ) disesuaikan dengan clock timer berikutnya. Memodifikasi
counter ( TCNT0 ) ketika perhitungan berjalan, memperkenalkan resiko kehilangan
perbandingan antara TCNC0 dengan register OCR0.
4. Register Timer/Counter OCR0
Gambar 2.15 Register timer OCR0
Register output pembanding berisi sebuah haraga 8 bit yang mana secara terusmenerus dibandingkan dengan harga counter ( TCNT0 ). Sebuah penyesuaian dapat
digunakan untuk membangkitkan output intrrupt pembanding, atau untuk membangkitakan
sebuah output bentuk gelombang pada pin OC0.
5. Register Timer/Counter Interrupt Mask
•
Bit 1 – OCIE0: outpu timer counter menyesuaikan dengan kesesuaian interrupt yang
aktif. Ketika bit OCIE0 ditulis satu, dan I-bit pada register status dalam kondisi set
(satu), membandingkan timer/counter pada interrupt yang sesuai diaktifkan.
Mencocokkan interrupt yang dijalankan kesesuaian pembanding pada timer/counter0
terjadi, ketika bit OCF0 diset pada register penanda timer/counter-TIFR.
•
Bit 0 – TOIE0: Timer/Counter 0 Overflow Interrupt Enable. Ketika bit TOIE0 ditulis
satu, dan I-bit pada register status dalam kondisi set ( satu ), timer/counter melebihi
interrupt diaktifkan. Mencocokkan interrupt dijalankan jika kelebihan pada
timer/counter0 terjadi, ketika bit TOV0 diset pada register penanda timer/counterTIFR.
6. Register Timer/Counter Register – TIFR
Gambar 2.16 Register timer TIFR
•
Bit 1 – OCF0: Output Compare Flag0. OCF0 dalam kondisi set ( satu ) kesesuaian
pembanding terjadi antara timer/counter dan data pada OCRO – Register 0 keluaran
pembanding. OCF0 diclear oleh hardware ketika eksekusi pencocokan penangan
vector interrupt. Dengan alternatif mengclearkan OCF0 dengan menuliskan logika
satu pada flag. Ketika I-bit pada SREG, OCIE0 (Timer/Counter0 penyesuaian
pembanding interrupt enable), dan OCF0 diset (satu ), timer/counter pembanding
kesesuaian interrupt dijalankan.
•
Bit 0 – TOV0: Timer/Counter Overflow Flag. Bit TOV0 di ser ( satu ) ketika
kelebihan terjadi pada timer/counter0. TOV0 diclearkan dengan hardware ketika
penjalanan pencocokan penanganan vector interrupt. Dengan alternatif, TOV0
diclearkan dengan jalan memberikan logika satu pada flag. Ketika I-bit pada SREG,
TOIE0 ( Timer/Counter0 overflow interrupt enable), dan TOV0 diset ( satu ),
timer/counter overflow interrupt dijalankan. Pada tahap mode PWM yang tepat, bit ini
di set ketika timer/counter merubah bagian perhitungan pada $00.
2.2 Bahasa Pemograman
2.2.1 Sejarah Bahasa C
Bahasa C merupakan bahasa aras tinggi yang ditemukan oleh Dennis Ritchie dari Bell
Telephone Laboratories Inc. (sekarang adalah AT&T Bell Laboratories) pada tahun 1972.
Awalnya bahasa C merupakan perkembangan dari bahasa B yang dikembangkan oleh Ken
Thompson pada tahun 1970 dan merupakan pengembangan dari bahasa BPCL yang
ditemukan oleh Martin Richard pada tahun 1967. Bahasa C pertamakali digunakan didalam
Computer Digital Equipment Corporation PDP-11 menggunakan sistem operasi UNIX.
Hingga saat ini penggunaan bahasa C telah merata digunakan di seluruh dunia.
C adalah bahasa yang standar, artinya suatu program yang ditulis dengan bahasa C tertentu
akan dapat dikonversi dengan bahasa C yang lain dengan sedikit modifikasi. Standar bahasa
C yang asli adalah standar dari UNIX. Patokan dari standar UNIX ini diambil dari buku yang
ditulis oleh Brian Kerningan dan Dennis Ritchie berjudul “The C Programming
Language”, diterbitkan oleh Prentice-Hall tahun 1978 Deskripsi C dari Kerninghan dan
Ritchie ini kemudian kemudian dikenal secara umum sebagai “K dan R C”.
Penggunaan bahasa
C sangat efisien terutama untuk program microcontroller yang
berukuran relatif besar. Dibandingkan dengan bahasa assembler, penggunaan bahasa C dalam
pemrograman memiliki beberapa
kelebihan yaitu mempercepat waktu pengembangan,
bersifat modular dan terstruktur, sedangkan kelemahannya adalah kode program hasil
kompilasi akan relative lebih besar (dan sebagai konsekuensinya hal ini terkadang akan
mengurangi kecepatan eksekusi).
2.2.1.1Strktur Dasar Bahasa C
A. Identifier
Identifier (pengenal) merupakan sebuah nama yang didefinisikan untuk menunjukan identitas
dari sebuah variable, konstanta, fungsi, atau tipe data khusus. Pemberian nama harus
memenuhi aturan diantaranya :
•
Karakter perama tidak menggunakan angka
•
Tidak boleh menggunakan spasi
•
Case sensitive (huruf kapital dan huruf kecil dianggap berbeda)
B. Header
Di dalam fungsi header berisi include file (.hex), yaitu library (pustaka) yang akan
digunakan dalam pemograman. File-file ini mempunyai cirri yaitu namanya diakhiri dengan
ekstensi .h. Misalnya pada program #include <stdio.h> menyatakan pada kompiler agar
membaca file bernama stdio.h saat pelaksanaan kompilasi. Bentuk umum #include.
Contoh:
#include <delay.h>
#include <delay.h>
#include <stdio.h>
Prepocessor (#): Digunakan untuk memasukkan (include) text dari file lain,
mendefinisikan macro yang dapat mengurangi beban kerja pemograman dan meningkatkan
legibility source code (mudah dibaca). Bentuk dari (#include <nama file>) memberikan
penjelasan pencarian file dilakukan pada direktori khusus (direktori file). Bentuk lain dari
header (#include “nama file”)
mengisyaratkan bahwa pencarian file terlebih dahulu
dilakukan pada direktori aktif tempat sumber program dan bila tidak ditemukan pencarian
akan dilanjutkan pada direktori lainnya yang sesuai dengan perintah pada sistem operasi.
C. Tipe Data
Data yang digunakan didalam bahasa pemograman C dibedakan menjadi data nilai
numerik dan nilai karakter. Tujuan data menjadi efisien dan efektif digunakan bahasa-bahasa
pemograman komputer yang membedakan data kedalam beberapa tipe. Dalam bahasa C
tersedia lima tipe data dasar, yaitu tipe data interger (nilai numeric bulat yang dideklarasikan
dengan int), floatingpoint (nilai numerik pecahan ketetapan tunggal yang dideklarasikan
dengan float), double-precision (nilai numerik pecahan ketetapan ganda yang dideklarasikan
dengan double).
Tabel 2.5 Tipe-tipe data dasar
Tipe
Ukuran (Bit)
Range
Bit
1
0,1
Char
8
-128 to 127
Unsigned Char
8
0 to 255
Signed Char
8
-128 to 127
Int
16
-32768 to 32767
Short int
16
-32768 to 32767
Unsigned int
16
0 to 65535
Signed int
16
-32768 to 32767
Long int
32
-2147483648 to 2147483647
Unsigned long int
32
0 to 4294967295
Signed long int
32
-2147483648 to 2147483647
Float
32
±1.175e-38 to ±3.402e38
Double
32
±1.175e-38 to ±3.402e38
Karakter (dideklarasikan dengan char), dan kosong (dideklarasikan dengan void).
Int,float, double dan char dapat dikombinasikan dengan pengubah (modifier) signed,
unsigned, long dan short. Hasil dari kombinasi tipe data ini dapat dilihat pada tabel.
D. Operator
Dalam suatu intruksi mengandung operator dan operand. Operator merupakan sebuah
simbol yang menyatakan operasi mana yang harus dilakukan oleh operand tersebut.
Sedangkan operand adalah variable atau konstanta yang merupakan bagian pernyataan.
Adatiga operand (a,b dan c) dan dua operator (= dan +). Operator dalam c dibagi menjadi 3
kelompok. Yaitu:
1. Unary
Operator yang beroperasi pada satu operand, missal:-n.
2. Binary
Operator yang beroperasi padaduaoperand, missal: a-n,
3. Ternary
Operator yang memerlukan tiga atau lebih operand, misal: a=(b*c)+d
E. Percabangan
Perintah if dan if…else…. dilakukan untuk melakukan operasi percabangan bersyarat.
Pernyataan if mempunyai bentuk umum :
if (kondisi) {
//pernyataan
};
Dalam contoh ini PORTC akan dikirim data 0x50 jika nilai a lebih kecil 0x08. Bentuk
ini menyatakan , Jika kondisi yang diseleksi adalah benar (bernilai logika = 1), maka
pernyataan yang mengikutinya akan diproses. Sebaliknya, jika kondisi yang diseleksi adalah
tidak benar (bernilai logika = 0), maka pernyataan yang mengikutinya tidak akan diproses.
Mengenai kodisi harus ditulis diantara tanda kurung, sedangkan pernyataan dapat berupa
sebuah pernyataan tunggal, pernyataan majemuk atau pernyataan kosong. Sedangkan
Pernyataan if - else memiliki bentuk :
if (kondisi) {
//pernyataan a
}
else {
//pernyataan b
};
Artinya adalah pernyataan a akan dijalankan jika kondisi terpenuhi dan pernyataan b akan
dijalankan jika kondisi tidak terpenuhi. dijalankan. Masing-masing pernyataan-a dan
pernyataan-b dapat berupa sebuah pernyataan tunggal, pernyataan majemuk ataupun
pernyataan kosong.
Perintah percabangan if….else..dapat digantikan dengan perintah switch. Dalam
pernyataan switch, sebuah variabel secara berurutan diuji oleh beberapa konstanta bilangan
bulat atau konstanta karakter. Sintaks perintah switch dapat ditulis sebagai berikut:
switch(variabel)
{
case konstanta_1:
case konstanta_2:
case konstanta_3:
default:
}
statement;
statement;
statement;
statement;
break;
break;
break;
F. Looping (Pengulangan)
Looping adalah perulangan satu atau beberapa perintah sampai mencapai keadaan tertentu.
Terdapat tiga perintah looping dalam Bahasa C, yaitu for, dan do...while... Sintaks loop for.
Struktur perulangan
for biasa digunakan untuk mengulang suatu proses yang telah diketahui jumlah
perulangannya.dapat dituliskan sebagai berikut:
Ekspresi umum pengulangan for:
for (awal; kondisi; counter) {
Statement1;
Statement2;
};
Statement3;
syarat_loop adalah pernyataan yang menyatakan syarat berhentinya pengulangan,
umumnya berkaitan dengan variabel control. Sedangkan perintah perulangan while dapat
melakukan looping apabila persyaratannya benar. Sintaks perintah while dituliskan sebagai
berikut:
variabel=nilai_awal;
while(syarat_loop)
{
Statement_yang_akan_diulang:
variabel++;
};
Perintah while terlebih dahulu melakukan pengujian persyaratan sebelum melakukan
looping. Perulangan yang belum diketahui berapa kali akan diulangi maka dapat
menggunakan while atau do while.Pada pernyatan while, pemeriksaan terhadap loop
dilakukan di bagian awal (sebelum tubuh loop). Pernyataan while akan diulangi terus
menerus selama kondisi bernilai benar, jika kondisinya salah maka perulangan dianggap
selesai.
variabel=nilai_awal;
while(syarat_loop)
{
Statement_yang_akan_diulang:
variabel++;
}
While(syarat_loop)
2.3 Sensor Ultrasonik
Sensor ultrasonik adalah sensor yang dapat mendeteksi objek solid dalam range 3 –
300 cm dengan cukup presisi tanpa kontak fisik. Sensor yang digunakan adalah sensor
ultrasonik PING))). Sensor ini terdiri atas sebuah transduser ultrasonik transmitter yang
berfungsi mengirimkan gelombang suara dengan frekuensi 40 kHz, dan sebuah transduser
ultrasonik receiver yang berfungsi untuk menangkap pantulan gelombang suara yang
dikirimkan oleh ultrasonik trasmitter.
Metoda yang digunakan adalah time of flight (waktu yang dibutuhkan gelombang
ultrasonik untuk melakukan perjalanan pergi dan kembali). Unit kontrol akan mengirimkan 8
siklus gelombang ultrasonik 40 kHz atau selama 200 µs. Kemudian unit kontrol akan mulai
menghitung waktu dengan menjalakan timer sambil mendeteksi gelombang pantul datang.
Ketika gelombang pantul terdeteksi, unit kontrol akan mematikan timer sebagai tanda bahwa
gelombang telah melakukan perjalanan pergi dan pulang. Waktu antara gelombang dikirim
dan gelombang diterima inilah yang digunakan untuk mengukur jarak, besarnya jarak dapat
diketahui dengan persamaan :
s=
v×t
2
dimana s = jarak hasil pengukuran, v = kecepatan gelombang suara di udara dan t = waktu
antara gelombang dikirim dan diterima. Data jarak 8-bit akan dikirimkan ke prosesor utama,
kemudian unit kontrol ultrasonik akan menginterupsi prosesor utama melalui IRQ1 (Interrupt
Request 1) sebagai tanda pengukuran jarak yang dilakukan sensor ultrasonik telah selesai dan
data siap diambil.
Gambar 2.17 Ilustrasi sensor Ultrasonik
2.4
Liquid Crsytal Display (LCD)
Display LCD 2x16 berfungsi sebagai penampil nilai yang terbaca oleh
penilaian sensor. LCD yang digunakan pada alat ini mempunyai lebar display 2 baris
16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor,
yang didifinisikan sebagai berikut:
Tabel 2.6 Konfigurasi pin LCD
Urutan pin (1), umumnya dimulai dari sebelah kiri (terletak di pojok kiri atas) dan untuk LCD
yang memiliki 16 pin, dua pin terakhir (15 & 16) adalah anoda dan katoda untuk backlighting.
2.5 Flame Sensor Detector
Sensor dengan sensitivitas yang cukup baik dalam mendeteksi keberadaan api
maksimum hingga 20 cm dengan sudut kemiringan 60°.Input tegangannya adalah 5 Volt
DC.Flame Sensor akan mulai bekerja dengan temperatur mulai dari 25°C sampai dengan
85°C.
Gambar 2.18 Flame Sensor
Download