Anda di halaman 1dari 51

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.

Salah satu seri mikrokontroler AVR yang banyak menjadi andalan saat ini adalah tipe ATtiny2313 dan ATmega8535. Seri ATtiny2313 banyak digunakan untuk sistem yang relatif sederhana dan berukuran kecil. Berikut adalah feature-feature

mikrokontroler seri ATtiny2313. Kapasitas memori Flash 2 Kbytes untuk program Kapasitas memori EEPROM 128 bytes untuk data Maksimal 18 pin I/O 8 interrupt 8-bit timer Analog komparator On-chip oscillator Fasilitas In System Programming (ISP) Sedangkan ATmega8535 banyak digunakan untuk sistem yang kompleks, memiliki input sinyal analog, dan membutuhkan memori yang relatif lebih besar. Berikut adalah feature-feature mikrokontroler seri ATmega8535.

Memori Flash 8 Kbytes untuk program Memori EEPROM 512 bytes untuk data Memori SRAM 512 bytes untuk data Maksimal 32 pin I/O 20 interrupt Satu 16-bit timer dan dua 8-bit timer 8 channel ADC 10 bit Komunikasi serial melalui SPI dan USART Analog komparator 4 I/O PWM Fasilitas In System Programming (ISP)

MEMORY MAP MIKROKONTROLER AVR

PENJELASAN FUNGSI PIN MIKROKONTROLER AVR

IC mikrokontroler dikemas (packaging) dalam bentuk yang berbeda. Namun pada dasarnya fungsi kaki yang ada pada IC memiliki persamaan. Gambar salah satu bentuk IC seri mikrokontroler AVR ATmega8535 dapat dilihat berikut.

Berikut adalah penjelasan fungsi tiap kaki. A. Port A Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port A dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port A (DDRA) harus disetting terlebih dahulu sebelum Port A digunakan. Bit-bit DDRA diisi 0 jika ingin memfungsikan pin-pin port A yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, kedelapan pin port A juga digunakan untuk masukan sinyal analog bagi A/D converter. B. Port B Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port B dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port B (DDRB) harus disetting terlebih dahulu sebelum Port B digunakan. Bit-bit DDRB diisi 0 jika ingin memfungsikan pin-pin port B yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Pin-pin port B juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut.

Port Pin PB0 PB1 PB2 PB3 PB4 PB5

Fungsi Khusus T0 = timer/counter 0 external counter input T1 = timer/counter 0 external counter input AIN0 = analog comparator positive input AIN1 = analog comparator negative input SS = SPI slave select input MOSI = SPI bus master output / slave input

PB6 PB7

MISO = SPI bus master input / slave output SCK = SPI bus serial clock

C. 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. D. 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.

Port Pin PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7

Fungsi Khusus RDX (UART input line) TDX (UART output line) INT0 ( external interrupt 0 input ) INT1 ( external interrupt 1 input ) OC1B (Timer/Counter1 output compareB match output) OC1A (Timer/Counter1 output compareA match output) ICP (Timer/Counter1 input capture pin) OC2 (Timer/Counter2 output compare match output)

E. RESET RST pada pin 9 merupakan reset dari AVR. Jika pada pin ini diberi masukan low selama minimal 2 machine cycle maka system akan di-reset. F. XTAL1 XTAL1 adalah masukan ke inverting oscillator amplifier dan input ke internal clock operating circuit. G. XTAL2 XTAL2 adalah output dari inverting oscillator amplifier. H. AVcc Avcc adalah kaki masukan tegangan bagi A/D Converter. Kaki ini harus secara eksternal terhubung ke Vcc melalui lowpass filter. I. 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.

J. AGND AGND adalah kaki untuk analog ground. Hubungkan kaki ini ke GND, kecuali jika board memiliki anlaog ground yang terpisah.

Ditulis oleh: Tim Prasimax Copyright Prasimax Technology

Pemrograman AT89S51 bahasa Assembly Bahasa Assembly adalah bahasa pemrograman tingkat rendah. Dalam pemrograman komputer dikenal dua jenis tingkatan bahasa, jenis yang pertama adalah bahasa pemrograman tingkat tinggi (high level language) dan jenis yang kedua adalah bahasa pemrograman tingkat rendah (low level language). Bahasa pemrograman tingkat tinggi lebih berorientasi kepada manusia yaitu bagaimana agar pernyataan-pernyataan yang ada dalam program mudah ditulis dan dimengerti oleh manusia. Sedangkan bahasa tingkat rendah lebih berorientasi ke mesin, yaitu bagaimana agar komputer dapat langsung mengintepretasikan pernyataan-pernyataan program. Kelebihan Bahasa Assembly: 1. Ketika di-compile lebih kecil ukuran 2. Lebih efisien/hemat memori 3. Lebih cepat dieksekusi Kesulitan Bahasa Assembly: 1. Dalam melakukan suatu pekerjaan, baris program relatif lebih panjang dibanding bahasa tingkat tinggi 2. Relatif lebih sulit untuk dipahami terutama jika jumlah baris sudah terlalu banyak 3. Lebih sulit dalam melakukan pekerjaan rumit, misalnya operasi matematis

BAHASA ASSEMBLY MCS-51 Dalam program bahasa assembly terdapat 2 jenis yang kita tulis dalam program yaitu: 1. Assembly Directive (yaitu merupakan kode yang menjadi arahan bagi assembler/compiler untuk menata program) 2. Instruksi (yaitu kode yang harus dieksekusi oleh CPU mikrokontroler) Klik disini untuk melihat daftar Assembly Directive dan Instruksi MCS-51.

PENGGUNAAN SOFTWARE Software untuk membantu memprogram mikrokontroler MCS-51 sudah banyak tersedia. Untuk mempermudah maka dapat dipilih software yang merupakan Integrated Development Environment (IDE) yaitu software yang merupakan editor sekaligus compiler. Bahkan juga ada yang sekaligus debugger dan simulator. Salah satunya yang digunakan pada training di PRASIMAX adalah Read51. Berikut beberapa cara penggunaan software. 1. User dapat membuat program sistem single file maupun proyek (beberapa file). Klik menu File lalu pilih New File. 2. Ketik program di window editing. Software menyediakan syntax highlighting otomatis, sehingga tiap assembly directive akan diberi warna ungu dan tiap instuksi akan diberi warna biru.

3. User dapat langsung mengcompile program dengan sekali klik icon Build (F9). Ketika ada kesalahan maka user dapat langsung ditunjukkan letak dan jenis kesalahan.

4. User dapat melakukan simulasi software untuk melihat hasil kerja program. Klik IDE mode (F2). 5. User dapat melakukan debugging, bahkan melihat hasil eksekusi per step (per baris) terhadap kondisi-kondisi register dan memori di mikrokontroler. Klik Step Into (F8).

Selanjutnya user dapat melakukan download program ke IC mikrokontroler untuk menguji hasilnya secara real di hardware. Klik disini untuk mengetahui caranya.

Ditulis oleh: Tim Prasimax Copyright Prasimax Technology

Apa itu Mikrokontroler?

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 tugas-tugas 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 tugas tugas 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) Ukuran yang semakin dapat diperkecil (reduced in size) Penggunaan komponen dipersedikit (reduced component count) yang juga akan menyebabkan biaya produksi dapat semakin ditekan (lower manufacturing cost) Waktu pembuatan lebih singkat (shorter development time) sehingga lebih cepat pula dijual ke pasar sesuai kebutuhan (shorter time to market) Konsumsi daya yang rendah (lower power consumption)

PERKEMBANGAN MIKROKONTROLER Karena kebutuhan yang tinggi terhadap chip-chip pintar dengan berbagai fasilitasnya, maka berbagai vendor juga berlomba untuk menawarkan produk-produk mikrokontrolernya. Hal tersebut terjadi semenjak tahun 1970-an. Motorola mengeluarkan seri mikrokontroler 6800 yang terus dikembangkan hingga sekarang menjadi 68HC05, 68HC08, 68HC11, 68HC12, dan 68HC16. Zilog juga mengeluarkan seri mikroprosesor Z80-nya yang terkenal dan terus dikembangkan hingga kini menjadi Z180 dan kemudian diadopsi juga oleh mikroprosesor Rabbit. Intel mengeluarkan mikrokontrolernya yang populer di dunia yaitu 8051, yang karena begitu populernya maka arsitektur 8051 tersebut kemudian diadopsi oleh vendor lain seperti Phillips, Siemens, Atmel, dan vendorvendor lain dalam produk mikrokontroler mereka. Selain itu masih ada mikrokontroler populer lainnya seperti Basic Stamps, PIC dari

Microchip, MSP 430 dari Texas Instrument dan masih banyak lagi. Selain mikroprosesor dan mikrokontroler, sebenarnya telah bemunculan chip-chip pintar lain seperti DSP prosesor dan Application Spesific Integrated Circuit (ASIC). Di masa depan, chip-chip mungil berkemampuan sangat tinggi akan mendominasi semua desain elektronik di dunia sehingga mampu memberikan kemampuan komputasi yang tinggi serta meminimumkan jumlah komponenkomponen konvensional.

Ditulis oleh: Tim Prasimax Copyright Prasimax Technology Overview Mikrokontroler AVR Mikrokontroler AVR merupakan salah satu jenis arsitektur mikrokontroler yang menjadi andalan Atmel. Arsitektur ini dirancang memiliki berbagai kelebihan dan merupakan penyempurnaan dari arsitektur mikrokontroler-mikrokontroler yang sudah ada. Berbagai seri mikrokontroler AVR telah diproduksi oleh Atmel dan digunakan di dunia sebagai mikrokontroler yang bersifat low cost dan high performance. Di Indonesia, mikrokontroler AVR banyak dipakai karena fiturnya yang cukup lengkap, mudah untuk didapatkan, dan harganya yang relatif terjangkau. Antar seri mikrokontroler AVR memiliki beragam tipe dan fasilitas, namun kesemuanya memiliki arsitektur yang sama, dan juga set instruksi yang relatif tidak berbeda. Berikut tabel perbandingan beberapa seri mikrokontroler AVR buatan Atmel.

Seri ATmega8 ATmega8535 ATmega16 ATmega162 ATmega32 ATmega128 ATtiny12 ATtiny2313 ATtiny44 ATtiny84

ADC Flash RAM EEPROM Pin Timer Timer UART PWM 10- SPI ISP (KBytes) (Bytes) (KBytes) I/O 16-bit 8-bit bit 8 8 16 16 32 128 1 2 4 8 1024 512 1024 1024 2048 4096 128 256 512 0.5 0.5 0.5 0.5 1 4 0.0625 0.125 0.25 0.5 23 32 32 35 32 53 6 18 12 12 1 2 1 2 1 2 1 1 1 1 2 2 2 2 2 1 1 1 1 1 1 1 2 1 2 1 3 4 4 6 4 8 4 4 4 6/8 8 8 8 8 8 8 8 1 Ya 1 Ya 1 Ya 1 Ya 1 Ya 1 Ya - Ya 1 Ya 1 Ya 1 Ya

Keterangan:

Flash adalah suatu jenis Read Only Memory yang biasanya diisi dengan program hasil buatan manusia yang harus dijalankan oleh mikrokontroler RAM (Random Acces Memory) merupakan memori yang membantu CPU untuk penyimpanan data sementara dan pengolahan data ketika program sedang running EEPROM (Electrically Erasable Programmable Read Only Memory) adalah memori untuk penyimpanan data secara permanen oleh program yang sedang running Port I/O adalah kaki untuk jalur keluar atau masuk sinyal sebagai hasil keluaran ataupun masukan bagi 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

Ditulis oleh: Tim Prasimax Copyright Prasimax Technology 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.

Salah satu seri mikrokontroler AVR yang banyak menjadi andalan saat ini adalah tipe ATtiny2313 dan ATmega8535. Seri ATtiny2313 banyak digunakan untuk sistem yang relatif sederhana dan berukuran kecil. Berikut adalah feature-feature mikrokontroler seri ATtiny2313. Kapasitas memori Flash 2 Kbytes untuk program Kapasitas memori EEPROM 128 bytes untuk data Maksimal 18 pin I/O 8 interrupt 8-bit timer Analog komparator On-chip oscillator Fasilitas In System Programming (ISP)

Sedangkan ATmega8535 banyak digunakan untuk sistem yang kompleks, memiliki input sinyal analog, dan membutuhkan memori yang relatif lebih besar. Berikut adalah feature-feature mikrokontroler seri ATmega8535.

Memori Flash 8 Kbytes untuk program Memori EEPROM 512 bytes untuk data Memori SRAM 512 bytes untuk data Maksimal 32 pin I/O 20 interrupt Satu 16-bit timer dan dua 8-bit timer 8 channel ADC 10 bit Komunikasi serial melalui SPI dan USART Analog komparator 4 I/O PWM Fasilitas In System Programming (ISP)

MEMORY MAP MIKROKONTROLER AVR

PENJELASAN FUNGSI PIN MIKROKONTROLER AVR IC mikrokontroler dikemas (packaging) dalam bentuk yang berbeda. Namun pada dasarnya fungsi kaki yang ada pada IC memiliki persamaan. Gambar salah satu bentuk IC seri mikrokontroler AVR ATmega8535 dapat dilihat berikut.

Berikut adalah penjelasan fungsi tiap kaki. A. Port A Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port A dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port A (DDRA) harus disetting terlebih dahulu sebelum Port A digunakan. Bit-bit DDRA diisi 0 jika ingin memfungsikan pin-pin port A yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Selain itu, kedelapan pin port A juga digunakan untuk masukan sinyal analog bagi A/D converter. B. Port B Merupakan 8-bit directional port I/O. Setiap pinnya dapat menyediakan internal pull-up resistor (dapat diatur per bit). Output buffer Port B dapat memberi arus 20 mA dan dapat mengendalikan display LED secara langsung. Data Direction Register port B (DDRB) harus disetting terlebih dahulu sebelum Port B digunakan. Bit-bit DDRB diisi 0 jika ingin memfungsikan pin-pin port B yang bersesuaian sebagai input, atau diisi 1 jika sebagai output. Pin-pin port B juga memiliki untuk fungsi-fungsi alternatif khusus seperti yang dapat dilihat dalam tabel berikut.

Port Pin PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7

Fungsi Khusus T0 = timer/counter 0 external counter input T1 = timer/counter 0 external counter input AIN0 = analog comparator positive input AIN1 = analog comparator negative input SS = SPI slave select input MOSI = SPI bus master output / slave input MISO = SPI bus master input / slave output SCK = SPI bus serial clock

C. 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. D. 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.

Port Pin PD0 PD1 PD2 PD3 PD4 PD5 PD6 PD7

Fungsi Khusus RDX (UART input line) TDX (UART output line) INT0 ( external interrupt 0 input ) INT1 ( external interrupt 1 input ) OC1B (Timer/Counter1 output compareB match output) OC1A (Timer/Counter1 output compareA match output) ICP (Timer/Counter1 input capture pin) OC2 (Timer/Counter2 output compare match output)

E. RESET RST pada pin 9 merupakan reset dari AVR. Jika pada pin ini diberi masukan low selama minimal 2 machine cycle maka system akan di-reset. F. XTAL1 XTAL1 adalah masukan ke inverting oscillator amplifier dan input ke internal clock operating circuit. G. XTAL2 XTAL2 adalah output dari inverting oscillator amplifier. H. AVcc Avcc adalah kaki masukan tegangan bagi A/D Converter. Kaki ini harus secara eksternal terhubung ke Vcc melalui lowpass filter. I. 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. J. AGND AGND adalah kaki untuk analog ground. Hubungkan kaki ini ke GND, kecuali jika board memiliki anlaog ground yang terpisah.

Ditulis oleh: Tim Prasimax Copyright Prasimax Technology 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 1 XTAL 4 MHz atau 8 MHz (XTAL1) 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) 1 tombol reset pushbutton (PB1)

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.

Ditulis oleh: Tim Prasimax Copyright Prasimax Technology 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 if else : digunakan untuk penyeleksian kondisi if ( [persyaratan] ) { [statement1]; [statement2]; } else { [statement3]; [statement4]; } for : digunakan untuk looping dengan jumlah yang sudah diketahui for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) { [statement1]; [statement2]; } while : digunakan untuk looping jika dan salama memenuhi syarat tertentu while ( [persyaratan] ) { [statement1]; [statement2]; } do while : digunakan untuk looping jika dan salama memenuhi syarat tertentu, namun min 1 kali do {

[statement1]; [statement2]; } while ( [persyaratan] ) switch case : digunakan untuk seleksi dengan banyak kondisi switch ( [nama variabel] ) { case [nilai1]: [statement]; break; case [nilai2]: [statement]; break; }

7. Operasi logika dan biner

Logika AND :&& NOT : ! OR : || 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 = 30x5 = 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.

Ditulis oleh: Tim Prasimax Copyright Prasimax Technology

Pemrograman (Interface) LCD dengan Mikrokontroller AVR ATMega8535 Teori Dasar LCD LCD (Liquid Crystal Display) adalah modul penampil yang banyak digunakan karena tampilannya menarik. LCD yang paling banyak digunakan saat ini ialah LCD M1632 refurbish karena harganya cukup murah. LCD M1632 merupakan modul LCD dengan tampilan 2x16 (2 baris x 16 kolom) dengan konsumsi daya rendah. Modul tersebut dilengkapi dengan mikrokontroler yang didesain khusus untuk mengendalikan LCD. Mikrokontroler HD44780 buatan Hitachi yang berfungsi sebagai pengendali LCD memiliki CGROM (Character Generator Read Only Memory), CGRAM (Character Generator Random Access Memory), dan DDRAM (Display Data Random Access Memory). LCD yang umum, ada yang panjangnya hingga 40 karakter (2x40 dan 4x40), dimana kita menggunakan DDRAM untuk mengatur tempat penyimpanan karakter tersebut.

Susunan Alamat Pada LCD Alamat awal karakter 00H dan alamat akhir 39H. Jadi, alamat awal di baris kedua dimulai dari 40H. Jika Anda ingin meletakkan suatu karakter pada baris ke-2 kolom pertama, maka harus diset pada alamat 40H. Jadi, meskipun LCD yang digunakan 2x16 atau 2x24, atau bahkan 2x40, maka penulisan programnya sama saja. CGRAM merupakan memori untuk menggambarkan pola sebuah karakter, dimana bentuk dari karakter dapat diubah-ubah sesuai dengan keinginan. Namun, memori akan hilang saat power supply tidak aktif sehingga pola karakter akan hilang. Berikut tabel pin untuk LCD M1632. Perbedaannya dengan LCD standar adalah pada kaki 1 VCC, dan kaki 2 Gnd. Ini kebalikan dengan LCD standar. Susunan kaki LCD M1632

Perlu diketahui, driver LCD seperti HD44780 memiliki dua register yang aksesnya diatur menggunakan pin RS. Pada saat RS berlogika 0, register yang diakses adalah perintah, sedangkan pada saat RS berlogika 1, register yang diakses adalah register data. Agar dapat mengaktifkan LCD, proses inisialisasi harus dilakukan dengan cara mengeset bit RS dan meng-clear-kan bit E dengan delay minimal 15 ms. Kemudian mengirimkan data 30H dan ditunda lagi selama 5 ms. Proses ini harus dilakukan tiga kali, lalu mengirim inisial 20H dan interface data length dengan lebar 4 bit saja (28H). Setelah itu display dimatikan (08H) dan di-clear-kan

(01H). Selanjutnya dilakukan pengesetan display dan cursor, serta blinking apakah ON atau OFF.

Gambar berikut menampilkan hubungan antara LCD dengan port mikrokontroler, biasa terdapat potensiometer untuk mengatur kontras/kecerahan dari LCD tersebut. Pada input LED, dipasang transistor sebagai penguat arus, sehingga dapat menampilkan cahaya LED yang cukup terang.

Rangkaian LCD pada AVR

Berikut adalah contoh program menampilkan pesan dengan geser kanan kiri dengan delay tertentu. Buatlah sebuah proyek baru dengan nama LCD, lalu masukkan kode berikut.

Jika program di atas dijalankan, maka akan tampil pesan di atas dengan bergeser kanan kiri. Alternatif lain di dalam pemrograman LCD adalah menggunakan software yang lebih mudah, seperti misalnya Bascom AVR (lihat www.mcselec.com). Software ini menggunakan bahasa Basic untuk AVR, mirip dengan Basic Stamp. Pada software tersebut sudah ada fungsi-fungsi penting yang siap digunakan, misalnya untuk LCD, kendali port, delay dan lain-lain. Berikut contoh program untuk menampilkan animasi Data Logger di LCD menggunakan Bascom AVR, keypad membran 4x4, dan kit mikrokontroler SmartAVR. Program pertama kali melakukan konfigurasi LCD sesuai pin yang digunakan pada LCD.

Untuk menampilkan teks di LCD, cukup Anda gunakan fungsi LCD, begitu juga untuk menggeser karakter ke kanan dan ke kiri, Bascom AVR menyediakan berbagai fungsi yang memudahkan kita memprogram mikrokontroler.

Berikut kode lengkap demo Data Logger berbasis Bascom AVR:

Programming Mikrokontroler AVR dengan C on: January 29, 2010, 07:15:26 pm 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 if else digunakan untuk penyeleksian kondisi if ( [persyaratan] ) { [statement1]; [statement2]; } else { [statement3]; [statement4]; } for : digunakan untuk looping dengan jumlah yang sudah diketahui for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) { [statement1]; [statement2]; } while : digunakan untuk looping jika dan salama memenuhi syarat tertentu while ( [persyaratan] ) { [statement1]; [statement2]; } do while : digunakan untuk looping jika dan salama memenuhi syarat tertentu, namun min 1 kali do { [statement1]; [statement2]; } while ( [persyaratan] ) switch case : digunakan untuk seleksi dengan banyak kondisi switch ( [nama variabel] ) { case [nilai1]: [statement]; break; case [nilai2]: [statement]; break; } 7. Operasi logika dan biner Logika AND :&& NOT : !

OR : || 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 = 30x5 = 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. (http://um.ac.id)

Program Mikrokontroler AVR Untuk Sensor SRF04 Menggunakan CVAVR Antarmuka Stick PS Dengan Mikrokontroler AVR Program Mikrokontroler AVR Untuk Sensor GP2D12 Menggunakan CVAVR GP2D12 adalah sensor pengukur jarak yang diproduksi oleh Sharp. Sensor ini mengeluarkan sinyal analog dan mampu mengukur jarak pada rentang 10 80 cm. Versi lain dari jenis ini adalah GP2D15 yang mengeluarkan sinyal biner (0 atau 1 saja) dengan treshold 24 cm (dan ternyata cukup sulit untuk mengatur treshold ini) dan GP2D02 dengan output serial digital. Prinsip kerja sensor inframerah ini dalam mengukur jarak berbeda dengan sensor ultrasonik yang menggunakan waktu pantul gelombang bunyi karena waktu pantul cahaya jelas terlalu singkat untuk dapat diukur. Cahaya inframerah dengan frekuensi 40 kHz dipancarkan dan hasil pantulannya diterima oleh susunan detektor inframerah. Sudut pantulan sinar inframerah akan berubah sesuai jarak sensor dan obyek. Antarmuka sensor GP2D12 dengan AVR sangatlah mudah, terutama karena telah terdapat ADC internal yang dimiliki AVR. Namun sayangnya output analog sensor ini sangatlah tidak linier. Ada beberapa cara yang dapat dilakukan untuk mengatasi hal ini, yaitu

lookup table interpolasi persamaan non-linier

Untuk melakukan ketiga cara tersebut diperlukan data hubungan input-output yang dapat diperoleh dari datasheet ataupun proses kalibrasi. Pada tulisan ini yang digunakan adalah cara ketiga. Hal pertama yang dilakukan adalah melakukan kalibrasi. Tabel 1 di bawah ini menunjukkan hasil kalibrasi yang telah dilakukan menggunakan ADC 8 bit dan tegangan referensi VCC. data_adc jarak,cm 120 10 88 15 69 20 57 25 49 30 42 35 37 40 Meskipun jarak tidak proporsional terhadap data_adc, namun ternyata mempunyai hubungan yang cukup linier terhadap 1/data_adc (tabel 2) 1/data_adc jarak,cm 0.008333 10 0.011364 15 0.014493 20 0.017544 25 0.020408 30 0.02381 35 0.027027 40 Gambar 1 menunjukkan hasil grafik yang diperoleh dari tabel 2 beserta persamaan korelasinya yang dapat dibuat dengan mudah menggunakan sembarang software spreadsheet. Pada MS Excel cukup menambahkan trendline pada grafik. Dari gambar 1 diperoleh persamaan (setelah dibulatkan) jarak = (1611/data_adc)-3 Meskipun ketelitiannya hanya dalam orde cm, namun sudah cukup memadai untuk berbagai macam aplikasi, misalnya untuk deteksi jarak pada robot. Program yang dibuat cukup sederhana. Jika menggunakan wizard yang diatur adalah ADC (8 bit dan tegangan referensi VCC) dan LCD (PORTC). Sebuah sensor GP2D12 dihubungkan dengan input 0 ADC (PINA.0). Inti dari program ini adalah fungsi baca_gp2d12 unsigned char baca_gp2d12() { data_adc=read_adc(0); jrk=(1611/data_adc)-3; return jrk; } Fungsi ini mengambil data dari input 0 ADC, yang kemudian hasilnya dimasukkan ke persamaan hasil kalibrasi untuk memperoleh

jarak dalam cm. Hal yang perlu diperhatikan dalam penggunaan sensor GP2D12 adalah :

Hasil dari proses kalibrasi tergantung banyak hal. Untuk itu sebaiknya persamaan yang digunakan berasal data hasil kalibrasi anda sendiri. Output sensor ini akan menghasilkan pembacaan yang salah untuk pengukuran jarak kurang dari 8 cm. Cara pemecahan paling sederhana adalah dengan mengatur posisi sensor sehingga obyek tidak akan berjarak kurang dari 8 cm. Misalnya jika dipasang pada robot maka sensor tidak dipasang di tepi badan robot, namun agak masuk di tengah badan robot.

Dibandingkan dengan sensor jarak ultrasonik, seperti PING atau SRF04, harga GP2D12 relatif lebih murah, namun rentang dan jangkauan pengukurannya lebih sempit (10-80 cm) dibanding PING dan SRF04 yang berkisar antara 3 cm 3 m. Selain itu karena outputnya analog diperlukan ADC. Meski demikian keberadaan mikrokontroler dengan ADC internal, seperti seri AVR, mempermudah penggunaan sensor ini. Berikut adalah program selengkapnya untuk membaca data dari GP2D12 dan menampilkannya pada LCD menggunakan ATMEGA8535 dan kristal 4 MHz. Output GP2D12 dihubungkan dengan PINA.0 sedangkan LCD dengan PORTC. Semoga bermanfaat. /***************************************************** This program was produced by the CodeWizardAVR V1.24.7d Evaluation Automatic Program Generator Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:office@hpinfotech.com Project : GP2D12 Version : Date : 12/14/2008 Author : Agung Nugroho A Company : Lab. Mekatronika Jurusan Teknik Mesin UII Comments: Chip type : ATmega8535 Program type : Application Clock frequency : 4.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 128 *****************************************************/ #include <mega8535.h> #include <stdio.h> #include <delay.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=015 ;PORTC #endasm #include <lcd.h> #define ADC_VREF_TYPE 060 // Read the 8 most significant bits // of the AD conversion result unsigned char read_adc(unsigned char adc_input) { ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion ADCSRA|=040; // Wait for the AD conversion to complete while ((ADCSRA & 010)==0);

ADCSRA|=010; return ADCH; } // Declare your global variables here unsigned char data_adc; unsigned char kata[16]; unsigned char jrk; unsigned char jarak; // Fungsi untuk membaca data GP2D12 unsigned char baca_gp2d12() { //ambil data ADC data_adc=read_adc(0); //masukkan ke dalam persamaan hasil kalibrasi //untuk mendapatkan jarak dalam cm jrk=(1611/data_adc)-3; return jrk; } void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=000; DDRA=000; // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=000; DDRB=000; // Port C initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=000; DDRC=000; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=000; DDRD=000; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=000; TCNT0=000; OCR0=000; // Timer/Counter 1 initialization // Clock source: System Clock

// Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=000; TCCR1B=000; TCNT1H=000; TCNT1L=000; ICR1H=000; ICR1L=000; OCR1AH=000; OCR1AL=000; OCR1BH=000; OCR1BL=000; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=000; TCCR2=000; TCNT2=000; OCR2=000; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=000; MCUCSR=000; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=000; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=080; SFIOR=000; // ADC initialization // ADC Clock frequency: 125.000 kHz // ADC Voltage Reference: AVCC pin // ADC High Speed Mode: Off // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE; ADCSRA=085; SFIOR&=0xEF; // LCD module initialization lcd_init(16);

while (1) { // Place your code here jarak=baca_gp2d12(); sprintf(kata,Jarak = %2d cm,jarak); lcd_clear(); lcd_gotoxy(0,0); lcd_puts(kata); delay_ms(500); }; } Sumber Pustaka

Braunl, Embedded Robotics, Mobile Robot Design and Applications with Embedded Systems, Springer, 2006 McComb & Priedko, Robot Builders Bonanza, McGraw-Hill, 2006. ___, Datasheet GP2D12/GP2D15, Sharp.

6 Bit 7 I : Global Interrupt EnableJika bit Global Interrupt Enable diset, maka fasilitas interupsi dapat dijalankan. Bitini akan clear ketika ada interruptyang dipicu dari hardware, setelah program interrupt dieksekusi, maka bit iniharus di set kembali dengan instruksi SEI.Bit 6 T : Bit Copy StorageInstruksi bit copy BLD dan BST menggunakan bit T sebagai sumber atau tujuandalam operasi bit.Bit 5 H : Half Carry FlagBit 4 S : Sign BitBit S merupakan hasil exlusive or dari Negative Flag N dan Twos ComplementOverflow Flag V.Bit 3 V : Twos Complement Overflow FlagDigunakan dalam operasi aritmatikaBit 2 N : Negative FlagJika operasi aritmatika menghasilkan bilangan negatif, maka bit ini akan set.Bit 1 Z : Zero FlagJika operasi aritmatika menghaslkan bilangan nol, maka bit ini akan set.Bit 0 Z : Zero Flag 7 1.4 Bahasa Assembly AVR Bahasa yang dipakai untuk memprogram mikrokontroler AVR adalah bahasaassembly AVR atau bahasa C. Dalam buku ini semua program ditulis dalambahasa assembly AVR. Berikut adalah contoh sebuah program aplikasi untukmikrokontroler AVR :.include m8535def.inc.org 0x0000rjmp main Inisialisasi programmain: ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16ldi r16,0xffout ddra,r16 Program utamaout PortA,r16cbi PortA,0cbi PortA,1stop: rjmp stopSebuah program harus terdiri dari dua bagian, yaitu inisialisasi program danprogram utama. Inisialisasi program harus disertakan agar program utama dapatberjalan. Berikut adalah urutan langkah inisialisasi program :1. Menentukan jenis mikrokontroler yang digunakan dengan cara memasukkanfile definisi device (m8535def.inc) ke dalam program utama..include m8535def.inc ;2. Menuliskan original address program, yaitu 0x0000. Kemudian dilanjutkandengan instruksi rjmp / relative jump ke label main. Hal ini dimaksudkan agarprogram memory tidak tumpang tindih dengan data memory..org 0x0000rjmp main 8 3. Menentukan isi Stack Pointer dengan address terakhir RAM (RAMEND).Untuk ATMega8535 yaitu 0x025F. Ini dimaksudkan agar program utama mulaiditulis setelah address terakhir RAM.main: ldi r16,low(RAMEND) ; low byte address RAM = 5Fout SPL,r16ldi r16,high(RAMEND) ; high byte address RAM = 02out SPH,r16

Percobaan 1.1. Menghidupkan dan Mematikan LED dengan OUT Pada percobaan berikut LED yang terhubunga pada Port C akan dihidupkan dandimatikan dengan menggunakan perintah OUT.Gambar 2.1. Rangkaian LED.include "8535def.inc"start:ldi R16,0b11111111out DDRC,R16;ldi R16,0b11110000out PortC,R16stop:rjmp stop Percobaan 2.2. Menghidupkan dan Mematikan LED dengan SBI dan CBI Pada percobaan berikut sebut LED yang terhubung dengan Port C bit 0 ( PC.0 )akan dihidupkan atau dimatikan satu bit dengan perintah SBI ( set bit IO ) danCBI ( Clear bit IO ).include "8535def.inc"start:sbi DDRC,0 ;PortC, bit 0 as outputcbi PORTC,0 ;send logic '0' to PortC bit 0;stop:rjmp stop

12 Percobaan 2.3. Menghidupkan dua buah LED Pada percobaan berikut akan dihidupkan LED yang terhubung dengan Port C bit0 dan bit 7 ( PortC.0 dan PortC.7 ) dengan menggunakan perintah CBI ( clear bitIO )..include "8535def.inc"start:sbi DDRC,0 ;PortC, bit 0 & 7 as outputsbi DDRC,7cbi PORTC,0 ;send logic '0' to PortC bit 0 & 7cbi PORTC,7;stop:rjmp stop Percobaan 2.4. Mengedipkan LED dengan Waktu Tunda Pada percobaan birikut akan dihidupkan dan dimatikan 8 buah LED yangterhubung ke PORTC, secara bersamaan, dengan menggunakan instruksi OUTSehingga 8 buah LED akan tampak berkedip. Untuk menghasilkan efek berkedipmaka diperlukan pembuatan subrutin waktu tunda yang dibuat secara software..include "m8535def.inc".org 0x0000;ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16;init:ldi R16, 0b11111111 ; Make pin PC outputout DDRC, R16 ;main:ldi R16, 0b00000000 ;out PORTC,R16rcall delayldi R16, 0b11111111 ;out PORTC,R16rcall delaygetout:rjmp main ;repaet until power removed 13 delay:; provides some delay so that the LED is visible; =============================; delay loop; 499998 cycles: about 1/2 seconds; -----------------------------; delaying 499995 cycles:ldi R29, $FfWGLOOP0: ldi R30, $ffWGLOOP1: ldi R31, $10WGLOOP2: dec R31brne WGLOOP2dec R30brne WGLOOP1dec R29brne WGLOOP0ret Percobaan 2.5. Menghidupkan LED secara berurutan Pada percobaan ini LED yang terhubung pada PortC akan dihidupkan secarabergantian dengan mulai BIT 0 sampai BIT 7, sehingga semua LED akan hidupsemua. Percobaan ini juga menyerupai percobaan 2.5. yang menggunakansubrutin waktu tunda, untuk melihat efek perubahan LED yang nyala..include m8535def.inc.org 0x0000;ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16;ldi R16,0b11111111out DDRC,R16main:ldi R16,0b11111111out PORTC,R16rcall delay;cbi PORTC,0rcall delaycbi PORTC,1rcall delaycbi PORTC,2rcall delaycbi PORTC,3 14 rcall delaycbi PORTC,4rcall delaycbi PORTC,5rcall delaycbi PORTC,6rcall delaycbi PORTC,7rcall delay;rjmp main ; epeat untilpower removed ; provides some delay so that the LED is visibledelay:ldi R29, $20WGLOOP0: ldi R30, $ffWGLOOP1: ldi R31, $ffWGLOOP2: dec R31brne WGLOOP2dec R30brne WGLOOP1dec R29brne WGLOOP0ret 2.6. Menghidupkan Secara Bergantian Pada percobaan ini LED yang terhubung ke PORT C akan digeser ke KIRIsecara berurutan mulai BIT 0 sampai BIT 7 dengan menggunakan perintah ROL,percobaan ini juga menggunakan subrutin waktu tunda, untuk melihat efekpergeseran LED..include "m8535def.inc".org 0x0000;ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16;ldi R16,0b11111111out DDRC,R16ldi R16,0b11111110secmain:

15 out PORTC,R16rol R16rcall delay;rjmp main ; repaet until power removed :-); provides some delay so that the LED is visibledelay:ldi R29, $20WGLOOP0: ldi R30, $ffWGLOOP1: ldi R31, $ffWGLOOP2: dec R31brne WGLOOP2dec R30brne WGLOOP1dec R29brne WGLOOP0ret 2.7. Percobaan Pengambilan Data pada PortB Pada percobaan ini pengambilan logika 0 dan 1 dilakukan dengan menggunakanPort B 8 buah melalui penekanan tombol push button SW1 sampai dengan SW8,dengan harapan apabila sw ditekan maka port B akan mendapatkan logika 0,data logika 0 akan diolah oleh mikrokontroller selanjutnya dengan menggunakanport C maka dapat menghidupkan LED.Gambar 2.2. Rangkaian SW

16 .include "m8535def.inc".org 0x0000main:ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16;start:ldi R16,0b11111111out DDRC,R16ldi R16,0b11111111out PORTC,R16;ldi R16,0b00000000out DDRB,R16ldi R16,0b11111111out PORTB,R16;get: in R16,PINBout PORTC,R16rjmp get Percobaan 2.8. Menghidupkan dan mematikan LED dengan menggunakanSW tunggal .Pada percobaan ini SW yang digunakan adalah yang terhubung denganmenggunakan port B bit 0, dan menghubungkan LED pada port C bit 0..include "m8535def.inc".org 0x0000main:ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16;start:ldi R16,0b11111111out DDRC,R16ldi R16,0b11111111out PORTC,R16;cbi DDRB,0sbi

7 1.4 Bahasa Assembly AVR Bahasa yang dipakai untuk memprogram mikrokontroler AVR adalah bahasaassembly AVR atau bahasa C. Dalam buku ini semua program ditulis dalambahasa assembly AVR. Berikut adalah contoh sebuah program aplikasi untukmikrokontroler AVR :.include m8535def.inc.org 0x0000rjmp main Inisialisasi programmain: ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16ldi r16,0xffout ddra,r16 Program utamaout PortA,r16cbi PortA,0cbi PortA,1stop: rjmp stopSebuah program harus terdiri dari dua bagian, yaitu inisialisasi program danprogram utama. Inisialisasi program harus disertakan agar program utama dapatberjalan. Berikut adalah urutan langkah inisialisasi program :1. Menentukan jenis mikrokontroler yang digunakan dengan cara memasukkanfile definisi device (m8535def.inc) ke dalam program utama..include m8535def.inc ;2. Menuliskan original address program, yaitu 0x0000. Kemudian dilanjutkandengan instruksi rjmp / relative jump ke label main. Hal ini dimaksudkan agarprogram memory tidak tumpang tindih dengan data memory..org 0x0000rjmp main 8 3. Menentukan isi Stack Pointer dengan address terakhir RAM (RAMEND).Untuk ATMega8535 yaitu 0x025F. Ini dimaksudkan agar program utama mulaiditulis setelah address terakhir RAM.main: ldi r16,low(RAMEND) ; low byte address RAM = 5Fout SPL,r16ldi r16,high(RAMEND) ; high byte address RAM = 02out SPH,r16 9 BAB IIOperasi Port Input Output 2.1 Register I/O Setiap port ATMega8535 terdiri dari 3 register I/O yaitu DDRx, Portx dan PINx. DDRx (Data Direction Register)Register DDRx digunakan untuk memilih arah pin. Jika DDRx = 1 makaPxn sebagai pin output Jika DDRx = 0maka Pxn sebagai input. Portx (Port Data Register)Register Portx digunakan untuk 2 keperluan yaitu untuk jalur output atauuntuk mengaktifkan resistor pullup.1. Portx berfungsi sebagai output jika DDRx = 1 maka :Portxn = 1 maka pin Pxn akan berlogika high.Portxn = 0 maka pin Pxn akan berlogika low.2. Portx berfungsi untuk mengaktifkan resistor pullup jika DDRx = 0 maka :Portxn = 1 maka pin Pxn sebagai pin input dengan resistor pull up.Portxn = 0 maka pin Pxn sebagai output tanpa resistor pull up.Tabel 2.1 Konfigurasi PortCatatan :x menunjukkan nama port (A,B,C,D)n menunjukkan nomor bit (0,1,2,3,4,5,6,7)Nilai awal (initial value) seluruh register I/O adalah 00h.

10 PINx (Port Input Pin Address)Digunakan sebagai register input. 2.2 Instruksi I/Oin : membaca data I/O port ke dalam registercontoh : in r16,PinA out : menulis data register ke I/O portcontoh : out PortA,r16 ldi : (load immediate) : menulis konstanta ke register sebelum konstantatersebut dikeluarkan ke I/O portcontoh : ldi r16,0xff sbi : (set bit in I/O) : membuat logika high pada sebuah bit I/O portcontoh : sbi PortB,7 cbi : (clear bit in I/O) : membuat logika low pada sebuah bit I/O portcontoh : cbi PortB,5 sbic : (skip if bit in I/O is clear) : lompati satu instruksi jika bit I/O port dalamkondisi clear/lowcontoh : sbic PortA,3 sbis : (skip if bit in I/O is set) : lompati satu instruksi jika bit I/O port dalam kondisiset/highcontoh : sbis PortB,3 11

Percobaan 1.1. Menghidupkan dan Mematikan LED dengan OUT Pada percobaan berikut LED yang terhubunga pada Port C akan dihidupkan dandimatikan dengan menggunakan perintah OUT.Gambar 2.1. Rangkaian LED.include "8535def.inc"start:ldi R16,0b11111111out DDRC,R16;ldi R16,0b11110000out PortC,R16stop:rjmp stop Percobaan 2.2. Menghidupkan dan Mematikan LED dengan SBI dan CBI Pada percobaan berikut sebut LED yang terhubung dengan Port C bit 0 ( PC.0 )akan dihidupkan atau dimatikan satu bit dengan perintah SBI ( set bit IO ) danCBI ( Clear bit IO ).include "8535def.inc"start:sbi DDRC,0 ;PortC, bit 0 as outputcbi PORTC,0 ;send logic '0' to PortC bit 0;stop:rjmp stop

12 Percobaan 2.3. Menghidupkan dua buah LED Pada percobaan berikut akan dihidupkan LED yang terhubung dengan Port C bit0 dan bit 7 ( PortC.0 dan PortC.7 ) dengan menggunakan perintah CBI ( clear bitIO )..include "8535def.inc"start:sbi DDRC,0 ;PortC, bit 0 & 7 as outputsbi DDRC,7cbi PORTC,0 ;send logic '0' to PortC bit 0 & 7cbi PORTC,7;stop:rjmp stop Percobaan 2.4. Mengedipkan LED dengan Waktu Tunda Pada percobaan birikut akan dihidupkan dan dimatikan 8 buah LED yangterhubung ke PORTC, secara bersamaan, dengan menggunakan instruksi OUTSehingga 8 buah LED akan tampak berkedip. Untuk menghasilkan efek berkedipmaka diperlukan pembuatan subrutin waktu tunda yang dibuat secara software..include "m8535def.inc".org 0x0000;ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16;init:ldi R16, 0b11111111 ; Make pin PC outputout DDRC, R16 ;main:ldi R16, 0b00000000 ;out PORTC,R16rcall delayldi R16, 0b11111111 ;out PORTC,R16rcall delaygetout:rjmp main ;repaet until power removed

23 ldi r17,0b00001111and r16,r17ori r16,0b00001000clr r16inc r16ser r16dec r16here: rjmp here Latihan : 1. Buatlah program untuk memecahkan persoalan berikut :2. Buatlah program dengan ketentuan sbb : Jawaban no 2: .include "m8535def.inc".org 0x00rjmp mainmain: ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16mulai: sbic PortA,1 ; skip if PortA,1 = 0rjmp cek10_11rjmp cek00_01cek10_11: ; PortA,1=1sbic PortA,0 ; PortA,1=1, PortA,0=0 (10)rjmp setAll ;ulang: ldi r21,10dec r21dec r21

24 dec r21dec r21dec r21dec r21dec r21dec r21dec r21dec r21 rjmp ulangsetAll: ser r20ser r21rjmp mulai;cek00_01: ; PortA,1=0sbis PortA,0 ; skip if PortA,0=1rjmp clearAllulang2: ldi r20,0inc r20inc r20inc r20inc r20inc r20inc r20inc r20inc r20inc r20inc r20rjmp ulang2clearAll:clr r20clr r21rjmp mulai 25 BABVPercabangan 5.1 Operasi Percabangan Instruksi Percabangan sbic (skip if bit in I/O is cleared) : Skip jika bit I/O yang diuji clear sbis (skip if bit in I/O is set) : Skip jika bit I/O yang diuji set sbrc (skip if bit in register is clear) : Skip jika bit dalam register yang diuji clear cp (compare) : Membandingkan isi dua register mov (move) : Meng-copy isi dua register

cpi (compare with immediate) :Membandingakan isi register dengankonstanta tertentu. breq (branch if equal) : Lompat ke label tertentu jika suatu hasilperbandingan adalah sama. brne (branch if not equal) : Lompat ke label tertentu jika suatu hasilperbandingan adalah tidak sama. rjmp (relative jump) : Lompat ke label tertentu. rcall (relative call) : Memanggil subrutin. ret (return) : Keluar dari sub rutin. 5.2 Contoh Program Operasi Percabangan.include "m8535def.inc".org 0x00rjmp mainmain: ldi r16,low(RAMEND)out SPL,r16ldi r16,high(RAMEND)out SPH,r16clr r16 ; r16=0x00naik: inc r16 ; increment r16cpi r16,5 ; r16=5 ?breq lagi ; branch to lagi if r16 = 5rjmp naik ; jump to naik if r16 5 26 lagi: ldi r18,5 ; r18 = 5dec r16 ; decrement r16cp r16,r18 ; compare r16 & r18brne lompat ; branch to lompat if r16=r18rjmp lagi ; jump to lagi if r16 r18lompat: rcall rutin1rcall rutin2henti: rjmp hentirutin1: mov r17,r16retrutin2: mov r19,r18ret Latihan : Buatlah program delay dari flowchart berikut ini :

26 lagi: ldi r18,5 ; r18 = 5dec r16 ; decrement r16cp r16,r18 ; compare r16 & r18brne lompat ; branch to lompat if r16=r18rjmp lagi ; jump to lagi if r16 r18lompat: rcall rutin1rcall rutin2henti: rjmp hentirutin1: mov r17,r16retrutin2: mov r19,r18ret Latihan : Buatlah program delay dari flowchart berikut ini :

AVRA adalah sebuah program assembler untuk keluarga Mikrokontroler Atmel AVR yang kompatibel dengan AVRASM32 keluaran Atmel. Versi awal AVRA dirilis oleh John Anders Haugum. Setelah versi 0.7, AVRA dilanjutkan oleh Tobias Weber dan terakhir oleh Burkhard Arenfeld. Berbeda dengan GAVRASM yang dibuat menggunakan Free Pascal, AVRA dibuat dengan bahasa C berstandar ANSI. Jadi eksekusinya lebih cepat dibandingkan GAVRASM. Sebagai perbandingan saja, pada versi Windows, ukuran file executable AVRA adalah 109 KB sementara GAVRASM 2,71 MB. AVRA dirancang untuk dapat menggantikan AVRASM32, meskipun belum semua fitur yang dimiliki AVRASM32 telah diadopsikan ke AVRA, namun AVRA telah dapat digunakan dengan Atmel AVR Studio. AVRA memiliki beberapa perbedaan dengan AVRASM32, antara lain:

AVRA mendukung beberapa direktif tambahan antara lain .define, .undef, .ifdef, .if, .else, .endif, .elif, .elseif, dan .warning. Tidak semua command line yang dimiliki AVRASM32 dimiliki oleh AVRA. Parameter -e untuk menentukan file EEPROM. AVRA menyimpan data EEPROM dalam file program.eep.hex, AVRA tidak mendukung format selain Intel Hex. AVRA memiliki beberapa fitur baru dalam penulisan makro (lebih fleksibel) sehingga semakin mendukung konsep penggunaan kembali kode program. Hal ini cocok untuk pengembangan library program. AVRA menciptakan file coff setiap kali proses assembling sukses. File coff ini dapat digunakan dengan program debugger seperti AVR Studio atau program debugger lain yang mendukung tipe file ini. AVRA memiliki Meta Tag untuk mencatat waktu kompilasi. Selain itu, Meta Tag ini juga dapat digunakan untuk membangkitkan serial number.

AVRA merupakan software open-source yang dapat dikompilasi pada sistem operasi apapun. Saat ini tersedia dua macam paket download yang tersedia di SourceForge.Net, yakni paket untuk Win32 dan paket Source Code. Dalam paket untuk Win32 disertakan juga source code-nya. Anda dapat mendownload keduanya melalui download link yang telah saya sediakan. Perlu saya sampaikan sekali lagi bahwa AVRA dirancang untuk menggantikan AVRASM32 dengan beberapa fitur tambahan yang tidak dimiliki oleh AVRASM32. Dalam kerjanya, AVRA membutuhkan filefile include yang berisi definisi-definisi untuk masing-masing tipe AVR , namun bukan suatu keharusan. Kita dapat membuat sendiri file include atau cukup mendefinisikan register-register yang kita butuhkan saja dalam program kita. Akan tetapi, jauh lebih praktis untuk menggunakan file-file include dari Atmel AVRASM32. Download

avra-1.2.3-win32.zip avra-1.2.3a-src.tar.bz2

Instalasi AVRA Pada sistem operasi Linux, lakukan langkah-langkah sebagai berikut:

bunzip2 avra-1.2.3a-src.tar.bz2 tar -xvf avra-1.2.3a-src.tar cd avra-1.2.3 cp Makefiles/Makefile.linux Makefile make Sebagai root: make install Testing: avra devices unzip avr000.zip

mkdir /home/chandra/attiny2313 mkdir /home/chandra/atmega8 cp tn2313def.inc /home/chandra/attiny2313 cp m8def.inc /home/chandra/atmega8

Perhatian! Subdirektori user (chandra) harus diganti dengan nama subdirektori user Anda sendiri. Prosedur di atas akan menginstal AVRA dan membuat subdirektori attiny2313 dan atmega8 yang berisi file tn2313def.inc dan m8def.inc, respectively. Saya memisahkan file-file program untuk proyek mikrokontroler menggunakan ATtiny2313 dan ATmega8. Anda boleh saja menempatkan file-file include di mana saja. Yang perlu diingat hanyalah, AVRA membutuhkan file-file include tersebut. Jadi pastikan saja path-nya pada direktif .include dalam source code benar. Pada sistem operasi Windows, file distribusi avra-1.2.3-win32.zip menyediakan file executable AVRA.EXE pada subdirektori bin. Jika Anda ingin menggantikan AVRASM32, maka hapus saja file AVRASM32.EXE dan ganti dengan AVRA.EXE, jangan lupa untuk me-rename lho ya Tapi jika Anda seperti saya, lebih suka menulis program menggunakan fasilitas editor console semacam EDIT dan menjalankan proses kompilasi melalui command line, maka Anda bisa letakkan file AVRA.EXE di direktori utama C:\ atau di C:\AVRA beserta file-file include yang ada dalam file AVR000.ZIP. Okey, sekian dulu. Lebih lanjut tentang AVRA kapan-kapan kita ngobrol lagi. Selamat belajar!

Memrogram Mikrokontroler: C atau Assembly?


December 30th, 2010 christj Comments off Memrogram mikrokontroler dengan menggunakan bahasa assembly, bisa jadi merupakan mimpi buruk bagi sebagian orang, namun menjadi mainan yang menyenangkan bagi sebagian lainnya. Harus diakui, bahasa assembly memang tidak manusiawi, karena tidak mudah dibaca dan di-interpretasikan. Perlu bekal yang memadai sebelum kita dapat membaca dan memrogramnya dengan baik. Namun demikian, logika program dapat dituangkan langkah demi langkah secara rinci, sesuai dengan yang ada di benak pemrogram. Begitupun dalam perhitungan timing, bisa dilakukan dengan cukup cermat, karena masingmasing perintah yang digunakan, siklus eksekusinya jelas. Di pihak lain, compiler C akan menerjemahkan program yang kita buat ke dalam bahasa mesin sesuai dengan konsep yang dikembangkan oleh pengembang. Beberapa compiler melakukannya dengan cukup efisien sehingga kode bahasa mesin yang dihasilkan cukup pendek. Namun demikian, hasil akhirnya tetap tidak seoptimal bahasa assembly. Berikut adalah contoh program dalam bahasa C untuk mikrokontroler AVR, diprogram melalui AVRStudio4 dengan compiler AVRGCC:
int main(void) { int a = 10, b = 4, x, x = a + b; y = a - b; z = x*2 + y/2; return 0; } y, z;

Berikut adalah contoh dalam bahasa assembly untuk program yang sama, diprogram melalui AVRStudio4:
.include "m16def.inc" .def a =r16 .def b =r17 .def x =r18 .def y =r19 .def z =r20 main: ldi a, 10 ldi b, 4 mov x, a add x, b mov y, a sub y, b lsl x asr y mov z, x add z, y loop: inc r21 rjmp loop

Bagaimana program assembly untuk program dalam bahasa C berikut?


int main(void) { int a = 10; int b = 11; int c; c = a + b; return c; }

Selamat mencoba!

NEXT SYSTEM Robotics Learning & Experience Center ITC Kosambi Ruko F2 Jl. Baranang Siang 6-8 Bandung 40112 Tel. (022) 4222062 Email: info@nextsys.web.id Categories: belajar mikrokontroler, mikrokontroler, Mikrokontroler AVR, pemrograman mikrokontroler Tags: belajar mikrokontroler, memrogram mikrokontroler, pemrograman mikrokontroler dengan assembly, pemrograman mikrokontroler dengan bahasa c

Pemrograman Mikrokontroler dengan Bahasa C


October 14th, 2008 christj No comments Kembali ke era kegelapan dari mikroprosesor, dimana pengembangan software dilakukan secara eksklusif dengan bahasa assembly yang spesifik dari divais tertentu. Bahasa assembly ini menggunakan mnemonic sebagai pengganti dari kode numerik bahasa mesin. Untuk menuliskan 012 007 0xA4 0x8F yang akan memerintahkan chip untuk memasukkan sebuah nilai ke sebuah lokasi memori, kita dapat menuliskannya demikian dengan bahasa assembly: MOV 22, MYBUFFER+7. Program assembler akan menerjemahkan perintah tersebut ke dalam kode mesin. Saya pernah menulis kode dalam bahasa mesin sewaktu kuliah dulu, dan percayalah saat saya mengatakan bahwa bahasa assembly merupakan langkah maju dalam upaya meningkatkan produktivitas. Namun, bahasa assembly untuk sebuah piranti terikat dengan piranti tersebut. Sulit untuk menjadi mahir di dalam bahasa assembly karena ketika mikrokontroler yang dimaksud kadaluarsa atau hilang dari pasaran, maka apa yang kita pelajari pun menjadi mubazir. Bahasa assembly merupakan bahasa dengan tujuan tertentu yang hanya bekerja pada chip tertentu. Bila kita menguasai bahasa assembly untuk chip Motorola, tidak secara otomatis kita akan menguasai bahasa assembly untuk chip Zilog. Bagaimana dengan bahasa tingkat tinggi? Seperti Bahasa C misalnya? Bahasa tingkat tinggi umumnya dikembangkan untuk tujuan umum, untuk pemakain secara luas. Bahasa C merupakan salah satu bahasa tingkat tinggi yang banyak diminati. Sekali kita belajar C, kita dapat berpindah dengan mudah diantara keluarga mikrokontroler, menulis software dengan lebih cepat dan kode yang dibuat lebih mudah dimengerti dan di-maintain. Namun harus dicatat, mikrokontroler yang dimaksud harus memiliki C compiler yang ditulis untuknya. Dengan kata lain, kita bisa membuat program dalam bahasa C untuk mikrokontroler AVR, bila tersedia C compiler untuk AVR. Saat ini, tidak sulit mencari C compiler untuk mikrokontroler yang beredar di pasaran, walaupun harus sedikit menunggu untuk chip-chip keluaran terbaru. Satu produk C Compiler open source untuk mikrokontroler AVR, yang cukup banyak diminati, adalah WinAVR, yang dapat diunduh dari http://sourceforge.net/projects/winavr. WinAVR dapat diadaptasikan ke dalam AVR Studio IDE yang memiliki GCC plug-in. Categories: belajar mikrokontroler, mikrokontroler, pelatihan mikrokontroler, pemrograman mikrokontroler, training mikrokontroler Tags: belajar memprogram mikrokontroler, kursus mikrokontroler, kursus pemrograman mikrokontroler, memprogram mikrokontroler dengan bahasa c, pelatihan mikrokontroler, pemrograman mikrokontroler dengan assembly, pemrograman mikrokontroler dengan bahasa c