Saya sedang bekerja dengan mikrokontroler ARM Microchip ATSAML21J18B dan belajar cara mengatur input ADC. Datang dari dunia AVR, segalanya agak lebih rumit.
Fitur ADC (datasheet hal 1030, §42,4) menunjukkan bahwa ada hingga 20 input analog. Meneliti bagian multiplexing I / O (hal 29-30, §7.1), saya dapat melihat bahwa ada 20 AIN[xx]
sebutan dalam kolom ADC pada tabel fungsi pin. Saya percaya saya benar memahami bahwa beberapa pin referensi VDDANA
, VDDIO
atau VSWOUT
berdasarkan pada nilai-nilai dalam Pasokan kolom.
Saya mengerti bahwa Anda juga dapat menggabungkan saluran karena berbagai alasan yang saya tidak kenal.
Menggunakan Atmel "Start", ia telah menghasilkan metode init ADC berikut:
int32_t adc_async_init (struct adc_async_descriptor * const descr, batal * const hw, uint8_t * channel_map, uint8_t channel_max, uint8_t channel_amount, struct adc_async_channel_descriptor * const descr_ch, batal * const func) { int32_t init_status; perangkat struct _adc_async_device *; ASSERT (descr && hw && channel_map && channel_amount && descr_ch); ASSERT (channel_amount <= (channel_max + 1)); device = & descr-> device; untuk (uint8_t i = 0; i <= channel_max; i ++) channel_map [i] = 0xFF; descr-> channel_map = channel_map; descr-> channel_max = channel_max; descr-> channel_amount = channel_amount; descr-> descr_ch = descr_ch; init_status = _adc_async_init (perangkat, hw); if (init_status) mengembalikan init_status; device-> adc_async_ch_cb.convert_done = adc_async_channel_conversion_done; device-> adc_async_cb.window_cb = adc_async_window_threshold_reached; device-> adc_async_cb.error_cb = adc_async_error_occured; kembalikan ERR_NONE; }
Pertanyaan saya adalah, apa argumen map
, max
dan amount
untuk?
Contoh yang dihasilkan menunjukkan panggilan ke metode ini sebagai berikut:
// Definitions preceding main()
#define ADC_0_CH_AMOUNT 1
#define ADC_0_CH_MAX 0
struct adc_async_descriptor ADC_0;
struct adc_async_channel_descriptor ADC_0_ch[ADC_0_CH_AMOUNT];
static uint8_t ADC_0_map[ADC_0_CH_MAX + 1];
// ADC init
adc_async_init(&ADC_0,
ADC,
ADC_0_map,
ADC_0_CH_MAX,
ADC_0_CH_AMOUNT,
&ADC_0_ch[0],
(void *)NULL);
Saya menganggap ini ada hubungannya dengan menggabungkan saluran, tetapi saya akui saya sangat bingung tentang cara mengatur satu saluran hanya untuk melakukan konversi 8-bit dasar.
Mungkin judul pertanyaan yang lebih baik adalah, "Jelaskan implementasi ADC Microchip / Atmel pada ATSAML21 seperti saya 5!" Ada begitu banyak fitur dan opsi tambahan sehingga saya benar-benar tersesat.