各位大侠好,本人新手,首次提问,我用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的时候不发送
{
}
}
}
}
|