[原创] [XMC4700 Relax 5V shield 评测]06 基于BMP180的气压计

johnrey   2017-12-31 22:27 楼主

2017-12-31

在上次评测中,已经搞定了液晶显示屏了,是时候提供点内容了。考虑到和DAVE的结合,放弃了那些单总线协议的传感器,使用I2C接口的BMP180来完成一个简单的气压计设计。 模块外观如下图所示,非常简单,只要连接电源、地和标准的I2C接口就好了。这个是比较老的模块,上面的供电有5V和3.3V可以选择,我们直接使用3.3V。 事实上数据手册上说bmp180的IO最大只能承受4.25V,因此使用xmc relax的arduino接口时,我们把IOref也用跳线帽调到了3.3V。简单测试可以发现上次的LCD工作依旧正常。

01bmp1802.png
图1 bmp180模块外观

bmp180和单片机的连接上,直接使用开发板上的arduino接口。具体连接如下:

  • SCL: P0.13
  • SDA: P13.5

项目呢就直接在上次的LCD基础上修改吧。在eclipse中可以直接copy paste,然后修改一下项目名称就搞定了。 当然还要把要移植的驱动代码也放到user目录下,由于上次的显示部分都已经有了 ,所以只要吧bmp180的驱动放进去就好了。

02copyProject.png
图2 复制项目

复制的好处在于LCD驱动直接就有了,只需要再增加1个I2C_MASTER APP就好了。可以在下图中看到,这个APP和SPI的依赖关系是一样的,因为都属于SCU的嘛。

03I2CMaster.png
图3 i2c的依赖关系

I2C在设置上没啥说头,如果不求太快,默认100KHz的时钟速度,那都可以不做任何改动。 只要分配一下引脚就好了,如下图所示。

04I2Cpins.png
图4 I2C引脚配置

需要花点时间的工作的主要是把原来51下验证通过的代码移植到xmc4700下来使用。I2C的移植比SPI的还要简单,因为仅涉及两条总线。 不过总线协议会比SPI的稍稍复杂一点,因为SPI使用硬件IO来选择器件,而I2C是通过写一个地址字节(该字节还包含读写操作的指定)来选择器件的。 同时I2C还包含了start和stop时序,这也是比SPI多出来的地方。51下如果没有I2C外设,就必须通过IO模拟实现所有时序。 而xmc的I2C APP中,已经把以上各个因素都考虑了,写和读简化为了以下两个函数。

  • 写:I2C_MASTER_Transmit
  • 读:I2C_MASTER_Receive

当然实际情况并没有想象的那么简单,下面来看看每个函数的输入参数列表。首先是写,因为无论读写,都是从写时序开始的。包含以下6个输入参数:

  • I2C_MASTER_t * handle :生成的I2C实例
  • bool send_start :是否要发送start时序,I2C传输刚开始是要的。
  • const uint32_t address :器件地址,注意是要移到高7位的。看器件sheet怎么给地址了。
  • uint8_t * data :要发送的数据地址
  • const uint32_t size :发送的字节数
  • bool send_stop :是否要发送stop时序,I2C传输结束时是要的

05transmit.png
图5 I2C写函数
看下面的代码替换,绿色注释掉的是51的,正常颜色的是移植后的。其实第40行就代替了原来的3行代码,只是传输后需要判断传输是否完成,这和SPI是一样的。

06transmitCode.png
图6 I2C写移植

看过了写函数,读函数就没啥问题了。参数列表中比transmit多了一个bool send_nack,一般读过程如果结束了,选true就好了

07recv.png
图7 I2C读函数
读函数的移植,会比51更加简洁,绿色注释掉的是51的,6行代码,用图上的第50行一行就搞定了,也要判断读是否完成,这和写是一样的。

08recvCode.png
图8 I2C读移植

最后在主函数添加少量代码就可以使用传感器了,非常的方便。这里为了拍照方便,代码中只做了一次气压采集,代码也比较随意。 如果需要实时采集,只需要把convert和显示代码放到最后的while(1U)里面就可以了。

09mainCode.png
图9 主函数添加代码

这样咱们的eebarometer就完成了,当然不能忘了感谢xmc和DAVE的帮忙啦,一并显示在LCD上了。

10disp.png
图10 气压计效果展示

小结:本次评测中,在是上次的LCD驱动基础上,添加了一个bmp180气压传感器,并使用I2C_MASTER APP,实现了传感器的驱动,并将结果显示到LCD上,实现了一个简单的气压计。 可以发现,DAVE APP的主要优点就是大大简化了外设的配置和初始化过程,使用户专注于用户代码的编写。同时DAVE也提供了基本的API手册,和简单示例代码,方便用户快速掌握。 不过这也需要用户能熟知外设的实际工作过程。比如在bmp180的驱动移植中,还是需要用户对I2C的通信过程有比较深入的了解,否则移植还是会有一定困难的。



此内容由EEWORLD论坛网友johnrey原创,如需转载或用于商业用途需征得作者同意并注明出处

回复评论 (2)

下次试试BMP280,BMP180已经停产了。
点赞  2018-2-7 10:46
有完整的代码吗
点赞  2018-7-21 18:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复