完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
AD5933 是ADI公司出品的 1 MSPS、12位阻抗转换器和网络分析仪,可用于电化学分析、生物电阻抗分析、阻抗频谱分析,复阻抗测量、生物医学和汽车传感器、材料性质分析等,使用IIC通信方式。
本想做一个完整的基于Arduino的AD5933阻抗测量系统,目前由于时间关系,先探索下其IIC通信方式,尝试实现控制AD5933进行温度采集并通过串口发送 软件代码主要包括以下个部分 1 发送温度采集命令 2 读取状态寄存器并判断温度采集是否完成 3 读取温度高位字节 4 读取温度低位字节 5 温度格式转换 6 串口发送温度数据 由于我的Arduino开发环境没有配置,不支持中文注释,所以采用了英文注释 代码如下,编译通过 #include char temphigh = 0; char templow = 0; char statusnow = 0; float temperature = 0; void setup() { // initialize 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个回答
|
|
|
你好,请问我用arduino控制AD5933扫频的时候,怎么没有办法increment frequency,设置了控制寄存器,还是不行,麻烦您解答一下吧。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
寻求ADF5355类似的微波源,在DC-15GHz内,锁频时间在1ms内
1787 浏览 0 评论
1627 浏览 0 评论
999 浏览 0 评论
1098 浏览 0 评论
ADF5355失锁: 在用ADF5355进行多次扫频时,延时给了500ms还是经常会失锁
1189 浏览 0 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
2842浏览 3评论
2086浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
2119浏览 2评论
1173浏览 2评论
使用ADI官方提供的no-OS來接收GPS L1(1575.42MHz)的資料
1405浏览 1评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 22:37 , Processed in 1.146601 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2535