基于Atmega8及MSM7512的嵌入式Modem设计

分享到:

  随着经济的发展,远程监控系统的应用日益广泛。其核心部分是远程信息交换,即系统需要在地域分布广泛的设备之间进行信息的交换及协调工作。对于某些采集点分散、传输量不大、对速度要求又不高的信息交换系统,目前有两种解决方案:一是采用Internet或现场总线技术,该方案铺设网络的费用高,维护量大;二是利用现有的电话网通过Modem进行数据传输,这样不仅可以摆脱伎的分布式总线系统繁琐的布线、中继、放大以及运行过程中维护量大等问题,而且系统扩展极为方便,基本不受设备地域的限制,该方案灵活实用且成本低廉。

  嵌入式Modem主要由单片机(或DSP)和调制解调芯片构成。与通用Modem相比,嵌入式Modem具有体积小、易维护、外围电路简单、成本低廉等特点。在企业或住宅区中的远程监控系统使用嵌入式Modem,能够节约大量的人力和财力,大大提高自动水平,因此具有较广阔的应用前景。本文介绍一种基于Atmel公司AVR系列单片机Atmega8和OKI公司调制解调芯片MSM7512的嵌入式Modem。

  1 嵌入式Modem的硬件设计

  系统的原理框图如图1所示,上位机与PC机,下位机是远方的嵌入式Modem和设备。PC机是数据终端,通过嵌入式Modem与远方终端实现数据交换;嵌入式Modem以Atmega8为中心,控制MSM7512芯片实现数据的发送与接收,通过外围电路实现振铃检测、摘机、显示信息、呼叫远方Modem等,它以RS232接口标准与上位机相连。

  1.1 Atmega8单片机简介

  AVR单片机是美国Ateml公司生产的具有双结构的RISC单片机系列,具有较短的指令周期和较快的运行速度。Atmega8是基于2002年推出的一款新型AVR高档单片机,工作在16MHz时能达到16MIPS。该芯片内部集成了8K字节Flash、1K字节内部SRAM及512字节的E2PROM,具有丰富强大的硬件接口电路(32个通用寄存器,23个通用可编程I/O口,三个计数器,三个PWM通道,一个I2C的总线接口,一个USART接口,一个SPI接口,6通道的10位ADC及2通道的8位ADC),并且支持在线编程(ISP)和在应用程序(IAP)。由于采用了小引脚封装(PDIP28和TQFP/MLF32)形式,所以其价格仅与低档单片机相当,因此Atmgea8是一款性价比很高的8位单片机。

  1.2 MSM7512简介

  MSM7512是日本OKI公司生产的一种价格低廉、功耗低、性能良好的调制解调芯片。该芯片满足ITU-TV.23协议标准,由单电源(3~5V)供电,采用FSK半双工调制解调方式,通信速率为1200bps,低功耗(典型值仅25mW),稳定性好,具有片内回音消除电路,模拟输出可直接连入PSTN;并具有TTL接口,其FSK输出信号可直接驱动600Ω的通信电路,外围电路简单,可方便地与数字系统及计算机系统相连,广泛应用于嵌入式Modem、数据传输和家庭安防系统中。图2为该芯片的功能框图。

  MSM7512有四种工作模式,由MOD1、MOD2端口进行控制。当MOD1=0、MOD2=0时,MSM7512工作于调制模式,XD输入为“0”或“1”的数字信号,AO端则对应输出频率为“2100Hz”或“1300Hz”的FSK信号;当MOD1=1、MOD2=0时,MSM7512工作于解调模式,A输入频率为“2100Hz”或“1300Hz”的FSK信号,RD则对应输出解调后的“0”或“1”数字信号;当MOD1=0、MOD2=1时,MSM7512工作于环路自测模式,用于检测芯片工作是否正常;当MOD1=1、MOD2=1时,MSM7512工作于节电模式,此时MSM7512功耗仅为0.1mW,其它模式一般功耗为25mW。在本设计中所使用的工作模式是FSK调制发送及接收模式。

  在硬件设计中需要着重考虑的问题是:MSM7512是一块串行调制解调芯片,与单片机通过串口相连,而单片机上的USART串口也需要与上位机进行串行通信,但Atmega8只有这一个串口,就出现了串口资源不足的问题。如果仅仅为增加一个串口而使用可编程串行通信接口芯片8251,无疑会增加设计的复杂性和成本。而利用Atmega8的两个I/O口编程模拟一个UART串口的功能(即模拟串口),可以很好地解决这个问题。这将在软件设计部分具体介绍。

  1.3 振铃检测和拨号电路

  振铃检测与拨号电路如图3所示。它的工作原理很简单,在此不再多述。

  2 嵌入式Modem的软件设计

  软件部分的设计包括上、下位机通信协议的制订、上位机程序和单片机程序的编写。其中上位机程序以Delphi为开发工具,单片机程序用ANSIC C编写。

  2.1 上位机与下位机通信协议的制订

  上位机与下位机之间的数据交换必须遵循一定的通信协议,通信双方才能按照该协议解析所传输的数据。就本设计而言,一台PC机要对应多个下位机,属于主从式结构。所制订的通信协议为:

前导码 目的地址 源地址 数据帧 CRC校验码

  前导码使通信双方保持同步,目的地址和源地址就是各设备所对应的电话号码,当PC机发送数据时,先发送目的地址给所有下位机,如果某个从机被上位机寻址,它将接收主机接下来发出的数据帧,而其它的从机则将忽略数据帧;当PC机接收数据时,同样地,下位机先发送源地址再发数据帧给上位机。同样时,下位机先发送源地址再发数据帧给上位机。CRC校验码是为了防止传输出错而设计的。为设计方便,规定数据帧为32位,其中功能码为4位,参数为28位。功能码为0000时,参数表示的是设备传输数据;功能码为1111时,参数表示设备自检数据。

  2.2 上位机软件的编写

  上位机是一个数据发送与接收的终端,上位机软件的功能是:选择并发送要呼叫的电话号码;使计算机与嵌入式Modem能够通过RS232接口标准收发数据。由于Delphi是一种易学易用的面向对象的程序设计工具,因而采用它来编写上位机程序。在上位机程序中要能够对计算机串行口的硬件进行操作。然而Delphi本身不提供串行通信组件,因此需要调用Windows API函数建立一个串行通信组件Tcomm来对串口硬件实现控制,进而使用该组件完成串行通信功能。在设计中还需要使用其它一些组件如Button、Memo、RadioGroup等来完成软件界面的设计。

  2.3 单片机程序设计

  根据设计中单片机的任务设置一个全局变量TransOrReceFlag(规定值为0时,表示Modem处于接收状态;为1时,Modem处于发送状态),主程序根据它的值跳转到相应的子程序中。下面分别介绍子程序的编写过程。

  嵌入式Modem发送数据:上位机按照通信协议通过串口向Atmega8先后发送目的地址(电话号码)和数据帧。单片机在USART接收完成中断服务程序中,将MSM7512设置为调制模式并使MSM7512与电话线连通,再控制双音多频信号发生器HT9200产生目的地址所对应的DTMF信号,送入MSM7512的外部信号输入端EAI,经内部放大后从AO输出端向电话线上发送所呼叫的电话号码,待与远方Modem建立起联系后,就可以通过模拟串口向MSM7512传送接下来所收到的数据帧。

  嵌入式Modem接收数据:Atmega8外部计数口T1上有下降沿出现时,表明电话线上有振铃信号,可能有远方Modem要求和本地Modem进行数据传输。为防止误拨,规定了振铃信号需要连续出现的次数。当达到计数设定值时,单片机确认有远方Modem要进行数据传输,于是将MSM7512设置为调解模式,接通电话线,再通过模拟串口接收MSM7512传来的数据,经USART把数据传给上位机。

  单片机程序中一个重要的部分是模拟UART串口的实现部分。在设计中用定时/计数器0产生合适的波特率,使接收和发送的数据符合异步串行通信数据帧的格式;一个普通I/O口作为TXD’,外部中断0口T0作为RXD’;在内存中开辟一块缓冲区模拟串口的数据接收/发送缓冲器。规定模拟串口中数据帧为1起始位,8个数据位,1个停止位,波特率为9600bps。下面就接收和发送两个过程介绍模拟串口的实现。

  模拟串口接收数据:串行通信中数据帧都是从一个下降沿开始的。当T0口上有下降沿出现并触发中断时,表明MSM7512已经接收到远方传来的数据,单片机需要对所接收到的数据进行采样。在中断服务程序中初始化数据位计数器和定时/计数器0,设定其第一次定时时间为1.5位,因为从起始位需要延时1.5位才能进行数据位D0的采样(1.5位=1起始位+0.5D0位),如图4所示。接下来的8次采样的间隔一样,所以在定时器第一次计时溢出后,在每次溢出中断服务程序中重新装载的定时时间均为1位。采样后将所得数据存入缓冲区再送给上位机。图5是模拟串口接收数据的程序流程图。

  模拟串口发送数据:与接收数据过程相比,发送数据要简单些。因为不需要采样,帧中所有位的时间长度是一样的,所以定时/计数器0的定时时间为固定值,即1位的时间。送出的第一位数据是起始位,通过接收方准备接收数据,然后从最低有效位LSB支最高有效位MSB,数据被一位一位地移出,在最末的是停止位(即逻辑1),用来让接收方区分发送的数据字节。

  由于在上位机程序中集成了选择发送电话号码的功能,所以本文所介绍的嵌入式Modem能够灵活方便地与远方设备进行数据传输。它还具有体积小、外围电路简单、易维护、成本低廉等特点,具有较大的应用价值。

继续阅读
基于ATmega8 单片机的工频电压/频率仪设计

基于ATmega8单片机工频电压/频率仪硬件电路简单、性能稳定可靠、经济适用,能满足一般的测量精度要求。

满足您创新创意的需要,亲手打造属于你的Arduino

Arduino,满足您创新创意的需要!Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件(各种型号的Arduino板)和软件(Arduino IDE)。它适用于艺术家、设计师、爱好

用Arudino打造多功能电子闹钟

前段时间入手了一块 LCD12864中文屏幕,带中文字库,有驱动库可以直接驱动;还有一个时钟模块,型号是最常见的DS1302,突发奇想,就做个电子闹钟玩玩吧,又想只做个闹钟有点单调了,既然手头有温湿

基于AVR单片机的LED显示屏的灰度设计与实现

LED点阵块具有亮度高、发光均匀、可靠性好、拼装方便等优点,能构成各种尺寸的显示屏。目前,LED显示屏已被广泛应用于文字显示并取得了很好的效果,但是大部分仅能显示滚动的文字信息而不能显示图像,并且还

基于ATMEGA8的LED彩灯控制器设计

如果你想改变LED接的管脚,请修改hardware.h文件。如果想修改LED的亮度,请修改globals.h 中的Timings 段定义。本设计外接了两个按钮,一个是选择工作模式,另一个是电源的开关。当你按下模式按钮1.5秒以上时,进入自动模式,会自动演示所有的预设模式。

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