Informatika
SMK/MAK
Kelas X
Rumpun Bisnis
dan Manajemen,
Pariwisata, serta
Seni dan Ekonomi
Kreatif
Mikrokontroler
Saat ini, terdapat dua arsitektur mikrokontroler yang tersedia di pasaran, yaitu
sebagai berikut,
a. CISC (Complex Instruction Set Computer)
Arsitektur CISC merupakan jenis arsitektur yang memiliki fitur yang lengkap
dan kompleks dalam memberikan set instruksi pada processor. Arsitektur ini
menggunakan bahasa tingkat rendah seperti Assembler. Kekurangan CISC
adalah performa yang kurang cepat karena penggunaan set instruksi yang
kompleks, tetapi lebih powerful dalam menangani proses. CISC merupakan
tipe multiclock yang menekankan penggunaan dan pemberian set instruksi
pada perangkat keras. Meskipun ukuran kapasitas program yang digunakan
kecil, tetapi kecepatan akses data yang rendah. Dalam CISC, instruksi LOAD
dan STORE merupakan dua set instruksi yang tidak terpisahkan.
b. RISC (Reduce Instruction Set Computer)
Arsitektur RISC mempunyai ragam set instruksi yang lebih
sederhana dibandingkan dengan CISC. Tipe ini sudah mendukung
penggunaan bahasa tingkat tinggi, seperti bahasa pemrograman C.
2. Arsitektur ATmega328P
ATmega328P merupakan salah satu mikrokontroler keluaran ATMEL yang
menggunakan arsitektur RISC (Reduce Instruction Set Computer) dengan kelebihan
eksekusi data lebih baik dibandingkan dengan arsitektur CISC. Mikrokontroler
ATmega328 mempunyai spesifikasi sebagai berikut.
a. Berkinerja tinggi dengan kebutuhan tegangan yang kecil.
b. Mendukung 131 set instruksi dalam sebuah siklus clock ketika dieksekusi.
c. Memiliki 32 × 8 General Purpose Working Registers.
d. Mampu bekerja dengan speed 20 MIPS pada detak clock 20 MHz.
e. Menggunakan jenis EEPROM (Electrically Erasable Programmable Read Only
Memory) berkapasitas 1 KB dengan kelebihan masih dapat menyimpan data
meski tidak tersuplai arus listrik.
f. Tipe ATmega328P sering digunakan pada rangkaian Arduino Uno karena
dilengkapi flash memory sebesar 32 KB, dengan catatan 2 KB dari besar
memori tersebut digunakan sebagai area penyimpanan bootloader Arduino.
g. Mempunyai 28 pin input-output, dengan 6 di antaranya merupakan jenis pin
bertipe pulse width modulation output.
h. Dilengkapai memori bertipe SRAM dengan kapasitas 2 KB.
i. Memiliki interface master/slave SPI Serial.
j. 8 kanal berukuran 10 bit ADC dalam paket TQFP dan QFN/MLF.
k. 6 kanal berukuran 10 bit ADC dalam paket PDIP.
l. Dilengkapi fitur Power-on serta Reset and Programmable Brown-out Detection.
m. Bekerja pada tegangan 1,8 – 5,5 volt.
n. Mampu bertahan pada suhu antara –40 °C sampai 85 °C.
Instruction Watchdog
Indirect Addressing
Decoder Timer
Direct Addressing
ALU Analog
Comparator
Control
Lines
I/O Module 1
Data
SRAM I/O Module 2
I/O Module n
EEPROM
I/O Lines
Sumber: atmel.com
Gambar Blok diagram ATmega328P.
(PCINT14/RESET)PC6 1 28 PC5(ADC5/SCL/PCINT13)
(PCINT15/RXD)PD0 2 27 PC4(ADC4/SDA/PCINT12)
(PCINT17/TXD)PD1 3 26 PC3(ADC3/PCINT11)
(PCINT18/INT0)PD2 4 25 PC2(ADC2/PCINT10)
(PCINT19/OC2B/INT1)PD3 5 24 PC1(ADC1/PCINT9)
(PCINT20/XCK/T0)PD4 6 23 PC0(ADC0/PCINT8)
VCC 7 22 GND
GND 8 21 AREF
(PCINT6/XTAL1/TOSC1)PB6 9 20 AVCC
(PCINT17/XTAL2/TOSC2)PB7 10 19 PB5(SCK/PCINT5)
(PCINT21/OC0B/T1)PD5 11 18 PB4(MISO/PCINT4)
(PCINT22/OC0A/AIN0)PD6 12 17 PB3(MOSI/OC2A/PCINT3)
(PCINT23/AIN1)PD7 13 16 PB2(SS/OC1B/PCINT2)
(PCINT0/CLKO/ICP1)PB0 14 15 PB1(OC1A/PCINT1)
• PORT C (PC6/RESET), PC6 digunakan sebagai pin I/O pada saat RSTDISBL
Fuse telah diatur dalam program. Namun jika tidak, PC6 difungsikan sebagai
port RESET.
• PORT D (PD7:0), merupakan port input-output 8 bit dua arah yang sering
digunakan untuk analog comparator, external interruption, dan USART
communication.
3. Arduino
Arduino merupakan rangkaian elektronika yang berbasis mikrokontroler
ATmega328P keluaran Atmel. Jenis yang dipaparkan pada materi ini adalah Arduino
Uno R3 yang bersifat open source hardware, yang memungkinkan orang lain
mengembangkan sesuai kebutuhan mereka. Nama lain Arduino adalah development
board atau papan pengembangan mikrokontroler, yang memudahkan pengguna
dalam membangun rangkaian elektronika berbasis mikrokontroler dibandingkan
membangun rangkaian mulai dari awal. Spesifikasi hardware Arduino Uno R3
adalah sebagai berikut.
• Berbasis chip mikrokontroler ATmega328P.
• Beroperasi pada tegangan DC 5 V.
• Input tegangan DC adalah 7 V − 12 V.
• Terdiri atas 14 digital I/O pin, dengan 6 pin di antaranya merupakan sambungan
PWM.
• Memiliki 6 pin input analog.
• Besar arus setiap pin I/O adalah 20 mA.
• Besar arus DC pin pada tegangan 3,3 V adalah 50 mA.
• Kapasitas memori flash adalah 32 KB dengan 0,5 KB digunakan untuk
bootloader program.
• Kapasitas SRAM adalah 2 KB.
• Ukuran EEPROM adalah 1 KB.
• Mampu bekerja pada clock speed 16 MHz.
• Dijual di pasaran dengan dimensi 68,6 mm × 53,4 mm dengan berat 25 g.
Pada sistem power supply, Arduino mempunyai dua koneksi, yaitu melalui
USB (komputer) dan power supply. Jika menggunakan power supply, tegangan
yang digunakan merupakan tegangan DC (searah), yang berasal dari adaptor atau
baterai. Biasanya koneksi ini menggunakan jack adaptor yang dimasukkan pada
1) Port USB
2) Jack Adaptor
Tegangan DC
Keterangan:
1) Port USB, berguna untuk memberikan catu daya dari komputer ke Arduino,
ketika me-load atau memasukkan program ke mikrokontroler sebagai media
komunikasi secara serial antara board Arduino dengan komputer.
2) Jack adaptor Tegangan DC, berfungsi sebagai sambungan input sumber
tegangan DC berupa jack, biasanya dari adaptor ataupun baterai.
3) Tombol Reset, berguna untuk mereset board Arduino sehingga setiap data dan
program yang pernah di-load ke dalam board dan mikrokontroler akan dihapus
atau dikosongkan.
b. Deklarasi
Deklarasi berfungsi menetapkan daftar variabel ataupun konstanta yang
akan digunakan dalam badan program. Variabel adalah nama yang digunakan
untuk menyimpan sebuah nilai yang dapat diatur besarannya selama program
dieksekusi, sedangkan konstanta memiliki nilai yang tetap (konstan).
Contoh:
float tinggi;
int alas;
c. Komentar
Komentar merupakan tambahan baris penjelasan dalam kode bahasa C yang
bertujuan memberikan keterangan tentang penggunaan kode. Namun, bagian
ini tidak ikut dieksekusi oleh program. Komentar single line menggunakan
kode //, sedangkan komentar lebih dari satu baris menggunakan kode /*....*/.
Contoh kode bahasa pemrograman C adalah sebagai berikut.
1 /*program hitung luas persegi panjang*/
2 #include <stdio.h>
3
4 #include <conio.h>
5
6 void main() {
7 float luas;
8 int panjang, lebar;
9 printf(“nilai panjang =”);
10 scanf(“%d”, & panjang);
11 printf(“nilai lebar =”);
12 scanf(“%d”, & lebar);
13 luas = panjang * lebar;
14 printf(“luas persegi panjang adalah = %f”, luas);
15 }
7) char, tipe data yang hanya mampu menyimpan sebuah karakter berdasarkan
kode ASCII, contohnya karakter “B” memiliki kode ASCII 66. Besar memori
yang dibutuhkan adalah 1 Byte.
e. Operasi aritmetika
Operasi aritmerika adalah operasi yang dilakukan pada data bertipe
numerik.
Tabel Operator aritmetika.
Operator Fungsi
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Operator pembagian yang menghasilkan keluaran berupa sisa hasil
bagi, contohnya 10%3 akan menghasilkan nilai 1
f. Compound assignment
Compound assignment merupakan salah satu teknik kombinasi operator
aritmetika dengan variabel, yang sering diterapkan pada sistem perulangan.
Contoh:
z ++; // memiliki kesamaan operasi dengan z = z + 1
z --; // memiliki kesamaan operasi dengan z = z – 1
z -= a; // memiliki kesamaan operasi dengan z = z – a
z += a; // memiliki kesamaan operasi dengan z = z + a
z *= a; // memiliki kesamaan operasi dengan z = z * a
z /= a; // memiliki kesamaan operasi dengan z = z / a
g. Operasi perbandingan
Operasi perbandingan merupakan operasi yang dilakukan untuk
membandingkan sebuah logika atau beberapa logika yang keluarannya adalah
tipe data boolean.
Tabel Operator pembanding.
Operator Fungsi
== Sama dengan
!= Tidak sama dengan
h. Operasi logika
Operasi logika merupakan operasi yang dilakukan untuk membandingkan
dua atau lebih ekspresi yang menghasilkan keluaran bernilai true atau false.
Dalam bahasa C, dikenal tiga jenis operator logika, yaitu sebagai berikut.
Tabel Operator logika.
Operator Keterangan
&& Operator AND, akan bernilai true jika kedua operannya bernilai true.
|| Operator OR, akan bernilai true jika kedua operannya bernilai true.
! Operator NOT akan menghasilkan kebalikan dari nilai input-nya.
i. Operasi seleksi
Dalam pemrograman C, dikenal konsep operator seleksi menggunakan
if...then yang penggunaannya sama seperti bahasa pemrograman lainnya.
Operator seleksi ini dapat digunakan pada satu kondisi dan banyak kondisi.
1) Seleksi satu kondisi
Jika sebuah kondisi menghasilkan nilai true, baris kode program
yang berada di dalam kurung kurawal {…} akan dieksekusi. Namun, jika
bernilai false, akan diabaikan. Format penulisan seleksi if...then dengan
satu kondisi adalah sebagai berikut.
if (kondisi)
{
//baris kode program
}
j. Operasi perulangan
1) Perulangan dengan for
Perulangan dengan for dilakukan secara terbatas dengan nilai awalan
dan nilai maksimal pengulangan yang telah ditentukan. Format penulisan
struktur perulangan for adalah sebagai berikut.
for (inisialisasi; syarat perulangan; nilai peubah)
{
//baris kode program
}
k. Input-Output
Untuk menerima input ataupun menampilkan output, terdapat beberapa
perintah yang dapat digunakan dalam bahasa C, yaitu sebagai berikut.
1) pinMode(no_pin,mode)
Perintah ini sering dipakai pada void setup() untuk menentukan
konfigurasi sebuah pin sebagai input atau sebagai output. Contoh
penulisannya adalah sebagai berikut.
pinMode(13, INPUT);
2) digitalRead(no_pin)
Perintah ini dapat digunakan untuk membaca nilai sebuah pin yang
dikonfigurasi sebagai penerima input. Jika bernilai high, tegangan yang
diperoleh adalah 5 volt. Namun, jika bernilai low, akan menjadi jalur
ground. Contoh penulisannya adalah sebagai berikut.
digitalRead(13);
3) digitalWrite(no_pin, nilai)
Perintah yang dapat diterapkan pada pin digital dari 0 – 13 dengan
nilai high atau low. Contoh penulisannya adalah sebagai berikut.
digitalWrite(13, HIGH);
4) analogRead(no_pin)
Perintah ini dapat digunakan untuk mengonfigurasi pin analog dari
A0 – A5 dengan output berupa angka 0 (refleksi tegangan 0 volt) hingga
angka 1.023 (tegangan 5 volt) Contoh penulisannya adalah sebagai berikut.
analogRead(A0); //artinya kode ini akan membaca nilai
sensor pada pin A0
5) analogWrite(no_pin, nilai)
Perintah ini digunakan untuk mengatur nilai pada pin analog. Contoh
penulisannya adalah sebagai berikut.
6) delay(t)
Perintah ini berfungsi memberikan jeda waktu, biasanya digunakan
untuk menghentikan sementara program selama waktu tertentu (t) dalam
satuan milisekon. Contoh penulisannya adalah sebagai berikut.
delay(1000);
7) millis()
Perintah ini berfungsi mengembalikan nilai waktu dalam satuan
milisekon (1 detik = 1.000 ms) dalam sebuah variabel bertipe data long.
Contoh penulisannya adalah sebagai berikut.
x = millis();
8) max(a,b)
Perintah ini digunakan untuk membandingkan dua nilai data dalam
dua variabel a dan b dengan hasil keluarannya adalah nilai variabel yang
terbesar. Contoh penulisannya adalah sebagai berikut.
x = max(x, 10);
9) min(a,b)
Perintah ini digunakan untuk membandingkan dua nilai data dalam
dua variabel a dan b dengan hasil keluarannya adalah nilai variabel yang
paling kecil. Contoh penulisannya adalah sebagai berikut.
x = min(x, 10);