[原创] 【LPC54100】Lis3dh+Gnuplot+Mysql

lyzhangxiang   2015-5-9 17:51 楼主
     哎,带小宝宝太忙着,有点对不住管理员nmg。。今天趁着姑娘睡了,赶紧起来搞一下。
有些事情要做好还是要看当前的情况/环境了,这次基于lpc54100的6lowpan网络感觉有点完成不了了,事情蛮多的,需要做的底层的事情也是蛮多的,只能做一点算一点咯,关于之前的计划有打算搞定一个通用的传感器framework,基本上算是events-driven那一套东西了,不过得让api接口更加智能化一些,需要好好考虑一下framework的事情了。

     恩,要有传感器,硬件基本上ok了,选择一个mems传感器会更加符合时代的主题,大家都在玩嘛,四轴什么的。选一个手机用的传感器,st的算是出货量蛮大的IC了,lis3dh应该有蛮多熟悉这颗ic的,好像大家会喜欢mpu6050这种吧,不晓得为啥,怎么不自己选一个自己喜欢的呢。LIS3DH官方提供了linux的驱动,基本上是给android手机用的嘛,得要有的。去年看过一款st的9轴传感器,蛮不错的,可惜好像还是样片,有个惯导定位的项目也因为这个没有落地。

     期间搞过一些关于mems算法调试的通用平台,基本上linux下面的,个人基本上工作上linux桌面会选ubuntu为主吧。简单说说调试平台,基本上是gnuplot+mysql+p2p无线传输+mems节点,软件上基本上是《file操作 + mysql 管理 + gnuplot脚本 + 串口数据流》。



一些mysql的操作和测试

  1. 1、安装mysql
  2.     sudo apt-get install mysql-server-5.5

  3. 2、登陆mysql
  4.     mysql -u root -p

  5. 3、创建accDB
  6.     create database accDB;
  7.     show databases;
  8.     drop database accDB;
  9.     show databases;

  10. 4、创建accRow数据表
  11.     create table accRow(acc_time datetime,acc_x int,acc_y int,acc_z int);

  12. 5、插入测试数据
  13.     use accRow
  14.     insert into accRow values(now(),1,1,1);



虽然时间比较紧,还是得慢慢来,东西要做好,论坛的事情也是要用心的哦,认真做事情你会感觉到还蛮开心的。

好了,来电图:

IMAG0876.jpg



IMAG0878.jpg



IMAG0880.jpg



IMAG0881.jpg



IMAG0883.jpg



IMAG0886.jpg    IMAG0882.jpg



IMAG0884.jpg



IMAG0885.jpg



哎,家里的电脑装起来,开发蛮爽了。

S24KYX~5.PNG



SHMX9M~N.PNG



一些配置:

  1. HAL_I2C_Init();
  2.     LIS3DH_GetWHO_AM_I(&dump);
  3.     DEBUGOUT("LIS3DH ID:%x\n", dump);
  4.    
  5.      /* Set ODR (turn ON device) */
  6.     response = LIS3DH_SetODR(LIS3DH_ODR_400Hz);
  7.     if (response == 1) {
  8.         DEBUGOUT("SET_ODR_OK\r\n");
  9.     }
  10.    
  11.     /* Set PowerMode */
  12.     response = LIS3DH_SetMode(LIS3DH_NORMAL);
  13.     if (response == 1) {
  14.         DEBUGOUT("SET_MODE_OK\r\n");
  15.     }
  16.    
  17.     /* Set Fullscale */
  18.     response = LIS3DH_SetFullScale(LIS3DH_FULLSCALE_2);
  19.     if (response == 1) {
  20.         DEBUGOUT("SET_FULLSCALE_OK\r\n");
  21.         
  22.     }
  23.    
  24.     /* Set axis Enable */
  25.     response = LIS3DH_SetAxis(LIS3DH_X_ENABLE | LIS3DH_Y_ENABLE | LIS3DH_Z_ENABLE);
  26.     if (response == 1) {
  27.         DEBUGOUT("SET_AXIS_OK\r\n");
  28.     }



I2C初始化,采用的I2C1,大家换个口看看,我被坑到了,需要注意这个NXP驱动的写法,真是高级,用过这么多库,这玩意感触最深。

第一次使用st的感觉他的库蛮好的,后面用atmel的R21感觉他的库很不错,比st的好多了,水平也高不少,很类似linux下的东西。

如今用NXP的,感觉这玩意真心不错,比atmel的还给力,感觉这就是以后这种MCU厂家合并/并购的目的吧,以后这种外设库更加的合理丰富,更加具有可用性,因为各家的越来越多的人,优秀的开发人员共同开发统一的外设驱动库,当然NXP的也会是一个大趋势,ROM和periph这种



  1. /**
  2. * @brief  HAL_I2C_Init
  3. * @note   软件I2C配置函数
  4. * @param  None
  5. * @retval None
  6. */
  7. void HAL_I2C_Init(void)
  8. {
  9.     uint32_t memSize, *devMem;

  10.     Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 25, (IOCON_FUNC1 | IOCON_DIGITAL_EN));
  11.         Chip_IOCON_PinMuxSet(LPC_IOCON, 0, 26, (IOCON_FUNC1 | IOCON_DIGITAL_EN));
  12.    
  13.     Chip_Clock_EnablePeriphClock(LPC_I2CM_CLOCK);
  14.         Chip_SYSCON_PeriphReset(LPC_I2CM_RESET);
  15.    
  16.         /* Get needed size for driver context memory */
  17.         memSize = ROM_I2CM_GetMemSize();
  18.         if (memSize > sizeof(drvData)) {
  19.                 DEBUGOUT("Can't allocate memory for I2C driver context\r\n");
  20.         }
  21.     /* Or just use malloc(memSize) */
  22.         devMem              = drvData;       
  23.    
  24.         /* Initialize driver */
  25.         i2cmInit.pUserData  = NULL;
  26.         i2cmInit.base       = (uint32_t) LPC_I2C_PORT;
  27.         i2cmHandle          = ROM_I2CM_Init(devMem, &i2cmInit);
  28.     /* Error initializing I2C */
  29.         if (i2cmHandle == NULL) {
  30.                 DEBUGOUT("Error initializing ROM\r\n");
  31.         }
  32.    
  33.         /* Set I2C clock rate */
  34.         actualRate = ROM_I2CM_SetClockRate(i2cmHandle, Chip_Clock_GetAsyncSyscon_ClockRate(), I2C_BITRATE);
  35.         DEBUGOUT("Actual I2C master rate = %dHz\r\n", actualRate);
  36.    
  37. }



恩,就这样了,nmg不要催我了哦,有时间我就跟新一点,做事情认真的人,催也不行哦
  • IMAG0877.jpg
  • IMAG0879.jpg
电工

回复评论 (13)

这个写的有水平,好帖,顶一下,以后有机会还要像楼主多请教
水不撩不知深浅 人不拼怎知输赢
点赞  2015-5-10 06:14
对于我这种Linux小白来说,初次接触NXP这样的库挺*疼的,有没有
水不撩不知深浅 人不拼怎知输赢
点赞  2015-5-10 06:16
咨询管理员如何删除不相关的点评,很多都是广告。。
电工
点赞  2015-5-10 10:08
楼主位的图片未上电的图中LIS3DH模块插反了。。

还好没上电。
电工
点赞  2015-5-10 10:08
高大上,数据库,linux都用上了,加油~~
HELLO_WATER
点赞  2015-5-10 15:04
引用: lyzhangxiang 发表于 2015-5-10 10:08
咨询管理员如何删除不相关的点评,很多都是广告。。

处理了 。:)
加油!在电子行业默默贡献自己的力量!:)
点赞  2015-5-10 17:32
引用: shinykongcn 发表于 2015-5-10 15:04
高大上,数据库,linux都用上了,加油~~

linux更自由些,开源的东西随便用

在windows下还得折腾蛮多的,首先要选择一个上位机开发的环境/语言,再来实现很多代码。

linux下直接gnuplot几行脚本就ok了,当然串口操作也easy,windows下面还得折腾别人封装的类。。没意思
电工
点赞  2015-5-11 08:58
是记录变量值然后导出来用plot画样本的软件示波器吗? 本帖最后由 freebsder 于 2015-5-11 10:03 编辑
点赞  2015-5-11 10:01
引用: freebsder 发表于 2015-5-11 10:01
是记录变量值然后导出来用plot画样本的软件示波器吗?

是啊,lpc54100采集数据后按规定的协议(保证数据正确)实时发送到串口上,linux下跑一个串口流的监听程序,把数据按照示波器刷新数据的形式定期更新到文本中。

后面就是gnuplot脚本的事情了,从文本加载数据绘图。



第一个串口流的监听程序支持多种传入参数,实现不同的工作模式,支持一些mysql操作,用于保存历史数据,便于一些mems算法的研究和学习。
电工
点赞  2015-5-11 10:13


Freescale有个调电机的工具叫freemaster,不仅可以调电机也能当其他应用的虚拟示波器和虚拟仪表,有时间兄弟可以看看介绍。非侵入代码,移植到其他非fsl的mcu只需要把串口驱动改一下,很强大,支持activex直接用html做虚拟仪表和报表,支持原始数据的保存,支持matlab访问,接口很多还可以直接用仿真器接口。
点赞  2015-5-11 10:23
引用: freebsder 发表于 2015-5-11 10:23
Freescale有个调电机的工具叫freemaster,不仅可以调电机也能当其他应用的虚拟示波器和虚拟仪表,有时间兄弟可以看看介绍。非侵入代码,移植到其他非fsl的mcu只需要把串口驱动改一下,很强大,支持activex直接用html做虚拟仪表和报表,支持原始数据的保存,支持matlab访问,接口很多还可以直接用仿真器接口。

freemaster这个名字蛮熟悉的,没具体细看过是干啥的。。
fsl的代码感觉很乱,搞个什么PE。之前评估过他家的M0+,没有继续在用了,搞了一版后就丢了。。



看你的介绍确实很强大,感觉labview不错。。大学的时候做过一些USB数据采集卡,编过一些VI,感觉上手很简单




电工
点赞  2015-5-11 10:35


是挺强大,操作挺简单,mcu层要动的代码也很少(就能支持这样强大的功能,还是很佩服fsl的设计能力),反正现在都是一家了,周末本来想把它移植到Lpc54100当作业交,只是懒了一下。
Fsl可惜了,做的比nxp好,它的an能学到很多哪怕和它的器件无关的知识,而nxp的差太多。
点赞  2015-5-11 10:41
引用: freebsder 发表于 2015-5-11 10:41
是挺强大,操作挺简单,mcu层要动的代码也很少(就能支持这样强大的功能,还是很佩服fsl的设计能力),反正现在都是一家了,周末本来想把它移植到Lpc54100当作业交,只是懒了一下。
Fsl可惜了,做的比nxp好,它的an能学到很多哪怕和它的器件无关的知识,而nxp的差太多。

是啊 之前对fsl印象很好
写an的工程师估计都是老牌的,做事情很用心

估计还是arm对市场冲击太大了,fsl的ppc,coldfile。。哎。

记得当初fsl开始做m4核的时候,我还发过说说。。



旧时王谢堂前燕,飞入寻常百姓家




电工
点赞  2015-5-11 10:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复