基于CC110无线数据传输应用设计说明书 下载本文

单片机无线数据传输应用设计

图3-5 数码管显示电路

3.2 遥控器模块

遥控器硬件由CPU、无线模块和按键组成,用来控制主板的LED。遥控器采用电池供电。本设计共有四个按键,每个按键分别接到单片机的I/O口,利用单片机I/O口读取的电平高低来判断是否有键按下。对按键的处理的时候涉及到一个重要的过程,就是按键的去抖动,这里说的抖动时机械的抖动,是当按键在未按到的临界区产生的电平不稳定正常现象。目前的技术有硬件去抖动和软件去抖动。硬件区抖动就是用部分电路对抖动部分加之处理,软件去抖动不是去掉抖动,是避开抖动部分的时间,等按键稳定了再对其处理。电路图如附录3所示。

在遥控器模块中,CPU控制无线模块发送数据,原理与上述接受数据类似,在此不重述。

3.3 电源模块

电路所需的电源主要是+5V电源,原理图如图3-6所示。

图3-6电源原理图

其中我们采用78L05稳压块来产生稳定的5V电压,电容的主要作用是滤除直流电压中的交流信号,使得电路能够输出稳定的直流电压。78L05具有:三端集成稳压电源内部由基准电压回路、恒流源、过流保护、过压保护和短路保护回路等8部分组成,具有低功耗,高效率,纹波系数小,输出电压稳定等优点。

4 软件设计

4.1 初始化配置

在使用CC1100做无线通信时,首先需要对它做一系列的配置,这样才能让CC1100正常工作。要开始这项配置,就必须调用一个头文件CC1100.h,而这个头文件是在开发文具中无法找到的,因而得自己定义它,这个头文件的作用是将一些特殊的操

作码、指令或者是特殊的表达式等用比较容易记的助记符来表示,这样既提高了程

盐城工学院本科生毕业设计说明书(2011)

序的直观性也提高了可读性。在整个初始化定义中,可以看到几乎包含了CC1100所有的寄存器,这样做的目的是方便对CC1100寄存器进行配置,并实现需要的功能。在头文件的定义结束处有一些外部函数定义,这部分的功能是告诉现在正在使用的文件这部分函数是已经存在的函数,在其他文件中可以直接调用这部分函数完成相应的功能,而不需要再次定义。完成了将实际地址转换成助记符的形式,就可以对这一部分寄存器进行数据输入操作。为此,在CC1100程序源文件中加入了一个初始化数据定义。

完成对整个程序的初始化定义,接下来就是对CC1100进行初始化配置。CPU利用SPI接口读、写CC1100的寄存器。配置函数主要是调用halSpiWriteReg()函数对CC1100的每个状态寄存器进行配置。而halSpiWriteReg()函数的作用是通过SPI端口对CC1100的寄存器进行单一写,单片机通过SPI写寄存器的时候,必须先写寄存器的地址,然后再往该地址中写入数据,最后CC1100根据寄存器中所存储的数据执行相应的操作。

程序执行过程:首先程序使Csn位为低,使CC1100进入SPI模式,然后调用SPI输入函数往CC1100中写入地址信息,之后再次调用SPI写操作往该地址的寄存器中写入数据,最后使Csn位为高,关闭CC1100的SPI模式。

程序清单4-1:

void halSpiWriteBurstReg(unsigned char addr,unsigned char *buffer,unsigned char count)

unsigned char i,temp;

temp = addr / WRITE_BURST;

CS_CC1100 = 0;

while (GDO0);

SpiReadWrite(temp);

for (i=0;i<count;i++)

{SpiReadWrite(buffer[i]); }

CS_CC1100 = 1;

有程序知,通过设置CC1100中的一个连续写寄存器后,就可以通过SPI端口对CC1100进行连续写入。接下来的函数是对CC1100进行命令输入,在配置CC1100的命令寄存器时,只需要输入一个字节的命令即可完成对CC1100的一个寄存器的配置。 程序清单4-2:

void halSpiStrobe(unsigned char strobe)

CS_CC1100 = 0;

while (GDO0);

SpiReadWrite(strobe); //写入命令

单片机无线数据传输应用设计

CS_CC1100 = 1;

CC1100内部的寄存器上电后需进行初始化或是重新配置,如设定其频率、通道、通信速率等。这些寄存器配置只需要从SPI口输入即可。程序见附录。

4.2 收发数据

CC1100芯片接收时,天线接收的射频信号经过低噪声放大器和I/Q下变频处理,混合I/Q信号再经过滤波、放大、A/D变换和自动增益控制、数字调解和扩频,最终恢复出传输的正确数据,发射时,要发送的数据先被送入发送缓存器,根据相应的协议标准,经过扩频和A/D变换后,经过低通滤波和上变频的混频后的射频信号最终被调制到需要的频段,并经放大后送到天线发射出去。

CC1100具有3种状态:IDEL(待机)、RX(接收)、TX(发送)。

状态之间的转换如图4-1 所示。

图4-1 CC1100状态转换图

作为微控制器的C8051F310单片机除了完成基本的芯片初始化工作、数据的发送和接收之外,还需要根据需要在CC1100的引脚产生中断,并由所编写的中断管理程序进行状态检测以及切换,并执行相应的中断操作,使得无线通信可以在发射和接收以及待机之间转换。

CC1100发送数据,首先从SPI口写入要发送数据的字节数,然后写入想要发送的数据,最后再写入发送使能命令,CCll00便开始发送数据。当检测到GD02产生上个高低电平的脉冲后,即发送成功。如果在一定时问内,GD02上没有任何动作,表示发送失败。发送完成之后,我们就把CC1100发送缓冲区的数据清除掉。程序见附录。

CC1100接收数据,首先让CC1100进入接收状态,如果在设定的时间内我们收到了一组数据,GDO2上面就可以检测到一个高低电平的脉冲。此时,读出CC1100接收数据缓冲的第1个字节的数据,这个数据就是现在CC1100

接收到的数据长度。如果

盐城工学院本科生毕业设计说明书(2011)

这个长度是想要接收数据的长度,就可以开始读出CC1100接收数据缓冲区里所有的数据了。最后再把CC1100的两个状态寄存器谈出(RSSI和LQI),一个状态寄存器为接收信号强度指示寄存器,另一个为链接质量寄存器。此时可以判断CRC校检有没有通过,即LQI寄存器的最高位是否为l,如果为1则CRC校检通过,否则表示接收数据出错。程序见附录。

4.3 数码管扫描

主板是在定时器0中断中扫描数码管的。扫描程序用开关语句,将tt值与case后面的值进行比较,匹配就执行其后的语句,即写入要显示的数据。当定时器每次定时中断产生时,CPU都会扫描一位数码管,并显示相应数值,直到扫到最后一位后返回第一位扫描。

程序清单4-3:

void Timer0_IR(void) interrupt 3

static unsigned char WM = 0;

p1 = 0;

SelWM(WM);

P1 = SegmentCode[DisplayBuf[WM]]; //数码管显示

if(++WM == 6)

WM = 0;

4.4 PWM功能

CPU要产生音乐,则要利用CPU的PWM功能产生一定频率的脉冲,然后可以产生不同频率的声音,再加上一定的节奏就成了好听的音乐。首先打开PWM功能,并初始化其时钟和端口。这里PWM时钟是根据定时器0的溢出率提供的。然后根据每一个音符的频率算出PWM的时钟提供定时器的初始值,这样就可以产生一定频率的脉冲,从而产生一定频率的音乐。

发出音符声音也用开关语句,将m值与case后面的值进行比较,匹配就执行其后的语句,即发出不同的声音。PWM初始化见程序清单4-4。

程序清单4-4:

void PWMInit(void)

PCA0CN = 0X40; //允许PCA计数定时器工作、

PCA0MD = 0X04;

PCA0CPM1 = 0X42; //允许PCA比较功能,8位PWM允许

PCA0CPL1 = 0X80;

PCA0CPH1 = 0X80; //占空比为50%