Skip to main content

6. Register Khusus ADC pada ATmega328p

6.1 ADMUX — ADC Multiplexer Selection Register

ADMUX adalah register 8-bit yang mengatur konfigurasi dasar ADC: sumber tegangan referensi, format penyimpanan data, dan pin analog channel mana yang akan dibaca.

image

Fungsi masing-masing field:

a) REFS1:REFS0 — Reference Selection

Memilih sumber tegangan referensi ADC:

REFS1 REFS0 Tegangan Referensi
0 0 Pin AREF (eksternal)
0 1 AVcc (tegangan supply, biasanya 5V)
1 0 Tidak digunakan
1 1 Internal 2.56V

b) ADLAR — ADC Left Adjust Result

Menentukan posisi penyimpanan hasil 10-bit di dalam dua register 8-bit (ADCH + ADCL):

ADLAR ADCH (8-bit) ADCL (8-bit)
1 (Left-justified) D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 (unused 6-bit)
0 (Right-justified) (unused 6-bit) D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
  • Right-justified (ADLAR=0): ADCL menyimpan 8-bit bawah, ADCH menyimpan 2-bit atas. Biasanya digunakan untuk membaca nilai penuh 10-bit.
  • Left-justified (ADLAR=1): ADCH menyimpan 8-bit atas dari hasil. Berguna bila hanya perlu presisi 8-bit (cukup baca ADCH saja).

c) MUX3:MUX0 — Analog Channel Selection

Memilih pin analog input mana yang akan dikonversi:

MUX3 MUX2 MUX1 MUX0 Pin Analog
0 0 0 0 ADC0 / A0
0 0 0 1 ADC1 / A1
0 0 1 0 ADC2 / A2
0 0 1 1 ADC3 / A3
0 1 0 0 ADC4 / A4
0 1 0 1 ADC5 / A5
0 1 1 0 ADC6 / A6
0 1 1 1 ADC7 / A7

6.2 ADCSRA — ADC Control and Status Register A

ADCSRA adalah register 8-bit yang berfungsi sebagai pusat kontrol dan pemantauan status proses ADC.

image

Fungsi masing-masing bit:

Bit Nama Fungsi
ADHENZ ADEN image ADC Enable Set ke 1 untuk mengaktifkan ADC. Jika 0, ADC tidak akan berjalan dan pin analog tidak dikonversi.
ADSC ADC Start Conversion Set ke 1 untuk memulai satu siklus konversi. Bit ini tetap bernilai 1 selama konversi berlangsung, lalu kembali ke 0 secara otomatis.
ADATE ADC Auto Trigger Enable Jika 1, konversi dimulai otomatis oleh trigger tertentu (misalnya timer overflow, perubahan pin eksternal, dll.).
ADIF ADC Interrupt Flag Diset ke 1 oleh hardware ketika konversi selesai (End of Conversion). Di-reset dengan menulis nilai 1 ke bit ini secara manual.
ADIE ADC Interrupt Enable Jika 1, program akan melakukan jump ke ISR (Interrupt Service Routine) saat konversi selesai. Berguna agar CPU tidak harus menunggu (polling).
ADPS2:ADPS0 ADC Prescaler Select 3-bit yang menentukan pembagi clock untuk ADC (lihat tabel prescaler di atas).

6.3 ADCL dan ADCH — ADC Data Registers

ADCL dan ADCH adalah dua register 8-bit tempat hasil konversi ADC 10-bit disimpan setelah konversi selesai.

Karena ATmega328p menggunakan ADC 10-bit, hasilnya (0–1023) tidak muat dalam satu register 8-bit, sehingga dibagi ke dalam dua register:

image

PENTING: ADCL harus dibaca lebih dulu sebelum ADCH. Pembacaan ADCL akan me-lock ADCH agar tidak berubah hingga ADCH selesai dibaca, sehingga data yang dibaca tetap konsisten.

Cara membaca nilai ADC 10-bit penuh (right-justified):

// Dalam C:
uint16_t adc_value = ADC;  // atau:
uint8_t  low  = ADCL;
uint8_t  high = ADCH;
uint16_t adc_value = (high << 8) | low;
; Dalam Assembly:
LDS R18, ADCL    ; baca low-byte dulu
LDS R19, ADCH    ; baru baca high-byte