在上次评测中,已经搞定了液晶显示屏了,是时候提供点内容了。考虑到和DAVE的结合,放弃了那些单总线协议的传感器,使用I2C接口的BMP180来完成一个简单的气压计设计。 模块外观如下图所示,非常简单,只要连接电源、地和标准的I2C接口就好了。这个是比较老的模块,上面的供电有5V和3.3V可以选择,我们直接使用3.3V。 事实上数据手册上说bmp180的IO最大只能承受4.25V,因此使用xmc relax的arduino接口时,我们把IOref也用跳线帽调到了3.3V。简单测试可以发现上次的LCD工作依旧正常。
bmp180和单片机的连接上,直接使用开发板上的arduino接口。具体连接如下:
项目呢就直接在上次的LCD基础上修改吧。在eclipse中可以直接copy paste,然后修改一下项目名称就搞定了。 当然还要把要移植的驱动代码也放到user目录下,由于上次的显示部分都已经有了 ,所以只要吧bmp180的驱动放进去就好了。
复制的好处在于LCD驱动直接就有了,只需要再增加1个I2C_MASTER APP就好了。可以在下图中看到,这个APP和SPI的依赖关系是一样的,因为都属于SCU的嘛。
I2C在设置上没啥说头,如果不求太快,默认100KHz的时钟速度,那都可以不做任何改动。 只要分配一下引脚就好了,如下图所示。
需要花点时间的工作的主要是把原来51下验证通过的代码移植到xmc4700下来使用。I2C的移植比SPI的还要简单,因为仅涉及两条总线。 不过总线协议会比SPI的稍稍复杂一点,因为SPI使用硬件IO来选择器件,而I2C是通过写一个地址字节(该字节还包含读写操作的指定)来选择器件的。 同时I2C还包含了start和stop时序,这也是比SPI多出来的地方。51下如果没有I2C外设,就必须通过IO模拟实现所有时序。 而xmc的I2C APP中,已经把以上各个因素都考虑了,写和读简化为了以下两个函数。
当然实际情况并没有想象的那么简单,下面来看看每个函数的输入参数列表。首先是写,因为无论读写,都是从写时序开始的。包含以下6个输入参数:
看过了写函数,读函数就没啥问题了。参数列表中比transmit多了一个bool send_nack,一般读过程如果结束了,选true就好了
读函数的移植,会比51更加简洁,绿色注释掉的是51的,6行代码,用图上的第50行一行就搞定了,也要判断读是否完成,这和写是一样的。最后在主函数添加少量代码就可以使用传感器了,非常的方便。这里为了拍照方便,代码中只做了一次气压采集,代码也比较随意。 如果需要实时采集,只需要把convert和显示代码放到最后的while(1U)里面就可以了。
这样咱们的eebarometer就完成了,当然不能忘了感谢xmc和DAVE的帮忙啦,一并显示在LCD上了。
小结:本次评测中,在是上次的LCD驱动基础上,添加了一个bmp180气压传感器,并使用I2C_MASTER APP,实现了传感器的驱动,并将结果显示到LCD上,实现了一个简单的气压计。 可以发现,DAVE APP的主要优点就是大大简化了外设的配置和初始化过程,使用户专注于用户代码的编写。同时DAVE也提供了基本的API手册,和简单示例代码,方便用户快速掌握。 不过这也需要用户能熟知外设的实际工作过程。比如在bmp180的驱动移植中,还是需要用户对I2C的通信过程有比较深入的了解,否则移植还是会有一定困难的。