Capaian Pembelajaran

  • Memahami arsitektur Harvard vs Von Neumann
  • Mengidentifikasi komponen utama mikrokontroler
  • Memahami organisasi memori dan register
  • Mengenal peripheral terintegrasi dalam mikrokontroler
  • Memahami konsep addressing mode dan instruction set

1. Arsitektur Mikrokontroler

Mikrokontroler adalah komputer lengkap dalam satu chip (System on Chip - SoC) yang terdiri dari CPU, memori, dan peripheral I/O. Arsitektur mikrokontroler menentukan bagaimana komponen-komponen ini berinteraksi dan mengakses memori.

Karakteristik Mikrokontroler

  • Single-chip solution - Semua komponen dalam satu IC
  • Low power consumption - Dirancang untuk efisiensi daya
  • Cost-effective - Harga rendah untuk produksi massal
  • Dedicated function - Untuk aplikasi spesifik
  • Real-time operation - Respons waktu nyata

Arsitektur Harvard vs Von Neumann

Aspek Arsitektur Harvard Arsitektur Von Neumann
Bus Memori Terpisah untuk instruksi dan data Sama untuk instruksi dan data
Kecepatan Lebih cepat (parallel access) Lebih lambat (sequential access)
Kompleksitas Lebih kompleks Lebih sederhana
Biaya Lebih mahal Lebih murah
Contoh AVR, PIC, ARM Cortex-M Intel x86, Motorola 68k

Mengapa Harvard Architecture untuk Embedded?

Mikrokontroler modern umumnya menggunakan arsitektur Harvard karena memungkinkan fetch instruksi dan akses data secara bersamaan, meningkatkan throughput dan cocok untuk aplikasi real-time.

2. Komponen Internal Mikrokontroler

CPU CORE

Central Processing Unit - Otak Mikrokontroler

FLASH/ROM

Program Memory

32KB untuk ATMega328P

SRAM

Data Memory

2KB untuk ATMega328P

EEPROM

Non-volatile Data Storage

1KB untuk ATMega328P

Peripheral Terintegrasi

GPIO Ports

Digital I/O (PORTB, PORTC, PORTD)

Timer/Counters

Timer0, Timer1, Timer2

USART

Serial Communication

SPI

Serial Peripheral Interface

ADC

Analog to Digital Converter

Interrupts

External & Internal Interrupts

Detail Komponen Internal

CPU Core Components

  • ALU (Arithmetic Logic Unit) - Melakukan operasi aritmatika dan logika
  • Control Unit - Mengontrol aliran data dan instruksi
  • Registers - Penyimpanan sementara berkecepatan tinggi
  • Program Counter - Menunjuk ke alamat instruksi berikutnya
  • Instruction Decoder - Menerjemahkan instruksi mesin

3. Organisasi Memori

Mikrokontroler memiliki organisasi memori yang terpisah untuk program dan data, sesuai dengan arsitektur Harvard.

Memory Map ATMega328P

Alamat Jenis Memori Ukuran Fungsi
0x0000 - 0x1FFF Flash/Program Memory 8KB Menyimpan program (instruksi)
0x0100 - 0x04FF SRAM/Data Memory 1KB Menyimpan data variabel
0x0000 - 0x001F General Purpose Registers 32 byte Register serba guna R0-R31
0x0020 - 0x005F I/O Registers 64 byte Register untuk peripheral I/O
0x0000 - 0x03FF EEPROM 1KB Penyimpanan data non-volatile

Jenis-jenis Memori dalam Mikrokontroler

Flash Memory (Program Memory)

  • Non-volatile - Data tetap saat power off
  • Read Mostly - Dapat ditulis ulang terbatas (~10,000 cycles)
  • Menyimpan firmware - Program yang dijalankan
  • Word-addressable - Diakses per word (16-bit untuk AVR)

SRAM (Data Memory)

  • Volatile - Data hilang saat power off
  • High-speed - Akses sangat cepat
  • Menyimpan variable - Data sementara program
  • Byte-addressable - Diakses per byte

4. Register dan Addressing Mode

Register dalam AVR Architecture

General Purpose Registers (R0 - R31)

Klik pada bit untuk mengubah nilai

76543210
0
0
0
0
1
0
1
0

Nilai Register: 0x0A (Decimal: 10)

Addressing Modes dalam AVR

Mode Syntax Contoh Keterangan
Register Direct ADD Rd, Rr ADD R16, R17 Operasi antara dua register
Immediate LDI Rd, K LDI R16, 0xFF Load nilai langsung ke register
Direct LDS Rd, K LDS R16, 0x100 Load dari alamat SRAM tertentu
Indirect LD Rd, X LD R16, X Load dari alamat di register X
I/O Direct IN Rd, P IN R16, PINB Baca dari port I/O
addressing_example.asm - Contoh Addressing Modes

; Contoh berbagai addressing mode dalam AVR Assembly

; Immediate Addressing
LDI R16, 0x25        ; Load nilai 0x25 langsung ke R16
LDI R17, 100         ; Load nilai 100 (desimal) ke R17

; Register Direct Addressing  
ADD R16, R17         ; R16 = R16 + R17
SUB R18, R19         ; R18 = R18 - R19

; Direct Addressing
STS 0x0100, R16      ; Store R16 ke alamat SRAM 0x0100
LDS R20, 0x0100      ; Load dari 0x0100 ke R20

; Indirect Addressing
LDI R26, 0x00        ; Low byte address (XL)
LDI R27, 0x01        ; High byte address (XH)
LD R21, X            ; Load dari alamat di X register

; I/O Direct Addressing
IN R22, PINB         ; Baca PORT B ke R22
OUT PORTB, R23       ; Output R23 ke PORT B
                        

5. Peripheral Terintegrasi

Mikrokontroler modern dilengkapi dengan berbagai peripheral yang terintegrasi untuk mengurangi komponen eksternal dan biaya sistem.

Jenis Peripheral dalam ATMega328P

GPIO (General Purpose Input/Output)

  • 23 I/O pins - Terbagi di PORTB, PORTC, PORTD
  • Configurable - Dapat diatur sebagai input atau output
  • Pull-up resistors - Internal pull-up untuk input
  • High current drive - Dapat menggerakkan LED langsung

Timer/Counters

  • Timer0 - 8-bit timer dengan PWM
  • Timer1 - 16-bit timer dengan input capture
  • Timer2 - 8-bit timer asynchronous
  • Fungsi - Time delay, PWM generation, input capture

Communication Interfaces

  • USART - Universal Synchronous/Asynchronous Receiver/Transmitter
  • SPI - Serial Peripheral Interface (high-speed)
  • TWI - Two Wire Interface (I2C compatible)
timer_example.c - Konfigurasi Timer

#include 
#include 

// Konfigurasi Timer1 untuk interrupt setiap 1 detik
void timer1_init() {
    // Set prescaler to 1024
    TCCR1B |= (1 << CS12) | (1 << CS10);
    
    // Set compare value for 1 second
    OCR1A = 15624;  // 16MHz/1024/1Hz - 1
    
    // Enable compare match interrupt
    TIMSK1 |= (1 << OCIE1A);
    
    // Set timer to CTC mode
    TCCR1B |= (1 << WGM12);
}

// Interrupt Service Routine untuk Timer1
ISR(TIMER1_COMPA_vect) {
    // Toggle LED setiap 1 detik
    PORTB ^= (1 << PB5);
}

int main(void) {
    // Set PB5 sebagai output (LED pada Arduino)
    DDRB |= (1 << DDB5);
    
    // Inisialisasi timer
    timer1_init();
    
    // Enable global interrupts
    sei();
    
    while(1) {
        // Program utama
    }
}
                        

Latihan Praktikum

Tugas untuk memperdalam pemahaman arsitektur mikrokontroler

Tugas 1: Analisis Arsitektur

Berdasarkan datasheet ATMega328P, identifikasi dan buat laporan tentang:

  • Spesifikasi teknis lengkap (kecepatan clock, voltase operasi, dll)
  • Diagram blok arsitektur internal
  • Memory mapping dan organisasi
  • Daftar semua peripheral dan fungsinya

Tugas 2: Simulasi Register

Buat program simulasi yang menunjukkan operasi register:

  • Implementasikan operasi bit manipulation (SET, CLEAR, TOGGLE)
  • Demonstrasikan operasi shift dan rotate
  • Simulasikan operasi arithmetic (ADD, SUB, INC, DEC)
  • Buat visualisasi nilai register dalam biner dan heksadesimal

Tugas 3: Peripheral Mapping

Buat tabel mapping peripheral untuk proyek sederhana:

  • LED control menggunakan PWM timer
  • Sensor reading menggunakan ADC
  • Serial communication menggunakan USART
  • Input control menggunakan external interrupt