Pengantar
Salah satu mikrokontroler yang banyak digunakan yaitu mikrokontroler AVR. AVR adalah mikrokontroler RISC (Reduce Instruction Set Computing) 8-bit berdasarkan arsitektur Harvard.
Keunggulan mikrokontroler AVR yaitu memiliki kecepatan eksekusi program yang lebih cepat karena sebagian besar instruksi dieksekusi dalam 1 siklus clock. Dibandingkan dengan mikrokontroler MCS51 dengan arsitektur CISC (Complex Instruction Set Computing) yang membutuhkan 12 siklus clock untuk mengeksekusi 1 instruksi
AVR memiliki fitur yang lengkap (ADC internal, EEPROM Internal, Timer/Counter, Watchdog Timer, PWM, Port I/O, komunikasi serial, Komparator, I2C, dll.

Keluarga Mikrokontroler AVR:
1) TinyAVR – memori lebih kecil dengan ukuran kecil. Cocok untuk aplikasi-aplikasi sederhana
2) MegaAVR – keluarga ini adalah yang paling populer, memiliki memori yang cukup besar sampai 256KB, jumlah periferal bawaan lebih banyak dan cocok untuk aplikasi-aplikasi menengah sampai kompleks
3) XmegaAVR – digunakan secara komersial untuk aplikasi-aplikasi kompleks yang membutuhkan memori progam besar dan kecepatan tinggi.

Apa yang spesial dari AVR?
•Mikrokontroler ini menjalankan hampir semua instruksinya hanya dalam satu siklus eksekusi. Keluarga AVR kurang lebih 4x lebih cepat daripada keluarga PIC, AVR mengkonsumsi daya lebih rendah dan dapat digunakan dalam mode hemat daya yang bervariasi.
•Berikut ini perbandingan 3 keluarga mikrokontroler yang umum digunakan:

Berikut ini video penjelasan di atas:
Fitur-Fitur ATMega16

- Mikrokontroler AVR 8 bit yang memiliki kemampuan tinggi dengan daya rendah.
- Arsitektur RISC dengan throughput mencapai 16 MIPS pada frekuensi 16MHz.
- Memiliki kapasitas Flash memori 16 KByte, EEPROM 512 Byte dan SRAM 1 KByte.
- Saluran I/O sebanyak 32 buah, yaitu Port A, Port B, Port C, dan Port D.
- CPU yang terdiri atas 32 buah register.
- Unit interupsi internal dan eksternal.
- Port USART untuk komunikasi serial.
- Enam mode sleep: Idle, ADC Noise Reduction, Power-save, Power-down, Standby dan Extended Standby
- Fitur Peripheral
- Tiga buah Timer/Counter dengan kemampuan pembandingan.
- (dua) buah Timer/Counter 8 bit dengan Prescaler terpisah dan Mode Compare
- (satu) buah Timer/Counter 16 bit dengan Prescaler terpisah, Mode Compare, dan Mode Capture
- Real Time Counter dengan Oscillator tersendiri
- 4 channel PWM
- 8 channel, 10-bit ADC
- 8 Single-ended Channel
- 7 Differential Channel hanya pada kemasan TQFP
- 2 Differential Channel dengan Programmable Gain 1x 10x, atau 200x
- Byte-oriented Two-wire Serial Interface (TWI/I2C)
- Programmable Serial USART
- Antarmuka SPI
- Watchdog Timer dengan oscillator internal
- On-chip Analog Comparator
- Tiga buah Timer/Counter dengan kemampuan pembandingan.
- Tegangan kerja
- 2,7 – 5,5V untuk ATmega16L
- 4,5 – 5,5V untuk ATmega16
- Frekuensi Kerja
- 0 – 8MHz untuk ATmega16L
- 0 – 16MHz untuk ATmega16
- Oscillator RC internal terkalibrasi
Blok Diagram ATMega16

Berikut ini video penjelasan di atas:
Konfigurasi Pin AVR ATMega16
Konfigurasi pin ATMEGA16 dengan kemasan 40 pin DIP (Dual Inline Package) dapat dijelaskan fungsi dari masing-masing pin-nya sebagai berikut:
1.VCC merupakan pin yang berfungsi sebagai masukan catu daya
2.GND merupakan pin Ground
3.Port A(PA0..PA7) merupakan pin input/output dua arah dan pin masukan ADC

4.Port B(PB0..PB7) merupakan pin input/output dua arah dan pin fungsi khusus

5.Port C(PC0..PC7) merupakan pin input/output dua arah dan pin fungsi khusus

6.Port D(PD0..PD7) merupakan pin input/output dua arah dan pin fungsi khusus

7.RESET merupakan pin yang digunakan untuk untuk me-reset mikrokontroler
8.XTAL1 dan XTAL2 merupakan pin masukan clock eksternal.
9.AVCC merupakan pin masukan tegangan untuk ADC
10.AREF merupakan pin masukan tegangan referensi ADC
Berikut ini video penjelasan di atas:
Arsitektur Mikrokontroler AVR RISC
AVR menggunakan arsitektur Harvard dengan memisahkan antara memori dan bus untuk program/instruksi dan data untuk memaksimalkan kemampuan dan kecepatan (parallelism).

Instruksi dalam memori program dieksekusi dengan pipelining single level. Di mana ketika satu instruksi dieksekusi, instruksi berikutnya diambil dari memori program. Konsep ini mengakibatkan instruksi dieksekusi dan diambil setiap clock cycle.

CPU terdiri dari 32x8-bit general purpose register yang dapat diakses dengan cepat dalam satu clock cycle, yang mengakibatkan operasi Arithmetic Logic Unit (ALU) dapat dilakukan dalam satu cycle.
Pada operasi ALU, dua operand diambil dari register, kemudian operasi dieksekusi dan hasilnya disimpan kembali pada register dalam satu clock cycle. Proses pengambilan instruksi dan pengeksekusian instruksi berjalan secara parallel.



Berikut ini video penjelasan di atas:
General Purpose Register AVR
Terdapat 32 general purpose register dalam CPU, masing-masing register dimasukkan ke dalam alamat memori data (SRAM) dan dipetakan kedalam 32 lokasi pertama data user. Walaupun tidak secara fisik diimplementasikan sebagai lokasi SRAM, namun pengaturan ini memberikan flexsibilitas dalam mengakses register, seperti register pointer X,Y, dan Z dapat diset untuk merujuk index/alamat dari register file manapun.



Stack Pointer
Stack utamanya digunakan untuk menyimpan data sementara, untuk menyimpan variable local dan untuk menyimpan return address setelah interrupt dan pemanggilan subrutin. Stack Pointer selalu menunjuk ke puncak stack (Last-In/First-Out). Stack diimplementasikan mulai dari lokasi memori tertinggi ke lokasi memori terendah.

Berikut ini video penjelasan di atas:
Peta Memori ATMega16 --> Memori Program
Arsitektur AVR mempunyai dua memori utama, yaitu memori data dan memori program. Selain itu, ATMega16 memiliki memori EEPROM untuk menyimpan data.

ATMEGA16 memiliki 16K byte On-chip In-System Reprogrammable Flash Memory untuk menyimpan Program. Karena semua instruksi AVR memiliki format 16 atau 32 bit, Flash diatur dalam 8K x 16 bit. Untuk keamanan program, memori program flash dibagi ke dalam dua bagian, yaitu bagian program Boot dan aplikasi. Bootloader adalah program kecil yang bekerja pada saat start up time yang dapat memasukan seluruh program aplikasi ke dalam memori prosesor, menjalankan proses start up dan menginisialisasi hardware
Peta Memori ATMega16 --> Memori Data (SRAM)
Memori data AVR ATMEGA16 terbagi menjadi 3 bagian, yaitu 32 buah register umum, 64 buah register I/O dan 1 Kbyte SRAM internal. General purpose register menempati alamat data pertama, yaitu $00 sampai $1F. Sedangkan memori I/O menempati 64 alamat berikutnya mulai dari $20 hingga $5F.
Memori I/O merupakan register yang khusus digunakan untuk mengatur fungsi terhadap berbagai peripheral mikrokontroler seperti control register, timer/counter, fungsi-fungsi I/O, dan sebagainya. 1024-Byte alamat memori berikutnya (mulai alamat $60 hingga $45F) digunakan untuk SRAM internal.

Peta Memori ATMega16 --> Memori Data EEPROM
ATmega16 terdiri dari 512 byte memori data EEPROM 8 bit, data dapat tulis/baca dari memori ini, ketika catu daya dimatikan. Data terakhir yang ditulis pada memori EEPROM masih tersimpan pada memori ini, atau dengan kata lain memori EEPROM bersifat non-volatile. Alamat EEPROM mulai $000 sampai $1FF.

Status Register (SREG)

- Bit 7 – I: Global Interrupt Enable. Bit untuk mengaktifkan interupsi, jika terjadi interupsi yang dipicu oleh hardware bit I akan di-clear, dan akan diset kembali menggunakan instruksi SEI.
- Bit 6 – T: Bit Copy Storage.
- Bit 5 – H: Half Carry Flag
- Bit 4 – S: Sign Bit, S = N ⊕ V. Bit S merupakan hasil operasi EOR antara flag-N (negative) dan flag-V (komplemen dua overflow)
- Bit 2 – N: Negative Flag. Apabila suatu operasi menghasilkan bilangan negative, maka flag-N akan diset.
- Bit 1 – Z: Zero Flag. Bit ini akan diset bila hasil operasi yang diperoleh adalah nol.
- Bit 0 – C: Carry Flag. Bit ini akan diset bila hasil operasi menghasilkan carry.
Berikut ini video penjelasan di atas: