李东阳
摘 要:介绍了PS/2接口的图书信息阅读器的无线收发模块的设计,实现了阅读器终端的无线化。数据发送模块以51芯片为主控,控制2.4G无线芯片nRF24L01收发数据,并通过PS/2接口与阅读器或上位机进行数据传输。程序部分主要涉及对nRF24L01芯片的控制,及PS/2接口数据的解码和发送。
关键词:图书信息阅读器;PS/2;nRF24L01芯片;51单片机,2.4G
1 信息读取设备简介
图书信息阅读器可分为一维条码阅读器、二维条码阅读器和Rfid射频阅读器。在图书馆中常见的信息阅读器是PS/2接口的手持式一维条码枪,该设备在日常生活中应用十分广泛,例如图书管理、超市商品结算、物流快递查询、药品管理、生产过程控制等。一维条码凭借输入速度快、成本低等优势在条码应用领域依然占据霸主地位。在目前的很多高校图书馆中的图书借阅系统,依然使用一维条码来标记每本图书。随着用条形码符号表示更多资讯的要求与日俱增,二维条码凭借自身的“资料储存量大”、“资讯随着产品走”、“可以传真影印”、“错误纠正能力高”等优势得到了迅速发展[1]。只有少数高校采用先进的Rfid技术。
信息阅读器有一个功能就是可以设置信息阅读完毕后在输出的数据中包含一个回车,这在实际应用中十分重要,一方面为上位机的软件提供了人性化的功能,避免工作人员在扫描数据后手动敲击键盘的回车,减轻了工作量;另一方面,为本模块提供了一个判断数据是否传送完毕的标志,当收到回车键时表示数据已经传送完毕可以无线发送了。
2 数据发送模块介绍
数据发送模块主要的功能就是把有线传输的数据转为无线传输从而达到方便用户使用的目的,为此该模块设计为手持式,并采用电池供电。减小整个发送模块的功耗也是需要考虑的重要因素之一。该模块主要使用两块芯片,其中一块是3V的低功耗高速51芯片,该芯片用作主控芯片负责解析PS/2接口数据和控制无线芯片,为了节省51芯片有限的硬件资源,在解析阅读器传送过来的PS/2数据后只保存通码到数组丢弃断码。
另一块是北欧集成电路公司(Nordic)推出的无线收发芯片nRF24L01。该芯片在待机情况下的电流为22uA,掉电模式下为900nA,功耗很小很适合设计需要,工作在2.4G赫兹ISM免许可证频段,在室内传输距离可达30~40米。该芯片可以在Enhanced ShockBurst模式下发送数据,在这种模式下,MCU低速发送数据到先入先出堆栈,然后以1Mbps高速发射,减少数据在空中滞留时间,提高了抗干扰性,减小了平均工作电流,从而达到节能目的。发送数据时,芯片自动加入字头和CRC校验码,接收数据时自动去除字头和校验码,减轻了编写程序工作量[2]。
在进行硬件连接时,nRF24L01和51的外围天线、晶振和复位等电路限于篇幅不在讨论。PS/2接口和51芯片连接时,PS/2接口的时钟线接在主控芯片的P3.3外部中断1引脚,数据线连接P3.4引脚,由于PS/2接口是集电极开路,连接时需要接上拉电阻。nRF24L01主要通过CE、CSN、SCK、MOSI和MISO这五个引脚和51主控芯片相连,硬件连接十分简单。
2.1 解码信息阅读器通过PS/2接口传送来的数据
如果对PS/2数据进行解码,必须对PS/2协议有所了解,下面对PS/2协议进行简单介绍。PS/2协议是一种双向同步串行协议,接口只使用数据线和时钟线两条线实现了主机与从设备的通讯,其中数据线和时钟线都是集电极开路。通讯时总是从设备产生时钟信号,主机享有通讯控制权,可以在任何时候通过拉低时钟线来禁止从设备信号的传输。PS/2数据以帧为单位传送,每帧包括11-12位数据,数据格式如下:第一位为起始位总是零,后面紧跟8个数据位,低位在前高位在后,第十位是奇偶校验位,第十一位为停止位,第十二位是应答位,仅在主机到从设备的通讯中会出现。从设备在时钟位为高电平时准备好数据位,主机在时钟的下降沿读取数据[3]。
对PS/2信息阅读器传送的数据进行解析,流程图如下:
程序部分采用C语言编写,由于时钟线接在主控芯片的P3.3外部中断1引脚,可在程序里设置电平下降沿触发,即IT1=1[4],下面给出了在中断里进行解码的代码。
void init1()interrupt 2 using 0
{
EX1=0; //关闭中断
if ((Num > 0) && (Num < 9))
{
//键盘数据是由低到高故右移一位
Key_V = Key_V >> 1;
if (Key_Data) Key_V = Key_V|0x80;
}
Num++;
while (!Key_CLK);
if (Num > 10)
{
Num = 0;
BF = 1; //表示解码完成
keybuf=Key_V;
Key_V =0;
}
EX1=1; //开中断
}
2.2 整个发送数据的流程
A、主控芯片解码图书条码阅读通过PS/2接口传过来的数据。B、剔除PS/2数据中的以F0开头的断码,并存接收到的通码到数组中。C、判断是否是回车的通码0x5A,如果是就表示PS/2数据已经传输完毕可以无线发送了。D、把负责接收数的nRF24L01据芯片的地址和读取的PS/2數据按照时序写入nRF24L01的先入先出堆栈。E、写CONFIG寄存器,配置数据传输率、射频通道和自动应答等信息,等待发射。F、把nRF24L01的CE引脚置为高电平并延时至少10us,数据开始高速发射。G、发射完成,nRF24L01进入待机模式。
3 数据接收模块设计
接收模块一般和电脑相连,整个模块的供电可由电脑的USB接口提供,不需要考虑节能细节。USB口的电压为5V,无法直接使用,做简单降压处理即可。由于无法确定何时收到数据包,因此需要保持nRF24L01芯片为监视工作模式。
3.1 接收并发送数据时的流程
A、设置nRF24L01与发送模块相同的发送地址、数据宽度和射频通道,并开启自動应答。B、把nRF24L01的CE引脚置为高电平并延时至少10us。C、130us后,nRF24L01 进入监视模式,开始等待数据包的到来。D、接收到数据包后自动移除字头、CRC校验,并把RX_DR置位通知主控读取数据。E、读取数据后清除STATUS寄存器,保存数据到数组。F、判断回车键的通码是否到来,如果到来表示这一次无线通讯已经完成。G、通过PS/2向上位机传送保存在数组中的数据。
在数据发送过程中,51模拟从机向上位机发送PS/2数据,流程如下:
C语言程序如下:
void PS2SendChar(unsigned char dat)
{
bit ParityBit; unsigned char i;
ACC=dat;
CY=P;
//计算出奇校验位
ParityBit=CY?0x00:0x80;
CLSSIGNAL();
CT_KB=0;
EX0=0; //关闭中断
H_DATA=0;Delay10us();
H_CLK=1;Delay10us();
H_CLK=0;Delay30us();
for(i=0;i<8;i++)//发送8位数据
{
if(dat&0x01==0x01)
{H_DATA=1;Delay10us();}
else {H_DATA=0;Delay10us();}
dat>>=1;
H_CLK=1;Delay10us();
H_CLK=0;Delay30us();
}
//发送校验位
H_DATA=ParityBit;Delay10us();
H_CLK=1;Delay10us();
H_CLK=0;
Delay30us();
H_DATA=1;Delay10us();
//发送停止位
H_CLK=1;Delay10us();
H_CLK=0;Delay30us();
IE0=0;
//发送完毕,打开接收中断
EX0=1;
H_CLK=1;
H_DATA=1;
CT_KB=ON;
Delay30us();
}
4 结束语
本文介绍了2.4G无线图书信息读取器收发模块的研究和实现过程,其中涉及到51芯片对PS/2数据的解析,2.4G无线数据的收发等基础知识。nRF24L01体积小、功耗低,外围电路的设计简单,被应用广泛于无线遥控,无线电脑外设、遥控等领域。此无线收发模块体积小便于携带,可以广泛应用于图书馆和超市等领域的手持信息扫描终端,有一定的实用性。
[参考文献]
[1]二维码[EB/OL].http://baike.baidu.com/view/886309.htm?fromId=132241.
[2]NRF24L01数据手册Nordic.
[3]PS/2 Technical Reference Adam Chapweske,2002.
[4]张毅刚.MCS-51单片机原理及应用[M].哈尔滨工业大学出版社,2004.