MODUL 2 TIMER, COUNTER, INTERRUPT Valahdyo Arbandy (13116136) Asisten : M. Farid Hasan (13115012) Tanggal Percobaan : 11/03/2019 EL3203 Praktikum Sistem Mikroprosesor Laboratorium Teknik Elektro Institut Teknologi Sumatera
Abstrak— Percobaan kali ini membuat program Timer, counter dan interrupt menggunakan Bahasa C pada WinAVR dan mengaplikasikan pada Mikrokontroler AVR. Praktikan juga membuat aplikasi eksternal interrupt pada AVR.Praktikum kali ini mikrokontroler yang digunakan AVR ATMega8535. Kata Kunci— ATMega8535
Timer, Counter, Interrupt, mikrokontroler,
I. PENDAHULUAN
M
IKROKONTROLER AVR ATMEGA32 memiliki 4 buah port I/O, yaitu PORTA, PORTB, PORTC, dan PORTD yang pada setiap port memiliki 8 kaki I/O (ciri mikrokontroler 8-bit). Sehingga secara keseluruhan mikrokontroler AVR ATMEGA32 memiliki 32 jalur untuk berkomunikasi dengan peranti input atau peranti output. Adapun Tujuan praktikum kali ini yaitu :
Praktikan memahami datasheet ATMega 8535 Praktikan mampu membuat aplikasi Timer/ Counter dan Interrupt pada AVR dengan menggunakan bahasa pemprograman C pada WinAVR. Praktikan mampu membuat aplikasi External Interrupt pada AVR dengan menggunakan bahasa pemprograman C pada WinAVR.
II. LANDASAN TEORETIS Timer merupakan fitur yang telah tertanam di dalam mikrokontroler AVR yang memiliki fungsi terhadap waktu. Fungsi timer yang dimaksud disini adalah penentuan kapan program tersebut akan dijalankan dan kapan program tersebut akan berhenti. Timer mikorokontroler AVR tersusun dari beberapa register, yang nilai nya berkurang dan bertambah secara otomatis. Pada mikrokontroler AVR terdapat dua jenis timer, yaitu : timer 8bit dan timer 16-bit. Pada timer 8-bit, register yang digunakan memiliki lebar 8-bit yang berarti mampu menghitung sebanyak
2^8=256, yaitu : dari nilai 0 hingga 255, seperti pada gambar dibawah ini. pada timer 16-bit lebar register juga sebesar 16-bit. karena memiliki lebar register yang lebih besar, timer 16-bit mampu menghitung sebanyak 2^16=65536, yaitu: dari 0 hingga 65535, sehingga juga dapat digunakan sebagai pencacah (counter) dimana perbedaannya terdapat pada sumber clocknya. pada timer, sumber clocknya berasal dari internal mikrokontroler itu sendiri. Sedangkan Counter, sumber clocknya berasal dari luar mikrokontroler (eksternal). Jika perhitungan atau pencacahan pada timer 8-bit maupun timer 16bit sudah mencapai nilai maksimum nya yaitu 255 pada timer 8 bit dan 65535 pada timer 16-bit maka yang akan terjadi adalah keadaan overflow (penuh) dimana nilai perhitugan akan kembali ke nilai nol. Keadaan overflow pada timer/counter ini kemudian bisa dimanfatkan sebagai sumber interupsi pada aplikasi-aplikasi selanjutnya. Jika kita ingin membuat delay sebesar 20 ms dengan menggunakan timer 16-bit (MAX – 65535) dan menggunakan XTAL 4 MHz maka frekuensi CPU (F_CPU) nya juga sebesar 4 MHz. Jika kita masukkan pada rumus di atas maka delay maksimum yang dapat dihasilkan oleh sistem yang kita gunakan hanya sebesar 16.384 ms. Lalu bagaimanakah solusinya agar delay yang dihasilkan lebih besar dari 16.384 ? jawaban nya adalah dengan mengurangi F_CPU dari 4 MHz menjadi 0.5 MHz atau 500 KHz, sehingga periode clock-nya meningkat menjadi 1/500k = 0.002 ms. Sekarang kita memasukkan pada rumus diatas, mengganti delay dengan 20 ms dan periode clock 0.002 ms. kita mendapatkan nilai timer sebesar 9999 yang dapat di aplikasikan dengan menggunakan timer 16-bit. Pada frekuensi clock yang telah direduksi menjadi (500 KHz) maka nilai delay maksimum yang dapat dihasilkan adalah sebesar 131.072 ms. Teknik mereduksi frekuensi clock/F_CPU ini merupakan teknik pembagian atau pen-skala-an frekuensi yang dinamakan dengan Prescaling. Akan tetapi dalam menggunakan prescaler, ada yang harus dikorbankan, yaitu: antara resolusi dan durasi dari timer yang kita gunakan. Semakin besar delay yang mampu kita hasilkan dengan menggunakan prescaling maka akan mengurangi resolusi dari timer yang berdampak pada akurasi timer yang akan menurun, sebagai contoh: pada kasus di atas
durasi dari delay yang dihasilkan meningkat dari 16.384 ms menjadi 131.072 ms dengan melakukan prescaling pada F_CPU. Akan tetapi resolusinya juga menigkat dari 0.00025 ms menjadi 0.002 ms. Hal ini berarti bahwa setiap detik-kan (waktu transisi dari 0 ke 1 dan selanjutnya hingga nilai MAX) akan memakan waktu lebih lama yaitu 0.002 ms yang berdampak akurasi dari timer akan berkurang. Jika pada timer sebelumnya dapat dihitung durasi seperti 0,1125 ms (0.1125/0.00025 = 450) maka pada timer setelah dilakukan prescaling tidak dapat dilakukan (0.1125/0.002 = 56.25). A. Mikrokontroler ATMega8535 Mikrokontroler merupakan keseluruhan sistem komputer yang dikemas menjadi sebuah chip di mana di dalamnya sudah terdapat Mikroprosesor, I/O, Memori bahkan ADC, berbeda dengan Mikroprosesor yang berfungsi sebagai pemroses data Mikrokontroller AVR (Alf and Vegard’s Risc processor) memiliki arsitektur 8 bit, dimana semua instruksi dikemas dalam kode 16-bit dan sebagian besar instruksi dieksekusi dalam 1 siklus clock atau dikenal dengan teknologi RISC (Reduced Instruction Set Computing). Secara umum, AVR dapat dikelompokan ke dalam 4 kelas, yaitu keluarga AT90Sxx, keluarga ATMega dan AT86RFxx. Pada dasarnya yang membedakan masing-masing adalah kapasitas memori, peripheral dan fungsinya. Dari segi arsitektur dan instruksi yang digunakan, mereka bisa dikatakan hampir sama.
Gambar 2.1 Mikrokontroler ATMega8535
Gambar 2.3 Skematik Port I/O Mikrokontroler AVR ATMEGA32
Apabila kita memerhatikan skematik pin I/O mikrokontroler AVR ATMEGA32 pada gambar 2, maka di sana tampak bahwa pada setiap pin/kaki I/O telah dilengkapi dengan resistor pullup yang dihubungkan dengan tegangan catu melalui sebuah komponen FET. Selain itu, pada setiap pin/kaki I/O juga telah dilengkapi dengan dioda pengaman terhadap tegangan catu (Vcc) dan ground (GND). Dengan demikian, sebenarnya setiap pin I/O telah dapat digunakan untuk mengendalikan operasi sebuah komponen LED secara langsung. B. Bahasa Assembly Bahasa Assembly adalah bahasa komputer yang kedudukannya di antara Bahasa mesin dan bahasa level tinggi misalnya bahasa C atau Pascal. Bahasa C atau Pascaldikatakan sebagai bahasa level tinggi karena memakai kata-kata dan pernyataan yangmudah dimengerti manusia, meskipun masih jauh berbeda dengan bahasa manusiasesungguhnya. Bahasa mesin adalah kumpulan kode biner yang merupakan instruksiyang bisa dijalankan oleh komputer. Sedangkan bahasa Assembly memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan penulisan program. Program yang ditulis dengan bahasa Assembly terdiri dari label; kode mnemonic dan lain sebagainya, pada umumnya dinamakan sebagai program sumber (SourceCode) yang belum bisa diterima oleh prosesor untuk dijalankan sebagai program. Tapi harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner. Programsumber dibuat dengan program editor biasa, misalnya Note Pad pada Windows atauSideKick pada DOS, selanjutnya program sumber diterjemahkan ke bahasa mesindengan menggunakan program Assembler.
Gambar 2.2 Konfigurasi Pin ATMega8535
Gambar 2.3 Bagan kerja proses Assembly
III. METODOLOGI A. Alat dan Bahan Alat dan bahan yang digunakan : Laptop Starter Kit DT-Combo USBasp WinAVR Khazama Programmer
IV. HASIL DAN ANALISIS A. Tugas I : DELAY DENGAN TIMER/ COUNTER Script yang diketikkan pada WinAVR
B. Langkah Kerja Siapkan alat dan bahan yang digunakan (starter-kit AVR DTCombo, USBasp,Laptop)
Hubungkan Training board dengan PC mengunakan downloader usbasp
Hubungkan PORT A (ATMega8535) pada PORT OUTPUT (Trainer Board)
Buka software yang digunakan (WinAVR dan Khazamma Programmer)
Install terlebih dahulu driver USBasp di laptop.
Hubungkan USBasp pada starterkit AVR pad port yang disediakan, kemudian hubungkan ke laptop.
Pastikan sumber clock menggunakan Kristal 8MHz dengan cara mengatur fuse
Jalankan source code yang telah disediakan dan modifikasi
Script diatas menghasilkan output yaitu 4 bit LED display yang menyala bergantian selama sekitar 1 detik.
B. Tugas 2 : EXTERNAL CLOCK SEBAGAI COUNTER Script yang diketikkan pada WinAVR
Gambar 4.1 Output LED Display
Kemudian script di modifikasi pada bagian OCR1A sehigga 4 bit LSB dengan 4 bit MSB menyala secara bergantian seperti diatas namun waktu periode nya berbeda yaitu sekitar x detik dimana x = (modulus 5 dari nomor kelompok) + 2. X = (modulus 5 dari nomor kelompok) + 2 = (12 mod 5) + 2 =2+2 =4 Pergantian operasi CTC, sumber clock prescaler 256 dari penentuan nilai compare untuk delay 1 detik 𝑁𝑖𝑙𝑎𝑖 𝑂𝐶𝑅 =
𝐹𝑟𝑒𝑘𝑢𝑒𝑛𝑠𝑖 7372800 = = 28800 𝑃𝑟𝑒𝑠𝑐𝑎𝑙𝑒𝑟 256
Kemudian dikalikan 4 sehingga 28800 x 4 = 115200 Bilangan hex dari 115200 = 1C200 kemudian dimodifikasi, OCR1AH = 0x1C ; OCR1AL = 0x200 ; Setelah modifikasi selang waktu (delay) 4 bit LSB dan bit MSB bergantian yaitu sekitar 4 detik. Gambar 4.2 Output LED Display
Script ini menghasilkan output LED yang menyala seperti gambar 4.2 dan ketika tombol ditekan 2 kali lampu yang mati menjadi menyala lalu kembali mati setelah sekitar 0.5 detik.
D. Tugas 4 : EXTERNAL INTERRUPT Script yang diketikkan pada WinAVR
Kemudian memodifikasi script diatas sehingga LED menyala semua selama x detik ketikatombol ditekan sejumlah x kali, dimana x = (modulus 5 dari nomor kelompok) + 3. X = (modulus 5 dari nomor kelompok) + 3 = (12 mod 5) + 3 =2+3 =5 Sehingga setelah tombol ditekan sebanyak 5 kali lampu yang mati menjadi menyala selama sekitar 10 detik. C. Tugas 3 : APLIKASI INTERRUPT DENGAN TIMER/COUNTER Script yang diketikkan pada WinAVR
Lampu LED berkedip antara bit ganjil genap ketika interrupt, lampu mati bergantian satu persatu. Dikarenakan error yang terjadi saat compile source code praktikan membutuhkan waktu yang cukup lama untuk melanjutkan langkah selanjutnya pada tugas 1 sehingga waktu tidak mencukupi untuk mengerjakan tugas 3 dan 4, karena itu praktikan menggunakan hasil dan data kelompok lain.
Lampu LED keaadan awal berkedip selama 0.2 detik , lalu setiap satu detik semua lampu mati. Kemudian memodifikasi program Tugas II.C.1 menggunakan Timer/Counter1 sehingga interrupt terjadi setiap x detik, dimana x = (modulus 5 dari nomor kelompok) + 2
V. SIMPULAN
Jika kita ingin membuat delay sebesar 20 ms dengan menggunakan timer 16-bit (MAX – 65535) dan menggunakan XTAL 8 MHz maka frekuensi CPU (F_CPU) nya juga sebesar 8 MHz. Jika kita masukkan pada rumus maka delay maksimum yang dapat dihasilkan oleh sistem yang kita gunakan hanya sebesar 16.384 ms. Delay yang dihasilkan lebih besar dari 16.384 adalah dengan mengurangi F_CPU dari 8 MHz menjadi 0.5 MHz atau 500 KHz, sehingga periode clock-nya meningkat menjadi 1/500k = 0.002 ms. Sekarang kita memasukkan pada rumus , mengganti delay dengan 20 ms dan periode clock 0.002 ms. kita mendapatkan nilai timer sebesar 9999 yang dapat di aplikasikan dengan menggunakan timer 16bit. Pada frekuensi clock yang telah direduksi menjadi (500 KHz) maka nilai delay maksimum yang dapat dihasilkan adalah sebesar 131.072 ms. WinAVR (baca: 'whenever') adalah sebuah paket AVR Development System yang bersifat open source dengan sederetan program pendukung yakni: IDE, Assembler, Compiler, Linker, Librarian, File Converter, C Library,
Programmer AVR, Debugger, In-Circuit Emulator, dan beberapa program utilitas lainnya Kapabilitas detail dari ATmega8535 adalah Sistem mikroprosesor 8 bit berbasis RISC dengan kecepatan maksimal 16 MHz. Kapabilitas memori flash 8 KB, SRAM sebesar 512 byte, dan EEPROM (Electrically Erasable Programmable Read Only Memori) sebesar 512 byte. ADC internal dengan fidelitas 10 bit sebanyak 8 channel. Portal komunikasi serial (USART) dengan kecepatan maksimal 2,5 Mbps. Enam pilihan mode sleep untuk menghemat penggunaan daya listrik. Bahasa yang dipakai untuk memprogram mikrokontroler AVR adalah bahasa assembly AVR atau bahasa C. Bahasa assembler digunakan karena kita dapat melihat perubahan isi register dan data memory. REFERENSI
[1] Petunjuk Praktikum Sistem Mikroprosesor EL3203, Laboratorium Dasar Teknik Elektro, ITERA