コード例 #1
0
/**
 * \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;
		}
	}
}
コード例 #2
0
ファイル: platform_adc.c プロジェクト: SmartArduino/MICO-1
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;
}
コード例 #3
0
ファイル: adc.c プロジェクト: Corkskru/libopencm3-examples
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");
	}

}
コード例 #4
0
ファイル: adc.c プロジェクト: paulfertser/libopencm3-examples
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");

}
コード例 #5
0
ファイル: test_adc.c プロジェクト: PrinceBalabis/mahm3lib
/*
 * 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));
}
コード例 #6
0
/* 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);
}
コード例 #7
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);
 }
コード例 #8
0
ファイル: measure.c プロジェクト: iiKoe/XmegaFun
/*
 * 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);
}
コード例 #9
0
ファイル: adc2.c プロジェクト: AndreyMostovov/asf
/**
 * \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);
}
コード例 #10
0
ファイル: main.c プロジェクト: iiKoe/XmegaFun
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);
}
コード例 #11
0
ファイル: my_adc.c プロジェクト: Soddi/examinationsprojekt
/*
 * 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! */
}
コード例 #12
0
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 */
}