BAB III LANDASAN TEORI 3.1
Mikrokontroler AVR ATmega328P
Pada penelitian ini, digunakan mikrokontroler AVR ATmega328P. Mikrokontroler adalah IC yang dapat diprogram berulang kali, baik ditulis atau dihapus (Agus Bejo, 2007). Biasanya digunakan untuk pengontrolan otomatis dan manual pada perangkat elektronika. Beberapa tahun terakhir, mikrokontroler sangat banyak digunakan terutama dalam pengendalian otomatis. Seiring perkembangan elektronika, mikrokontroler dibuat semakin kompak dengan bahasa pemrograman yang juga ikut berubah. Salah satunya adalah mikrokontroler AVR ( ( Alf and Vegard’s Risc processor ) ATmega328P yang menggunakan teknologi RISC ( Reduce Instruction Set Computing) dimana program berjalan lebih cepat karena hanya membutuhkan
satu siklus clock untuk mengeksekusi satu instruksi program. Secara umum, AVR dapat dikelompokkan menjadi tiga kelas, yaitu TinyAVR, AT90Sxx, dan ATmega. Pada dasarnya yang membedakan masingmasing kelas adalah memori, peripheral, dan fungsinya. Dari segi arsitektur dan instruksi yang digunakan, mereka bisa dikatakan hampir sama. Tabel 3.1 adalah tabel spesifikasi keluarga AVR.
Tabel 3.1 Spesifikasi mikrokontroler keluarga AVR(Andrianto, 2008) Mikrokontroler AVR
Memori
Jenis
Jumlah Pin
Flash
EEPROM
SRAM SRAM
TinyAVR
8-32
1-2K
64-128
0-128
AT90Sxx
20-44
1-8K
128-512
0-1K
ATmega
32-64
8-128K
512-4K
512-4K
7
8
3.1.1
Fitur mikrokontroler AVR ATmega328P
Beberapa fitur yang dimiliki AVR ATmega328P antara lain: 1. Mikrokontroler AVR 8 bit yang memiliki kemampuan tinggi dengan konsumsi daya yang rendah. 2. Saluran I/O sebanyak 23 buah yang dapat diprogram. 3. ADC internal sebanyak 6 saluran. 4. CPU yang terdiri atas 32 buah register. 5. SRAM sebesar 2K byte. 6. Tiga buah Timer/Counter dengan kemampuan pembandingan. 7. Memori Flash sebesar 32K byte. 8. Port antarmuka SPI. 9. EEPROM sebesar 1K byte. 10. Antarmuka komparator analog. 11. Port USART untuk komunikasi serial. 12. Enam buah channel PWM. 13. Dan lain-lainnya.
3.1.2
Konstruksi mikrokontroler AVR ATmega328P
Mikrokontroler ATmega328P memiliki 3 jenis memori, yaitu memori program, memori data dan memori EEPROM. Ketiganya memiliki ruang sendiri dan terpisah. a. Memori program ATmega328P memiliki kapasitas memori progam sebesar 8K byte yang terpetakan dari alamat 0x0000 – 0x3FFF dimana masing-masing alamat memiliki lebar data 32 bit. Memori program ini terbagi menjadi 2 bagian yaitu bagian program boot dan bagian program aplikasi. b. Memori data Memori data ATmega328P terbagi menjadi 3 bagian yaitu register serba guna, register I/O dan SRAM. ATmega328P memiliki 32 register serba guna, 64 register I/O yang dapat diakses sebagai bagian dari memori RAM (menggunakan instuksi LD atau ST) atau dapat juga diakses sebagai I/O
9
(menggunakan instruksi IN atau OUT), dan 2048 byte memori data SRAM. c. Memori EEPROM ATmega328P memiliki memori EEPROM sebesar 1K byte yang terpisah dari memori program maupun memori data. Memori EEPROM ini hanya dapat diakses dengan menggunakan register-register I/O yaitu register EEPROM Address, register EEPROM Data, dan register EEPROM Control. Untuk
mengakses memori EEPROM ini diperlakukan seperti mengakses data eksternal, sehingga waktu eksekusinya relatif lebih lama bila dibandingkan dengan mengakses data dari SRAM.
ATmega328P merupakan tipe AVR yang telah dilengkapi dengan 8 saluran ADC internal dengan fidelitas 10 bit. Dalam mode operasinya, ADC ATmega328P dapat dikonfigurasi, baik secara single ended input maupun differential input . Selain itu, ADC ATmega328P memiliki konfigurasi pewaktuan,
tegangan referensi, mode operasi, dan kemampuan filter derau yang amat fleksibel, sehingga dengan mudah disesuaikan dengan kebutuhan ADC itu sendiri. ATmega328P memiliki tiga modul timer yang terdiri dari dua buah timer/counter 8 bit dan 1 buah timer/counter 16 bit. Ketiga modul timer/counter ini dapat diatur dalam mode yang berbeda secara individu dan tidak saling mempengaruhi satu sama lain. Selain itu, semua timer/counter juga dapat difungsikan sebagai sumber interupsi. Masing-masing timer/counter ini memiliki register tertentu yang digunakan untuk mengatur mode dan cara kerjanya. Serial Peripheral Interface (SPI) merupakan salah satu mode komunikasi
serial syncrhronous kecepatan tinggi yang dimiliki oleh ATmega328P. Universal Syncrhronous and Asyncrhronous Serial Receiver and Transmitter (USART) juga
merupakan salah satu mode komunikasi serial yang dimiliki oleh ATmega328P. USART merupakan komunikasi yang memiliki fleksibilitas tinggi, yang dapat digunakan untuk melakukan transfer data baik antar mikrokontroler maupun dengan modul-modul eksternal termasuk PC yang memiliki fitur UART.
10
3.1.3
Konfigurasi pin mikrokontroler AVR ATmega328P
Gamabar 3.1 berikut menunjukkan konfigurasi pin dari mikrokontroler ATmega328P.
Gambar 3.1 Konfigurasi pin ATmega328P (Data Sheet AVR)
3.2
Arduino
Arduino adalah kit elektronik atau papan rangkaian elektronik open source yang
di
dalamnya
terdapat
komponen
utama
yaitu
sebuah
chip
mikrokontroler dengan jenis AVR dari perusahaan Atmel. Beberapa keunggulan yang dimiliki oleh Arduino antara lain: 1. Tidak perlu perangkat chip programmer karena di dalamnya sudah ada bootloader yang akan menangani upload program dari komputer. 2. Sudah memiliki sarana komunikasi USB, sehingga pengguna laptop yang tidak memiliki port serial/RS323 bisa menggunakannya. 3. Bahasa pemrograman relatif mudah karena software Arduino dilengkapi dengan kumpulan library yang cukup lengkap.
11
4. Memiliki modul siap pakai (shield) yang bisa ditancapkan pada board Arduino. Misalnya shield GPS, Ethernet, SD Card, dan lain-lain.
Bahasa pemrograman Arduino adalah bahasa C. Tetapi bahasa ini sudah dipermudah menggunakan fungsi-fungsi yang sederhana sehingga pemula pun bisa mempelajarinya dengan cukup mudah.
3.2.1
Arduino UNO
Papan Arduino UNO menggunakan mikrokontroler ATmega328P. Papan ini mempunyai 14 pin input/output digital (enam diantaranya dapat digunakan untuk output PWM), enam buah input analog, 16 MHz crystal oscillator, sambungan USB, ICSP header, dan tombol reset. Hampir semua yang dibutuhkan untuk mendukung mikrokontroler sudah tersedia, penggunaannya cukup dengan menghubungkan ke komputer dengan menggunakan kabel USB atau dengan memberikan daya menggunakan adapter AC ke DC atau dengan baterai. Gambar 3.2 menunjukkan tampilan papan Arduino UNO dari atas.
Gambar 3.2 Arduino UNO
Arduino UNO ini memiliki perbedaan dengan papan-papan Arduino yang lain, dimana pada versi-versi Arduino sebelumnya digunakan chip FTDI USB-toserial, namun pada Arduino UNO digunakan ATmenga8U2 yang diprogram sebagai converter USB-to-serial. Kata “UNO” merupakan bahasa Italia yang artinya adalah satu, dan diberi nama demikian sebagai penanda peluncuran Arduino 1.0. Arduino UNO merupakan versi yang paling baru hingga saat ini dari
12
kelompok papan Arduino USB. Arduino UNO bersama dengan Arduino 1.0 selanjutnya menjadi acuan untuk pengembangan Arduino versi selanjutnya. Gambar 3.3 berikut ini menunjukkan pemetaan pin Arduino UNO terhadap mikrokontroler ATmega328P.
Gambar 3.3 Pemetaan pin Arduino UNO terhadap ATmega328P
Arduino UNO mempunyai beberapa fasilitas untuk dapat berkomunikasi dengan komputer, Arduino lain, atau dengan mikrokontroler lain. Mikrokontroler ATmega328P pada Arduino UNO menyediakan komunikasi serial UART TTL (5V), yang tersedia pada pin 0 (RX) dan 1 (TX).
ATmega8U2 pada papan
Arduino UNO menyalurkan komunikasi serial ini melalui USB dan dilihat hadir sebagai com port virtual pada software di komputer. Firmware dari Atmega8U2 menggunakan driver USB COM standar, dan tidak dibutuhkan driver eksternal. Software Arduino memiliki serial monitor yang memungkinkan data teks sederhana dikirim ke dan dari Arduino. LED RX dan TX akan berkedip ketika data sedang ditransmisikan melalui chip USB-to-serial. ATmega328P juga mendukung komunikasi I2C (TWI) dan SPI. Software Arduino mempunyai
13
library Wire dan SPI untuk menyederhanakan penggunaan bus I2C dan komunikasi SPI.
3.2.2
Arduino IDE
Arduino IDE adalah sebuah editor yang digunakan untuk menulis program,
mengcompile,
dan
mengunggah
ke
papan
Arduino.
Arduino
development environment terdiri dari editor teks untuk menulis kode, area pesan, console teks, toolbar dengan tombol-tombol untuk fungsi umum, dan sederetan menu. Software yang ditulis menggunakan Arduino dinamakan
sketches.
Sketches ini ditulis di editor teks dan disimpan dengan file yang berekstensi .ino. Editor teks ini mempunyai fasilitas untuk cut/paste dan search/replace. Area pesan berisi umpan balik ketika menyimpan dan mengunggah file, dan juga menunjukkan jika terjadi error. Dalam penggunaan, arduino hanya perlu mendefinisikan dua fungsi untukmmembuat program dapat dijalankan, yaitu: 1. Setup (): fungsi dijalankan sekali pada awal program yang dapat menginisialisasi pengaturan. 2. Loop (): fungsi yang disebut berulang-ulang sampai mikrokontoler mati. Ketika suatu sketch diunggah, maka digunakan Arduino bootloader, yaitu program kecil yang sudah dimuat di mikrokontroler yang terpasang di papan Arduino. Bootloader ini memungkinkan untuk melakukan pengunggahan kode program ke mikrokontroler tanpa perangkat tambahan. Bootloader akan aktif untuk beberapa detik ketika papan direset, kemudian aktif lagi kapan saja sketch diunggah ke mikrokontroler. Bootloader akan membuat LED on-board (pin 13) berkedip ketika program dijalankan. Gambar 3.4 menunjukkan tampilan dari Arduino IDE.
14
Gambar 3.4 Arduino IDE
Berikut dapat dilihat pada tabel 3.2 beberapa instruksi dasar yang digunakan di Arduino.
Tabel 3.2 Beberapa instruksi dasar Arduino IDE Instruksi
do..while, for() pinMode() If()..else
Keterangan
Perulangan Mengatur apakah sebuah pin berfungsi sebagai input atau output Percabangan
digitalWrite(), digitalRead()
Memberikan nilai digital pada pin
analogWrite(), analogRead
Memberikan nilai analog pada pin
delay()
Waktu tunda milidetik
15
3.3
Sensor Suhu LM35
Sensor suhu LM35 adalah komponen elektronika yang memiliki fungsi untuk mengubah besaran suhu menjadi besaran listrik dalam bentuk tegangan. Sensor Suhu LM35 yang dipakai dalam penelitian ini berupa komponen elektronika yang diproduksi oleh National Semiconductor . LM35 memiliki keakuratan tinggi dan kemudahan perancangan jika dibandingkan dengan sensor suhu yang lain. LM35 juga mempunyai keluaran impedansi yang rendah dan linieritas yang tinggi sehingga dapat dengan mudah dihubungkan dengan rangkaian kendali khusus serta tidak memerlukan penyetelan lanjutan. Meskipun tegangan sensor ini dapat mencapai 30 volt akan tetapi yang diberikan kesensor adalah sebesar 5 volt, sehingga dapat digunakan dengan catu daya tunggal dengan ketentuan bahwa LM35 hanya membutuhkan arus sebesar 60 µA, hal ini berarti LM35 mempunyai kemampuan menghasilkan panas ( selfheating) dari sensor yang dapat menyebabkan kesalahan pembacaan yang rendah
yaitu kurang dari 0,5 ºC pada suhu 25 ºC.
Gambar 3.5 Sensor suhu LM35
Gambar 3.5 di atas menunjukan bentuk dari LM35 tampak bawah. 3 pin LM35 menujukan fungsi masing-masing pin, diantaranya pin 1 berfungsi sebagai sumber tegangan kerja dari LM35, pin 2 atau tengah digunakan sebagai tegangan keluaran atau Vout dengan jangkauan kerja dari 0 Volt sampai dengan 1,5 Volt dengan tegangan operasi sensor LM35 yang dapat digunakan antar 4 Volt sampai 30
Volt.
Keluaran
sensor
ini
akan
naik
sebesar
derajat celcius sehingga diperoleh persamaan sebagai berikut :
10
mV
setiap
16
*
VLM35 = Suhu 10 mV Secara prinsip sensor akan melakukan penginderaan pada saat perubahan suhu setiap suhu 1 ºC akan menunjukan tegangan sebesar 10 mV. Pada penempatannya LM35 dapat ditempelkan dengan perekat atau dapat pula disemen pada
permukaan
akan
tetapi
suhunya
akan
sedikit
berkurang
sekitar
0,01 ºC karena terserap pada suhu permukaan tersebut. Dengan cara seperti ini diharapkan selisih antara suhu udara dan suhu permukaan dapat dideteksi oleh sensor LM35 sama dengan suhu disekitarnya, jika suhu udara disekitarnya jauh lebih tinggi atau jauh lebih rendah dari suhu permukaan, maka LM35 berada pada suhu permukaan dan suhu udara disekitarnya . Jarak yang jauh diperlukan penghubung yang tidak terpengaruh oleh interferensi dari luar, dengan demikian digunakan kabel selubung yang ditanahkan sehingga dapat bertindak sebagai suatu antenna penerima dan simpangan didalamnya, juga dapat bertindak sebagai perata arus yang mengkoreksi pada kasus yang sedemikian, dengan mengunakan metode bypasskapasitor dari Vin untuk ditanahkan. (http://shatomedia.com/2008/12/sensor-suhu-lm35/) Berikut ini adalah karakteristik dari sensor LM35. 1. Memiliki sensitivitas suhu, dengan faktor skala linier antara tegangan dan suhu10 mVolt/ºC, sehingga dapat dikalibrasi langsung dalam celcius. 2. Memiliki ketepatan atau akurasi kalibrasi yaitu 0,5ºC pada suhu 25 ºC. 3. Memiliki jangkauan maksimal operasi suhu antara -55 ºC sampai +150 ºC. 4. Bekerja pada tegangan 4 sampai 30 volt. 5. Memiliki arus rendah yaitu kurang dari 60 µA. 6. Memiliki pemanasan sendiri yang rendah ( low-heating) yaitu kurang dari 0,1 ºC pada udara diam. 7. Memiliki impedansi keluaran yang rendah yaitu 0,1 W untuk beban 1 mA. 8. Memiliki ketidaklinieran hanya sekitar ± ¼ ºC.
17
3.4
LDR (Light Dependent Resistor)
LDR pada penelitian kali ini digunakan sebagai sensor cahaya. LDR merupakan sebuah sensor jenis semikonduktor yang terbuat dari cadmium selenoide dan timah sulfide. Sebuah LDR terdiri dari sebuah piringan bahan semikonduktor dengan dua buah electrode pada permukaannya. Nilai tahanan dari LDR ini akan berubah-ubah menyesuaikan dengan intensitas cahaya yang diterimanya. Dalam keadaan gelap atau intensitas cahaya yang kecil, bahan piringan hanya mengandung electron bebas dalam jumlah yang relati ve sangat kecil. Hanya tersedia sedikit electron bebas untuk mengalirkan muatan listrik. Hal ini berarti bahwa dalam keadaan ini bahan bersifat sebagai konduktor arus listrik yang buruk karena nilai tahanannya sangat tinggi. Dalam keadaan yang terang atau intensitas cahaya cukup besar, lebih banyak elektron yang melepaskan diri dari atom-atom bahan semikonduktor ini. Terdapat lebih banyak electron bebas yang dapat mengalirkan muatan listrik. Dalam keadaan ini, bahan bersifat sebagai konduktor yang baik. Semakin besar intensitas cahaya yang diterima, maka semakin banyak electron bebas yang tersedia, dan tahanan menjadi semakin rendah.
3.5
Motor DC
Motor DC merupakan perangkat yang berfungsi merubah besaran listrik menjadi
besaran
mekanik.
Prinsip
kerja
motor
didasarkan
pada
gaya
elektromagnetik. Motor DC bekerja bila mendapatkan tegangan searah yang cukup pada kedua kutubnya. Tegangan ini akan menimbulkan induksi elektromagnetik yang menyebabkan motor berputar. Secara umum, kecepatan putaran poros motor DC akan meningkat seiring dengan meningkatnya tegangan yang diberikan. Dengan demikian, putaran motor DC akan berbalik arah jika polaritas tegangan yang diberkan juga dirubah. Motor DC tidak dapat dikendalikan langsung oleh mikrokontroler, karena kebutuhan arus yang besar sedangkan keluaran arus dari mikrokontroler sangat kecil. Driver motor merupakan alternatif yang dapat digunakan untuk menggerakkan motor DC.
18
3.6
RTOS (Real Time Operating System)
RTOS adalah system operasi yang ditujukan untuk aplikasi-aplikasi yang bersifat real time. Karakter dasar dari RTOS adalah sebuah sistem yang mempunyai beberapa konsekuensi yang akan berpengaruh pada sistem apabila deadline (batas akhir waktu pelaksanaan task ) tidak terpenuhi. RTOS sendiri
terdiri dari 2 jenis yaitu, sistem soft RTOS dan sistem hard RTOS. Soft RTOS bisa dideskripsikan sebagai sistem yang hampir selalu
menyelesaikan task dengan waktu yang telah ditentukan. Pada soft RTOS kemungkinan penyelesaian task melewati batas waktu pelaksanaan task masih bisa terjadi. Dan pada sistem soft RTOS , apabila terjadi kegagalan mencapai deadline dalam waktu yang telah ditentukan maka sistem akan mengalami efek
yang tidak begitu berbahaya bagi sistem. Contohnya seperti penurunan performa sistem. Sedangkan hard RTOS merupakan system yang dipastikan selalu menyelesaikan task dalam waktu yang telah ditentukan. Dikatakan pasti selalu menyelesaikan task karena hard RTOS selalu menyelesaikan task sebelum deadline dan apabila terjadi kegagalan menyelesaikan task maka sistem akan
mengalami efek berbahaya yang dapat merusak sistem secara keseluruhan.
3.6.1
Task
Sebuah task , merupakan sebuah objek/program yang dapat dieksekusi dan beranggapan mempunyai CPU untuk task itu sendiri. Salah satu proses perancangan aplikasi dengan RTOS yaitu membagi semua pekerjaan dalam aplikasi tersebut menjadi beberapa bagian task . Tiap task merupakan loop yang akan terus berulang. Dalam proses pengulangan tersebut, task akan mengalami tiga buah keadaan seperti pada gambar 3.6 yaitu:
Running, merupakan keadaan di mana sebuah task dengan prioritas
tertinggi berjalan
Ready, merupakan keadaan yang dialami sebuah task jika terdapat sebuah task lain sedang running dan task yang berada pada ready akan
19
melanjutkan pengerjaan task yang sempat tertunda oleh task yang lebih tinggi prioritasnya.
Blocked, merupakan keadaan di mana jika sebuah task membutuhkan event atau data maka akan masuk ke dalam blocked hingga event atau data
yang dibutuhkan telah tersedia.
Gambar 3.6 Siklus state pada RTOS
3.6.2
Kernel
Kernel merupakan salah satu bagian dari sistem multitasking yang mempunyai fungsi sebagai manajemen dari seluruh task, mengatur komunikasi tiap task dan yang terpenting adalah mengatur pewaktuan untuk CPU sehingga tidak terjadi crash pada CPU. Untuk kernel sendiri terdiri dari dua jenis yaitu, non-preemptive dan preemptive. Non-preemptive scheduling biasa dikenal dengan nama lain cooperative multitasking, di mana task bekerja satu sama lain untuk berbagi CPU. ISR bisa membuat sebuah task dengan prioritas tertinggi menjadi siap untuk dieksekusi, tetapi kemudian ISR akan kembali ke task yang sebelumnya mendapat interupsi. Task yang sudah siap tadi akan berjalan apabila task yang mendapat interupsi tadi sudah selesai berjalan atau dengan kata lain task yang sudah selesai
20
berjalan akan menyerahkan CPU kepada task dengan prioritas tertinggi (seperti konsep pada lari estafet, di mana pelari sebelumnya menyerahkan tongkat estafet kepada pelari selanjutnya).
Gambar 3.7 Skema prinsip kerja non-preemptive kernel
Dari penjelasan gambar 3.7 di atas dapat diambil kesimpulan, bahwa non preemptive kernel menjalankan task berurutan sehingga tidak akan terjadi
tabrakan antar task . Hal ini dikarenakan untuk menjalankan tiap task dibutuhkan CPU dan CPU hanya bisa didapat apabila task sebelumnya sudah selesai melakukan tugasnya. Preemptive kernel banyak digunakan untuk membuat aplikasi dengan
RTOS. Hal ini karena preemptive kernel mempunyai respons yang lebih bagus daripada non-preemptive kernel. Di mana task dengan prioritas tertinggi yang sudah siap dieksekusi akan langsung berjalan. Dan jika pada saat itu sedang ada task dengan prioritas yang lebih rendah berjalan maka task dengan prioritas rendah tersebut akan ditunda.
21
Jadi dapat disimpulkan bahwa preemptive kernel selalu mendahulukan task dengan prioritas tertinggi yang siap untuk dieksekusi. Dengan preemptive kernel respons sistem bisa mencapai optimal dan waktu untuk menjalankan task dengan prioritas tertinggi bisa ditentukan berbeda dengan non preemptive kernel yang tidak bias ditentukan. Gambar 3.8 berikut menjelaskan priinsip kerja dari preemptive kernel.
Gambar 3.8 Skema prinsip kerja preemptive kernel 3.6.3
Clock Tick Clock tick merupakan interupsi special yang muncul secara periodik.
Clock tick bias dianggap sebagai detak jantung dari sistem yang berfungsi sebagai
dasar untuk menentukan timer pada sistem real time dengan RTOS. Waktu untuk tiap munculnya clock tick bisa ditentukan pada saat merancang sistem RTOS. Semakin cepat clock tick , semakin besar beban yang ditanggung oleh CPU. Semua kernel mampu untuk menunda task sesuai dengan nilai dari clock tick .
22
3.6.4
DuinOS
DuinOS merupakan salah satu dari sekian banayak RTOS yang tersedia pada saat ini. DuinOS adalah RTOS yang menggunakan preemptive multitasking system yang dirancang untuk digunakan pada platform Arduino dan papan pengembangan berbasis Atmel AVR. DuinOS ini dikembangkan oleh sekelompok komunitas elektronika di Perancis yang bernama RobotGroup. RTOS ini menggunakan kernel dari FreeRTOS yang dimodifikasi sehingga sifatnya open source, dan dapat digunakan secara langsung dalam Arduino IDE. Beberapa mikrokontroler yang sudah didukung oleh RTOS ini antara lain ATmega168, ATmega328, ATmega644, ATmega1280, dan ATmega1284. 3.7
Processing
Pada penelitian ini digunakan Processing untuk membuat program penampil suhu dan log data pada komputer yang terhubung dengan board Arduino melalui komunikasi serial. Processing adalah IDE dan bahasa pemrograman yang bersifat open source yang dibuat untuk komunitas elektronika dan desain visual dengan tujuan untuk memudahkan menggunakan dasar-dasar pemrograman computer dalam konteks visual. Proyek Processing ini digagas pada tahun 2001 oleh Casey Reas dan Benjamin Fry yang meruapakan alumni dari Asthetics and Computation Group di MIT Media Lab. Bahasa yang digunakan didasarkan pada bahasa pemrograman Java, namun digunakan syntax yang disederhanakan.