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. http://digilib.mercubuana.ac.id/ 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. http://digilib.mercubuana.ac.id/ 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. http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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- http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ • 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ • 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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; http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/ 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 http://digilib.mercubuana.ac.id/