• Tidak ada hasil yang ditemukan

BAB 2 DASAR TEORI - Rancang Bangun Alat Bantu Tuna Netra Menggunakan Bahasa C Dengan Memanfaatkan Mikrokontroler ATMega 8535

N/A
N/A
Protected

Academic year: 2019

Membagikan "BAB 2 DASAR TEORI - Rancang Bangun Alat Bantu Tuna Netra Menggunakan Bahasa C Dengan Memanfaatkan Mikrokontroler ATMega 8535"

Copied!
42
0
0

Teks penuh

(1)

BAB 2

DASAR TEORI

2.1 Mikrokontroler ATMega 8535

2.1.1 Deskripsi Mikrokontroler ATMega 8535

Mikrokontroler, sesuai namanya adalah suatu alat atau komponen pengontrol atau pengendali yang berukuran mikro atau kecil. Sebelum ada mikrokontroler, telah ada terlebih dahulu muncul mikroprosesor. Bila dibandingkan dengan mikroprosesor, mikrokontroler jauh lebih unggul karena terdapat berbagai alasan, diantaranya :

1. Tersedianya I/O

I/O dalam mikrokontroler sudah tersedia sementara pada mikroprosesor dibutuhkan IC tambahan untuk menangani I/O tersebut. IC I/O yang dimaksud adalah PPI 8255.

2. Memori Internal

(2)

biaya. Secara harfiahnya bisa disebut “pengendali kecil“ dimana sebuah sistem elektronik yang sebelumnya banyak memerlukan komponen-komponen pendukung seperti IC TTL dan CMOS dapat direduksi diperkecil dan akhirnya terpusat serta dikendalikan oleh mikrokontroler ini.

Dengan menggunakan mikrokontroler ini maka: 1. Sistem elektronik akan menjadi lebih sederhana.

2. Proses kerja alat akan lebih cepat karena sebagian besar dari sistem adalah perangkat lunak yang mudah dimodifikasi.

3. Pencarian gangguan lebih mudah ditelusuri karena sistemnya yang kompak. Namun demikian tidak sepenuhnya mikrokontroler bisa mereduksi komponen IC TTL dan CMOS yang seringkali masih diperlukan untuk aplikasi kecepatan tinggi atau sekedar menambah jumlah saluran input dan output (I/O). dengan kata lain, mikrokontroler adalah versi mini atau mikro dari sebuah komputer karena mikrokontroler sudah mengandung beberapa bagian yang langsung bisa dimanfaatkan, misalnya port paralel, port serial, komparator, konversi digital ke analog (DAC), konversi analog ke digital (ADC), dan sebagainya hanya menggunakan Minimum System yang tidak rumit atau kompleks.

(3)

dengan instruksi MCS-51 yang membutuhkan 12 siklus clock karena memiliki arsitektur CISC (seperti komputer).Secara umum, AVR dapat dikelompokkan menjadi 4 kelas, yaitu keluarga ATTiny, keluarga AT90Sxx, keluarga ATMega dan AT89RFxx. Pada dasarnya yang membedakan masing-masing kelas adalah memori, peripheral, dan fungsinya. Dari segi arsitektur dan instruksi yang digunakan, mereka bisa dikatakan hampir sama. Oleh karena itu, dipergunakan salah satu AVR produk Atmel, yaitu ATMega8535. Selain mudah didapatkan dan lebih murah ATMega 8535 juga memiliki fasilitas yang lengkap.

(4)
(5)

Dari gambar tersebut dapat dilihat ATMega 8535 memiliki bagian fungsi yaitu:

1. Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C, Port D. 2. ADC 10 bit sebanyak 8 saluran.

3. Tiga buah Timer/Counter dengan kemampuan pembandingan. 4. CPU yang terdiri atas 32 buah register.

5. Watchdog Timer dengan osilator internal. 6. SRAM sebesar 512 byte.

7. Memori Flash sebesar 8 kb dengan kemampuan Read While Write. 8. Unit interupsi internal dan eksternal.

9. Port antarmuka SPI.

10. EEPROM sebesar 512 byte yang dapat diprogram saat operasi. 11. Antarmuka komparator analog.

12. Port USART untuk komunikasi serial.

Kapabilitas detail dari ATMega8535 adalah sebagai berikut :

1. Sistem mikroprosesor 8 bit bebrbasis RISC dengan kecepatan maksimal 16 MHz.

2. Kapabiltas memori flash 8 Kb, SRAM sebesar 512 byte, dan EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar 512 byte. 3. ADC internal dengan fidelitas 10 bit sebanyak 8 channel.

(6)

2.1.2 Konfigurasi PIN ATMega 8535

Mikrokontroler ATMega8535 mempunyai jumlah pin sebanyak 40 buah, dimana 32 pin digunakan untuk keperluan port I/O yang dapat menjadi pin input/output sesuai konfigurasi. Pada 32 pin tersebut terbagi atas 4 bagian (port), yang masing-masingnya terdiri atas 8 pin. Pin-pin lainnya digunakan untuk keperluan rangkaian osilator, supply tegangan, reset, serta tegangan referensi untuk ADC. Untuk lebih jelasnya, konfigurasi pin ATMega8535 dapat dilihat pada gambar 2.2

Gambar 2.2 Konfigurasi IC Mikrokontroller ATmega 8535

Berikut ini adalah susunan pin-pin dari ATMega8535;

a. VCC merupakan pin yang berfungsi sebagai pin masukkan catu daya. b. GND merupakan pin ground.

(7)

e. Port C (PC0..PC7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu TWI, Komparator Analog, dan Timer Oscilator.

f. Port D (PD0..PD7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu Komparator Analog, Interupsi Iksternal dan komunikasi serial USART. g. Reset merupakan pin yang digunakan untuk mereset mikrokontroler

h. XTAL1 dan XTAL2 merupakan pin masukkan clock eksternal (osilator menggunakan kristal, biasanya dengan frekuensi 11,0592 MHz).

2.1.3 Peta Memori ATMega8535

ATMega8535 memiliki dua jenis memori yaitu Data Memory dan Program Memory ditambah satu fitur tambahan yaitu EEPROM Memory untuk penyimpan data.

2.1.4 Program Memory

ATMEGA8535 memiliki On-Chip In-System Reprogrammable Flash Memory untuk menyimpan program. Untuk alasan keamanan, program memory dibagi menjadi dua bagian, yaitu Boot Flash Section dan Application Flash Section Boot

(8)

Gambar 2.3 Peta Memori Program

Application Flash Section digunakan untuk menyimpan program aplikasi yang dibuat user. AVR tidak dapat menjalakan program aplikasi ini sebelum menjalankan program Boot Loader. Besarnya memori Boot Flash Section dapat deprogram dari 128 word sampai 1024 word tergantung setting pada konfigurasi bit di register BOOTSZ. Jika Boot Loader diproteksi, maka program pada Application Flash Section juga sudah aman.

2.1.5 Data Memory

(9)

2.1.6 EPROM Data Memory

ATMEGA8535 memiliki EEPROM 8 bit sebesar 512 byte untuk

menyimpan data. Loaksinya terpisah dengan system address register, data register dan control register yang dibuat khusus untuk EEPROM. Alamat EEPROM dimulai dari $000 sampai $1FF.

$000

$01F

Gambar 2.4 EEPROM Data Memori

2.2 Sensor Jarak Ultrasonik HC-SR04

HC-SR04 adalah seri dari sensor jarak dengan gelombang ultrasonic, dimana didalam sensor terdapat dua bagian yaitu receiver dan transmitter yang mempunyai fungsi sebagai penghasil gelombang dan penerima gelombang

Gambar 2.5 Sensor Ultrasonik HC-SR04

Disamping merupakan bentuk fisik dari sensor ultrasonic HC-SR04 yang mempunyai 4 pin. satu pin VCC sebagai pin masukan tegangan dan di imbangi

(10)

pin GND untung grounding, sedangkan dau pin sisanya adalah trigger dan echo pin yang akan mempengaruhi gelombang ultrasonic itu sendiri. Untuk menghubungkan sensor ultrasonic cukup menghubungkan pin VCC dan GND ke +5 V dan GND arduino serta pin Trigger dan Echo terhubung dengan pin digital arduino. lebih jelasnya lihat gambar disamping.

Gambar 2.6 Sensor Ultrasonik dalam Rangkaian

Prinsip Kerjanya :

(11)

2.2.1 Prinsip Kerja Sensor Ultrasonik

Prinsip kerja dari sensor ultrasonik adalah sebagai berikut :

1. Sinyal dipancarkan oleh pemancar ultrasonik. Sinyal tersebut berfrekuensi diatas 20kHz, biasanya yang digunakan untuk mengukur jarak benda adalah 40kHz. Sinyal tersebut di bangkitkan oleh rangkaian pemancar ultrasonik.

2. Sinyal yang dipancarkan tersebut kemudian akan merambat sebagai sinyal / gelombang bunyi dengan kecepatan bunyi yang berkisar 340 m/s. Sinyal tersebut kemudian akan dipantulkan dan akan diterima kembali oleh bagian penerima Ultrasonik.

3. Setelah sinyal tersebut sampai di penerima ultrasonik, kemudian sinyal tersebut akan diproses untuk menghitung jaraknya. Jarak dihitung berdasarkan rumus :

S = 340.t/2

dimana S adalah jarak antara sensor ultrasonik dengan bidang pantul, dan t adalah selisih waktu antara pemancaran gelombang ultrasonik sampai diterima kembali oleh bagian penerima ultrasonik.

2.3 RTC DS 1307 (Time Digital)

(12)

Salah satu RTC yang sudah populer dan mudah penggunaanya adalah DS1307, apalagi pada Codevision sudah tersedia fungsi-fungsi untuk mengambil data waktu dan tanggal untuk RTCDS1307 ini.

Gambar 2.7 Pin- Pin RTC DS1307

2.3.1 Fitur-fitur DS1307:

a. Real-time clock (RTC) menghitung detik, menit, jam,tanggal,bulan dan hari dan tahun valid sampai tahun 2100

b. Ram 56-byte, nonvolatile untuk menyimpan data. c. 2 jalur serial interface (I2C).

d. output gelombang kotak yg diprogram. e. Automatic power-fail detect and switch

f. Konsumsi arus hanya 500nA pada batery internal. g. mode dg oscillator running.

h. temperature range: -40°C sampai +85°C

(13)

Gambar 2.8 Komunikasi Serial I2C

2.3.2 Cara pembacaan DS1307

DS1307 beropersai sebagai slave pada bus I2C. Cara Access pertama mengirim sinyal START diikuti device address dan alamat sebuah register yg akan dibaca. Beberapa register dapat dibaca sampai STOP condition dikirim.

(14)

Data waktu dan tanggal tersimpan dalam memori masing masing 1 byte , mulai dari alamat 00H sampai 07H. Sisanya (08H ~ 3FHalamat RAM yg bisa digunakan).

2.3.3 Pemrograman RTC DS1307 dengan Codevision.

Codevision sudah menyediakan fungsi-fungsi khusus untuk mengakses data DS1307 jadi kita tinggal menggunakanya. Apalagi dengan fasilitas codewizard pemrograman RTC menjadi mudah.

Gambar 2.10 CodevisionWizardAVR untuk RTC

setelah kita klik ok maka akan tersedia template Code program sbb: // DS1307 Real Time Clock initialization

// Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0

rtc_init(0,0,0);

(15)

Merupakan perintah untuk nisialisasi real time RTC DS 1307

2.4 WTV -020SD (Modul Audio)

Modul chip WTV-020SD membaca berkas audio/suara dalam format AD4 dengan memainkan suara yang sudah direkam sebelumnya (menggunakan komputer) dan disimpan pada media penyimpanan kartu mikro SD (file storage Micro-SD-Card) dengan sistem berkas FAT (File Allocation Table file system). Fitur dan Spesifikasi WTV-020-SD Audio Player Module

1. Mengurangi dan memainkan (decode & play) berkas audio Microsoft Wave Audio (*.WAV) dengan sampling rate 6 kHz hingga 16 kHz. Pastikan penyandian dalam format PCM 4-bit / 8-bit, uncompressed.

2. Mengurai dan memainkan (decode & play) berkas audio dengan 4-bit ADPCM (*.AD4) dengan sampling rate antara 6 kHz hingga 32 kHz, juga mendukung sampling rate 36 kHz.

3. Membaca berkas audio yang tersimpan kartu SD berkecepatan tinggi (High- Speed SD-Card) berkapasitas hingga 2 GB via on-board SD-Card Reader (file system: FAT).

4. Dapat mengenali format dan sampling rate dari berkas audio yang tersimpan dan menguraikannya sesuai meta data yang tertera secara otomatis

5. Dapat dikendalikan langsung oleh pemakai dengan menyambungkan tombol

(moda manual) ataupun secara terprogram lewat koneksi serial (sambungkan

dengan pin digital I/O pada mikrokontroler / Arduino board Anda; membutuhkan

(16)

6. Memori internal untuk mengingat posisi terakhir pada berkas audio yang

dimainkan.

Modul ini dengan modus MP3 , modus kunci (kontrol 3 kelompok suara dengan penyesuaian volume atau 5 kelompok suara ) , 2 -line modus serial dan modus lingkaran putar (diaktifkan setelah power on , dengan fungsi memori dalam mode ini ) . Mode MP3 : dengan bermain / stop , berikutnya, sebelumnya , vol + , vol - fungsi ; modus kunci ( 3 kelompok suara ) salah satu kunci memicu salah satu kelompok suara , dan dengan vol - , vol + , dengan semua tombol mode memicu standarnya adalah tepi RETRIGGER ; modus kunci ( 5 kelompok suara ) : salah satu pemicu utama satu kelompok suara.

1. Semua tombol yang tepi RETRIGGER

2. Semua tombol yang on / off (suara tidak siklus ketika selesai )

(17)

64MB max.; format file dukungan 4 bit ADCPM; sampling rate dari 6kHz ke 36kHz untuk format suara ad4; sampling rate dari 6kHz ke 16KHz untuk format suara WAV; 16 bit DAC / PWM output audio; modus kunci, modus MP3, 2-line modus serial adalah opsional; berkas pendukung copy ke SD card via PC; tegangan kerja: DC 2.7 ~ 3.5V; arus diam: 3uA.

Aplikasi Modul ini dapat digunakan dalam mobil (bug mobil, radar parkir, sistem navigasi GPS), sistem cerdas rumah, bug perumahan, perangkat medis suara, alat rumah tangga (memasak induksi, memasak nasi, microwave oven), pemain game, mesin belajar (berbicara book), fasilitas lalu lintas cerdas (alat gerbang, tempat parkir), peralatan komunikasi, kontrol industri dan mainan.

2.5 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.5.1 Deskripsi Bahasa C

(18)

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.5.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,

(19)

c. Ekspresi,

d. Pernyataan dan blok pernyataan, e. Fungsi.

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

(20)

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

Angka_Kedua = Angka_Pertama

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

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

(21)

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).

b. Tidak diawali dengan angka. 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;

(22)

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.

const tipe_konstanta nama_konstanta = konstanta;

(23)

const float pi = 3.14;

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

(24)

pernyataan. Blok pernyataan adalah sekelompok pernyataan yang diawali ‘{‘ dan diakhiri ‘}’. Blok pernyataan adalah digunakan untuk mengumpulkan instruksi-instruksi yang merupakan satu kesatuan pernyataan.

2.5.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

+ Penjumlahan Op1 +Op2

- Pengurangan dan Fungsi Op1 – Op2, -Op1

* Perkalian Op1 * Op2

/ Pembagian Op1 / Op2

% Modulus (sisa pembagian) Op1 % Op2

++ Inkrimen (penambahan 1 pada nilai variabel)

(25)

-- 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 AngkaAwal1 = 5, AngkaAwal2 = 5; Unsigned char Hasil, Hasil2;

(26)

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

Op1, Op2 adalah operand berupa konstanta atau variabel

(27)

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

(28)

Tabel 2.5 Operator Manipulasi Bit

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

(29)

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

(30)

&= 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.

2.5.4 Keyword C

Dalam bahasa C ada beberapa kata yang mempunyai makna khusus yang tidak bisa digunakan sebagai nama variabel ataupun konstanta. Kata-kata khusus ini biasa disebut keyword C. Sebagaimana kalau kita belajar bahasa asing maka kita harus mengerti dan menguasai kosakata bahasa tersebut. Dalam bahasa C, keyword C inilah kosakata yang harus kita mengerti dan kuasai.

(31)

char do extern if return static

struct switch typedef union unsigned void

volatile while

Semua keyword diatas ditulis dalam huruf kecil. Dari daftar diatas tampak bahwa tipe data dasar dalam tabel 2.1 juga merupakan keyword C. Keyword diatas mengacu pada standar bahasa C dari ANSI (American National Standards

Institute). Latar belakang dibuatnya standar ini adalah untuk mempertahankan bahasa baku dari C dikarenakan banyaknya variasi bahasa ini yang terus

dikembangkan oleh vendor-vendor pembuat Compiler C.

2.5.5 Fungsi

Fungsi merupakan potongan dari program yang berisi rutin tertentu dan dieksekusi saat dipanggil oleh program utama atau oleh fungsi lain. Program dalam bahasa C selalu melibatkan fungsi karena program utamanya pun berupa fungsi dengan nama main. Fungsi main adalah fungsi utama dan fungsi pertama yang akan dieksekusi. Jika program tidak terlalu panjang maka implementasinya cukup dalam fungsi main saja. Beberapa keuntungan bila kita membagi program menjadi beberapa fungsi diantaranya:

a. Menghemat memori. Umumnya memanggil fungsi membutuhkan memori lebih sedikit dibanding menulis isi fungsi berkali-kali.

(32)

c. Mempermudah pembacaan alur program.

d. Modifikasi program lebih cepat karena tidak perlu mengubah program di banyak tempat.

e. Untuk pembuatan program baru dapat memanfaatkan fungsi-fungsi dari program sebelumnya.

Saat fungsi dipanggil oleh program utama atau fungsi lain, alur program akan menuju ke fungsi itu dan mulai mengeksekusi instruksi-instruksi dalam fungsi tersebut hingga selesai kemudian melanjutkan ke alamat di bawah pernyataan saat fungsi tadi dipanggil.

Kepala sebuah fungsi terdiri atas nama fungsi, tipe fungsi, dan parameter fungsi. Tipe fungsi digunakan untuk menentukan tipe data keluaran atau hasil dari proses dalam fungsi tersebut. Parameter fungsi merupakan input (masukan) bagi fungsi). Penulisan parameter fungsi serupa dengan pendeklarasian variabel, tubuh fungsi diawali dengan ‘{‘ dan diakhiri ‘}’. Format penulisan fungsi:

Tipe_fungsi Nama_fungsi (parameter fungsi) {

. . . /* Tubuh fungsi */ Return (Tipe_fungsi); }

(33)

kerepotan ini adalah dengan membuat prototipe tiap fungsi. Prototipe fungsi adalah deklarasi adanya suatu fungsi, penulisannya sama dengan kepala fungsi diakhiri ‘;’ dan diletakkan di awal program.

Selain menggunakan tipe data yang ada dalam tabel 2.1 sebagai tipe fungsi, ada satu lagi tipe yang bisa kita gunakan yaitu void. Void merupakan salah satu dari keyword untuk menyatakan fungsi yang tak bertipe dan tak punya nilai keluaran fungsi.

Tiap memanggil fungsi dibutuhkan memori di stack untuk meyimpan alamat terakhir sebelum fungsi diesekusi karena itu fungsi1 di atas akan membuat tumpukan beberapa alamat di stack. Masalah akan timbul bila memori di stack habis sehingga alamat yang dituju setelah fungsi selesai dieksekusi akan salah.

Dengan adanya fungsi, sifat variabel pun dibagi menjadi dua macam yaitu sebagai variabel global atau variabel lokal.

a. Variabel global adalah variabel yang dapat diakses oleh semua fungsi dan nilainya tetap tersimpan setelah keluar dari fungsi. Semua variabel yang dideklarisasikan di luar fungsi adalah variabel global dan umumnya diletakkan di awal program.

b. Vaiabel lokal adalah variabel yang dideklarisasikan di dalam fungsi dan hanya bisa diakses oleh fungsi itu saja.

Ada beberapa keyword yang menetukan sifat variabel lokal auto, static dan register. Perbedaan dari ketiga sifat variabel tersebut adalah :

(34)

Auto Tipe_Variabel Nama_Variabel; Contoh:

Auto unsigned char hasil;

Auto unsigned int Tunda = 1000;

Static : Variabel lokal yang bersifat static akan memperhatikan nilainya saat keluar dari fungsi. Keyword static akan membuat lokal berlaku seperti variabel global tetapi hanya dapat diakses dalam fungsi itu saja. Format penulisannya:

Static Tipe_Variabel Nama_Variabel; Contoh:

Static unsigned char status; Static char total = 0;

Inisialisasi varibel static saat deklarasi hanya akan dieksekusi satu kali yaitu saat pertama kali dipanggil. Setelah itu nilainya adalah nilai terakhir saat keluar dari fungsi.

Bil fungsi Varibel_lokal1 dipanggil berulangkali nilai yang didapat tetap 10 sedangkan Variabel_lokal2 menghasilkan nilai yang inkrimen mulai dari 10. Di tiap fungsi dapat dibuat variabel dengan nama sama karena masing-masing punya alokasi sendiri sehingga tidak saling mempengaruhi. Variabel global yang mempunyai nama yang sama dengan variabel global itu tidak dapat diakses selama dalam fungsi tersebut.

Register : variabel lokal yang bersifat register sama seperti auto tetapi compiler akan menempatkan alokasinya pada register internal mikroprosesor. Format penulisannya:

(35)

Contoh:

Register char Cacahan__1ms;

Dengan menggunakan register diharapkan proses eksekusinya akan lebih cepat dibanding alokasi data di RAM-nya. Namun demikian, jumlah register internal mikroprosesor sangat terbatas jadi sebaiknya digunakan jika memang dibutuhkan saja.

2.5.6 Struktur Program C

Program mikrokontroler yang panjang biasanya dibagi menjadi beberapa file, setiap file mempunyai fungsi spesifik yang kemudian dirangkai program utama. Properti fungsi yang digunakan oleh beberapa file dengan ekstensi’*h’ atau biasa disebut file header. Tubuh program sendiri disimpan dalam file dengan ekstensi ‘.c’ nya agar mudah dalam manajemen file dan penggunaanya. Selain berisi deklarasi fungsi, file header dapat juga berisi defenisi konstanta, makro, dan tipe data khusus lainnya.

Struktur program C secara umum adalah: Deklarasi file header

Prototipe fungsi Defenisi konstanta Deklarasi konstanta Deklarasi variabel global

Tipe_fungsi nama_fungsi (parameter fungsi) {

(36)

}

Void main (void) {

// program utama }

a. Deklarasi file header diperlukan bila program membutuhkan konstanta atau fungsi yang protopenya ada di dalam file header tersebut. Format fdeklarasi file header akan dibahas berikutnya di PreprocessorCompiler.

b. Prototipe dari fungsi-fungsi yang digunakan program ditulis di awal program. c. Defenisi konstanta digunakan untuk memberi nama suatu konstanta yang digunakan oleh program. Format defenisi konstanta akan dibahas berikutnya di Preprocessor Compiler.

d. Deklarasi konstanta dan deklarasi variabel global diletakkan di aal program dan luar fungsi manapun. Variabel ini bisa diakses dalam fungsi main ataupun fungsi lainnya. Fungsi yang akan mengakses variabel global harus ada di bawah deklarasi variabel global.

e. Berikutnya bisa dituliskan fungsi-fungsi yang diperlukan program. Eksekusi program dimulai dari fungsi main. Oleh karena itu, untuk mengetahui alur suatu program bisa ditelusuri mulai dari fungsi main.

(37)

2.5.7 Preprocessor Compiler

Salah satu kemudahan dalam membuat program dengan bahasa C adalah fasilitas preprocessor compiler. Preprocessor compiler mempersiapkan tahap awal sebelum kompilasi. Preprosesor diawali dengan simbol ‘#’ dan diikuti kata khusus untuk mengarahkan compiler saat menerjemahkan program. Ada banyak preprosesor compiler yang diadakan oleh tiap compiler. Berikut preprocessor compiler yang umum dan perlu kita tahu:

#include

Pengarah compiler ini digunakan untuk memberitahu compiler agar menyalin isi suatu file ke dalam program. Deklarasi file header (*.h) dilakukan dengan pengarah compiler ini. File dengan ekstensi lainpun dapat disertakan dalam program dengan menggunkan #include. Format penulisannya:

#include <nama_file> Atau

#include “nama_file”

Contoh penulisannya dalam program: #include <MATH.H>

#include “.\input\baca_input.h” #include “.\..\konstanta.h” #include “hitung.c”

#define

Kegunaan pengarah compiler ini adalah untuk:

(38)

#define NAMA_DEFENISI KONSTANTA Contoh:

#define LIMIT_SUHU 10 Float Suhu_Celcius, suhu_kelvin;

Suhu_celcius = LIMIT_SUHU;

Suhu_kelvin = LIMIT_SUHU + 273.15;

Dalam contoh di atas LIMIT_SUHU bernilai 10 sehingga preprocessor akan mengganti semua LIMIT_SUHU dengan 10 sebelum dicompile oleh compiler. Prerocessor #define dalam hal ini sama dengan keyword const.

2. Menggantikan nama variabel, port, tipe, data dan operator. Format penulisannya:

#define NAMA_DEFENISI nama_variabel #define NAMA_DEFENISI nama_port #define NAMA_DEFENISI tipe_data #define NAMA_DEFENISI operator Contoh:

#define varPanjang panjang

#define sensor1 PORTB

#define BYTE unsigned char

#define DAN &&

(39)

atau operator akan membuat program lebih mudah dibaca dan dimengerti.

3. Membuat nama alias dari suatu ekspresi. Defenisi untuk menggantikan pernyataan atau ekspresi biasa disebut MAKRO.

Format penulisannya:

#define Nama_Defenisi ekpresi Contoh:

#define Tambah_input input += 7 #define Cek_input input > 10

Defenisi Tambah_input dan cek_input daiats melibatkan variabel input yang harus dideklarasikan sebelumnya. Jika ekpresi cukup panjang hingga lebih dari satu baris maka tiap akhir baris ditambahkan ‘\c’.

4. Membuat makro untuk menggantikan satu baris pernyataan atau lebih. Contoh:

Unsigned char panjang , lebar, luas;

#define isi_ulang_var (x,y) X = 10; Y = 10; #define HitungLuas (A,B) (A) * (B)

Isi_Ulang_Var(panjang,lebar); Luas = HitungLuas (panjang,lebar);

(40)

5. Menentukan bagian-bagian dari program yang ikut dicompile.

Untuk keperluan ini penggunaan #define dikombinasikan dengan #if yang akan dibahas dalam bab berikutnya. Syarat-syarat pemilihan nama defenisi sama dengan syarat-syarat pemilihan nama variabel, dan juga bersifat case sensitif. Kumpulan defenisi yang digunakan oleh bereapa file sebaiknya dikelempokkan dalam sebuah file header sehingga mudah dikelola.

2.6 Bereksperimen Dengan Mikrokontroler dan C.

Dalam hal ini berisi beberapa contoh aplikasi sedrhana untuk memberikan dasar dan penglaman dalam membuat program mikrokontroler menggunakan bahasa C. Rangkaian untuk ekperimen hanya menggunakan unit input dan output sederhana berupa tombol dan komponen lainnya.

2.6.1 Compiler C

Sebelum memulai membuat program, ada beberapa hal yang perlu dipersiapkan yaitu hardware untuk eksperimen dan compiler C yang sudah terinstal di komputer. Tiap tipe mikrokontroler berbeda instruksi asemblernya. Oleh karena itu, dibutuhkan Compiler C yang sesuai untuk tiap mikrokontroler. Untuk tipe AVR bisa menggunakan WinAVR atau code vision. Walaupun berbrda compiler, program C yang sudah dibuat tetap bisa digunakan oleh mikrokontroler tipe lain dengan sedikit penyesuaian terutama untuk akses SFR dan keyword khusus yang tidak distandarkan dalam ANSI C.

2.6.2 Membuat Rangkaian Downloader

(41)

mendownload program tanpa harus melepas mikrokontroler dari boardnya. Cara ini cukup mudah untuk diterapkan karena hanya memerlukan rangkaian downloader sederhana sebagai antarmuka mikrokontroler dengan PC melalui serial port (COM PORT). Website ATMEL juga sudah memberikan contoh rangkaian dan software pendukung yang dapat digabungkan dengan AVRStudio, atau dapat juga menggunakan PonyProg

2.6.3 Timer

Untuk mendapat waktu tunda suatu proses, mulai dari Program 1 telah

diperkenalkan fungsi tunda yang lamanya tundaan diatur dengan mengubah-ubah konstanta perulangan. Ada beberapa kelemahan dalam fungsi tunda yaitu mikroprosesor tidak bisa mengerjakan hal lain sebelum perulangan selesai dan waktu tunda yang dihasilkan tidak bisa presisi. Timer atau pewaktu merupakan komponen yang penting untuk menghitung waktu dengan ketelitian yang cukup memadai. Timer bekerja secara independen sehingga tidak membebani kerja prosesor selama eksekusi program. Beberapa register perlu diatur nilainya untuk menentukan:

1. sumber pewaktu timer 2. mode timer

3. interval timer

4. pengaktifan timer dan interupsi

a. ADC (Analog To Digital Converter)

(42)

ADC. Untuk menggunakan ADC internal kita tentuka dulu mode operasi ADC yang meliputi:

1. input ADC yang digunakan.

2. Mode ADC Free Running atau Single Conversion. 3. Pengaktifan interupsi saat selesai konversi

Gambar

Gambar 2.1 Blok Diagram Fungsional ATmega8535
Gambar 2.3 Peta Memori Program
Gambar 2.4 EEPROM Data Memori
Gambar 2.6 Sensor Ultrasonik dalam Rangkaian
+7

Referensi

Dokumen terkait

Kelompok Kerja Unit Layanan Pengadaan Daerah Kementerian Keuangan Wilayah II Provinsi Riau di Tahun Anggaran 2016 akan melaksanakan e-Lelang dengan pascakualifikasi

yang ingin digambarkan oleh peneliti adalah lingkungan pembacaan, fungsi dan diksi yang terdapat dalam mantra upacara beentamao sebagai sastra lisan masyarakat

Buah kiwi (Actinidia deliciosa) merupakan salah satu buah yang memiliki potensi sebagai hepatoprotektor alami. Buah ini kaya akan vitamin C dan senyawa polifenol. Actinidia

10 tahun 1963 tentang Tabungan dan Asuransi Pegawai Negeri, maka dengan Peraturan Pemerintah ini didirikan suatu Perusahaan Negara sebagai yang dimaksudkan pada pasal 3 ayat

Dari sisi pengeluaran, pertumbuhan lebih disebabkan oleh meningkatnya Komponen Pengeluaran Konsumsi Rumah Tangga yang tumbuh sebesar 4,84 persen dan memberikan

Tugas Akhir dengan judul “PENGARUH FAKTOR PSIKOLOGIS TERHADAP KEPUTUSAN PEMBELIAN MITSUBISHI PAJERO SPORT 4x2” ini ditujukan untuk memenuhi salah satu persyaratan untuk

Puji syukur kehadirat Allah SWT, karena hanya berkat karunia serta rahmatNya penulis dapat menyelesaikan tugas akhir yaitu penulisan skripsi dengan judul “

Analisis yang penulis gunakan dalam penelitian ini adalah analisis isi yang biasanya dipakai untuk memberikan gambaran secara jelas tentang pesan-pesan yang ada dalam