Bab 2. Dasar Teor
2.5 Getar HP (Vibrator)
Vibrator merupakan motor kecil listrik (dinamo) yang mempunyai bandul tidak seimbang. Disaat bandul tersebut berputar dengan cepat, maka akan menghasilkan getaran lembut yang akan terasa oleh manusia.
2.5.1 Sifat Dasar Getaran
Getaran adalah gerakan bersosialisasi dan sistem mekanis serta kondisi-kondisi dinamisnya. Gerakan ini dapat berupa gerakan beraturan dan berulang secara kontinyu atau dapat juga berupa gerakan tidak beraturan atau acak. Umumnya getaran ditimbulkan akibat adanya gaya yang juga bervariasi dengan waktu. Meskipun pengertian getaran selalu dikaitkan dengan osilasi mekanis, pengertian yang sama juga terdapat pada bidang lain, seperti gelombang elektromagnetik, akustik dan arus listrik bolak-balik. Kadang-kadang suatu kondisi interaksi antara masalah yang berbeda terjadi, misalnya, getaran mekanis menyebabkan osilasi listrik atau sebaliknya. Supaya getaran mekanis terjadi, dibutuhkan minimal dua elemen pengumpul energi.
2.5.2 Sistem dan Gerakan Getaran
Supaya getaran mekanis terjadi, dibutuhkan minimal dua elemen pengumpul energi. Yang pertama adalah massa yang menyimpan energi kinetik dan yang kedua adalah alat elastik seperti pegas yang menyimpan energi potensial. Satu gerakan penuh dari gerak berulang disebut satu siklus. Waktu yang dibutuhkan untuk satu siklus gerakan disebut perioda. Jumlah gerakan berulang yang terjadi salah satu unit waktu disebut frekuensi. Sistem getaran dapat juga mengalami hambatan atau resistansi oleh gesekan udara, peredaman kejutan (shockabsorber) serta dari elemen disipasi lainnya. Resistensi ini umumnya dikenal sebagai redaman. Sistem getaran yang mempunyai damping dikenal sebagai sistem teredam.
Buzzer adalah sebuah komponen elektronika yang berfungsi untuk mengubah getaran listrik menjadi getaran suara. Buzzer terdiri dari kumparan yang terpasang pada diafragma dan kemudian kumparan tersebut dialiri arus sehingga menjadi elektromagnet, kumparan tadi akan tertarik ke dalam atau keluar, tergantung dari arah arus dan polaritas magnetnya, karena kumparan dipasang pada diafragma maka setiap gerakan kumparan akan menggerakkan diafragma secara bolak-balik sehingga membuat udara bergetar yang akan menghasilkan suara. Buzzer biasa digunakan sebagai indikator bahwa proses telah selesai atau terjadi suatu kesalahan pada sebuah alat (alarm). Simbol buzzer dan bentuk buzzer adalah sebagai berikut:
(a) (b)
Gambar 2.10 (a) Simbol buzzer, (b) Bentuk Buzzer
2.7 Bahasa Pemrograman C
Software atau perangkat lunak merupakan salah satu komponen utama dalam sistem mikrokontroler. Kerja mikrokontroler bergantung dari software yang telah ditanam di dalam memorinya. Software mikrokontroler berupa rangkaian instruksi yang deprogram sesuai keinginan programmer.
2.7.1 Deskripsi Bahasa C
Bahasa C termasuk dalam bahasa tingkat tinggi yang instruksinya mudah untuk dipahami. Bahasa ini banyak digunakan dalam pemrograman komputer untuk membuat software perkantoran, database, antarmuka computer dengan perangkat tambahan, serta
banyak aplikasi lainnya. Mikrokontroler bukan hanya punya bahasa assembler. Mikrokontroler juga bisa diprogram menggunakan bahasa C karena saat ini telah banyak mikrokontroler yang mempunyai compiler bahasa C. Compiler inilah yang menerjemahkan bahasa C menjadi Object Code untuk didownload ke ROM mikrokontroler.
Beberapa keuntungan pengguna bahasa C dibandingkan bahasa assembler yaitu:
a. Lebih cepat dalam implementasi software karena operasi yang panjang dengan bahasa assembler bisa ditulis lebih pendek dan lebih mudah dengan bahasa C.
b. Instruksi bahasa C tidak sebanyak assembler dan mudah diingat.
c. Kita tidak disibukkan dengan pengalokasian variabel ke register-register mikrokontroler. d. Program yang sama bisa digunakan oleh banyak tipe mikrokontroler karena banyak vendor yang membuat compiler C.
e. Alur program lebih mudah dipahami dan dimodifikasi bahkan oleh programmer lain. f. Banyak orang yang mengembangkan software dengan bahasa C sehingga banyak referensi program bila dibutuhkan.
g. Bahasa C bisa dikombinasikan dengan bahasa assembler bila dibutuhkan.
2.7.2 Syntax Dalam C
Perlu diingat bahwa syntax atau penulisan statement (pernyataan) dalam bahasa C menganut case sensitive artinya mengenal perbedaan huruf besar dan huruf kecil (a A) kecuali dalam penulisan angka heksadesimal. Penulisan dalam bahasa C bisa dibagi menjadi beberapa bagian yaitu:
a. Konstanta dan Variabel, e. Fungsi. b. Komentar,
c. Ekspresi,
A. Konstanta dan Variabel
Konstanta adalah nilai yang tidak pernah berubah, sebaliknya variabel dapat berubah- ubah nilainya saat program dieksekusi. Pada pernyataan berikut: Angka1 = 33. Angka1 adalah variabel sedangkan 33 adalah kostanta. Penulisan kostanta bisa dalam format desimal (basis 10), biner (basis 2), heksadesimal (basis 16), ataupun oktal (basis 8). Penulisan angka desimal seperti yang sudah biasa digunakan dalam pernyataan aritmetika yaitu langsung menuliskan angkanya tanpa awalan. Format biner yang hanya mengenal angka 0 dan 1, penulisannya pada beberapa compiler diawali dengan 0b, contoh: AngkaBiner = 0b01101001. Dengan format desimal AngkaBiner bernilai 105.
Angka dalam format hexadesimal penulisannya diawali dengan 0x, bilangannya dari 0 sampai 15, yang mana untuk angka 10 sampai 15 diwakili dengan abjad A sampai F, contoh: AngkaHexa = 0x1C. Dalam format desimal AngkaHexa diatas bernilai 28. Format oktal penulisannya diawali dengan angka 0, bilangannya dari 0 sampai 7
AngkaOktal = 011
Dalam format desimal AngkaOktal di atas bernilai 9. Cara untuk mengubah format angka dalam basis biner, oktal, desimal, dan heksadesimal dijabarkan lebih jauh dalam lampiran A. Selain berupa angka, konstanta dapat ditulis dalam bentuk karakter yang kemudian oleh compiler akan diubah menjadi angka sesuai nilainya dalam tabel ASCII. Penulisan karakter sebagai konstanta diawali dan diakhiri dengan ‘ (aphostrop), contoh: Huruf_Awal = ‘A’. Menurut tabel ASCII, huruf A mempunyai nilai desimal 65 (0x41), jadi pernyataan diatas sama dengan Huruf_Awal = 65. Selain konstanta, variabel dapat juga diisi dengan variabel yang lain, contoh: Angka_Pertama = 1
Variabel harus dideklarasikan dahulu sebelum kita gunakan. Deklarasi variabel meliputi nama dan tipe variabel. Berdasar tipe variabelnya compiler kemudian dapat mengalokasikan seberapa banyak memori yang diperlukan.
Tabel 2.1 Macam - Macam Tipe Data Dasar dalam C
Tipe Data Range Nilai Alokasi Memori
unsigned char 0 .. 255 1 Byte char (signed char) -128 .. 127 1 Byte
unsigned int 0 .. 65535 2 Byte int (signed int) -32768 .. +32767 2 Byte Unsigned short 0 .. 65535 2 Byte Short (signed short) -32768 .. +32767 2 Byte Unsigned long 0 .. 4294967295 4 Byte Long (signed long) 147483648 .. +2147483647 4 Byte Float 3.402E+38 .. +3.402E+38 4 Byte double* .797E+308 .. +1.797E+308 8 Byte
* pada beberapa compiler hanya mendukung sampai tipe float
Pendeklarasian variabel mempunyai format sebagai berikut: tipe_data Nama_Variabel;
atau untuk variabel yang punya tipe data sama, dapat ditulis: tipe_data Nama_Variabel1, Nama_Variabel2;
Nama_Variabel dapat kita tentukan sembarang asalkan tidak mengandung:
a. ‘ ‘ (spasi), ‘.’ (titik), ‘ (aphostrop), *, @, #, ?, dan lain sebagainya kecuali _(garis bawah).
c. Operator – operator C. d. Keyword bahasa C.
Jangan lupa menuliskan ‘;’ pada akhir deklarasi. Pilihlah nama variabel yang mencerminkan kegunaan dari variabel tersebut sehingga mudah diingat fungsinya.
Dalam memilih tipe data kita harus perhatikan nilai maksimum dan minimum yang mungkin disimpan dalam variabel tersebut. Jika melibatkan operasi aritmetika dengan bilangan positif saja kita pilih tipe unsigned tetapi untuk menyimpan angka negatif kita pilih tipe signed. Tipe data signed biasanya tidak disertakan saat deklarasi jadi cukup char atau int saja. Jika variabel diisi angka yang lebih besar dari nilai maksimum tipe datanya maka hitungan angka di atas nilai maksimum akan dilanjutkan dari 0 lagi. Contoh:
unsigned char Angka1 = 300; unsigned int Angka2 = 65536;
Variabel Angka1 berisi 44 (300 – 256), sedang variabel Angka2 berisi 0 (65536 – 65536). Tipe data yang mengenal bilangan negatif (char dan int) menggunakan MSB (Most Significant Bit) sebagai tanda bilangan negatif. Tipe char terdiri atas 8 bit (bit 7 sampai bit 0) dengan bit ke 0 sebagai LSB, jika bit ke 7 bernilai 1 berarti bilangannya negative. Contoh: Char bilangan_bulat = -1;
Jika bilangan_bulat ditulis dalam format biner nilainya adalah 0b11111111 atau 0xFF. Dalam hal ini tentu saja format desimal lebih mudah untuk kita mengerti. Untuk mengubah angka positif menjadi negatif dalam format biner langkah-langkahnya adalah:
1. Komplemenkan tiap bit dalam angka tersebut, missal untuk angka 1 (0b00000001) komplemennya adalah 0b11111110.
2. Tambah hasil komplemen tersebut dengan 1. Untuk angka 1 diatas setelah ditambah 1 hasil akhirnya adalah 0b11111111.
Jika kita salah memilih tipe signed atau unsigned maka hasil operasi aritmetikanya bisa jadi salah arti. Contoh:
char input = -5; unsigned char output; output = input + 2;
Jika nilai output diuji apakah lebih besar atau kurang dari 0 maka jawabannya adalah output lebih besar dari 0. Penyebabnya adalah karena output bertipe unsigned char sehingga -3 (0xFD) diartikan 253, Bit ke-7 tidak berfungsi sebagai tanda bilangan negatif. Sebuah konstanta dapat juga dideklarasikan dengan nama tertentu. Deklarasi konstanta mirip deklarasi variabel berikut inisialisasinya ditambah keyword const di depannya. Dalam pemrograman nama konstanta digunakan untuk menggantikan nilai konstanta yang sebenarnya. Keuntungan dari pendeklarasian sebuah konstanta adalah saat ada koreksi nilai konstanta maka kita cukup memodifikasi di satu tempat yaitu deklarasinya saja.
B. Komentar
Komentar berfungsi untuk memberikan catatan dalam program kita. Apa yang ditulis dalam komentar diabaikan oleh compiler. Dengan demikian, penambahan komentar tidak menambah besarnya kode hasil kompilasi. Komentar juga tidak mempengaruhi alur program yang telah dibuat. Penulisan komentar diawali ‘/*’ dan diakhiri ‘*/’. Komentar juga bisa diawali dengan “//’, bedanya tanda ini hanya berlaku untuk satu baris saja dan tak perlu ditutup dengan ‘//’ diakhiri komentar. ANSI C tidak memasukkan tanda ini sebagai standar dimulainya komentar. Oleh karena itu, ada kemungkinan format ini tidak didukung oleh beberapa compiler.
C. Pernyataan dan Blok Pernyataan
Pernyataan dalam C adalah sebuah instruksi lengkap yang sudah siap dieksekusi compiler untuk diubah menjadi bahasa mesin. Pernyataan dapat berupa deklarasi variabel, ekspresi, pemanggilan fungsi, dan juga penggunaan operator lain yang semuanya diakhiri dengan tanda ‘;’. Pernyataan paling pendek adalah sebuah pernyataan kosong yang cuma terdiri atas ‘;’. Deklarasi sebuah variabel atau konstanta yang telah kita lihat sebelumnya merupakan contoh sebuah pernyataan. Blok pernyataan adalah sekelompok pernyataan yang diawali ‘{‘ dan diakhiri ‘}’. Blok pernyataan adalah digunakan untuk mengumpulkan instruksi-instruksi yang merupakan satu kesatuan pernyataan.
2.7.3 Ekspresi
Ekspresi adalah kombinasi antara variabel, konstanta, dan operator untuk membentuk sebuah operasi yang dikehendaki. Operator adalah suatu fungsi untuk melakukan operasi tertentu dan melibatkan satu atau lebih operand. Operand sendiri adalah masukan (dapat berupa variabel) atau (konstanta) yang diolah oleh operator. Berikut macam-macam operator dalam C beserta contoh penulisannya.
Operator Aritmetika
Operator aritmetika berguna untuk mengerjakan fungsi-fungsi aritmetika dasar. Macam operator aritmetika bisa dilihat dalam tabel 2.2.
Tabel 2.2 Operator Aritmetika
Operator Fungsi Contoh Penulisan
- Pengurangan dan Fungsi Op1 – Op2, -Op1
* Perkalian Op1 * Op2
/ Pembagian Op1 / Op2
% Modulus (sisa pembagian) Op1 % Op2 ++ Inkrimen (penambahan 1 pada nilai
variabel)
IpVar++, ++OpVar
-- Dikrimen (pengurangan 1 pada nilai variabel)
OpVar--, --OpVar
Catatan: Op1, Op2 adalah operand berupa konstanta atau variabel OpVar adalah operand berupa variabel
Notasi operator aritmetika dalam bahasa C sama dengan notasi yang sudah umum kita gunakan begitu pula fungsi dari operator-operator tersebut.
unsigned char Angka1; unsigned char Angka2;
unsigned char Hasil_Bagi, Hasil_Sisa; Angka1 = 9;
Angka2 = 5;
Hasil_Bagi = Angka1 / Angka2; Hasil_Sisa = Angka1 Angka2;
Dari pernyataan diatas didapatkan Hasil_Bagi bernilai 1, Hasil_Sisa bernilai 4. Karena
Angka1, Angka2, dan Hasil_Bagi bertipe unsigned char maka hasil operasi pembagiannya berupa bilangan bulat positif, jika semua tipe datanya diganti dengan float maka Hasil_Bagi
akan bernilai 1.8 (dalam format float).
Unsigned char Hasil, Hasil2; Hasil1 = ++AngkaAwal1; Hasil2 = AngkaAwal2++;
Setelah eksekusi variabel Hasil1 bernilai 6 dan Hasil2 bernilai 5. Hal ini karena pernyataan
‘Hasil1 = ++AngkaAwal1;’ sama dengan: AngkaAwal1 = AngkaAwal1 + 1; Hasil1 = AngkaAwal1;
Sedangkan ‘Hasil2 = AngkaAwal2++;’ sama dengan dua pernyataan berikut: Hasil2 = AngkaAwal2;
AngkaAwal2 = AngkaAwal1 + 1;
Peletakan operator ‘—‘ di depan atau di belakang variabel mempunyai urutan operasi yang sama dengan ‘++’ kecuali ‘—‘ adalah fungsi pengurangan.
Operator Relasi
Operator relasi digunakan untuk mendapatkan hasil perbandingan dari dua nilai, hasil keluarannya berupa nilai logika.
Tabel 2.3 Operator Relasi
Operator Fungsi Contoh Penulisan
== Persamaan Op1 == Op2
> Lebih besat Op1 > Op2 < Lebih kecil Op1 < Op2 >= Lebih besar sama dengan Op1 >= Op2 <= Kurang sama dengan Op1 <= Op2 != Pertidaksamaan Op1 != Op2
Output dari operator ini berupa nilai logika benar atau salah. Representasi angka
salah adalah 0 sedangkan benar adalah nilai selain 0 (lazimnya adalah angka 1). Jadi untuk pernyataan berikut:
unsigned char Indikator1, Indikator2; unsigned char Input1 = 3;
Indikator = (Input1 == 3); Indikator2 = (Input1 > 5);
Nilai indikator1 setelah eksekusi adalah 1, sedangkan nilai Indikator2 adalah 0. Dalam pemrograman C operator relasi umumnya digunakan dalam seleksi kondisi
Operator Manipulasi Bit
Operator manipulasi bit berguna untuk mengolah data dengan orientasi per bit dari operand-nya.
Tabel 2.4 Operator Manipulasi Bit
Operator Fungsi Contoh Penulisan
| Fungsi OR bit Op1 | Op2 & Fungsi AND bit Op1 & Op2
~ Fungsi Komplemen bit ~Op1 ^ Fungsi XOR bit Op1 ^ Op2 >> Geser bit ke kanan Op1 >> Op2 << Geser bit ke kiri Op1 << Op2
Hasil dari fungsi logika untuk operasi manipulasi bit dapat dilihat dalam tabel kebenaran berikut.
Tabel 2.5 Operator Manipulasi Bit Input A & B A | B A ^ B ~A A B 0 0 0 0 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 0
Berikut contoh penulisan operator ini:
unsigned char Angka1, Angka2, Angka3; unsigned char Isi5 << 1;
Bila hasil eksekusi dijabarkan dalam format biner:
Angka1 = 00000001b | 00000010b = 00000011b (3) Angka2 = 00000101b & 00000010b = 00000000b (0) Angka3 = 00000101b << 1 = 00001010b (10)
Operator Logika
Operator ini digunakan untuk operasi logika dengan memperlakukan nilai operand- nya sebagai nilai logika.
Tabel 2.6 Operator Logika
Operator Fungsi Contoh penulisan
|| Fungsi Logika OR Op1 | Op2 && Fungsi Logika AND Op1 && Op2
! Fungsi Logika Negasi/inverter !Op1
Op1 dan Op2 adalah operand berupa variabel, konstanta atau ekspresi relasi
Unsigned char LED1On, LED2On, LED3On; Unsigned char saklar1 = 1, Saklar2 = 0;
LED1On = (Saklar1 == 1) && (Saklar2 == 1); /*LED1On = 0 */ LED2On = Saklar1 | | Saklar2; /* LED2On = 1 */
LED#On = !Saklar2; /* LED3On = 1 */
Setelah dieksekusi nilai LEDOn = 0 karena nilai (Saklar2 = 1) adalah 0 dan apapun kalau di- and dengan 0 hasilnya juga 0, sebaliknya operasi or selalu menghasilkan nilai 1 bila inputnya ada yang bernilai 1, seperti pada LED2On.
Operator Penugasan
Operator penugasan berfungsi untuk mengisi variabel di sebelah kiri operator dengan nilai di sebelah kanan operator. Operator penugasan seperti telah kita lihat dlam contoh- contoh sebelumnya menggunakan simbol ‘=’. Dalam C operator ini bisa dikombinasi dengan operator aritmetika dan juga manipulasi bit untuk meringkas penulisan.
Tabel 2.7 Operator Penugasan
Operator Fungsi Contoh Penulisan
= Op1 <-- Op2 Op1 = Op2 += Op1 <-- Op1 + Op2 Op1 += Op2
-= Op1 <-- Op1 – Op2 Op1 -= Op2 *= Op1 <-- Op1* Op2 Op1 *= Op2
/= Op1 <-- Op1 / Op2 Op1 /= Op2 %= Op1 <-- Op1 % Op2 Op1 %= Op2 &= Op1 <-- Op1 & Op2 Op1 &= Op2 |= Op1 <-- Op1 | Op2 Op1 |= Op2 ^= Op1 <-- Op1 ^ Op2 Op1 ^= Op2
<<= Geser bit Op1 ke kiri sebanyak Op2
Op1 <<= Op2
>>= Geser bit Op1 ke kanan sebanyak Op2
Op1 >>= Op2
Op1 adalah operand berupa variabel, Op2 adalah operand berupa variabel atau konstanta. Penggunaan beberapa operator dalam satu pernyataan secara bersamaan akan dikerjakan berdasar prioritasnya.