Skip to main content

6. Specific Registers for ADC In ATmega328p

6.1 ADMUX — ADC Multiplexer Selection Register

ADMUX adalahis registeran 8-bit yangregister mengaturthat konfigurasihandles dasarthe ADC:basic sumberADC teganganconfiguration: referensi,reference formatvoltage penyimpanansource, data,data danstorage pinformat, and which analog input channel manato yang akan dibaca.read.

image

FungsiFunctions masing-masingof each field:

a) REFS1:REFS0 — Reference Selection

MemilihSelects sumberthe teganganADC referensireference ADC:voltage source:

REFS1 REFS0 TeganganReference ReferensiVoltage
0 0 AREF Pin AREF (eksternal)external)
0 1 AVcc (tegangansupply supply,voltage, biasanyatypically 5V)
1 0 Tidak digunakanUnused
1 1 Internal 2.56V

b) ADLAR — ADC Left Adjust Result

MenentukanDetermines posisithe penyimpananstorage hasilposition of the 10-bit diresult dalamwithin duathe registertwo 8-bit registers (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 menyimpanstores 8-bitthe bawah,bottom 8 bits, and ADCH menyimpanstores 2-the top 2 bits. Typically used for reading the full 10-bit atas. Biasanya digunakan untuk membaca nilai penuh 10-bit.value.
  • Left-justified (ADLAR=1): ADCH menyimpanstores the top 8 bits of the result. Useful when only 8-bit atasprecision dariis hasil. Berguna bila hanya perlu presisi 8-bitneeded (cukupjust bacaread ADCH saja)ADCH).

c) MUX3:MUX0 — Analog Channel Selection

MemilihSelects pinwhich analog input manapin yangwill akanbe dikonversi:converted:

MUX3 MUX2 MUX1 MUX0 Analog 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 adalahis registeran 8-bit yangregister berfungsithat sebagaiserves pusatas kontrolthe dancommand pemantauancenter statusfor prosescontrolling ADC.and monitoring the ADC process status.

image

FungsiFunctions masing-masingof each bit:

Bit NamaName FungsiFunction
ADHENZ ADEN image ADC Enable Set keto 1 untukto mengaktifkanenable the ADC. JikaIf 0, the ADC tidakwill akannot berjalanrun dan pinand analog tidakpins dikonversi.won't be converted.
ADSC ADC Start Conversion Set keto 1 untukto memulaistart satua siklussingle konversi.conversion Bitcycle. iniThis tetapbit bernilaistays at 1 selamawhile konversiconversion berlangsung,is laluin kembaliprogress, kethen 0automatically secarareturns otomatis.to 0.
ADATE ADC Auto Trigger Enable JikaIf 1, konversiconversion dimulaistarts otomatisautomatically olehtriggered triggerby tertentua specific event (misalnyae.g., timer overflow, perubahanexternal pin eksternal, dll.)change).
ADIF ADC Interrupt Flag DisetSet keto 1 olehby hardware ketikawhen konversiconversion selesaiis complete (End of Conversion). Di-resetReset denganby menulismanually nilaiwriting a 1 keto bitthis ini secara manual.bit.
ADIE ADC Interrupt Enable JikaIf 1, the program akanwill melakukanjump jumpto kean ISR (Interrupt Service Routine) saatwhen konversiconversion selesai.is Bergunacomplete. agarUseful so the CPU tidakdoesn't harushave menungguto wait (polling).
ADPS2:ADPS0 ADC Prescaler Select 3-bit3 yangbits menentukanthat pembagidetermine the clock untukdivider for the ADC (lihatsee tabelthe prescaler ditable atas)above).

6.3 ADCL danand ADCH — ADC Data Registers

ADCL danand ADCH adalahare dua registertwo 8-bit tempatregisters hasilwhere konversi ADCthe 10-bit disimpanADC setelahconversion konversiresult selesai.is stored after conversion is complete.

KarenaSince the ATmega328p menggunakanuses ADCa 10-bit,bit hasilnyaADC, the result (0–1023) tidakcannot muatfit dalaminto satua registersingle 8-bit,bit sehinggaregister, dibagiso keit's dalamsplit duaacross register:two registers:

image

PENTING:IMPORTANT: ADCL harusmust dibacabe lebihread dulufirst sebelumbefore ADCH. PembacaanReading ADCL akan me-locklocks ADCH agarto tidakprevent berubahit hinggafrom changing until ADCH selesaiis dibaca,read, sehinggaensuring data yang dibaca tetap konsisten.consistency.

CaraHow membacato nilairead ADCthe full 10-bit penuhADC value (right-justified):

// DalamIn C:
uint16_t adc_value = ADC;  // atau:or:
uint8_t  low  = ADCL;
uint8_t  high = ADCH;
uint16_t adc_value = (high << 8) | low;
; DalamIn Assembly:
LDS R18, ADCL    ; bacaread low-byte dulufirst
LDS R19, ADCH    ; baruthen bacaread high-byte