打印
[M0+]

ATMEL SAMC21J18A调试ADC得到数据错误,求解脱~

[复制链接]
1838|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
OneHour|  楼主 | 2017-6-5 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠好,本人新手,首次提问,我用atmel公司的开发板SAMC21J18A调试ADC读取气压传感器的时候,串口输出数据莫名其妙,各种乱跳,不明所以,,,求解脱程序是在官方例程上做的修改,具体如下:

初始配置修改的是参考电压,改成了内部VDD3V3;ADC模拟输入引脚改为AIN6;(贴出来的程序有省略)
void adc_get_config_defaults(struct adc_config *const config)
{
        Assert(config);
        config->clock_source                  = GCLK_GENERATOR_0;
        config->reference                     = ADC_REFERENCE_INTVCC2;//内部参考电压
        config->clock_prescaler               = ADC_CLOCK_PRESCALER_DIV2;
        config->resolution                    = ADC_RESOLUTION_12BIT;
        config->positive_input                = ADC_POSITIVE_INPUT_PIN6 ;//ADC0模块的引脚AIN6
        config->negative_input                = ADC_NEGATIVE_INPUT_GND;
        config->accumulate_samples            = ADC_ACCUMULATE_DISABLE;
        config->divide_result                 = ADC_DIVIDE_RESULT_DISABLE;
        config->event_action                  = ADC_EVENT_ACTION_DISABLED;
        config->correction.gain_correction    = ADC_GAINCORR_RESETVALUE;
        config->correction.offset_correction  = ADC_OFFSETCORR_RESETVAL
}

main函数如下,将ADC采出的数通过串口显示,串口可以保证单独调试没有任何问题,整个程序编译没有错,但串口助手每次发送0x01后,得到的数都不一样,而且差别很大,试过将ADC的引脚接到VCC和GND脚,发现输出的同样是这些很乱,没有规律的数,不知道是不是硬件连错还是软件哪里有问题。。。
求大侠帮忙看看我是哪里没有考虑到呢
int main(void)
{
        system_init();

        configure_usart();
        configure_adc();

        uint8_t str[] = "4568";
        uint16_t exch;
        uint16_t result;

        while (true) {
               
                adc_start_conversion(&adc_instance);
               
                do {
                        /* Wait for conversion to be done and read out result */
                } while (adc_read(&adc_instance, &result) == STATUS_BUSY);
               
                if (usart_read_wait(&usart_instance, &exch) == STATUS_OK) {

            usart_write_wait(&usart_instance,exch);
                    if (exch=='7')
                      {
                                while (usart_write_buffer_wait(&usart_instance, str,sizeof(str)) != STATUS_OK) //status=1的时候不发送
                                {                            
                                }
                        }
                          if (exch==0x01)
                          {
                                  while (usart_write_buffer_wait(&usart_instance, result,sizeof(result)) != STATUS_OK) //status=1的时候不发送
                                  {
                                  }
                          }
                }
        }



相关帖子

沙发
经纬| | 2017-6-12 14:08 | 只看该作者
软件问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

2

帖子

0

粉丝