[转帖]如何配置U和A设备的ADC?
如何配置U和A设备的ADC?
回答:
ADC本身记录在每个部分的xCORE-USB数据表((U)&type=datasheet).但是,该文档并不一定提供足够的信息来使用它。
sc_periph库提供一个抽象层来使它可以简单的使用ADCs。寻找这个如何工作的最好的地方中的app_adc_demo_u示例应用程序
希望看那个如何工作可以回答你的问题。首先,它可以配置和启用的ADC:
adc_config_t adc_config = { { 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 0, 0 };
在此情况下只ADC 0启用:
adc_config.input_enable[0] = 1;
ADC的精度被设置为每个样本32位。它可以被配置为每样品8中,16位或32位。另外,ADC的精度是唯一的12位,无论如何,所以如果使用32位的而不是16位样本,返回的值的准确度不会有任何提高。
adc_config.bits_per_sample = ADC_32_BPS;
该ADC将提供样本块(包)。传递的数据总是与每个活动ADC的一个样本序列。
adc_config.samples_per_packet = 1;
如果你要启用的ADC 0和ADC 1,保持samples_per_packet那么每个数据包都会交替返回数据的ADC 0,则ADC的1,那么ADC 0,依此类推。如果配置samples_per_packet为2,则每一个数据包将包含来自ADC的0和1,从ADC 1的样本,在一分钟内我们可以看到这是如何读
该ADC具有其中的ADC连接到0.8V校准模式参考电压。
adc_config.calibration_mode = 0;
最后,一个呼叫,以使模数转换器。这个调用需要照顾,有ADC需要一些校准样品是准备使用之前的事实。
adc_enable(xs1_su,C,trigger_port,adc_config)
之后,该库提供了使用ADC的方法有两种:
- adc_trigger / adc_read
- adc_trigger_packet / adc_read_packet
示例应用程序使用这些中的第二。它首先通过触发一个数据包的过程中要阅读:
adc_trigger_packet(trigger_port, adc_config);
然后在应用程序的其余部分是从触发处理数据,并定期打印当前ADC值:
while (1)
{
unsigned data[1];
select
{
case print_timer when timerafter(print_time) :> void:
if (new_value != current_value)
{
debug_printf("ADC value: 0x%x\n", new_value);
current_value = new_value;
}
print_time += PRINT_PERIOD;
break;
case adc_read_packet(c, adc_config, data):
new_value = data[0];
adc_trigger_packet(trigger_port, adc_config);
break;
}
}
数据包被接收下一个数据包被触发各一次。 只有一个ADC触发销它会导致下一活跃ADC来读取样品。他们工作在一个循环方式。
发表时间:2014年8月19日12:01:09