high-speed-adc-sampling-7.ino
Configura el ADC de 16 bits en modo escaneo automático para leer dos canales analógicos consecutivos sin intervención de la CPU.
Utiliza ADC0. El modo de escaneo automático permite superar 2 MSPS. Verifique el esquema de la placa para identificar los pines analógicos correctos conectados a los canales 0 y 1 de ADC0.
high-speed-adc-sampling-7.ino
#include "board.h"
#include "hpm_adc16_drv.h"
#include "hpm_clock_drv.h"
#define ADC_SCAN_COUNT 2
uint16_t adc_result[ADC_SCAN_COUNT];
void adc_high_speed_init(void)
{
adc16_config_t adc_config;
adc16_channel_config_t ch_config[ADC_SCAN_COUNT];
clock_add_to_group(clock_adc0, 0);
/* Configuration ADC : Mode Scan, 16 bits */
adc_config.res = adc16_res_16_bits;
adc_config.conv_mode = adc16_conv_mode_auto_scan;
adc_config.auto_conv_en = true;
adc_config.sar_ctrl = adc16_sar_ctrl_normal;
hpm_clock_drv_init(); /* Init simple pour l'exemple */
adc16_init(ADC0, &adc_config);
/* Configurer 2 canaux pour le scan */
for (int i = 0; i < ADC_SCAN_COUNT; i++) {
ch_config[i].input_ctrl = i; /* Sélectionne le canal d'entrée analogique i */
ch_config[i].enable = true;
adc16_channel_set_config(ADC0, i, &ch_config[i]);
}
/* Activer le compteur de fin de scan pour lecture */
adc16_enable_interrupt(ADC0, adc16_int_all_conv_done, true);
adc16_start_conversion(ADC0);
}
void adc_read_results(void)
{
if (adc16_get_status_flags(ADC0) & adc16_flag_all_conv_done) {
adc16_clear_status_flags(ADC0, adc16_flag_all_conv_done);
for (int i = 0; i < ADC_SCAN_COUNT; i++) {
adc_result[i] = adc16_read_result(ADC0, i);
}
}
}
int main(void)
{
board_init();
adc_high_speed_init();
while (1) {
adc_read_results();
/* adc_result[0] = Canaux 0, adc_result[1] = Canaux 1 */
delay_ms(5);
}
}