4454|2

1282

帖子

10

TA的资源

五彩晶圆(初级)

楼主
 

无线天然气报警系统之软件编程实现 [复制链接]

无线天然气报警系统之软件编程实现

                                                                                                           by fxw451

       对于一个初学者来说,TI的例程是这几个芯片公司所不能做到的,写的很详细。据我所知TI出的几款芯片(DSP2812,ARM-M3,以及430等)都会有很详细的例程,和丰富的库文件,这对于开发人员来说是个很好的选择。我起初接触的是DSP2812,到前段时间的LM3S8962,以及现在的EZ340-RF2500,它们几个都有丰富的例程。只要你参考手册,按照手册上的说明修改下例程就可以成为你的东西。

       说了这么多废话,其实就是为了说说我作为一个初学者,一个刚刚接触EZ340-RF2500不到一个月的初学者,我是怎么做这个天然气报警系统的。不过肯定有许多做的不对的地方,时间按太短了,要想更深的理解,还需要长时间的学习。

       第一步:首先要看手册,TI给出了 A_Wireless_Sensor_Monitor_Using_the_eZ430-RF2500_(SLAA378), cc2500,eZ430-RF2500_User Guide_SLAU227, msp430f2274,和MSP430x2xx_Family_User's_Guide_(Rev._D)_slau144d。这几个只有几个是要你去研读的,有cc2500和MSP430x2xx_Family_User's_Guide_(Rev._D)_slau144d两个就行,其实我MSP430x2xx_Family_User's_Guide我根本就没看,有单片机基础的这个建议可以不看,我就看cc2500,中文英文(中文翻译的真不咋地,不过我在论坛翻译的一个基础的东西也不咋地,在这里知道学一门外语有多重要了!!)一起看,这里面有很多的专业术语,我根本就看不懂,我只好靠baidu和goole了解了个差不多。记得看完第一遍后感觉什么都不会,然后就去网上搜搜关于这方面的问题,就又下了Packet Transmission Basics(swra109c),RSSI Interpretation and Timing(swra114d)和ERRATA NOTES(swrz002),这三个就是对CC2500里重要知识的详细介绍,有兴趣的学员还是要多看看。

       然后反回头来看CC2500手册后就有点眉目,如果深入研究还有一段时间。下面就分析下我的程序,我的程序其实就是TI给的demo,我在里面修改了下。 第二步:这个例程其实包含两个部分Access Point和End Device,在这里要注意了,下载程序一定要记得这两个是面对不同的模块的,图一是下载到那个有电池的模块上的,图二是下载到带有串口的模块上的。

图(一)

图(二)

 

          然后,就是里面的程序,关于430的程序ddllxxrr版主已经做了详细的介绍我这里就不说明了,有不会的可以问ddllxxrr,呵呵。
       第三步:这两个模块的主程序分别是demo_AP.c和demo_ED.c,我拿过程序来看了看,看到demo_ED.c的程序行数比较少,并且好多程序指令都在demo_AP.c里出现过,所以我首先分析了demo_ED.c的程序,如下
linkTo() 就是实现链接是否成功,就通过SMPL_SUCCESS != SMPL_Link(&linkID1)判断的。
int results[3];  //存放结果
    SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_SLEEP, "" ); // IOCTL_ACT_RADIO_SLEEP,还没睡醒
    __bis_SR_register(LPM3_bits+GIE);       // LPM3 with interrupts enabled 产生中断
SMPL_Ioctl( IOCTL_OBJ_RADIO, IOCTL_ACT_RADIO_AWAKE, "" ); // IOCTL_ACT_RADIO_AWAKE 中断之后就醒了,radio开始工作。
       共有三个变量要存储,我只分析一个
BSP_TOGGLE_LED2();  //触发led2
ADC10CTL1 = INCH_10 + ADC10DIV_4;       // Temp Sensor ADC10CLK/5 和Selects Channel 10
ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE + ADC10SR;   //这些就是一个430的配置的,建议找参考书
for( degC = 240; degC > 0; degC-- );    // delay to allow reference to settle等待时间
ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
__bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts enabled 中断
results[0] = ADC10MEM;    //将AD得到的数据给results[0]

temp = results[1];
    volt = (temp*25)/512;
    bj = results[2];
   
    msg[0] = degC&0xFF;
    msg[1] = (degC>>8)&0xFF;
    msg[2] = volt;
    msg[3] = bj;
将results里的数据给msg,因为其他函数调用的是msg,所以要赋值过去。
if (SMPL_SUCCESS == SMPL_Send(linkID1, msg, sizeof(msg)))   //发送数据触发一次
    {
      BSP_TOGGLE_LED2();
    }
void createRandomAddress() //产生地址,这个主要是应用到addr,你没插入一个无线模块他就随机给你产生一个地址,主无线模块的地址为HUB0,另一块随机产生一个0001,如果在插入一个会产生一个出0001外其他地址,主要是通过TI_getRandomIntegerFromVLO()获得的。
其实demo_ED.c就这么些内容,下面咱们来看下demo_AP.c
void TXString( char* string, int length );//发送数据,UCA0TXBUF = string[pointer]
void transmitData(int addr, signed char rssi,  char msg[MESSAGE_LENGTH] );//主要是赋值运算,将获得的数据赋给addrString和rssiString,第一个是确定地址的每个无线模块都有个地址,第二个是获得的能量,用来确定位置的,不过这个位置是在核心模块的rssiString半径上的点。不能具体到某个位置,只能具体到某个范围,如果是多个模块的话应该可以确定这个点
void transmitDataString(char addr[4],char rssi[3], char msg[MESSAGE_LENGTH]);//这个主要是发生数据的。发送数据格式为Node:XXXX,Temp:-XX.XC,Battery:X.XV,Strength:XXX%,RE:no,其中XXX的将被实时数据代替。下图有详细的说明;
static uint8_t sCB(linkID_t lid) //这个是检测插入的无线模块节点的
这四个是最重要的

图(三)

       第四步:将我做的天然气的一部分抓图分析给大家,不过还不完善。我是直接在eZ430-RF2500 Sensor Monitor这上面该的,将电压替换成天然气采集的数据。

 

       下面这个图四是原例程给的监视图,如图(四):

图(四)

      下面的图(五,六)是我给燃气后和没给燃气获得的结果一个是1.1V,一个是0.1V(应该转化成百分比就好了)

图(五)

图(六)

         这是我的硬件连接图如图(七),我发现我做东西真丑。

图(七)

         就写到这吧,有错误之处还请大家多提意见,我好及时修改,以免影响大家。

 

无线天然气报警系统之软件编程实现.pdf (148.69 KB, 下载次数: 58)

 

2011-3-22 晚               

 

最新回复

  详情 回复 发表于 2011-3-23 08:05
 
点赞 关注

回复
举报

1282

帖子

10

TA的资源

五彩晶圆(初级)

沙发
 
怎么看我编辑的内容都不好看!这还需要学习啊!!
 
 

回复

1万

帖子

16

TA的资源

版主

板凳
 

楼主写得不错顶下

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表