ADUC7061的ADC1采集ADC8的数据读出来的数据不正确。
如果改用ADC4通道,读取的数据则正常。
我感觉这个芯片有一些BUG,或者有些操作要求,可能没有在说明书里写明白。
我的板子电路是:DAC输出一个电压,然后通过一个1千欧的电阻输出到ADC8和ADC4。
因为ADC8和ADC4连接在一起,测量到的数据,不考虑误差的话,应该相近。
但实际读到的值有很大差别。
如果改变DAC输出值,ADC4的采集值会变化,但ADC8读到的值,几乎不变。
无论怎么改变DAC,ADC8读到的值,似乎都是固定的一个垃圾数值。
所以我怀疑,ADC8通道的值,和GP0的配置有关系,可能芯片内部被恒拉低或拉高。
但我检查我的代码,并没有发现有什么不合理的地方。
请帮忙看看是什么问题,谢谢。
代码如下:
#include "ResGf.h"
int main()
{
volatile signed long s;
signed char N = -1;
char Err = 0;
float fN = 0;
PLLKEY1 = 0xaa;
PLLCON = 0x00;
PLLKEY2 = 0x55;
POWKEY1 = 0x1;
POWCON0 = 0x38; // Set core to max CPU speed of 10.24Mhz
POWKEY2 = 0xF4;
POWKEY3 = 0x76;
POWCON1 = 0x024;
POWKEY4 = 0xB1;
DACCON = 0x0013;
DACDAT = 0x04ff0000;
ADCCFG |= 0x4;
while(1)
{
ADCFLT = 0x8083;
GP0CON0 = 0x00000000; //p0.0~p0.4 gpio
GP0PAR = 0x00; //01110
GP0DAT = 0xfbfb0000;
GP0KEY1 = 0x7;
GP0CON1 = 0x1; // adc
GP0KEY2 = 0x13;
ADC0CON = 0;
ADC1CON = 0x878c;;
s = ADCSTA;
s = ADC0DAT;
s = ADC1DAT;
//////////
ADCMDE = 0x83;
////
ADC1CON = 0x800c | 0x0480;//ch 8
//ADC1CON = 0x800c | 0x0480;//ch 9
//ADC1CON = 0x800c | 0x0300;//ch 4
s = ADC1DAT;
s = ADCSTA;
ADCMDE = 0x82;
do
{
s = ADCSTA;
if (s & 0x2000) //adc1cerr
{
Err |= 1; //over range
}
} while(!(s & 0x2));
s = ADC1DAT;
ADCMDE = 0x83;
//3. exit adc
ADCMDE = 0x83; //idle
ADCFLT = 0x80ff;
ADC1CON = 0x78c; //internally shorted
GP0CON0 = 0x00001011; //back to spi
GP0PAR = 0x04;
GP0DAT = 0x1b010000;
GP0KEY1 = 0x7;
GP0CON1 = 0x0; // exit adc
GP0KEY2 = 0x13;
}
}