ZigBee开发中遇到的问题及解决方案

在学习zigbee的过程中,最重要的问题就是一开始对于一些陌生名词的恐惧,学习新东西的过程中总会涉及到一些专业性比较强的东西,由于之前没有接触过,所以到导致一遇到陌生的名次就会很害怕,这里总结的经验就是多看几遍就好了,任何东西都是可以学会的,尤其是学理的,应该秉承的世界上所有问题都是可以解决的,只要多学学,什么都可以做出来。需要涉及到的知识以及zigbee工作过程上面已经基本都涉及到了,但是真正在开发项目的过程中还是遇到了很多很多的问题,一般都是上网先搜索,看看有没有前人栽下的树,大部分情况还是能找到一些相关信息的,但是如果没有想解决的问题的话就只能多看书自己解决了。上面的知识我认为最重要的就是zigbe的三个组件在组网前和组网过程中的行为,这个在之后解决问题会有很大帮助,而且其实这个东西就是zigbee协议的核心。

这里谈到的都是cc2530芯片的开发,所以用的也是ti的ZStack协议栈,不用协议栈也可以组网通信,只是人家ti团队的精锐做出来的东西肯定要比一个刚入门的新手要稳定和好用的多。

个人觉得一开始就还是先学芯片再学协议栈,但是芯片也不用怎么深学,搞清楚io操作就行,毕竟单片机的精髓就是io和外设嘛,所以先了解一下这两个就可以看协议栈了。那么如何学习协议栈呢?我的学习过程是之直接看人家的协议栈程序,然后在网上看看一些关于协议栈结构的文章,没有写的非常全面的,但是一点点看,多看看,边看边对程序做注释,而且人家本身也有一些英文注释,这样就慢慢入门了。至于看哪里,怎么看,后面详细谈。

另外推荐一个视频教程,是一个叫老达的人录制的,淘宝也有卖的,这个人是一线开发工程师,讲的还是比较具体和详细的,基本的东西讲的很好,但是深入的开发肯定不会给你讲。

    下面就按照步骤说一下学习zigbee的过程。

首先介绍CC2530芯片的一些内容,CC2530前面说过是有8051增强内核的,所以其实就是一个单片机,中断、io输入输出、还有其他一些外设都和普通单片机完全一个模式,这个找本书看看学会各个外设的操作就行,这个芯片唯一和一般单片机不同的地方就是有一个射频外设,对这个外设操作就可以发射或者接收无线信号,所以其实不用动很多关于无线通信的知识,只要会操作这个射频外设就可以进行开发,就像掌握了串口外设就可以进行两个单片机之间的通信交流了,这个只是把有线换成了无线,把串口换成了射频。下给出一些我在开发过程中用到的一些外设例子,有程序,都是改了很多遍可以直接拿来用的。这里如果单片机玩的非常溜的可以不全看,就看看io操作就行,毕竟各类协议都是一样的嘛。当然不同单片机操作时可能会出问题,所以遇到问题再来对比看也是可以的。

1、关于ADC的一些配置

CC2530内置一个12位的ADC,有8个独立的可配置的通道。1个参考电压发生器。

可选抽取率;可接受单端或者差分信号;参考电压可选为内部单端、外部单端 、外部差分或AVDD5(注意外部的参考电压最高不能超过3.3V);支持中断;支持DMA;支持电池测量。

ADC引脚连接在端口0上,ADC的输入引脚为AIN0~AIN7,分别对应P0_0~P0_7。

例:从P0_7输入,采用AVDD5为参考电压

P0DIR &= 0x7f;    //p0_7配置为输入

ADCIF = 0;    //清标志位

ADCH &= 0x00; //清除ADC数据寄存器

ADCL &= 0x00;

ADCCFG |= 0x80;      //P0_7端口模拟IO使能

ADCCON3 = 0xB7;      //单次转换,配置参考电压为电源电压,对P0_7进行采样,抽取率为512

//ADCCON1 = 0x30;    //停止A/D

//ADCCON1 |= 0x40;   //启动A/D

while(!(ADCCON1&0x80));//等待AD转换完成

AP_buf[0] = ADCH;

AP_buf[1] = ADCL;

return(AP_buf);

    注意:这里有个很坑的地方,虽然CC2530内置的是12位ADC但是其实ADCH+ADCL共14位,但是ADCH最高位是符号位,所以用不了,低三位也是不用的,而且数据位是右对齐的,也就是说其实精度最高是12位,而且采用如下规则:

10位—>ADCH的6~0 + ADCL的7~5

12位—>ADCH的6~0 + ADCL的7~3


你可能感兴趣的:(ZigBee开发)