zoukankan      html  css  js  c++  java
  • 单片机实验: 三轴磁场模块 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)在前。


  • 相关阅读:
    Notes of the scrum meeting(12.7)
    Notes of the scrum meeting(12.5)
    事后分析报告(M1阶段)
    锁屏软件发布说明
    Android 锁屏软件MemoryDebris测试报告
    锁屏软件功能介绍
    Notes of the scrum meeting(11/4)
    Notes of the scrum meeting(11/3)
    Notes of the scrum meeting(11/2)
    SCRUM 12.17
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3157261.html
Copyright © 2011-2022 走看看