谁有使用ASF采集两个以上ADC数据的程序?

2019-03-24 20:25发布

Atmel Studio 6.2里提供的例程都是一路的,我试着改配置,在采集完通道0后再采集通道1,怎么也调不过。
代码里单独采集通道0和通道1都能正常读到数据。

最后完全复制一份配置和代码,一份是通道0一份是通道1,通道0配置,读取,通道1配置,读取。也不能正常读到数据。

快被折磨屎了。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
yang_alex
1楼-- · 2019-03-25 18:15
每次都重新初始化,设计是不合理的。SAM系列是支持ADC多通道扫描方式,ASF也支持,只是没有现成的例子。需要自己加代码。如下:
注意:
                config_adc.pin_scan.offset_start_scan    = 0;
                config_adc.pin_scan.inputs_to_scan       = 2;
第二句是扫描2个通道,第一句是扫描起始偏移量为零。
起始通道由下面这句确定。
               config_adc.positive_input  = ADC_POSITIVE_INPUT_PIN6;


  1. void configure_adc7(void)
  2. {
  3.         //! [setup_config]
  4.         struct adc_config config_adc;
  5.         //! [setup_config]
  6.         //! [setup_config_defaults]
  7.         adc_get_config_defaults(&config_adc);
  8.         //! [setup_config_defaults]

  9.         //! [setup_modify_conf]
  10.         config_adc.clock_source    = GCLK_GENERATOR_3;
  11.         config_adc.gain_factor     = ADC_GAIN_FACTOR_1X;
  12.         config_adc.clock_prescaler = ADC_CLOCK_PRESCALER_DIV8;
  13.         config_adc.reference       = ADC_REFCTRL_REFSEL_INT1V;
  14.         config_adc.positive_input  = ADC_POSITIVE_INPUT_PIN6;//ADC_POSITIVE_INPUT_TEMP;
  15.         config_adc.resolution      = ADC_RESOLUTION_12BIT;
  16.        
  17.                 config_adc.pin_scan.offset_start_scan    = 0;
  18.                 config_adc.pin_scan.inputs_to_scan       = 2;
  19.        
  20.         //! [setup_modify_conf]

  21.         //! [setup_set_config;
  22.         adc_init(&adc_instance, ADC, &config_adc);
  23.         //! [setup_set_config]

  24.         //! [setup_enable]
  25.         adc_enable(&adc_instance);
  26.         //! [setup_enable]
  27. }
复制代码
yang_alex
2楼-- · 2019-03-25 20:40

主程序中用下面语句读出。结果也是按采集顺序交错的。

                adc_read_buffer_job(&adc_instance, adc_result_buffer, ADC_SAMPLES);

                //! [job_complete_poll]
                while (adc_read_done == false)
                {
                        /* Wait for asynchronous ADC read to complete */
                }
               

一周热门 更多>