OpenEdv-开源电子网

标题: FPGA IIC驱动SHT45温湿度传感器 [打印本页]

作者: wzzwzz    时间: 2022-8-3 20:46
标题: FPGA IIC驱动SHT45温湿度传感器
有没有大佬做过这方面的工作,自己感觉在状态怎么划分的理解上有问题,该分为那些状态,还有就是这个器件没有读写寄存器地址是吗

作者: 正点原子    时间: 2022-8-3 23:26
帮顶
作者: QinQZ    时间: 2022-8-4 09:01
这个还得自己看手册研究和调试,IIC接口时序是通用的,可能重点看下操作哪些寄存器来获取温度值
作者: wzzwzz    时间: 2022-8-4 09:29
QinQZ 发表于 2022-8-4 09:01
这个还得自己看手册研究和调试,IIC接口时序是通用的,可能重点看下操作哪些寄存器来获取温度值

你好,这个传感器是写入一个八位指令(但是我没找到要写入的寄存器地址),直接可以一次性获取温度16bit和湿度数据16bit和各自的8bitcrc校验,我也多次翻阅了这个手册,对于整个流程,状态机如何划分跳转还是没太搞清楚,特别是后边的读取温湿度数据这部分,就寻思大佬能不能指点下,我想的是先上电状态,再IDLE,再START再发送控制指令(包括器件地址和读写控制位),再S_ACK1,从这个状态开始根据控制指令的读或者写,划分两条路,一条是写命令后,经过S_ACK后到STOP状态,另一条是读,流程大概是读温度高八位——M_ACK——读温度低八位——M_ACK——CRC——读湿度高八位——M_ACK——读湿度第八位——M_ACK——CRC——NACK——STOP,不知道这么划分对不对,希望大佬指点下
作者: QinQZ    时间: 2022-8-4 11:37
wzzwzz 发表于 2022-8-4 09:29
你好,这个传感器是写入一个八位指令(但是我没找到要写入的寄存器地址),直接可以一次性获取温度16bit ...

状态机的划分主要是一个状态表示一个功能,让代码看上去更清晰易懂一些,这个没有绝对的怎么划分,我们有一些例程和你这个比较类似,你可以参考下,比如EEPROM读写测试实验,DHT11温湿度实验、DS18B20温度实验等
作者: arm51avr    时间: 2022-8-4 20:26
1、对的,第P10、P11页,有一个8Bit的Command。这颗传感器没有寄存器,也没有寄存器地址。这个Command即可理解为“芯片功能选择”。我只是粗略的看了下,应该是选择什么操作功能回复什么类型的数据。具体的命令交互流程、以及字节数,见第十页那张图。

2、建议先用 STM32 调试,将温湿度数据通过串口,或LCD显示出来,直观的进行观察。如果温度数据经观察没有类似散点的数据,CRC校验可忽略。调通后,再尝试将C语言程序改为状态机,比如0.5秒状态机从头执行一次,实现数据读取、发送。

3、我是不明白为什么设计FPGA仍然是单片机的一套思路,我所见是本科毕设,要求必须使用FPGA。我个人的想法,如果是为了应付差事,不熟悉Verilog,且Intel FPGA容量足够,直接跑个Nios软核,像单片机一样调C语言。
作者: arm51avr    时间: 2022-8-4 20:34
ACK(应答)还有所提到START、STOP,都属于I2C协议的一部分。这个是不需要自己从头来写的,找个I2C传输代码例程,把里面一个字节一个字节,发送、读取的代码扒出来,放到自己的程序里,每发送一个字节套用一次。真正需要自己来设计并实现的其实是程序流程(状态机)。




欢迎光临 OpenEdv-开源电子网 (http://www.openedv.com/) Powered by Discuz! X3.4