ADI 技术
登录
直播中
潘佼佼
7年用户
189经验值
私信
关注
[问答]
利用Arduino控制AD5933的初步尝试
开启该帖子的消息推送
Arduino
AD5933
温度采集
AD5933 是ADI公司出品的 1 MSPS、12位阻抗转换器和网络分析仪,可用于电化学分析、生物电阻抗分析、阻抗频谱分析,复阻抗测量、生物医学和汽车传感器、材料性质分析等,使用IIC
通信
方式。
本想做一个完整的基于Arduino的AD5933阻抗测量系统,目前由于时间关系,先探索下其IIC通信方式,尝试实现控制AD5933进行温度采集并通过串口发送
软件代码主要包括以下个部分
1 发送温度采集命令
2 读取状态寄存器并判断温度采集是否完成
3 读取温度高位字节
4 读取温度低位字节
5 温度格式转换
6 串口发送温度数据
由于我的Arduino开发环境没有配置,不支持中文注释,所以采用了英文注释
代码如下,编译通过
#include
// IIC control AD5933
char temphigh = 0;
char templow = 0;
char statusnow = 0;
float temperature = 0;
void setup()
{
// ini
ti
alize the serial communication:
Serial.begin(9600);
Wire.begin(); // join i2c bus (address optional for master)
}
void loop()
{
delay(500);
// 1. begin measure temperature
Wire.beginTransmission(13); // transmit to device #13 (0x0D)
Wire.write(byte(0x80)); // sends instruction byte
Wire.write(byte(0x90)); // Measure temperature
Wire.endTransmission(); // stop transmitting
// 2. read status
do
{
Wire.beginTransmission(13); // transmit to device #13 (0x0D) // 0x0D
Wire.write(byte(0xB0)); // sends instruction byte -> read
Wire.write(byte(0x8F)); // status register address
Wire.endTransmission(); // stop transmitting
Wire.requestFrom(13, 1, true); // request 1 bytes from slave device #13
while(Wire.available()) // slave may send less than requested
statusnow = Wire.read(); // receive a byte as character
}
while((statusnow | byte(0xFE)) != byte(0xFF));
// 3. read temperature high address
Wire.beginTransmission(13); // transmit to device #13 (0x0D) // 0x0D
Wire.write(byte(0xB0)); // sends instruction byte -> read
Wire.write(byte(0x92)); // temperature register high address
Wire.endTransmission(); // stop transmitting
Wire.requestFrom(13, 1, true); // request 1 bytes from slave device #13
while(Wire.available()) // slave may send less than requested
{
temphigh = Wire.read(); // receive a byte as character
}
// 4. read temperature low address
Wire.beginTransmission(13); // transmit to device #13 (0x0D) // 0x0D
Wire.write(byte(0xB0)); // sends instruction byte -> read
Wire.write(byte(0x93)); // temperature register low address 1
Wire.endTransmission(); // stop transmitting
Wire.requestFrom(13, 1, true); // request 1 bytes from slave device #13
while(Wire.available()) // slave may send less than requested
{
templow = Wire.read(); // receive a byte as character
}
// 5. trans temperature;
temperature = (temphigh<< 8) | templow;
if(temphigh & 0x20 == 0x20)
temperature = temperature - 16384;
temperature = temperature /32 ;
// 6. send temperature by uart
Serial.print("The Temperature is: ");
Serial.println(temperature,2);
delay(500);
}
回帖
(1)
萧昕腾
2018-11-2 09:41:23
你好,请问我用arduino控制AD5933扫频的时候,怎么没有办法increment frequency,设置了控制寄存器,还是不行,麻烦您解答一下吧。
你好,请问我用arduino控制AD5933扫频的时候,怎么没有办法increment frequency,设置了控制寄存器,还是不行,麻烦您解答一下吧。
举报
更多回帖
rotate(-90deg);
回复
相关问答
Arduino
AD5933
温度采集
阻抗测量芯片
AD5933
具有哪些特性和应用?
2021-04-13
2184
如何
利用
AD5933
实现高精度生物阻抗测量?
2021-04-12
1529
ad5933
不能正常工作,请问是什么原因?
2018-08-13
3060
关于
AD5933
评测板技术问题
2018-10-08
2037
请教关于
AD5933
阻抗幅度测量问题
2018-07-30
4089
请问
AD5933
阻抗测量范围能进行扩展吗?
2019-03-01
2515
哪位大神有stm32f103
控制
AD5933
实现阻抗测量的程序,急求
2015-02-01
7773
用
AD5933
参考CN0349的方案做水质电导率测试,
AD5933
输出频率设置多少合适呢?
2023-12-11
330
用
AD5933
参考CN0349的方案做水质电导率测试,请问
AD5933
输出频率设置多少合适?
2018-08-02
2507
AD5933
和AD5934的时钟频率差异的相关问题?
2023-12-01
367
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分