单片机实验: 三轴磁场模块 GY-271

最近买了一块三轴磁场模块进行实验


名称:HMC5883L模块(三轴磁场模块)

型号:GY-271

使用芯片:HMC5883L

供电电源:3-5v

通信方式:IIC通信协议

测量范围:±1.3-8 高斯

MCU: STC89C52RC

遇到的问题与解决方法:

1) 我的实验板 P1.0, P1.1 直接连接了板载液晶1602的插口

而作为i2c协议的SDL, SCL输入, 我必须把 P1.0, P1.1 空出来,所以我用外接线连接了液晶

2) 看说明貌似 GY-271 输出是3.3V, 我先打算用上拉电阻, 而后用示波器看数据, 高电平是5V (怀疑 GY-271 上面已经有上拉电阻了 )

去掉上拉电阻一样工作



实验如上:

现在是显示水平的的角度, 我把GY-271以垂直方向为轴, 水平旋转, 显示屏显示 0-360, 看来实验成功了

有空再验证一下其他轴向

视频: http://video.sina.com.cn/v/b/108165740-2558327185.html


附 i2c 问题集:

 

上拉电阻。

硬件上,一般I2C都要求接上拉电阻,MCU可以内置上拉电阻除外。为什么呢?主要是因为I2C通信的ACK信号,当释放时,需要把DATA线拉高。

 

发送数据时序。

下降沿改变数据,上升沿发送数据。( SCL 下降后马上调整 SDL, 等SCL上升的时候, 就是其他模块来读取的时候) (SCL高电位的时候, 如何, SDL有变化,就不是数据传输而是启动停止)

 

SUB地址的选定。

这个SUB地址也是因芯片而多样化。如:

1、指定要编程的具体SUB REGISTER,如24C02,可以编写/读出内部的任何地址的数据;

2、内部没有指定的SUB 地址可选择,读或写时,都只能从某一固定的地址开始,例如:要读0X17的地址的数据,而该芯片固定只能从0X16开始读,则只能读出两字节。芯片如之前博文中提到的收音IC:SI47XXX

 

连续写。

I2C不仅提供了单个BYTE的读出/写入,也提供了连续地址的读出/写入,如SI47XXX。连续地址操作时,内部地址REGISTER会自动+1,只要连续往里送数据即可,但要注意ACK信号的回应。(每写8个数据,要检查一下ack)

 

ACK信号。

ACK是应答信号,出现在第九个CLK,但并不是每个BYTE都要出现。如接收一串连续的数据,当接收完成,在最后一个BYTE时,不需要回答ACK信号给芯片。

 

注意芯片的频率。

频率问题是因芯片而异的,有一些运行速度很快,400KHZ也正常;有一些比较慢,超过100us一个CLK。前者,对USER而言,现的问题不多,后者,却要令USER增加不少延时。这就是每个IC都有时序要求的说明文档,里面一定有各个时间值的最大或最小参考。


字节序

每个数据字节在传送时都是高位(MSB)在前。


原文地址:https://www.cnblogs.com/dyllove98/p/3157261.html