完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
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() { // 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); } |
|
相关推荐 |
|
5V供电情况下JFET前级放大电路怎么实现,JFET能不能先将信号放大到2-3mv,然后在用单运放进行1000倍左右放大?
1986 浏览 0 评论
1194 浏览 0 评论
USB Type-C的双角色端口(DRP)我这样设计可以吗?
746 浏览 0 评论
1894 浏览 0 评论
1826 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-1 20:26 , Processed in 0.655281 second(s), Total 40, Slave 30 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4133