智能车制作
标题:
AD采样问题(电磁组)
[打印本页]
作者:
风中柳
时间:
2013-2-22 23:38
标题:
AD采样问题(电磁组)
//这个程序是用来采集2个传感器传回的信号进行转化,可是一起用的时候就出现问题。单独用一个AD没问题。恳求大神们拯救。。。。。
#include "main.h"
//uint counttime,showtime;
//uchar pwmflag,modecount,delaycount;
unsigned int AdResult[4];
unsigned count;
unsigned int sampletimes=0;
void main(void) {
/* put your own code here */
// unsigned char value;
SetBusCLK_64M(); // 选择待设定的总线频率
Port_init(); // IO口初始化
PWM_Init(); // PWM 初始化
LCD_Init(); // LCD 初始化
AD_Init() ; // AD 初始化
PIT_Init(); // 中断初始化
// Capture_Init(); // 捕捉初始化
LCD_clear(); // 清屏幕
EnableInterrupts; // 开总中断
for(;;) {
}
for(;;) {
} /* loop forever */
/* please make sure that you never leave main */
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 66 PIT0_ISR(void)
{
DisableInterrupts; // 关闭总中断
LCD_Write_Num(0,5,AdResult[2],4);
LCD_Write_Num(54,5,AdResult[3],4);
PORTE_PE7=1;
AdResult[3]=0;
AdResult[2]=0;
// AdResult[1]=0;
// AdResult[0]=0;
for(;sampletimes<20;sampletimes++) {
while(!(ATD0STAT0&0x08));
{
// AdResult[0]+=ATD0DR0;
// AdResult[1]+=ATD0DR1;
AdResult[3]+=ATD0DR3;
}
while(!(ATD0STAT0&0x04)) ; {
AdResult[2]+=ATD0DR2;}
}
AdResult[3]=AdResult[3]/20;
AdResult[2]=AdResult[2]/20;
// AdResult[1]=AdResult[1]/20;
// AdResult[0]=AdResult[0]/20;
sampletimes=0;
PORTE_PE7=0; // finish with 89us
PORTB_PB7=~PORTB_PB7;
PITTF_PTF0=1; // 清中断标志位
EnableInterrupts;
}
作者:
风中柳
时间:
2013-2-22 23:39
求大家能看一下,指导一下。自己真的看了很久很久了,不知道问题出在哪里...
作者:
风中柳
时间:
2013-2-22 23:40
while(!(ATD0STAT0&0x08));
是改成 while(!ATD0STAT_SCF);的
作者:
xiexueshi
时间:
2013-2-23 21:18
/*****************AD
初始化
*********************/
void AD_Init(void)
{
//8ch
ATDCTL1=0x20; //7:1-外部触发,65:00-8位精度,4:放电,3210:ch ATDCTL1=0x20;十位精度
ATDCTL2=0x40; //禁止外部触发, 中断禁止
ATDCTL3=0xc0; //右对齐无符号,每次转换8个序列, No FIFO, Freeze模式下继续转
ATDCTL4=0x45; //765:采样时间为4个AD时钟周期,ATDClock=[BusClock*0.5]/[PRS+1] PRS=1;
ATDCTL5=0x30; //6:0特殊通道禁止,5:1连续转换 ,4:1多通道轮流采样
ATDDIEN=0x00; //禁止数字输入
}
/*****************
Read AD Value
*********************/
void Read_AD()
{
while(ATDSTAT0_SCF == 0);
// AD[0]=ATDDR0;
AD[1]=ATDDR1; //gyro
AD[2]=ATDDR2; //accle
AD[3]=ATDDR3; //left
AD[4]=ATDDR4; //right
}
for(;;)
{
sum_AD1=0;
sum_AD2=0;
for(i=0;i<20;i++)
{
Read_AD();//读取各路AD值
sum_AD1+=AD[1];
sum_AD2+=AD[2];
}
aver_AD1=sum_AD1/20;
aver_AD2=sum_AD2/20;
OutData[0] = g_fGravityAngle*15;
OutData[1] = g_fCarAngle*16;
OutData[2] = AD[3]*5+100;
//OutData[3] = Pluse*10;
OutPut_Data();//
送串口显示波形
这是我上届用的程序,看看你的初始化、函数调用有没有问题,希望对你有帮助
作者:
风中柳
时间:
2013-2-25 17:09
xiexueshi 发表于 2013-2-23 21:18
/*****************AD初始化*********************/
void AD_Init(void)
{
谢了,问题找到了,不是程序的问题,是硬件的问题,周围存在极大的干扰,哈哈
作者:
somebodyes
时间:
2014-2-18 19:09
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2