4862|7

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

求AD转换数值不对,咋回事 [复制链接]

请问各位大师,我AD转换的数值不对怎么回事?而且数值不变,我是测温用的,数值应该时刻变化啊

最新回复

请高手指点一下啊,谢谢了  详情 回复 发表于 2009-9-18 13:11
 
点赞 关注

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
硬件接对了没?软件配置对了没?
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
硬件应该没问题,可能是我的AD7794的初始化有问题,能指教下吗?谢谢
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

4
 
你可以先用AD测个已知电压试试看
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 
好像AD没有工作,怎么回事呢?请教高手,AD的读写程序段怎么写?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复

帖子写的详细点,既没有程序,也没有电路图,这样看不出来的。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

7
 
/*------------AD7705头文件开始-------------------*/

#include<msp430x24x.h>
#include<stdio.h>
#include<math.h>
#include"AD7794.h"
void Delayms(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}
void AD7794_Write_1_BYTE(unsigned char Data_byte)/*poll send 8bits,MSB first*/
{
unsigned char i;

for(i = 0; i < 8; i++)
{ AD7794_CLK_LOW();
if(Data_byte & 0x80 == 1)
AD7794_IN_HIGH();
else
AD7794_IN_LOW();


AD7794_CLK_HIGH();
Data_byte <<= 1;
}

}
void AD7794_Write_1_WORD( unsigned int Data_byte)/*poll send 8bits,MSB first*/
{
unsigned char i;

for(i = 0; i < 16; i++)
{
AD7794_CLK_LOW();
if(Data_byte & 0x8000 == 1)
AD7794_IN_HIGH();
else
AD7794_IN_LOW();


AD7794_CLK_HIGH();

Data_byte <<= 1;

}

}
void AD7794_Write_1_DWORD(unsigned long int Data_byte)/*poll send 8bits,MSB first*/
{
unsigned char i;
for(i = 0; i < 24; i++)
{
AD7794_CLK_LOW();
if(Data_byte & 0x800000 == 1)
AD7794_IN_HIGH();
else
AD7794_IN_LOW();

AD7794_CLK_HIGH();

Data_byte <<= 1;
}

}

void AD7794_INIT()
{
unsigned char i;
AD7794_IN_HIGH();

AD7794_Write_1_BYTE(0x04);
for(i=0;i<=10;i++) ;
AD7794_Write_1_BYTE(0x08);
for(i=0;i<=10;i++) ;
AD7794_Write_1_BYTE(0x08);
for(i=0;i<=10;i++);
AD7794_Write_1_WORD(0x0005);
for(i=0;i<=10;i++);
AD7794_Write_1_BYTE(0x10);
for(i=0;i<=10;i++);
AD7794_Write_1_WORD(0x1030);
for(i=0;i<=10;i++) ;
}

unsigned char AD7794_Read_1_BYTE() /*poll receive 8bits*/
{
unsigned char i,Data_read;

for(i = 0; i < 8; i++)
{
Data_read <<= 1;
AD7794_CLK_LOW();

if(P1IN&0x01)
Data_read |= 0x01;
else
Data_read &= 0xfe;
AD7794_CLK_HIGH();
}

return(Data_read);
}
unsigned int AD7794_Read_1_WORD() /*poll receive 8bits*/
{
unsigned char i;
unsigned int Data_read;

for(i = 0; i < 16; i++)
{
Data_read <<= 1;
AD7794_CLK_LOW();

if( P1IN&0x0001)
Data_read |= 0x0001;
else
Data_read &= 0xfffe;
AD7794_CLK_HIGH();
}

return(Data_read);
}
unsigned long int AD7794_Read_1_DWORD() /*poll receive 8bits*/
{
unsigned char i;
unsigned long int Data_read;

for(i = 0; i < 24; i++)
{
Data_read <<= 1;
AD7794_CLK_LOW();

if(P1IN&0x000001)
Data_read |= 0x000001;
else
Data_read &= 0xfffffe;
AD7794_CLK_HIGH();
}
return(Data_read);
}

unsigned int AD7794_Data_Process()
{
unsigned char MSB_Data,LSB_Data,T_Voltage;
// unsigned long int temp;

AD7794_Write_1_BYTE(0x5c);/*set the next operation for 24 bit read from the data register */
// HSB_Data = AD7794_Read_1_BYTE();
MSB_Data = AD7794_Read_1_BYTE();
LSB_Data = AD7794_Read_1_BYTE();
// temp = AD7794_Read_1_DWORD();
// LSB_Data = (unsigned char)( temp%256 );
// MSB_Data = (unsigned char)( (temp/256)%256 );
// HSB_Data = (unsigned char)( (temp/65536)%256 );


T_Voltage = (unsigned int)MSB_Data*256+(unsigned int)LSB_Data;

return (T_Voltage);
}

int ad××e(char n) //求n次A/D转换的平均值
{unsigned char i,pit,ue,max,min;
unsigned int ADC_tem=0;
unsigned int ADC_temp[100];
for(ue=0;ue<n;ue++)
{
ADC_temp[ue]=AD7794_Data_Process(); //读走温度数据
}

for(pit=4;pit<n;pit++)
{
ADC_tem+=ADC_temp[pit]; //求和
}
max=ADC_temp[4];
min=ADC_temp[4];
for(i=4;i<n;i++)
{
if(ADC_temp[i]>max)
max=ADC_temp[i];
if(ADC_temp[i]<min)
min=ADC_temp[i];
}
ADC_tem=(ADC_tem-max-min)/(n-6);//去掉最大最小值然后求平均值
return ADC_tem;
}

void InitClock()
{
DCOCTL=BCSCTL1=XT2OFF;

}

void main()
{

float RT;
unsigned int data;
P2DIR |= 0x02;
P2OUT |= BIT1; // ADVCC;
P2DIR |= 0x10;
P2OUT |= BIT4; // COMVCC;
P2DIR |= 0x20;
P2OUT &= ~BIT5; // A
P2DIR |= 0x40;
P2OUT &= ~BIT6; //B
P1DIR &=~BIT6;

WDTCTL = WDTPW + WDTHOLD;/*close the watch dog timer*/
InitClock();
AD7794_INIT();

unsigned int j; // 指示灯
P2DIR |= BIT7;

while(1)
{

data= ad××e(20);
RT=data*1500/65536;
printf("RT=%.1f,data=%d",RT,data);
if(RT>1116)
{ P2OUT &= ~(BIT7); //输出低电平
for (j=10000;j>0;j--) ; //延时
P2OUT |= BIT7;
}
else
{
P2OUT |= BIT7; //输出高电平
}
}
}
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

8
 
请高手指点一下啊,谢谢了
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表