/** * \brief Set ADC resolution mode. */ static void set_adc_resolution(void) { uint8_t uc_key; uint8_t uc_done = 0; display_menu(); while (!uc_done) { while (uart_read(CONF_UART, &uc_key)) { } switch (uc_key) { case 'a': g_max_digital = MAX_DIGITAL_8_Bit; adc_set_resolution(ADC, ADC_8_BITS); puts(" Set Resolution to Normal 8-bit \n\r"); uc_done = 1; puts(" Quit Configuration \n\r"); break; case 'b': g_max_digital = MAX_DIGITAL_10_BIT; adc_set_resolution(ADC, ADC_10_BITS); puts(" Set Resolution to Normal 10-bit \n\r"); uc_done = 1; puts(" Quit Configuration \n\r"); break; case 'c': g_max_digital = MAX_DIGITAL_11_BIT; adc_set_resolution(ADC, ADC_11_BITS); adc_average_on_single_trigger(ADC); puts(" Set Resolution to Enhanced 11-bit \n\r"); uc_done = 1; puts(" Quit Configuration \n\r"); break; case 'd': g_max_digital = MAX_DIGITAL_12_BIT; adc_set_resolution(ADC, ADC_12_BITS); adc_average_on_single_trigger(ADC); puts(" Set Resolution to Enhanced 12-bit \n\r"); uc_done = 1; puts(" Quit Configuration \n\r"); break; default: break; } } }
OSStatus platform_adc_init( const platform_adc_t* adc, uint32_t sample_cycle ) { OSStatus err = kNoErr; struct adc_config adc_cfg; UNUSED_PARAMETER(sample_cycle); platform_mcu_powersave_disable(); require_action_quiet( adc != NULL, exit, err = kParamErr); if( initialized != true ) { adc_enable(); adc_select_clock_source_mck(ADC); adc_get_config_defaults(&adc_cfg); adc_init(ADC, &adc_cfg); adc_set_trigger(ADC, ADC_TRIG_SW); adc_set_resolution(ADC, adc->resolution); initialized = true; } exit: platform_mcu_powersave_enable(); return err; }
static void adc_setup(void) { rcc_periph_clock_enable(RCC_ADC); rcc_periph_clock_enable(RCC_GPIOA); gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO0); gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO1); adc_power_off(ADC1); adc_set_clk_source(ADC1, ADC_CLKSOURCE_ADC); adc_calibrate_start(ADC1); adc_calibrate_wait_finish(ADC1); adc_set_operation_mode(ADC1, ADC_MODE_SCAN); adc_disable_external_trigger_regular(ADC1); adc_set_right_aligned(ADC1); adc_enable_temperature_sensor(); adc_set_sample_time_on_all_channels(ADC1, ADC_SMPTIME_071DOT5); adc_set_regular_sequence(ADC1, 1, channel_array); adc_set_resolution(ADC1, ADC_RESOLUTION_12BIT); adc_disable_analog_watchdog(ADC1); adc_power_on(ADC1); /* Wait for ADC starting up. */ int i; for (i = 0; i < 800000; i++) { /* Wait a bit. */ __asm__("nop"); } }
void adc_setup(void) { //ADC rcc_peripheral_enable_clock(&RCC_AHBENR, RCC_AHBENR_ADC12EN); rcc_peripheral_enable_clock(&RCC_AHBENR, RCC_AHBENR_IOPAEN); //ADC gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO0); gpio_mode_setup(GPIOA, GPIO_MODE_ANALOG, GPIO_PUPD_NONE, GPIO1); adc_off(ADC1); adc_set_clk_prescale(ADC_CCR_CKMODE_DIV2); adc_set_single_conversion_mode(ADC1); adc_disable_external_trigger_regular(ADC1); adc_set_right_aligned(ADC1); /* We want to read the temperature sensor, so we have to enable it. */ adc_enable_temperature_sensor(); adc_set_sample_time_on_all_channels(ADC1, ADC_SMPR1_SMP_61DOT5CYC); uint8_t channel_array[16]; channel_array[0]=16; // Vts (Internal temperature sensor channel_array[0]=1; //ADC1_IN1 (PA0) adc_set_regular_sequence(ADC1, 1, channel_array); adc_set_resolution(ADC1, ADC_CFGR_RES_12_BIT); adc_power_on(ADC1); /* Wait for ADC starting up. */ int i; for (i = 0; i < 800000; i++) /* Wait a bit. */ __asm__("nop"); }
/* * Test setting the ADC to use 12 bit resolution. */ void test_adc_set_resolution_12_bit(void) { // Test if ADC is not set as 12 bit TEST_ASSERT_TRUE(ADC->ADC_MR & (0x1u << 4)); adc_set_resolution(ADC_RESOLUTION_12_BIT); // Test if ADC is set as 12 bit TEST_ASSERT_FALSE(ADC->ADC_MR | (0x0u << 4)); }
/* Enables analog to digital conversion */ void adc_config(void) { pmc_enable_periph_clk(ID_ADC); adc_init(ADC, sysclk_get_main_hz(), 20000000, 0); adc_configure_timing(ADC, 0, 0, 0); adc_set_resolution(ADC, ADC_MR_LOWRES); adc_enable_channel(ADC, ADC_CHANNEL_10); adc_configure_trigger(ADC, ADC_TRIG_SW, 0); }
/************************************************************************** Initializes the analog pins. **************************************************************************/ int analogInit(void) { pmc_enable_periph_clk(ID_ADC); adc_init(ADC,sysclk_get_main_hz(),1000000,8); adc_configure_timing(ADC,0,ADC_SETTLING_TIME_3,1); adc_set_resolution(ADC,ADC_MR_LOWRES_BITS_12); adc_enable_channel(ADC,ADC_CHANNEL_7); adc_enable_channel(ADC,ADC_CHANNEL_6); adc_enable_channel(ADC,ADC_CHANNEL_5); adc_configure_trigger(ADC,ADC_TRIG_SW,0); }
/* * Initialize the ADC for taking meshurement on the BLDC driver. */ void me_adc_init(void) { adc_load_calibration(); adc_ch_set_input(&ADC_CH_U, ADC_U_MUXPOS, ADC_U_MUXNEG); adc_ch_set_input(&ADC_CH_V, ADC_V_MUXPOS, ADC_V_MUXNEG); adc_ch_set_input(&ADC_CH_VOLT, ADC_VOLT_MUXPOS, ADC_VOLT_MUXNEG); adc_ch_set_input_mode(&ADC_CH_U, ADC_U_INP_MODE); adc_ch_set_input_mode(&ADC_CH_V, ADC_V_INP_MODE); adc_ch_set_input_mode(&ADC_CH_VOLT, ADC_VOLT_INP_MODE); adc_set_freerunning(&ADCA, true, ADCA_SWEEP); adc_set_freerunning(&ADCB, true, ADCB_SWEEP); adc_set_resolution(&ADCA, ADC_RESOLUTION); adc_set_resolution(&ADCB, ADC_RESOLUTION); adc_set_conversion_mode(&ADCA, true); adc_set_conversion_mode(&ADCB, true); adc_set_reference(&ADCA, ADC_REFERENCE); adc_set_reference(&ADCB, ADC_REFERENCE); adc_set_sample_rate(&ADCA, ADC_PRESCALER); adc_set_sample_rate(&ADCB, ADC_PRESCALER); adc_enable(&ADCA, true); adc_enable(&ADCB, true); _delay_ms(5); me_adc_set_channel(&ADC_Res_U, &ADC_CH_U); me_adc_set_channel(&ADC_Res_V, &ADC_CH_V); me_adc_set_channel(&ADC_Res_Volt, &ADC_CH_VOLT); me_adc_set_zero(&ADC_Res_U); me_adc_set_zero(&ADC_Res_V); //adc_set_zero(&ADC_Res_Volt); }
/** * \internal * \brief Configure the ADC Module. * * \param adc Base address of the ADC * \param config Configuration for the ADC */ static void adc_set_config(Adc *const adc, struct adc_config *config) { uint32_t reg = 0; reg = (config->useq ? ADC_MR_USEQ_REG_ORDER : 0) | ADC_MR_PRESCAL(config->mck / (2 * config->adc_clock) - 1) | ADC_MR_TRACKTIM(config->tracktim) | ADC_MR_TRANSFER(config->transfer) | (config->startup_time); adc->ADC_MR = reg; adc->ADC_EMR = (config->tag ? ADC_EMR_TAG : 0) | (config->aste ? ADC_EMR_ASTE_SINGLE_TRIG_AVERAGE : 0); adc_set_resolution(adc, config->resolution); }
void adc_init(void) { adc_load_calibration(); adc_ch_set_input(&ADC_CH, ADC_CH_MUXPOS_PIN2_gc, ADC_CH_MUXNEG_PIN1_gc); adc_ch_set_input_mode(&ADC_CH, ADC_CH_INPUTMODE_DIFF_gc); adc_set_freerunning(&ADCA, true, ADC_SWEEP_0_gc); adc_set_resolution(&ADCA, ADC_RESOLUTION_12BIT_gc); adc_set_conversion_mode(&ADCA, true); adc_set_reference(&ADCA, ADC_REFSEL_AREFA_gc); adc_set_sample_rate(&ADCA, ADC_PRESCALER_DIV128_gc); adc_enable(&ADCA, true); _delay_ms(10); ADC_ch_u.channel = &ADC_CH; adc_set_zero(&ADC_ch_u); }
/* * Initializing A/D conversion. */ void adc_setup(void) { /* Enable the specified peripheral clock (ADC clock). If function returns 0, then we can proceed... */ pmc_enable_periph_clk(ID_ADC); /* init A/D conversion */ adc_init(ADC, sysclk_get_main_hz(), ADC_CLOCK, 8); /* configure timing for A/D conversion */ adc_configure_timing(ADC, 0, ADC_SETTLING_TIME_3, 1); /* set 12 bit resolution */ adc_set_resolution(ADC, ADC_MR_LOWRES_BITS_12); /* enable ADC channel - specified in 'adc.h' */ /*adc_enable_channel(ADC, ADC_CHANNEL_LCDButtons); adc_enable_channel(ADC, ADC_CHANNEL_Tank1); adc_enable_channel(ADC, ADC_CHANNEL_Tank2);*/ ADC->ADC_CHER = 3200; /* configure conversion to be triggered by software */ adc_configure_trigger(ADC, ADC_TRIG_SW, 0); /* indicate everything's OK! */ }
int analogInit(int pinNumber) { /* * The pin number is the analog input pin on the DUe board, see http://www.arduino.cc/en/Hacking/PinMappingSAM3X * Obviously it starts at analog 0 which is equivalent to the analog input on PA16 * so you need to figure out which AD channel this corresponds to * * See code example http://asf.atmel.com/docs/latest/sam.drivers.adc.adc_example.arduino_due_x/html/sam_adc_quickstart.html * It is assumed that the AD-converter is using 12 bits */ pmc_enable_periph_clk(ID_ADC); /* power the clock for the ADC with pmc_enable_periph_clk(ID_ADC) */ adc_init(ADC,sysclk_get_main_hz(),1000000,8); adc_configure_timing(ADC,0,ADC_SETTLING_TIME_3,1); adc_set_resolution(ADC,ADC_MR_LOWRES_BITS_12); adc_enable_channel(ADC,ADC_CHANNEL_7); //adc_enable_channel(ADC,ADC_CHANNEL_6); adc_configure_trigger(ADC,ADC_TRIG_SW,0); return 0; /* if everything is ok */ }