Komputer hadir dalam kehidupan manusia baru 50 tahun terakhir, namun efeknya sangat besar dalam merubah
kehidupan manusia, bahkan melebihi penemuan manusia lainnya seperti radio, telepon, automobil, dan televisi.
Begitu banyak aplikasi memanfaatkan komputer, terutama dalam pemanfaatan kemampuan chip mikroprosesor di
dalamnya yang dapat melakukan komputasi sangat cepat, dapat bekerja sendiri dengan diprogram, dan dilengkapi
memori untuk menyimpan begitu banyak data. Seiring dengan perkembangan zaman, semakin luaslah kebutuhan
akan kemampuan seperti yang dimiliki oleh komputer, sehingga menyebabkan munculnya terobosan-terobosan baru
yang salah satunya adalah dibuatnya chip mikrokontroler.
Mikrokontroler adalah single chip computer yang memiliki kemampuan untuk diprogram dan digunakan untuk tugastugas yang berorientasi kontrol. Mikrokontroler datang dengan dua alasan utama, yang pertama adalah kebutuhan
pasar (market need) dan yang kedua adalah perkembangan teknologi baru. Yang dimaksud dengan kebutuhan pasar
adalah kebutuhan yang luas dari produk-produk elektronik akan perangkat pintar sebagai pengontrol dan pemroses
data. Sedangkan yang dimaksud dengan perkembangan teknologi baru adalah perkembangan teknologi
semikonduktor yang memungkinkan pembuatan chip dengan kemampuan komputasi yang sangat cepat, bentuk yang
semakin mungil, dan harga yang semakin murah.
PERBEDAAN MIKROKONTROLER DENGAN MIKROPROSESOR
Terdapat perbedaan yang signifikan antara mikrokontroler dan mikroprosessor. Perbedaan yang utama antara
keduanya dapat dilihat dari dua faktor utama yaitu arsitektur perangkat keras (hardware architecture) dan aplikasi
masing-masing.
Ditinjau dari segi arsitekturnya, mikroprosesor hanya merupakan single chip CPU, sedangkan mikrokontroler dalam
IC-nya selain CPU juga terdapat device lain yang memungkinkan mikrokontroler berfungsi sebagai suatu single chip
computer. Dalam sebuah IC mikrokontroler telah terdapat ROM, RAM, EPROM, serial interface dan paralel interface,
timer, interrupt controller, konverter Anlog ke Digital, dan lainnya (tergantung feature yang melengkapi mikrokontroler
tersebut).
Sedangkan dari segi aplikasinya, mikroprosessor hanya berfungsi sebagai Central Processing Unit yang menjadi otak
komputer, sedangkan mikrokontroller, dalam bentuknya yang mungil, pada umumnya ditujukan untuk melakukan
tugastugas yang berorientasi kontrol pada rangkaian yang membutuhkan jumlah komponen minimum dan biaya
rendah (low cost).
APLIKASI MIKROKONTROLER
Karena kemampuannya yang tinggi, bentuknya yang kecil, konsumsi dayanya yang rendah, dan harga yang murah
maka mikrokontroler begitu banyak digunakan di dunia. Mikrokontroler digunakan mulai dari mainan anak-anak,
perangkat elektronik rumah tangga, perangkat pendukung otomotif, peralatan industri, peralatan telekomunikasi,
peralatan medis dan kedokteran, sampai dengan pengendali robot serta persenjataan militer.
Terdapat beberapa keunggulan yang diharapkan dari alat-alat yang berbasis mikrokontroler (microcontroller-based
solutions) :
Kehandalan tinggi (high reliability) dan kemudahan integrasi dengan komponen lain (high degree of
integration).
Waktu pembuatan lebih singkat (shorter development time) sehingga lebih cepat pula dijual ke pasar sesuai
kebutuhan (shorter time to market).
ADC
Flash
RAM
EEPROM
Timer
Timer
UAR
Seri
(KBytes)
(Bytes)
16-bit
8-bit
PWM
10bit
SPI
ISP
ATmega8
1024
0.5
23
6/8
Ya
ATmega8535
512
0.5
32
Ya
ATmega16
16
1024
0.5
32
Ya
ATmega162
16
1024
0.5
35
Ya
ATmega32
32
2048
32
Ya
ATmega128
128
4096
53
Ya
ATtiny12
0.0625
Ya
ATtiny2313
128
0.125
18
Ya
ATtiny44
256
0.25
12
Ya
ATtiny84
512
0.5
12
Ya
Keterangan:
Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil buatan manusia
program.
Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa .
UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data khusus secara serial
asynchronous.
PWM (Pulse Width Modulation) adalah fasilitas untuk membuat modulasi pulsa.
ADC (Analog to Digital Converter) adalah fasilitas untuk dapat menerima sinyal analog dalam range tertentu
untuk kemudian dikonversi menjadi suatu nilai digital dalam range tertentu.
SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial secara serial
synchronous.
ISP (In System Programming) adalah kemampuan khusus mikrokontroler untuk dapat diprogram langsung
dalam sistem rangkaiannya dengan membutuhkan jumlah pin yang minimal.
ARSITEKTUR MIKROKONTROLER AVR
Mikrokontroler AVR sudah menggunakan konsep arsitektur Harvard yang memisahkan memori dan bus untuk data
dan program, serta sudah menerapkan single level pipelining. Selain itu mikrokontroler AVR juga
mengimplementasikan RISC (Reduced Instruction Set Computing) sehingga eksekusi instruksi dapat berlangsung
sangat cepat dan efisien.
Keterangan:
Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil buatan manusia
program.
Timer adalah modul dalam hardware yang bekerja untuk menghitung waktu/pulsa .
UART (Universal Asynchronous Receive Transmit) adalah jalur komunikasi data khusus secara serial
asynchronous.
PWM (Pulse Width Modulation) adalah fasilitas untuk membuat modulasi pulsa.
ADC (Analog to Digital Converter) adalah fasilitas untuk dapat menerima sinyal analog dalam range tertentu
untuk kemudian dikonversi menjadi suatu nilai digital dalam range tertentu.
SPI (Serial Peripheral Interface) adalah jalur komunikasi data khusus secara serial secara serial
synchronous.
ISP (In System Programming) adalah kemampuan khusus mikrokontroler untuk dapat diprogram langsung
dalam sistem rangkaiannya dengan membutuhkan jumlah pin yang minimal.
ARSITEKTUR MIKROKONTROLER AVR
Mikrokontroler AVR sudah menggunakan konsep arsitektur Harvard yang memisahkan memori dan bus untuk data
dan program, serta sudah menerapkan single level pipelining. Selain itu mikrokontroler AVR juga
mengimplementasikan RISC (Reduced Instruction Set Computing) sehingga eksekusi instruksi dapat berlangsung
sangat cepat dan efisien.
Blok sistem mikrokontroler AVR adalah sebagai berikut.
PORT C
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit).
Output buffer Port C dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data
Direction Register port C (DDRC) harus disetting terlebih dahulu sebelum Port C digunakan. Bit-bit DDRC diisi 0 jika
ingin memfungsikan pin-pin port C yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, dua
pin port C (PC6 dan PC7) juga memiliki fungsi alternatif sebagai oscillator untuk timer/counter 2.
PORT D
Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit).
Output buffer Port D dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data
Direction Register port D (DDRD) harus disetting terlebih dahulu sebelum Port D digunakan. Bit-bit DDRD diisi 0 jika
ingin memfungsikan pin-pin port D yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, pin-pin
port D juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut.
RESETRST pada pin 9 merupakan reset dari AVR. Jika pada pin ini diberi masukan low selama minimal 2 machine
cycle maka system akan di-reset.
XTAL1XTAL1 adalah masukan ke inverting oscillator amplifier dan input ke internal clock operating circuit.
XTAL2XTAL2 adalah output dari inverting oscillator amplifier.
AVccAvcc adalah kaki masukan tegangan bagi A/D Converter. Kaki ini harus secara eksternal terhubung ke Vcc
melalui lowpass filter.
AREF
AREF adalah kaki masukan referensi bagi A/D Converter. Untuk operasionalisasi ADC, suatu level tegangan antara
AGND dan Avcc harus dibeikan ke kaki ini.
AGNDAGND adalah kaki untuk analog ground. Hubungkan kaki ini ke GND, kecuali jika board memiliki anlaog
ground yang terpisah.
PEMROGRAMAN BAHASA C UNTUK AVR
Bahasa C luas digunakan untuk pemrograman berbagai jenis perangkat, termasuk mikrokontroler. Bahasa ini sudah
merupakan high level language, dimana memudahkan programmer menuangkan algoritmanya. Untuk mengetahui
dasar bahasa C dapat dipelajari sebagai berikut.
1. Struktur penulisan program
#include < [library1.h] > // Opsional
#include < [library2.h] > // Opsional#define [nama1] [nilai] ; // Opsional
#define [nama2] [nilai] ; // Opsional[global variables] // Opsional[functions] // Opsional
void main(void) // Program Utama
{
[Deklarasi local variable/constant]
[Isi Program Utama]
}
2. Tipe data
char : 1 byte ( -128 s/d 127 )
unsigned char : 1 byte ( 0 s/d 255 )
int : 2 byte ( -32768 s/d 32767 )
unsigned int : 2 byte ( 0 s/d 65535 )
long : 4 byte ( -2147483648 s/d 2147483647 )
unsigned long : 4 byte ( 0 s/d 4294967295 )
float : bilangan desimal
array : kumpulan data-data yang sama tipenya.
3. Deklarasi variabel & konstanta
Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah.
Penulisan : [tipe data] [nama] = [nilai] ;
Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah.
Penulisan : const [nama] = [nilai] ;
Tambahan:
Global variabel/konstanta yang dapat diakses di seluruh bagian program.
Local variabel/konstanta yang hanya dapat diakses oleh fungsi tempat dideklarasikannya.
4. Statement
Statement adalah setiap operasi dalam pemrograman, harus diakhiri dengan [ ; ] atau [ } ]. Statement tidak akan
dieksekusi bila diawali dengan tanda [ // ] untuk satu baris. Lebih dari 1 baris gunakan pasangan [ /* ] dan [ */ ].
Statement yang tidak dieksekusi disebut juga comments / komentar.
Contoh:
suhu=adc/255*100; //contoh rumus perhitungan suhu
5. Function
Function adalah bagian program yang dapat dipanggil oleh program utama.
Penulisan :
[tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2])
{
[statement] ;
}
6. Conditional statement dan looping
Biner
AND : &
OR : |
XOR : ^
Shift right: >>
Shift left : <<
Komplemen : ~
8. Operasi relasional (perbandingan)
Sama dengan : ==
Tidak sama dengan : !=
Lebih besar : >
Lebih besar sama dengan : >=
Lebih kecil : <
Lebih kecil sama dengan : <=
9. Operasi aritmatika
+ , , * , / : tambah,kurang,kali,bagi
+= , -= , *= , /= : nilai di sebelah kiri operator di tambah/kurang/kali/bagi dengan nilai di sebelah kanan operator
% : sisa bagi
++ , : tambah satu (increment) , kurang satu (decrement)
Contoh :
a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30
a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 305 = 150.
a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33.
a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6.
a ; jika nilai awal a adalah 5 maka nilai a = a-1 = 4.
RANGKAIAN SISTEM MINIMUM AVR 8535
Sistem minimum (sismin) mikrokontroler adalah rangkaian elektronik minimum yang diperlukan untuk beroperasinya
IC mikrokontroler. Sismin ini kemudian bisa dihubungkan dengan rangkaian lain untuk menjalankan fungsi tertentu. Di
keluarga mikrokontroler AVR, seri 8535 adalah salah satu seri yang sangat banyak digunakan.
Untuk membuat rangkaian sismin Atmel AVR 8535 diperlukan beberapa komponen yaitu:
IC mikrokontroler ATmega8535
3 kapasitor kertas yaitu dua 22 pF (C2 dan C3) serta 100 nF (C4)
1 kapasitor elektrolit 4.7 uF (C12) 2 resistor yaitu 100 ohm (R1) dan 10 Kohm (R3)
Selain itu tentunya diperlukan power suply yang bisa memberikan tegangan 5V DC.
Rangkaian sistem minimum ini sudah siap untuk menerima sinyal analog (fasilitas ADC) di port A. Gambar
rangkaiannya adalah sebagai berikut.
CARA BELAJAR
Belajar mikrokotroler pada hakikatnya adalah bermain-main dengan bilangan. Input apapun yang masuk ke dalam
CPU terlebih dahulu harus diubah ke dalam bentuk bilangan biner. Bilangan biner terdiri dari angka 1 (ya/ada
tegangan) dan 0 (tidak/tidak ada tegangan). Mengapa CPU yang hanya bisa membedakan angka 1 dan 0 bisa begitu
canggih? Untuk ilustrasi, jika kita punya memori 1 bit maka memori tersebut mampu menyimpan 2 kemungkinan yaitu
1 dan 0. Jika kita punya memori 4 bit maka memori tersebut mampu menyimpan 4 kemungkinan yaitu 00, 01, 10, 11.
Semakin banyak bit yang kita miliki maka semakin banyak kemungkinan yang ada.
Bit
Kemungkinan
Bit
Kemungkinan
0
1
Bit
0
KONSEP MIKROKONTROLER
Mikrokontroler adalah sebuah sistem microprosesor di mana di dalamnya sudah berisi CPU, ROM, RAM, I/O, Clock,
dan peralatan internal lainya yang saling terhubung dan terorganisasi dengan baik oleh pabrik pembuatnya dan
dikemas dalam satu chip yang siap dipakai. Sehingga kita tinggal memprogram isi ROM sesuai aturan penggunaan
oleh pabrik yang membuatnya. Cara mudah mengoperasikan peralatan internal mikrokontroler adalah dengan
mempelajari register-register pengendali peralatan tersebut.
Dalam menulis script program kita harus menggunakan bahasa pemprograman tersendiri agar script yang kita buat
dapat dimengerti oleh CPU. Bahasa pemprograman yang sering digunakan adalah bahasa Assembler dan Bahasa
C. Dibandingkan bahasa Assembler, Bahasa C adalah bahasa HLL (High Level Language) atau bahasa menengah
yang mudah untuk dibaca dan dibuat.
SISTEM BILANGAN DAN KONVERSI BILANGAN
Dalam bermain-main dengan mikrokontroler kita akan sering menemui 3 sistem bilangan yang biasa digunakan pada
pemprograman, yaitu bilangan desimal, bilangan heksadesimal dan bilangan biner.
Bilangan Desimal
Bilangan desimal (basis 10) adalah bilangan yang memiliki sepuluh simbol angka, yaitu 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
0x2C = 32+10 = 47
Konversi Desimal ke Heksadesimal
500 = ?
500/16 = 31
31/16 = 1 (msd)
sisa 4 (lsd)
sisa 15 (dalam heksa = F)
500 = 14F
Konversi Desimal ke Biner
200 = ?
Ubah desimal ke heksadesimal lalu ke biner
200/16 = 12 (dalam heksa = C) sisa 8
200 = 0xC8
C = 8+4+0+0 = 1100 biner
8 = 8+0+0+0 = 1000 biner
200 = 0xC8 = 0b11001000
Bilangan kelipatan (2n) :
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 (2n)
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536 (desimal)
1, 2, 4, 8, 10, 20, 40, 80, 100, 200, 400, 800, 1000, 2000, 4000, 8000, 10000 (heksa desimal)
Bagaimana jika kita sudah bermain dengan bilangan 16 sampai 32 bit? Alternatif termudah adalah kita dapat
menggunakan kalkulator pada Microsoft Windows (klik Start All Programs Accecories Calculator).
Pilih programmer
Klik Hex, maka secara otomatis angka 255 akan berubah menjadi FF
Interrupt dapat diartikan pula sebagai menyela, mengangkat telpon merupakan proses interrupt sedangkan membaca
koran adalah aktivitas rutin yang kita lakukan.
Untuk membangkitkan interrupt ada 4 kemungkinan, yaitu :
1.
Level rendah
2.
Datar
3.
Perpindahan 1 ke 0
4.
Perpindahan 0 ke 1
Contoh :
Jika yang diinginkan adalah The Rissing Edge (perpindahan 0 ke 1) artinya saat kita mulai menekan tombol maka
interrupt terjadi dan kita akan menggunakan INT0.
Lihat tabel untuk INT0, The Rissing Edge terdiri dari ISC01=1 dan ISC00=1
Lihat Bit registri interrupt, set MCUCR untuk ISC01 dan ISC00 berada pada bit 0 dan bit 1
Jadi untuk memberi nilai dari ISC01=1 dan ISC00=1 maka penulisannya adalah MCUCR=003. Sesuai dengan tabel
untuk INT0 dan kondisi yang diinginkan
2. Set MCU Control Status Register MCUCSR
Digunakan untuk interrupt 2 (INT2)
Pilih interrupt mana yang akan digunakan, misal INT1 maka set GICR=080.
General Interrupt Flag Register GIFR
Adalah penanda jika terjadi interrupt
Secara otomatis GIFR akan menampilan flag mana yang dipakai untuk interrupt.
TIMER0
Memiliki hingga 10 bit clock prescale (pemilh clock yang masuk ke timer/counter)
Timer (pembagi)
Dari gambar tersebut X-tal 1 Mhz yang merupakan frekuensi dari luar software karena berasal dari hardware diseleksi
dengan Prescaler 1024 sehingga Clock time yang didapat, yaitu:
Clock time
= Xtal/Prescaler
Clock time
= 1.000.000/1024
Clock time
= 976 Hz
Clock time
= 0,976 kHz
= 1/ T
Periode (T)
= 1/ f
Periode (T)
Pada mode normal TCNT akan mencacah hingga 0xFF (255) setelah itu akan terjadi overflow, keajadian ini akan
terus berlangsung selama program berjalan.
1 overflow (OV)
1 overflow (OV)
=256 x (1/976)
1 overflow (OV)
=0,26229508196721311475409836065574 detik
= 1/ 0,26229508196721311475409836065574
=3,8125 kali
= 256 x 3
N1
=768
N1
=00300
= 256 x 0, 8125
N2
=208
N2
=0xD0
Timer (pembagi)
Dari gambar tersebut X-tal 1 Mhz yang merupakan frekuensi dari luar software karena berasal dari hardware diseleksi
dengan Prescaler 1024 sehingga Clock time yang didapat, yaitu:
Clock time
= Xtal/Prescaler
Clock time
=1000000/1024
Clock time
=976,5625 Hz
Clock time
=0,976 kHz
= 1/ T
Periode (T)
= 1/ f
Periode (T)
Pada mode normal TCNT akan mencacah hingga 0xFFFF (65535) setelah itu akan terjadi overflow, keajadian ini
akan terus berlangsung selama program berjalan.
TCNT dibagi menjadi 2 nible (atas dan bawah) jika TCNT akan mencacah hingga 0xAECF
TCNTH
= 0xAE
TCNTL
= 0xCF
1 overflow (OV)
= 65535 x frekuensi
1 overflow (OV)
=65535 x (1/976,5625)
1 overflow (OV)
=67,10784 detik
= 1/ 67,10784
=0,01490138857099259937438010223545 kali
= 65535 x 0,01490138857099259937438010223545
=976,5625
Jadi agar terjadi overflow maka TCNT diset pada nilai awal
TCNT = Jumlah cacahan N
TCNT = 65535 976,5625
= X-Tal / Prescaler
=1/f
OV = Max / T
OV =Max / f
OV =(Max * Prescaler) / X-Tal
S
= 1 / OV
=X-Tal / Prescaler
TCNT = Max (t * N)
Hitung ulang contoh :
TCNT
= Max (t * N)
TCNT
TCNT
TCNT
TCNT
=64559,4375 (desimal)
TCNT
=0xFC2F (heksadesimal)
TCNTH
= 0xFC
TCNTL
= 0x2F
Clock/ 1024
Force output comparer = off
Waveform generation mode= normal
Comparer match output mode = disconnect
Contoh : jika menggunakan X-Tal 1Mz dan set TCCR0=005, artinya prescaler yg dipilih adalah 1024 sehingga pulsa
yg masuk akan diseleksi dan berubah menjadi 1Mz/1024= 976Hz bukan 1Mz lagi.
2. Set TCNT0
TCNT0 = 000; dimulai dari hitungan 0
TCNT0 = 0x0F; dimulai dari hitungan 128
3. Set OCR0
OCR0 = 000; karena tidak menggunakan pembanding, mode CTC dan PWM
4. Set TIMSK secara otomatis akan diset saat terjadi overflow atau comparer
OCIE0 = 1;
flag comparer
TPIE0 = 0;
flag timer/counter
flag comparer
TOV0 = 1;
TIFR = 002
Mode operasi :
Normal, TCNT0 menghitung hingga 0xFF dan kemudian terjadi overflow.
CTC, TCNT0 menghitung hingga TCNT0 == OCR0 dan OCFO otomatis diset menjadi 1.