📄 ad7705.c
字号:
#include"reg52.h"
#include"IOCfg.c"
#include"delay.h"
#include"Config.h"
#include"AD7705.h"
#include "intrins.h"
/************************************************************************************
复位AD7705
************************************************************************************/
void rst_ad()
{
AD_DRDY = 1;
AD_CLK = 1;
AD_DIN = 1;
AD_DOUT = 1;
//AD_RST = 0;
delay(300);
AD_RST = 1;
write_ad(0xff);
write_ad(0xff);
write_ad(0xff);
write_ad(0xff);
write_ad(0xff);
delay(500);
}
/************************************************************************************
写1字节到AD7705
************************************************************************************/
write_ad(uchar i)
{
uchar a;
for(a = 8;a > 0;a--)
{
if((i & 0x80) == 0)
{
AD_DIN = 0;
}
else
{
AD_DIN = 1;
}
i <<= 1;
AD_CLK = 0;
_nop_();
_nop_();
_nop_();
AD_CLK = 1;
}
}
/************************************************************************************
设置AD7705通道
* 0 为第一通道
* 1 为第二通道
//MD1(0) 工 作 模 式
//MD0(0) 工 作 模 式
//G2(0) 增益选择 0 0 0 0 1 1 1 1
//G1(0) 增益选择 0 0 1 1 0 0 1 1
//G0(0) 增益选择 0 1 0 1 0 1 0 1
// 1 2 4 8 16 32 64 128
//B/U(0) 单极性/双极性工作。“0”表示选择双极性操作,“1”表示选择单极性工作
//BUF(0) 缓冲器控制。“0”表示片内缓冲器短路,缓冲器短路后,电源电流降低
// 此位处于高电平时,缓冲器与模拟输入串联,输入端允许处理高阻抗源
//FSYNC(1) 滤波器同步
//设置40H 双极性方式 44H 单极性方式
//-----短路滤波器后线性也好了
************************************************************************************/
void set_7705_ch(bit a)
{
if(a == 0)
{
write_ad(0x20);//write_ad(0x20);
write_ad(0x05);
write_ad(0x10);//write_ad(0x10);
write_ad(0x44);//write_ad(0x46);
}
else
{
write_ad(0x20);//write_ad(0x20);
write_ad(0x05);
write_ad(0x10);//write_ad(0x10);
write_ad(0x44);//write_ad(0x46);
}
}
/************************************************************************************
读1字节到AD7705
************************************************************************************/
uchar read_ad()
{
uchar temp2;
uchar a;
for(a = 8;a > 0;a--)
{
AD_CLK = 0;
_nop_();
_nop_();
_nop_();
AD_CLK = 1;
_nop_();
_nop_();
_nop_();
temp2 <<= 1;
if(AD_DOUT == 0)
{
temp2 &= 0xfe;
}
else
{
temp2 |= 0x01;
}
}
return temp2;
}
/************************************************************************************
读AD7705转换后的数据 ,不检测DRDY
************************************************************************************/
uint readAD_data()
{
uint temp;
uchar i;
for(i = 16;i > 0;i--)
{
AD_CLK = 0;
_nop_();
_nop_();
_nop_();
AD_CLK = 1;
_nop_();
_nop_();
_nop_();
temp <<= 1;
if(AD_DOUT == 0)
{
temp &= 0xfffe;
}
else
{
temp |= 0x0001;
}
}
return temp;
}
/************************************************************************************
AD的16位整形数转换成浮点电压或电流值
************************************************************************************/
float adjisuan_U(uint x)
{
idata float temp1;
temp1 = 11.990 / 0x5e1f;
temp1 = x * temp1;
return temp1;
}
float adjisuan_I(uint x) //
{
idata float temp1;
temp1 = (1.059 + 0.009) / 0x2c03;
//temp1 = (x * temp1) - 0.0039;
temp1 = (x * temp1) - 0.0069 ;
return temp1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -