由于时间关系,没有做到麦克风电路,现在是用信号发生器产生的信号代替麦克风电路来模拟。当然,这样在调试的时候是比较好的,可以比较清楚的看到多少频率的信号能够比较好的传输。整体框图如下所示。
代码还是接上次的工作,把收发分开。先调接收,把static bool appDataInd(NWK_DataInd_t *ind)函数里面其余删除,替换成tcc_set_compare_value(&tcc_instance,CONF_PWM_CHANNEL,ind->data[0]),由于一次只发一个数据,因此就用收到的数组的第一个数作为PWM的占空比去调节PWM。测试方式是发送端连上串口助手,发hex00,10和ff,可以发现接收端的占空比会跟着改变,变化结果也正确。
然后调发射部分,这时adc就不用中断了,直接查询式,8bit转换,读取完毕够马上发送。最初测试采用电位器分压,给出AD的信号源,随着电位器的慢调,可以看到接收端的PWM波占空比随之改变。
最后测试AD端接信号发生器。由于AD使用单端输入(若使用麦克风电路,电压也均在0V以上,所以可以单端),信号发生器的电压设为0-1V,即Vpp 1V,offset0.5v。选取波形分别为sin,方波、三角波、测试。至于频率,是取不了很高的,前面通过每发送一次就翻转LED状态试过,发送速率也就是1秒100次左右,这也可能是例程中其他地方没调好的缘故,毕竟号称的数据率有256KBps呢。测试结果不是很理想。当信号在10Hz时,还行。基本能同步,不管是sin,方波还是三角波。先看最开始RC滤波没调好,出来还是阶梯波,哈哈,黄色是发送前波形,绿色是收到后波形。
把R变大,减小截止频率就好了,10Hz sin
10Hz 方波
10Hz 三角波
随着频率的升高,收到的波形就慢慢变形了,100Hz,都没啥像样的东西的说。先看20Hz sin,波形还行,相位差有点了
50Hz sin,已经不咋样了
100Hz sin 只能看到点趋势了。可能就是采样速率不够了
最后对试用做一点小结。首先atmel基础的API还是很好用的,尤其是callback模式的话,都写的很清晰,先config外设,定义callback函数,然后注册并使能callback函数,就可以用了。大部分入门的外设看看asf的quick start基本就能掌握,而不需要去关注寄存器设置什么的。
当然自己对于lwmesh了解的还不是很深入,因此实现的传输速度是不够的,用来做语音传输是不行的了。当然,zigbee的协议总体还是比较复杂的,用在点对点高速传输的时候,可能还真不够用。