/* ____________ ___ _ __________ *
* | _________ \ | \ | | / _________| *
* | | \ \ | |\ \ | | / / *
* | |________/ / | | \ \ | | \ \_________ *
* | |_________ \ | | \ \ | | \_________ \ *
* | | \ \ | | \ \ | | \ \ *
* | |_________/ / | | \ \| | _________/ / *
* |____________/ |_| \___| |__________/ *
* *
* @文件名称:main.c *
* @文件版本:V0.0.1 *
* @文件描述:2000D/E延时函数 *
* @创 建 者:臧武运(zangwuyun@sina.cn) *
* @创建时间:2012年5月5日21:14:45 *
****北京北琪医疗科技有限公司保留一切权利,禁止拷贝,如有抄袭,法律必究.*********
* @版本更新: *
* @使用说明: *
*******************************************************************************/
#include "ad5933.h"
unsigned char j=0;
/*******************************************************************************
* 函数名称:delays(u32)
* 功能描述:软件延时
* 输入参数:
* 输出参数:
* 返回参数:
* 版本更新:
******************************************************************************/
static void delays(u32 n)
{
volatile int i;
for(;n>0;n--)
{
for(i=0;i<10;i++);
}
}
/*******************************************************************************
* 函数名称:ISend(u32)
* 功能描述:iic数据发送
* 输入参数:
* 输出参数:
* 返回参数:
* 版本更新:
******************************************************************************/
static void ISend(u8 n,u8 m,u8 q)
{
I2C_Start();
I2C_SendByte(n);
delays(1000);
I2C_SendByte(m);
delays(1000);
I2C_SendByte(q);
delays(1000);
I2C_Stop();
}
/*******************************************************************************
* 函数名称:i2c_write(u32)
* 功能描述:iic写函数
* 输入参数:
* 输出参数:
* 返回参数:
* 版本更新:
******************************************************************************/
static void i2c_write ( unsigned int reg_address, unsigned int reg_write_data)
{
I2C_Start();
I2C_SendByte(AD5933_addr);
delays(1000);
I2C_SendByte((u8)reg_address);
delays(1000);
I2C_SendByte((u8)reg_write_data);
delays(1000);
I2C_Stop();
}
/*******************************************************************************
* 函数名称:InitAD5933()
* 功能描述:AD5933初始化
* 输入参数:
* 输出参数:
* 返回参数:
* 版本更新:
******************************************************************************/
void InitAD5933(void)
{
#if 0
// Transmit to start frequency register
// program 30khz start frequency assuming internal osc of 16.776Khz
i2c_write ( 0x84, 0x45);
i2c_write ( 0x83, 0xA6);
i2c_write ( 0x82, 0x0E);
// Transmit to frequency increment register
// program 1Khz frequency increment assuming internal osc of 16.776Khz
i2c_write ( 0x87, 0x02);
i2c_write ( 0x86, 0x7D);
i2c_write ( 0x85, 0x00);
// Transmit to NUMBER OF INCREMENTS register
// program 10 frequency increments
i2c_write ( 0x89, 0x0A);
i2c_write ( 0x88, 0x00);
// Transmit to settling time cycles register
// program 15 output cycles at each frequency before a adc conversion
i2c_write ( 0x8B, 0x0F);
i2c_write ( 0x8A, 0x00);
// Transmit to CONTROL register
// place the AD5933 in standby mode
i2c_write ( 0x80, 0xB0);
// Choose the internal system clock
i2c_write ( 0x81, 0x00);
// Choose range 1 (2vp-p, 1.6v) PGA = x1
i2c_write ( 0x80, 0x01);
// initialise the sensor with contents of start frequency regsister with range 1 (2vp-p, 1.6v) PGA = x1
i2c_write ( 0x80, 0x10);
// start of frequency sweep (2vp-p, 1.6v) PGA = x1
i2c_write ( 0x80, 0x20);
#else
ISend(AD5933_addr,0x82,0x00); //start frequency
delays(5);
ISend(AD5933_addr,0x83,0xFA); //1kHz
delays(5);
ISend(AD5933_addr,0x84,0x05);
delays(5);
ISend(AD5933_addr,0x85,0x00); //increment frequency
delays(5);
ISend(AD5933_addr,0x86,0x31); //500Hz
delays(5);
ISend(AD5933_addr,0x87,0x81);
delays(5);
ISend(AD5933_addr,0x88,0x01); //测量点数
delays(5);
ISend(AD5933_addr,0x89,0xFF);
delays(5);
ISend(AD5933_addr,0x80,0xB1); //标准模式
delays(5);
ISend(AD5933_addr,0x81,0x00); //选着内部时钟
delays(5);
ISend(AD5933_addr,0x81,0x10); //复位AD5933
delays(5);
ISend(AD5933_addr,0x81,0x00);
delays(5);
ISend(AD5933_addr,0x80,0x11); //初始化频率
delays(5);
ISend(AD5933_addr,0x8A,0x03); //等待建立周期数
delays(5);
ISend(AD5933_addr,0x8B,0xFF);
delays(5);
ISend(AD5933_addr,0x80,0x21); //启动频率扫描
delays(5);
#endif
}
u8 IRcv(u8 address)
{
u8 re;
I2C_Start();
I2C_SendByte(0X1B);
re = I2C_ReceiveByte();
I2C_Stop();
return re;
}
/*******************************************************************************
* 函数名称:void display(unsigned int re,unsigned int im)
* 功能描述:显示函数
* 输入参数:unsigned int re,unsigned int im ,实部和虚部
* 输出参数:
* 返回参数:
* 版本更新:
******************************************************************************/
void display(signed int re,signed int im)
{
unsigned char a[11],y=0,x=0,i=0;
signed int revalu=0,imvalu=0;
float valu=0;
double xishu=0,regist;
long int ll;
revalu=re;
imvalu=im;
if(revalu&0x8000) //把带符号的换算成无符号整数
{
revalu=(revalu-0x10000)*(-1);
x=1;
}
if(imvalu&0x8000) //把带符号的换算成无符号整数
{
imvalu=(imvalu-0x10000)*(-1);
y=1;
}
valu=sqrt(imvalu*imvalu+revalu*revalu); //计算幅值
switch(j)
{
case 0:
if((valu<13000)&&(valu>8000))
{
xishu=(1/(96.86810)); //计算系数
xishu=(1/(xishu*valu))*100000+0.5; //计算阻值
ll=xishu-250;
i=1;
}
break;
case 1:
if((valu<13000)&&(valu>1350))
{
xishu=(1/(13.33726)); //计算系数
xishu=(1/(xishu*valu))*1000000+0.5; //计算阻值
ll=xishu-100;
i=1;
}
break;
case 3:
if((valu<12000)&&(valu>1050))
{
xishu=(1/(10.398994)); //计算系数
xishu=(1/(xishu*valu))*10000000+0.5; //计算阻值
ll=(long int)xishu;
i=1;
}
break;
case 4:
if((valu<12000)&&(valu>1000))
{
xishu=(1/(96.736596)); //计算系数
xishu=(1/(xishu*valu))*10000000+0.5; //计算阻值
ll=xishu;
i=1;
}
break;
case 5:
if((valu<2130)&&(valu>1060))
{
xishu=(1/(21.006)); //�
bsp.zip_AD5933
版权申诉
131 浏览量
2022-09-14
23:45:22
上传
评论
收藏 7KB ZIP 举报
小贝德罗
- 粉丝: 69
- 资源: 1万+
最新资源
- 2001~2022年上市公司数字赋能指数.dta
- 2001~2022年上市公司数字赋能指数.xlsx
- 信息办公石大在线财务管理系统(含源码)-shidacaiwu.rar
- 信息办公电信计费系统完整代码-netctossconformity.rar
- matlab实现TD-SCDMA中初始同步捕捉DwPTS下行同步导频时隙的仿真.zip
- 信息办公玉玺学生信息管理系统-webapps.rar
- 信息办公基于struts的图书管理系统-struts-ts.rar
- 管家婆分销ERP V1 V3 A8II TOP V10.0.2最新全版本通用
- 信息办公基于Ajax+J2EE的MicroERP源码下载-microerp-0.1.rar
- 信息办公双鱼林jsp人事工资系统-wagesmanagesystem.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0