ADC
1 模拟信号和数字信号的区别?
电压随时间不断变化的信号就是模拟信号,电阻随时间不变化的信号就是数字信号。
adc是正弦波的时候是模拟信号,当你采样后出来的点的值就是数字型号了。不采用表示出来的就是模拟信号。
2 ADC是干什么用的?
ADC是模拟信号和数字信号的转化。我们的芯片只能用数字信号,所有必须转化。
3 10位精度是什么?
ADC必须有一个最高电压,CPU最高电压,3.3v,但是这个电压不是ADC可以用的,所以必须进行分频,而10位精度就是分成0x3ff份(1024),用你的cpu频率除以这个份数,就是他的精度,然后在乘你想要份数。
4 有几路ADC,他们的用处是什么?
8路,有4路是触摸屏,当触摸屏不用时,可以用,但是8路同时只能用一个,因为只有一个转化的设备。
5 ADC的转化速率是什么?
最大的转化速率为500KSPS,时钟频率最大为2.5MHZ.
得出的ADC频率除以5就是你要的ADC的转化速率。(由2.5MHZ除以500ksps=5得到的 5,意思是每5周期完成一个取点)
6 需要16位转化精度怎么办?
外接一个ADC,我们这里的ADC是内嵌的10位精度,不足以支持,所以外接一个就行了。
7 通过什么模拟了ADC信号?
通过滑动变祖器。
8 电路板上用了哪路ADC?
通过原理图,可以看出我们用了0路的ADC,AINT0。
9 要区分周期和频率,速率。
10 ADC寄存器设置有点特殊,因为除了我们要的位其他都为0所以我们只要设置我们需要的那几位就好了。
11 ADC用到两个公式,3.3*1000/0x3ff,* 份数(最大0x3ff);
12 AD converter freq =50MHZ/(49+1) =1MHZ,ADC.ADCCON = 0x1<<14 | 0x13<<6 | 0x1<<1;此处的0x13<<6就是份数49。50MHZ,GCLK
13 ADCCON 触摸屏被取消时,可以用5:3;
15 0过程1结束
14
13:6 0~255,默认值0xff,此处设置的值相当于公式中的49,
2 0正常1低功效
1 最后两位互斥,A/D conversion start by read
0 = Disable start by read operation
1 = Enable start by read operation
0 A/D conversion starts by enable.
If READ_START is enabled, this value is not valid.
0 = No operatio
1 = A/D conversion starts and this bit is cleared after the startup.(每次必须清,重置)
14 #if AD==1
void adc_init(void)
{
#if ADSTART==0
ADC.ADCCON = 0x1<<1|0xff<<6|0x1<<14;
#elif ADSTART==1
ADC.ADCCON = 0xff<<6|0x1<<14;
#endif
}
#if ADSTART==1
void adc_enable(void)
{
ADC.ADCCON |= 0x1;
}
#endif
int adc_read(void)
{
int result;
#if ADSTART==0
result = ADC.ADCDAT0&0x3ff;
while(!(ADC.ADCCON&(0x1<<15)))
{
}
#elif ADSTART==1
while(!(ADC.ADCCON&(0x1<<15)))
{
}
result = ADC.ADCDAT0&0x3ff;
#endif
return 3300/0x3ff*result;
}
#endif
15 结果在哪里? ADCDAT0
9:0 0x0 >> 0x 3ff
16 此处的3.3V不能用浮点型不支持,不能用printf函数太大了;
17 串IO端口是独立的,有3套寄存器,而ADC不是独立的,8路共用。
18 串口中,波特率,传出速率,ADC也应该有一个速率,转化速率。ADC的转化有自己的效率,不能随CPU频率的变化而变化。ADC有自己的限制。
19 0~3v -》ADC转化-》数字电路信号
20 库函数中有atoi,但是没有itoa.
21 ADC中我们用到的就是atoi,itoa,我们从寄存器里读出来的就是int类型的十进制。 而rtc寄存器中读取到的就是16进制。
22