高级会员
- 积分
- 860
- 威望
- 415
- 贡献
- 219
- 兑换币
- 252
- 注册时间
- 2014-2-25
- 在线时间
- 113 小时
- 毕业学校
- 毛中
|
AD模块让我弃疗了。我是电磁组的,我的电感直接接到最小系统版(128)的AN0~AN6.这是AD 采集及初始化源程序:
void ADC_INIT(void){
ATD0CTL1=0x00;
ATD0CTL2=0x40; //0100,0000,自动清除使能控制位,忽略外部触发
//转换结束允许中断,中断禁止
ATD0CTL3=0xA4; //0100,0100,转换序列长度为4; FIFO模式,冻结模式下继续转换
ATD0CTL4=0x05; //00001000,8位精度,PRS=5,ATDCLOCK=BusClock(24mb)/(5+1)*2,约为2MHz,采样周期位4倍AD周期
ATD0DIEN=0x00; //输入使能禁止
ATD0DIEN=0x00; //输入使能禁止
}
void AD_CaiJi(void){
int sum;
int *q;
int a[6][8];
int i,j;
ATD0CTL5=0X20; //,连续AD转换,右对齐,单通道,无符号,起始通道为AN0
while(!ATD0STAT0_SCF);//等待左前第一个电感电压转换完成
q=a[0];
*(q) =ATD0DR0L;
*(q+1)=ATD0DR1L;
*(q+2)=ATD0DR2L;
*(q+3)=ATD0DR3L;
ATD0CTL5=0X21; //重置ATD0CTL5,将启动一次新的AD转换
while(!ATD0STAT0_SCF); //右前侧第一个电感电压转换完成
q=a[1];
*(q) =ATD0DR0L;
*(q+1)=ATD0DR1L;
*(q+2)=ATD0DR2L;
*(q+3)=ATD0DR3L;
ATD0CTL5=0X22;
while(!ATD0STAT0_SCF); //左前侧第二个电感电压转换完成
q=a[2];
*(q) =ATD0DR0L;
*(q+1)=ATD0DR1L;
*(q+2)=ATD0DR2L;
*(q+3)=ATD0DR3L;
ATD0CTL5=0X23;
while(!ATD0STAT0_SCF);// 右前侧第1个电感电压转换完成
q=a[3];
*(q) =ATD0DR0L;
*(q+1)=ATD0DR1L;
*(q+2)=ATD0DR2L;
*(q+3)=ATD0DR3L;
ATD0CTL5=0X24;
while(!ATD0STAT0_SCF);//等待左前第一个电感电压转换完成
q=a[4];
*(q) =ATD0DR0L;
*(q+1)=ATD0DR1L;
*(q+2)=ATD0DR2L;
*(q+3)=ATD0DR3L;
ATD0CTL5=0X25;
while(!ATD0STAT0_SCF);// 右前侧第1个电感电压转换完成
q=a[5];
*(q) =ATD0DR0L;
*(q+1)=ATD0DR1L;
*(q+2)=ATD0DR2L;
*(q+3)=ATD0DR3L;
/*********************************************************
再次启动一轮AD转换来减小误差
***********************************************************/
ATD0CTL5=0X25;
while(!ATD0STAT0_SCF);// 右前侧第1个电感电压转换完成
q=a[5];
*(q+4)=ATD0DR0L;
*(q+5)=ATD0DR1L;
*(q+6)=ATD0DR2L;
*(q+7)=ATD0DR3L;
ATD0CTL5=0X24;
while(!ATD0STAT0_SCF);//等待左前第一个电感电压转换完成
q=a[4];
*(q+4)=ATD0DR0L;
*(q+5)=ATD0DR1L;
*(q+6)=ATD0DR2L;
*(q+7)=ATD0DR3L;
ATD0CTL5=0X23;
while(!ATD0STAT0_SCF);// 右前侧第1个电感电压转换完成
q=a[3];
*(q+4)=ATD0DR0L;
*(q+5)=ATD0DR1L;
*(q+6)=ATD0DR2L;
*(q+7)=ATD0DR3L;
ATD0CTL5=0X22;
while(!ATD0STAT0_SCF); //左前侧第二个电感电压转换完成
q=a[2];
*(q+4)=ATD0DR0L;
*(q+5)=ATD0DR1L;
*(q+6)=ATD0DR2L;
*(q+7)=ATD0DR3L;
ATD0CTL5=0X21; //重置ATD0CTL5,将启动一次新的AD转换
while(!ATD0STAT0_SCF); //右前侧第一个电感电压转换完成
q=a[1];
*(q+4)=ATD0DR0L;
*(q+5)=ATD0DR1L;
*(q+6)=ATD0DR2L;
*(q+7)=ATD0DR3L;
ATD0CTL5=0X20; //,连续AD转换,右对齐,单通道,无符号,起始通道为AN0
while(!ATD0STAT0_SCF);//等待左前第一个电感电压转换完成
q=a[0];
*(q+4)=ATD0DR0L;
*(q+5)=ATD0DR1L;
*(q+6)=ATD0DR2L;
*(q+7)=ATD0DR3L;
for(i=0;i<6;i=i+1) //累加后求均值,AD转换滤波
{
sum=0;
q=a; //赋予指针新地址
for(j=0;j<8;j++)
sum+=*(q+j);
ad_val=sum/8;
}
}
OutData[0] = ad_val[0];
OutData[1] = ad_val[1];
OutData[2] = ad_val[4];
OutData[3] = ad_val[5];
OutPut_Data();
用蓝牙将数据传回来,发现数据全为0;用万用表测AD0~AN6都有示数。搞了好多天,我认为是结果寄存器里面没有存转换的值。搞不好了,问了好多学长,也说不出个所有然,唉
反正弃疗了。
再见了。
|
|