基于ATmegal6的GPRS数据终端设计

分享到:

  0 引 言

  目前,在由GPRS承载业务支持的标准化网络协议的基础上,可提供点对点无连接型网络业务(PTP—CLNS)、点对点面向连接的数据业务(PTP- CONS)和点对多点业务(PTM),还能支持用户终端业务、补充业务、GSM短消息业务和各种GPRS电信业务。GPRS可提供Internet、多媒体、电子商务等业务,可应用于运输业、金融、证券、商业和公共安全业;PTM业务支持股市动态、天气预报、交通信息等实时发布;另外,还能提供种类繁多、功能强大的以GPRS承载业务为基础的网络应用业务和基于WAP的各种应用。其中,GPRS的数据业务在行业应用中越来越广泛。该业务已被应用于远程抄表、电力系统远程监控、交通远程监控、车辆监控和GPS导航等诸多方面。

  在GPRS数据业务的行业应用中,数据终端是最基本的设备。目前的数据终端具有智能化和可扩展性不断增强的发展趋势,性能越来越强大,接口越来越丰富,但成本一直居高不下。本文介绍一种以基于AVR单片机ATmegal6和Motorola G20模块的低成本GPRS数据终端的设计。

  l 终端的硬件设计

  终端由ATmegal6和G20模块及一些外围器件组成,系统的硬件结构如图1所示。ATmega16具有1个功能完整的异步串行通信接口(UART),在直流5V供电时,其I/O操作电压范围约为O~5V;G20模块提供一个用于接收控制命令和传输数据的异步串行通信接口,在直流3.3V供电时,其 I/O操作电压范围为0~3.3 V,因此,可以将ATmegal6串行接口经电平转换电路转接后与G20模块的串行口相连,进行异步串行数据交换。终端采用一块16×2字符型LCD显示 GPRS网络连接及数据传输状况信息。ATmegal6和LCD采用直流5 V供电,5 V电源经过由低压差线性稳压集成电路LM1117—3.3组成的稳压电路将电压转换成3.3 V后给G20模块供电。

  1.1 ATmegal6与G20模块的硬件接口

  由于ATmegal6和G20模块的I/O操作电压范围不相同,所以两者的串行口之间需经过电平转换才能确保稳定通信,其电平转换电路如图2所示。

  这里采用光电耦合器件TLP521进行5 V和3.3 V之间的电平转换。ATmegal6的I/O驱动能力较强(最大输出40 mA电流),可以直接驱动TLP521。G20模块的I/O驱动能力较弱,需加一级驱动缓冲器才能驱动TLP521,这里使用7406反相驱动缓冲器。

  1.2 ATmegal6与LCD的硬件接口

  系统中采用基于HD44780液晶控制芯片的16×2字符型LCD,该器件内置了字符产生器,能显示192个常用字符(包括阿拉伯数字和大小写英文字母) 和16个用户自定义字符,它与ATmegal6的接口如图3所示。HD44780的数据总线DB7~DB0与ATmegal6的PA7~PA0相接,RS、R/W和EN分别与单片机的PD3、PD4和PD5相连。利用ATmega16的I/O口控制LCD进行指令和数据输入,正确地显示出经纬度数据。

  2 ATmega16与G20模块的接口程序设计

  利用GPRS网络进行数据传输一般有多种组网方案,这里以其中一种方案进行说明,其他方案的数据终端实现方式类似。该方案采用数据中心公网固定IP,由监测点直接向中心发起连接。

  G20模块自身内嵌了TCP/IP和UDP/IP协议栈,大大简化了接口程序的编写。G20模块串口通信默认在57 600 b/s的速率下进行,数据格式为:8位数据位、1位停止位、无奇偶校验和硬件流控制。

  G20模块只能接受由ASCII字符代码组成的标准格式的AT指令。根据Developer′S Guide-Motorola G20 AT Commands所讲述的内容,一行G20模块的AT指令可以包含一条或者多条命令,这些命令必须由分隔符相隔,每个AT指令行不得超过140个字符。 G20模块具体的AT命令行结构如图4所示。

  每个AT命令行均以字符串“AT”为前缀,以回车符“<CR>”为后缀。命令行中各指令之间的分隔符可以为分号“;”或者空格。命令行中的英文字母可以是大写格式,也可以是小写格式。

  每当G20模块接收到指令时都会输出相关的响应信息,以显示指令的执行结果。响应信息的数据格式如图5所示。响应信息由3部分组成:前缀、响应代码和后缀。其中,前缀和后缀一样,均为回车和换行符,即“<CR><LF>”;不同指令在不同情况下的响应代码也不一样。

  在实际应用中,可以通过程序控制ATmegal6由其异步串行口按照既定的通信速率、数据格式和指令形式向G20模块发出控制指令,然后监视G20模块的响应信息,根据响应信息判断命令的执行结果,进而控制G20模块进行远程无线数据发送。利用G20模块实现GPRS数据发送一般要按照以下控制步骤进行 (这里使用的是UDP协议):

  (1)通过指令“at+mipcall=<Operation>[<APN>,[<User name>,<Password>-]]”建立一个GPRS无线链接,如“at+mipcall=1,cmnet”。在这里,“cmnet”是中国移动的APN名称。其中<Operation>可为0或1,0代表断开连接,1代表连接。[<APN>,[<User—name>,<Password>]]是可选项,无需时省去。如果链接建立成功,G20模块将会返回本机的IP地址,如 “<CR><LF>0K<CR><LF><CR><LF>+mipcall:10.103.201.135<CR><LF>”,此时本机在移动内网的IP地址为:10.103.201.135。如果链接不成功,G20模块将会返回错误信息 “<CR><LF>ERROR<CR><LF>”。

  (2)通过指令“at+mipopen=<Socket ID>,<Source Port>,<"Destination IP">,<DestinationPort2>,<Protocol2>”打开一个端口(Socket),如 “at+mipopen=l,2000,“219.222.73.240”,6800,1”。其中,<Socket ID2>是本地端口号,G20模块一共可以打开4个端口,端口序号分别是1~4;<Source Port>是G20模块本机的端口号,其数值可以是0~65 535;<“Destination IP”>是目标IP地址,可以是直接连接到Internet公网的某台PC的IP地址。<DestinationPort>是目标的端口号,其数值可以是0~65535。<Protocol>是协议栈类型,其数值可以为0或1,0代表是TCP协议栈,1代表UDP协议栈;如果端口打开成功将返回 “<CR><LF>OK<CR><LF><CR><LF>+MIPOPEN:<Socket ID>,<State><CR><LF>”,如 “<CR><LF>OK<CR><LF><CR><LF>+MIPOPEN:1,1<CR><LF>”。如果端口打开不成功,将会返回错误信息“<CR><LF>ERROR<CR><LF>”。

  (3)通过指令“at+mipsend=<Socket ID>,<Data>”将需要发送的数据压入G20模块的发送堆栈。如“at+mipsend=1,4142434445”。这里的& lt;Socket ID>是前面已经打开的端口序号,<Data>是所要发送的数据,数据格式必须是用十六进制表示的数据(数值或者字符)的双字节 ASCII值。如要发送的数据为“ABCDE”(A、B、C、D和E的ASCII数值分别为0x41,0x42,0x43,0x44和0x45),则要将 “4142434445”作为<Data>压入发送堆栈。指令操作成功时,G20模块返回信息 “<CR><LF>+MIPSEND:<Socket ID>,<Free Size><CR><LF><CR><LF>OK<CR><LF>”,如 “<CR><LF>+MIPSEND:1,1367<CR><LF><CR><LF>OK<CR><LF>”,其中<Socket ID>是端口序号,<Free Size>是指堆栈中的剩余空间,其数值可为O~1372。如操作不成功,G20模块将会返回错误信息 “<CR><LF>ERROR<CR><LF>”。

  (4)通过指令“at+mippush=<Socket ID>[,<“Destination IP”>,<Destination Port>]”将特定序号发送堆栈中的数据出栈,如“at+mippush=1”执行这条指令之后,堆栈中的数据就被发送出去了。这里所说的堆栈序号是和前面所述的端口序号一一对应的。方括号中的内容是可选项,不需要时可以省去。数据发送成功时,G20模块返回信息 “<CR><LF>+MIPPUSH:<Socket ID><CR><LF><CR><LF>OK<CR><LF>”,如 “<CR><LF>+MIPPUSH:1<CR><LF><CR><LF>OK<CR><LF>”。如数据发送失败,G20模块将会返回错误信息“<CR><LF>ERROR<CR><LF>”。

  (5)反复进行上述步骤(3)和(4),直至所有数据发送完毕为止。

  (6)通过指令“at+mipclose=<Socket ID>”关闭已打开的端口,如“at+mipclose=1”。端口关闭成功时,G20模块会返回信息“<CR><LF> OK<CR><LF><CR><LF>+MIPCLOSE:<Socket ID><CR><LF>”,如 “<CR><LF>OK<CR><LF><CR><LF>+MIPCLOSE:1 ID><CR><LF>”。如果端口关闭不成功,G20模块将会返回错误信息 “<CR><LF>ERROR<CR><LF>”。

  (7)通过指令“at+mipcall=0”关闭GPRS网络连接。如果网络连接关闭成功,G20模块将会返回信息“<CR><LF& gt;OK<CR><LF><CR><LF>NOCARRIER<CR><LF><CR><LF>+MIPCALL:0<CR><LF>”。如果网络连接关闭不成功,G20模块将会返回错误信息 “<CR><LF>ERROR<CR><LF>”。

  另外,G20模块接收到远程终端通过GPRS网络发送过来的数据时会自动从其串口输出该数据。如果接收到的是UDP协议的数据,G20模块会以以下数据格式输出:

  <CR><LF>+M1PRUDP:<Source IP>,<Source Port>,<Socket ID>,<Left>,<Data>

  其中,<Source IP>是发送方的IP地址,<Source Port>是发送方的端口号,<Socket ID>是本机端口序号,<Left>留在堆栈中的接收数据字节数,<Data>是所接收到的数据。如果接收到的是TCP协议的数据,G20模块会以以下数据格式输出:

  <CR><LF>+MIPRTCP:<Socket ID>,<Left>,<Data>

  各部分含义如前述。编程使ATmegal6不断查询串口接收缓冲区即可实现数据接收,也可以采用接收中断的方式提高运行效率。

  3 结 语

  GPRS数据传输链路中GGSN(网关GPRS支持节点)占用的端El的存活时间是有限的,如果链路空闲超时,连接就会断开,可通过定时发送数据短帧的方式来维持链路。经测定,本地(广州)的GPRS数传链路维持时间为60 s。基于ATmegal6的GPRS数据终端成本低,易于推广普及,可用于远程数据采集、系统监测和Internet远程接入等领域。

继续阅读
基于C8051和Atmegal6的无线温度测量系统设计

本文研发出了一种无线测温系统。该系统使用K型热电偶作为感温原件,测温范围大,适用于波峰焊、回流焊等高温领域。而且本系统具有独立的温度补偿电路,从而解决了某些集成温度补偿芯片温度采集速度慢的问题,提高了温度测量的灵敏度。

基于C8051F020和Atmegal6 的无线温度测量系统设计

目前,温度测量已被广泛应用于钢铁、冶金、工业焊接、波峰焊、回流焊等各个领域。这些应用的待测温度很高,测量环境非常恶劣。传统的有线测温装置,在这种测温环境下,或无法应用,或受到很多限制

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss