1. modul arsitektur microcontroller avr

10
MODUL III ARSITEKTUR MIKROKONTROLER AVR (ATmega8535) 3.1. PENGANTAR Tidak terkait dengan jenis bahasa pemrograman yang akan digunakan (apakah bahasa aras rendah atau aras tinggi), dalam bidang mikrokontroler pengetahuan arsitektur masih sangat diperlukan mengingat dalam banyak aplikasi, pengaksesan dan manipulasi register-register internal serta Port I/O baik pada level bit maupun byte/word adalah hal yang umum dilakukan. Sehingga sekalipun mikrokontroler nantinya diprogram dengan menggunakan bahasa aras tinggi, programmer biasanya akan selalu berhubungan dengan beberapa register internal serta perangkat keras lainnya secara langsung. Meskipun demikian, dibandingkan dengan bahasa assembler, pada dasarnya pemakaian bahasa aras tinggi (misal bahasa C) dalam pemrograman mikrokontroler dapat mengurangi pengaksesan atau manipulasi langsung terhadap sejumlah register yang terdapat pada mikrokontroler tersebut. Dengan pengetahuan arsitektur mikrokontroler yang relatif minimal, programmer secara umum sudah dapat memprogram aplikasi yang direncanakannya. Khusus dalam bab ini, kita akan meninjau arsitektur yang dimiliki oleh salah satu seri mikrokontroler AVR yaitu ATmega8535. Seri tersebut dipilih mengingat mikrokontroler ini memiliki fitur relatif lengkap dan chip-nya mudah dijumpai dipasaran dengan harga relatif murah. Meskipun demikian, karena semua keluarga mikrokontroler AVR memiliki organisasi memori serta set instruksi yang sama, penjelasan pada bab ini pada dasarnya berlaku juga untuk semua jenis chip AVR. Bagi anda yang sebelumnya sudah mahir memprogram mikrokontroler AVR dengan menggunakan bahasa Assembler, bab ini masih relevan dibaca mengingat penjelasan arsitektur mikrokontroler disini dilakukan berdasarkan sudut pandang pemrograman aras tinggi (bahasa C) secara praktis. Sedangkan bagi anda yang telah punya pengalaman menggunakan bahasa C untuk aplikasi-aplikasi komputer, maka bab ini adalah modal untuk mengimplementasikan pengetahuan tersebut kedalam dunia mikrokontroler 3.1 ARSITEKTUR UMUM MIKROKONTROLER ATmega8535 Mikrokontroler Atmega8535 merupakan salah satu seri mikrokontroler AVR yang memiliki fitur relatif lengkap, beberapa yang penting diantaranya adalah: Terdapat 32 register kerja (general purpose register) dengan panjang masing- masing 8 bit Memiliki 8 KB Memori program (flash), dan masing-masing 512 Byte lokasi SRAM serta EEPROM Tersedia 1 buah Timer 16 bit dan 2 buah timer 8 bit dengan kemampuan PWM

Upload: ardian-ramadita-sugara

Post on 29-Oct-2015

133 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 1. Modul Arsitektur Microcontroller Avr

MODUL III ARSITEKTUR MIKROKONTROLER AVR (ATmega8535)

3.1. PENGANTAR Tidak terkait dengan jenis bahasa pemrograman yang akan digunakan (apakah bahasa aras rendah atau aras tinggi), dalam bidang mikrokontroler pengetahuan arsitektur masih sangat diperlukan mengingat dalam banyak aplikasi, pengaksesan dan manipulasi register-register internal serta Port I/O baik pada level bit maupun byte/word adalah hal yang umum dilakukan. Sehingga sekalipun mikrokontroler nantinya diprogram dengan menggunakan bahasa aras tinggi, programmer biasanya akan selalu berhubungan dengan beberapa register internal serta perangkat keras lainnya secara langsung. Meskipun demikian, dibandingkan dengan bahasa assembler, pada dasarnya pemakaian bahasa aras tinggi (misal bahasa C) dalam pemrograman mikrokontroler dapat mengurangi pengaksesan atau manipulasi langsung terhadap sejumlah register yang terdapat pada mikrokontroler tersebut. Dengan pengetahuan arsitektur mikrokontroler yang relatif minimal, programmer secara umum sudah dapat memprogram aplikasi yang direncanakannya.

Khusus dalam bab ini, kita akan meninjau arsitektur yang dimiliki oleh salah satu seri mikrokontroler AVR yaitu ATmega8535. Seri tersebut dipilih mengingat mikrokontroler ini memiliki fitur relatif lengkap dan chip-nya mudah dijumpai dipasaran dengan harga relatif murah. Meskipun demikian, karena semua keluarga mikrokontroler AVR memiliki organisasi memori serta set instruksi yang sama, penjelasan pada bab ini pada dasarnya berlaku juga untuk semua jenis chip AVR.

Bagi anda yang sebelumnya sudah mahir memprogram mikrokontroler AVR dengan menggunakan bahasa Assembler, bab ini masih relevan dibaca mengingat penjelasan arsitektur mikrokontroler disini dilakukan berdasarkan sudut pandang pemrograman aras tinggi (bahasa C) secara praktis. Sedangkan bagi anda yang telah punya pengalaman menggunakan bahasa C untuk aplikasi-aplikasi komputer, maka bab ini adalah modal untuk mengimplementasikan pengetahuan tersebut kedalam dunia mikrokontroler 3.1 ARSITEKTUR UMUM MIKROKONTROLER ATmega8535 Mikrokontroler Atmega8535 merupakan salah satu seri mikrokontroler AVR yang memiliki fitur relatif lengkap, beberapa yang penting diantaranya adalah:

• Terdapat 32 register kerja (general purpose register) dengan panjang masing-masing 8 bit

• Memiliki 8 KB Memori program (flash), dan masing-masing 512 Byte lokasi SRAM serta EEPROM

• Tersedia 1 buah Timer 16 bit dan 2 buah timer 8 bit dengan kemampuan PWM

Page 2: 1. Modul Arsitektur Microcontroller Avr

• Memiliki 8 buah channel ADC multipleks 10 bit serta 2 buah comparator 8 bit internal

• memiliki 4 buah port I/O paralel dengan panjang masing-masing 8 bit

• Memiliki saluaran UART dan SPI untuk tujuan komunikasi serial Gambar 3.1 berikut memperlihatkan blok diagram fungsional dari mikrokontroler tersebut:

Gambar 3.1 Arsitektur umum sebuah mikrokontroler Atmega8535

3.2 MEMORI Pada dasarnya memori dapat dipandang sebagai array bit dua dimensi (bit adalah unit terkecil memori yang berisi informasi digit biner: 1 atau 0) tempat menyimpan data dan/atau program.

Page 3: 1. Modul Arsitektur Microcontroller Avr

Gambar 3.2 Ilustrasi memori

Gambar 3.2 memperlihatkan ilustrasi dua buah array memori dengan kapasitas penyimpanan sebesar 1K (1K merepresentasikan 1024 lokasi alamat ). Dalam hal ini satu alamat dapat terdiri 1 byte (8 bit) seperti ditunjukan pada gambar 3.2.a, atau 2 byte seperti ditunjukan pada gambar 3.2.b

Secara umum memori mikrokontroler AVR (Atmega8535) berbasis pada sebuah arsitektur yang dikenal dengan istilah Harvard architecture. Pada arsitektur ini, ruang memori data dan memori program dipisah secara fisik (Hal ini berbeda dengan arsitektur Von Neumann yang umum digunakan pada sistem memori komputer – Dalam arsitektur Von Neumann, data dan program menempati memori fisik yang sama, yaitu RAM). Salah satu kelebihan dari arsitektur Harvard adalah pengambilan instruksi serta data oleh CPU dapat berjalan secara paralel, sehingga eksekusi program relatif lebih cepat.

Dalam sistem mikrokontroler AVR, Selain tersedia blok memori program dan data, juga terdapat jenis memori lain, yaitu EEPROM.

Memori Program: Memori program atau memori flash adalah lokasi tempat menyimpan program pengguna secara permanen. Memori program ini secara fisik terpisah dengan memori data. Agar penulisan kode instruksi lebih efisien, memori program pada mikrokontroler AVR ini dibuat lebih lebar dibandingkan memori data (yaitu 16 bit untuk memori program dan 8 bit pada memori data). Secara teknologi jenis yang digunakan pada memori ini adalah flash memori dengan ukuran bervariasi antara 1kbyte sampai beberapa ratus Kbyte (untuk mikrokontroler Atmega8535, jumlah flash yang tersedia adalah 8kByte). Dalam sistem mikrokontroler, memori program ini hanya dapat ditulis dari luar pada saat mikrokontroler sedang diprogram.

Memori Data: Memori data atau SRAM (Static Random Acces Memory) adalah memori yang bersifat mampu tulis dan baca, memiliki orde puluhan sampai ratusan Byte (jumlah moderatnya 256 byte) Dalam sebuah aplikasi, memori jenis ini umumnya digunakan untuk menyimpan variabel yang nilainya dimungkinkan diubah

Page 4: 1. Modul Arsitektur Microcontroller Avr

pada saat aplikasi (program) berjalan. Pada seri AVR Atmega8535 jumlah SRAM yang tersedia adalah 512 Byte.

Memori EEPROM :Electrically Erasable Programmable read only Memory (EEPROM): merupakan memori nonvolatile (tidak hilang ketika catu daya mati) yang menyerupai SRAM dalam fleksibilitas pemrogramannya. Memori jenis ini pada umumnya digunakan untuk menyimpan data–data permanen yang akan digunakan dalam program. Salah satu kerugian memori jenis ini adalah terbatas dalam kemampuan hapus-tulisnya (erase/write) yaitu sekitar 10.000 kali. Untuk mikrokontroler Atmega8535, jumlah EEPROM yang tersedia adalah 512 Byte.

Catatan // contoh data-data yang dimasukkan ke dalam Eeprom:

Const float PHI=3.14; Flash char K=4; Const unsigned char array={‘1’,’2’, 3’}; Int temp;

3.2.1 CPU CPU (Central Processing Unit) merupakan pusat dari segala kegiatan atau proses yang terjadi pada sistem mikrokontroler. Dibandingkan CPU yang terdapat pada sebuah PC, arsitektur CPU yang dimiliki oleh sistem mikrokontroler ini pada dasarnya relatif lebih sederhana. Hal ini disebabkan aplikasi mikrokontroler umumnya tidak memerlukan komputasi yang berat seperti biasa dijumpai pada aplikasi-aplikasi mikroprosesor. Gambar 1.2 berikut memperlihatkan komponen-komponen penyusun CPU mikrokontroler:

Gambar 3.3 komponen-komponen penyusun CPU pada sebuah mikrokontroler

3.2.1.1 ALU (Arithmetic Logic Unit)

ALU merupakan unit dimana operasi aritmatika (seperti penjumlahan, pengurangan, perkalian), operasi logika (seperti logika Not, Or, And) serta operasi pada level bit

Page 5: 1. Modul Arsitektur Microcontroller Avr

(seperti operasi geser bit, dan sebagainya) dikerjakan. Data-data yang akan dioperasikan serta hasilnya berasal dan menuju General Purpose register. Interaksi kedua komponen ini dapat dilihat pada gambar 2.3 berikut.

Gambar 3.4 Blok fungsional ALU

3.2.1.2 General Purpose Register

General Purpose Register (Register serbaguna) atau dikenal juga dengan istilah file register adalah kumpulan register atau lokasi sementara yang terdapat pada CPU yang berfungsi untuk menampung data menuju dan dari ALU. Bergantung mikrokontroler-nya, Jumlah register yang terdapat pada blok ini dapat bervariasi sampai 32 buah –- jumlah yang relatif banyak untuk ukuran sistem mikrokontroler. Gambar 1.3 berikut ini memperlihatkan ilustrasi general purpose register dengan register 8 bit yang dimiliki sebanyak 32 buah.

Gambar 3.5 Register 8 bit

Tidak seperti pada sistem mikroprosesor, register-register yang terdapat pada CPU mikrokontroler umumnya dapat dimanipulasi dan diakses pada level bit tunggal.

Hal penting yang perlu diketahui yaitu ukuran sebuah mikrokontroler (misal mikrokontroler 4 bit, 8 bit, atau 16 bit) umumnya mengacu pada panjang bit yang dimiliki oleh register pada blok ini.

Page 6: 1. Modul Arsitektur Microcontroller Avr

3.2.1.3 Status Register

Status register (register status) adalah Register yang digunakan untuk menampung status-status hasil operasi ALU atau status-status lainnya. Bit-bit pada register ini dikenal sebagai flag-flag status yang dapat digunakan sebagai dasar pengambilan keputusan pada program yang dibuat. Status register untuk AVR didefinisikan sebagai berikut:

7 6 5 4 3 2 1 0 I T H S V N Z C

Bit Read/Write Initial Value

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

R/W 0

SREG

Gambar 3.6 Register Status tempat penyimpanan flag-flag

Beberapa Flag-flag tipikal yang umum digunakan pada register ini diantaranya adalah:

• Carry flag (C) : Bit ini menunjukkan hasil sisa dalam operasi aritmatika atau logika

• Zero flag (Z): Bit ini menunjukkan hasil nol dalam operasi aritmatika atau logika

• Negative flag (N): Bit ini menunjukkan hasil negatif dalam operasi aritmatika atau logika

• Half Carry flag (H): Bit ini menunjukkan hasil sisa pada pertengahan byte dalam operasi aritmatika atau logika

• Interupt Enable Flag (I): Bit ini mengatur aktif-tidaknya interupsi global.

Catatan Pada CodeVisionAVR bit (I) dapat diset dan dinolkan dengan instruksi “SEI” dan “CLI”

#asm("sei") // untuk mengeset global interupsi (I) #asm("cli") // untuk mengenolkan global interupsi (I)

3.2.1.3 Program Counter (PC)

Program counter adalah Register yang berisi alamat memori program yang sedang dieksekusi. Nilai pada PC akan berubah secara otomatis sesuai dengan instruksi yang sedang diproses. Jumlah memori program yang dapat dijangkau oleh PC pada dasarnya ditentukan oleh lebar bit yang dimiliki oleh PC tersebut. Misal Program Counter dengan lebar 16 bit maka jumlah memori yang dapat diakses maksimal

Page 7: 1. Modul Arsitektur Microcontroller Avr

berjumlah 216 = 65536 lokasi yaitu dari alamat 0000h (0) sampai FFFFh (65535). Ketika mikrokontroler mulai dihidupkan (atau mengalami reset) maka program counter tersebut secara otomatis akan berisi nilai (alamat) 0000h. Gambar 1.6 berikut memperlihatkan ilustrasi cara kerja PC:

Gambar 3.7 Ilustrasi cara kerja program counter

3.2.1.3 Stack Pointer Stack pointer adalah register yang isinya menunjuk pada bagian atas memori data stack. Sedangkan memori data stack itu sendiri adalah adalah memori RAM (internal) yang digunakan untuk menyimpan data sementara yang dapat berupa variabel lokal atau alamat kembali setelah terjadi operasi pemanggilan fungsi dan interupsi.

3.3 PORT I/O

3.3.1 I/O Paralel Pada dasarnya I/O paralel adalah port atau gerbang yang digunakan untuk komunisaksi antara CPU dengan dunia luar. Secara fungsional kita dapat memprogram port ini sebagai gerbang masukan , keluaran atau keduanya.

Tergantung pada jenisnya Port ini jumlahnya bervariasi antara 4 sampai 32 Pin. Pada umumnya instruksi-instruksi untuk mengakses port ini sama dengan instruksi-instruksi yang digunakan untuk mengakses memori data. Dengan kata lain port paralel ini dalam sistem mikrokontroler diperlakukan sebagai memori data. Port I/O pada AVR memilik fasilitas pull-up internal.

Port I/O ini diatur melalui tiga buah register: DDxn, PORTxn, dan PINxn, dengan x menyatakan port dan n menyatakan nomor pin.

DDxn: diakses dari alamat DDRx, berfungsi untuk mengatur arah port. Jika DDxn diset satu, maka Pxn berfungsi sebagai pin output, sedangkan jika dinolkan, pinxn berfungsi sebagai input.

Page 8: 1. Modul Arsitektur Microcontroller Avr

PORTxn: apabila diset satu saat pin sebagai input, maka resistor pull-up akan aktif. Pada saat pin sebagai output, maka register ini berfungsi mengatur keluaran logika pin.

PINxn: berfungsi untuk pembacaan kondisi logika pin.

3.3.1.2 I/O Serial Port ini umumnya digunakan untuk komunikasi antara mikrokontroler dengan peralatan lainnya secara serial: bit-perbit. Protokol standar yang paling banyak ditemui adalah RS232.

3.4 Timer/Counter

Tergantung konfigurasinya, blok ini dapat digunakan sebagai timer atau counter. Jika digunakan sebagai counter maka peralatan ini dapat digunakan untuk mencacah kejadian atau frekuensi luar, jika digunakan sebagai timer, maka alat ini digunakan sebagai basis pewaktuan. Semua mikrokontroler AVR paling sedikit mempunya sebuah timer 8-bit. ATmega8535 mempunyai 2 buah timer 8-bit dan satu buah timer 16-bit. Berikut adalah struktur internal salah satu timer tersebut, yaitu timer 0 (8-bit).

Gambar 3.8 Struktur Internal Timer 0

Timer/Counter (TC) mempunyai kemampuan untuk mencacah maju dengan kecepatan detak sesuai pilihan prescaler untuk frekuensi clock (prosesor). TC dapat distop dan restart tiap saat dengan mengeset sumber clock – mux ke nol. Sumber clock untuk

Page 9: 1. Modul Arsitektur Microcontroller Avr

TC0 (termasuk sumber clock eksternal) dikendalikan oleh tiga bit pada TCCR0, yaitu CS0, CS01, dan CS00.

Penghitungan cacah maju oleh timer ini dapat diakses pada register TCNT0. Apabila TCNT0 mengalami overflow dari 255 ke 0, pencacahan akan diulang kembali, dan bit interupsi overflow TOV0 pada register TIFR akan set menjadi 1. Jika fasilitas interupsi overflow aktif (diatur pada register SREG dan TIMSK), maka akan terjadi interupsi overflow timer 0, dan rutin interupsi (overflow) akan dikerjakan. Pada saat itu juga bit TOV0 akan dikembalikan nilainya secara otomatis menjadi 0.

Fasilitas lain pada timer ini adalah sebuah pembanding (comparator). Nilai yang akan dibandingkan dimasukkan ke dalam register OCR0. Apabila pada saat pencacahan isi dari TCNT0 sama dengan OCR0, maka flag OCF0 pada register TIFR akan set menjadi 1. Jika fasilitas interupsi aktif, maka akan terjadi interupsi dan rutin interupsi (compare match) akan dikerjakan. Pada saat ini secara otomatis bit )CF0 akan dikembalikan nilainya menjadi 0. Bit logika pembanding pada interupsi ini dapat diteruskan ke sebuah pin keluaran yang disebut OC0. Hasilnya adalah sebuah pulsa yang lebarnya dapat diatur. Ini adalah dasar pembangkitan PWM pada timer.

3.5 Timer Watchdog Timer ini umum digunakan untuk me-restart prosesor jika dalam operasinya mikrokontroler mengalami hang. Timer ini sangat bermanfaat untuk aplikasi-aplikasi sensor atau sistem-sistem embedded lainnya.

3.6 Interupsi

AVR menyediakan berbagai sumber interupsi, termasuk tiga interupsi eksternal. Tiap interupsi diatur tersendiri oleh bit enable register-register tertentu. Untuk mengaktifkan suatu interupsi, bit enableinterupsi tersebut harus diset 1 bersama dengan bit Global Interupsi Enable pada register SREG (lihat kembali mengenai subbab status register di bagian atas).

3.7 ADC Dewasa ini banyak mikrokontroler yang telah terintegrasi dengan konverter A/D. Jumlah chanel A/D pada sebuah mikrokontroler bisa mencapai 48 chanel dengan waktu konversi bervariasi dalam orde mikro sampai mili detik. ATmega8535 sendiri telah dilengkapi dengan 8 saluran ADC internal dengan fidelitas 10 bit. Dengan adanya fitur, sensor-sensor dapat langsung terhubung ke mikrokontroler dengan rangkaian antarmuka yang minimal.

Page 10: 1. Modul Arsitektur Microcontroller Avr

Inisialisasi ADC pada ATmega8535 melibatkan tiga macam register, yaitu ADMUX (ADC Multiplexer Selection Register), ADCSRA (ADC Control And Status Register ), dan SFIOR (Special Funtion I/O Register ). Inisialisasi meliputi penentuan mode operasi, saluran ADC yang digunakan, clock, tegangan referensi, dan format data keluaran.

3.8 SPI

3.9 Analog Komparator