基于AVR单片机和CMX865的串口转FSK通信模块

发布者:omicron25最新更新时间:2020-02-29 来源: eefocus关键字:AVR单片机  CMX865  串口转FSK  通信模块 手机看文章 扫描二维码
随时随地手机看文章

本文利用ATmega48芯片和CMX865芯片为硬件架构设计了串口转FSK通信模块,实现数据传输方式的转换。基于此模块,用户与业务平台之间进行FSK信息交互,相对于终端来说就是简单的串口通信。硬件电路以ATmega48微处理器为核心,并利用C/BUS总线控制CMX865芯片,实现FSK/DTMF收、发功能;外围电路由振铃检测、FSK数据收发接口电路组成。模块软件设计主要包括串口通信和FSK通信两部分程序,串口通信程序实现串口通信命令的组包发送、收包解析/处理功能;FSK通信程序实现利用中断方式发送、接收FSK数据功能。由于ATmega48芯片与ATmega88芯片除了Flash、EEPROM、SR AM容量差异外,性能完全相同。通信模块可以不更改硬件电路,仅配置相应AVR芯片,对软件稍作调整,能够满足通信业务对通信数据量增加的需求,节约模块二次开发的成本。目前本通信模块已在一款新型的电子交易终端上使用,并与中兴、精伦等电子交易平台进行信息交互,运行效果良好。


一、CMX865介绍


CMX865是CML公司新出的一款DTMF编/解码器/FSK调制解调器复合IC芯片,它采用单个高速串行总线控制,与大多数串行接口兼容。 CMX865的主要特征是:


◆供电电压2.7~5.5 V,低功耗操作模式;


◆支持V.23、Bell202 FSK 1200 bps编码/解码;


◆集成高可靠性DTMF、编码器/解码器;


◆集成振铃检测功能,支持语音探测功能。


二、 ATmega48介绍


ATmega48是基于AVR增强型RISC(精简指令集)结构的高性能、低功耗的8位CMOS微控制器。微控制器具有可控制的上电复位和可编程的掉电检测电路、经过标定的片内RC振荡器、片内外18个中断源和5种休眠模式。由于其先进的指令集以及单时钟周期指令执行时间,ATmega48的数据吞吐率高达1 MIPs/MHz,运行速度比普通的单片机高出10倍,从而可以缓解系统在功耗和处理速度之间的矛盾。


其片内集成了4 KB的系统内可编程Flash、256字节的EEPROM、512字节的SRAM.其外设具有可编程的串行USART接口、可工作于主机/从机模式的SPI串行接口;存在2个具有独立预分频器和比较器功能的8位定时/计数器和1个具有预分频器、比较功能和捕捉功能的16位定时/计数器、具有独立片内振荡器的可编程看门狗定时器等。ATmega48/88/168芯片硬件电路可以完全兼容,完全可以根据软件实际需求灵活选择AVR芯片,极大地方便系统的开发与研制。


三、硬件设计


图1为串口转FSK通信模块电路。系统主要以AVR单片机ATmega48芯片和CMX865调制/解调芯片为硬件架构,ATmega48芯片利用C-BUS总线对CMX865芯片进行控制操作,实现FSK通信。CMX865芯片的IRQN终端与CPU芯片的外部中断0(INT0)相连,确保软件可以采用中断方式接收/发送FSK数据。CMX865芯片的时钟信号、片选信号、响应应答数据信号、接收控制数据信号分别与ATmega48芯片的普通I/O接口引脚相连,CPU可以通过模拟口线方式对CMX865芯片进行控制。


图1还提供了基本的FSK接收/发送数据接口电路和振铃检测电路。在FSK发送电路中,CMX865芯片TXA(15引脚)处外接电阻的目的是匹配芯片接口对线路的交流阻抗。在FSK接收电路中,CMX865芯片RXAFB(9引脚)与RXAN(10引脚)之间的电容以及隔离变压器之间电容设计的目的是滤除高频噪声;通过调节接收电路中两个电阻R1、R2的阻值即可改变接收端提供给CMX865芯片信号的幅度。在振铃检测电路中,IC1是光电耦合器,不振铃时光电三极管截止,RING为高电平;振铃时,振铃信号经过电容耦合及稳压管稳压,振铃电压使IC1内发光二极管发光,照射到光电三极管的基极上导致光电三极管导通,RING为低电平,通过ATmega48引脚检测到低电平的振铃信号。

四、软件实现


ATmega48芯片具有4 KB内部Flash和512字节的片内SRAM,软件实现需考虑资源分配问题,特别是SRAM使用情况。由于程序涉及串口通信、DTMF通信和FSK通信3种情况,理论上需要开辟6个缓冲区。如果这样,每一个缓冲区的大小显然不能确保达到实际通信数据量的需求。结合FSK通信特点,DTMF数据传输与FSK数据传输不可能同时发生,因此FSK与DTMF可共用相同缓冲区。同样串口接收与FSK发送、串口发送与


FSK接收都不会同时发生,这样通信只需要开辟两个缓冲区就可以确保模块正常通信,考虑实际业务平台数据量情况,软件设计中为FSK接收开辟255字节缓冲区复用;FSK发送开辟45字节缓冲区复用。


4.1 主程序实现流程


通信模块主程序包括:CPU初始化、CMX865初始化、初始化建链、串口通信和FSK通信子程序等。主程序流程如图2所示。初始化建链环节是模块正常工作的基础,通过初始化建链操作,信息终端可以根据线路环境以及平台超时机制对通信模块参数进行设置,确保通信的稳定性。通信主流程循环执行3个子功能函数:线路状态处理函数、串口数据解析与处理函数、链路保持函数。线路状态处理函数设计了3种线路状态,即初始状态、空闲状态和摘机状态;正常工作时仅在空闲状态和摘机状态之间切换。其中在空闲状态检测振铃、根据状态位执行摘机、DTMF拨号等操作;在摘机状态根据状态位执行FSK收发、脱线检测、挂机控制等操作。串口数据解析与处理函数包含串口数据按命令集解析、对解析命令进行应答和状态置位处理部分。这样线路状态处理函数和串口数据解析与处理函数通过状态置位标志紧密连接起来。FSK数据采用中断方式直接接收,接收完毕后在摘机状态下直接通过串口发送给信息终端。由于串口发送应用相对单一,为简单处理串口发送采用即时应答处理方式,分散在通信主流程各子功能函数中实现,提高了通信效率。通过链路保持函数判断串口通信是否异常,通信模块周期性地向信息终端发送链路保持命令,如果3次重发均未收到终端应答命令,通信模块将自动锁闭线路,重新执行初始化建链操作,实现串口异常的处理。

图2 主程序流程图


4.2 对外串口通信协议


模块采用标准串口通信,波特率为19 200 bps,10位异步方式。定义串口通信数据包格式为:0x1E+命令+校验和反码(对命令的校验和反码),其中部分命令以变长方式发送。串口通信主要命令有:模块初始化、链路保持、DTMF接收/发送、FSK接收/发送、振铃、挂机等,命令具体格式和描述此处不加详述。模块初始化上电后由通信模块自动发起,直到正确接收到终端应答初始化命令后,通信模块才建链成功。信息终端初始化应答命令主要提供FSK通信模块参数配置信息。上电后如果FSK模块未收到终端初始化应答信息,则周期性地(每2 s)发送一次初始化建链命令,直到成功为止;模块FSK通信过程中周期性地向终端发送链路保持命令,如果未收到终端应答信息,则断开FSK链接重新开始模块初始化。


4.3 串口通信实现


AVR单片机串口通信往往采用SPI通信方式,通信模块串口通信采用UART0控制/状态寄存器和数据寄存器实现。串口通信子程序主要由串口发送/接收中断子程序、串口接收命令解析子程序和串口组包发送子程序3部分组成。其中串口中断接收程序为:

具体执行串口数据发送时,需要提供发送数据长度、发送起始地址、置UCSROB寄存器值(UCSR0B |=0x28)。串口接收命令解析子程序按照对外串口通信协议解析串口命令,并根据命令描述调用子程序代码执行相应子功能操作。为了通信容错处理,通信模块需对接收串口数据进行校验,如果解析的串口命令格式正确,则向终端发送肯定应答;否则发送否定应答,等待终端重传命令数据。串口组包发送子程序对接收的FSK数据以及线路状态等信息数据,按照串口通信协议组包发送给信息终端。


4.4 FSK通信实现


FSK通信子程序主要由CMX865芯片寄存器操作、FSK收/发、DTMF收/发以及线路状态检测等子程序组成。ATmega48芯片采用模拟口线的方式对CMX865寄存器进行读/写操作,其中对CMX865芯片寄存器读操作程序为:

FSK收/发、DTMF收/发子程序均以CMX865寄存器读/写操作函数为基础,通过设置CMX865寄存器的值,确定其工作模式。FSK数据发送、接收都可以通过CMX865芯片的IRQ中断口线引起ATmega48芯片中断,因此FSK数据收/发都通过中断实现。芯片程序采用10 ms定时器循环检测线路状态。


五、结语


随着信息技术与网络技术的飞速发展,信息交互应用业务给人类生活带来更多的便利,信息终端表现出巨大的市场潜力。但是由于终端用户环境不同,用户信息交互方式可能不同,目前常用的有IP方式、FSK方式以及无线通信方式等。为了能够提高终端市场竞争力,减少系统开发成本投入,通信模块与终端程序独立设计是较为理想的解决方案。本文采用ATmega48芯片及CMX865芯片实现FSK通信模块,由于ATmega48芯片与ATmega88芯片除了Flash、EEPROM、SR AM容量差异外,性能完全相同。通信模块可以不更改硬件电路,仅配置相应AVR芯片,对软件稍作调整,能够满足通信业务对通信数据量增加的需求,节约模块二次开发的成本。目前本通信模块已在一款新型的电子交易终端上使用,并与中兴、精伦等电子交易平台进行信息交互,运行效果良好。

关键字:AVR单片机  CMX865  串口转FSK  通信模块 引用地址:基于AVR单片机和CMX865的串口转FSK通信模块

上一篇:CPLD与AVR通信PWM控制程序
下一篇:AVR C语言开发简介

推荐阅读最新更新时间:2024-11-08 16:21

基于AVR单片机与FPGA的低频数字式相位测量仪
摘要:提出了以AVR ATmega128单片机和Altera公司的Cyclone系列EP1C3T100为核心的系统设计方案。分析了数字式低频相位测量仪的测量原理和测量误差及其消除的方法。利用单片机强劲的运算、控制功能和FPGA运算速度快、资源丰富的特点。主要介绍了系统的软硬件设计。实践表明,此方案设计的相位仪对低频正弦波信号实现精确测频和测相位差,具有处理速度快、稳定可靠、精度高等优点。 关键词:数字相位仪;单片机;FPGA;误差;频率;相位差 在工业领域中经常要用到低频数字式相位仪来精确测量两信号之问的相位差,比如在电力系统、频率特性的研究、激光测距等领域均有广泛的应用,相位检测的精度直接决定系统的整体性能。这就要求测量仪逐
[工业控制]
基于<font color='red'>AVR单片机</font>与FPGA的低频数字式相位测量仪
基于AVR单片机射频卡多协议读写器的设计
  引言   射频识别(RFID)是利用无线方式对电子数据载体(电子标签)进行识别的一种新兴技术。与接触式IC卡和条形码识别等系统比较,它有着巨大的优势。利用射频识别技术,能有效实现对数量大、分布区域广的信息进行智能化管理,达到高效快捷运作的目的,特别是在第二代身份证、物流、交通航运、自动收费、超市、门禁系统管理、服务领域等方面有着广泛的应用前景。随着我国国民经济的快速发展,国内RFID行业也正经历着深刻的变革。   RFID系统一般是由读写器、射频卡、应用软件来组成。其中读写器的设计是至关重要的,它决定了系统的稳定性和准确性。   除了要求其能支持一系列协议、标准和收发器外,对读写器可能还有其它功能性方面的要求,如高性能、
[单片机]
基于AVR单片机的上下课自动打铃系统的实现
昨晚花一晚上把这些资料整理了一下,全部发出来了。 由于补课没有铃。3月份做了这个东西,已实际使用,稳定运行一个学期。 上运行图: 硬件如下:AVR ATmega16单片机,开发板(用到上面的:继电器、LED走马灯、两个按钮)、门铃、LED若干、16Mhz无源晶振。 硬件照片: 开发板: AVR单片机: 晶振: 好了 照片晒完了,下面开始正文 原理图如下: 好吧我的能耐真大,这电路图不是用什么CAD专业软件画的,而是用Windows画 图板用鼠标一笔一划画的。。。所以效果不是很好,凑合着看吧,知道个大概就行了。(开发板上肯定还有其他资源,电路图中的资源也不
[单片机]
基于<font color='red'>AVR单片机</font>的上下课自动打铃系统的实现
嵌入式学习笔记18——AVR单片机之熔丝位设置
1.熔丝位简介: 熔丝位状态为 1 表示未编程,熔丝位状态为 0 表示编程,因为在AVR的器件手册中是使用已编程和未编程定义熔丝位的。 AVR单片机的熔丝位是可以多次编程的。 AVR单片机芯片加密锁定之后(LB2/LB1=1/0,0/0)不能通过任何方式读取芯片内部的Flash和EEPROM的数据。 下载编程的正确步骤是:下载运行代码和数据,配置相关的熔丝位,最后配置芯片的加密位。 2. AVR单片机加密熔丝位的设置 3. 功能熔丝位的设置 4. Bootloader熔丝位简介 5. 系统时钟源选择熔丝位 6. 使用外部晶体时的工作模式设置 7.
[单片机]
嵌入式学习笔记18——<font color='red'>AVR单片机</font>之熔丝位设置
基于avr单片机I/O口输出SPWM程序
基于ATmega16单片机输出SPWM程序,PWM频率为25KHZ,输出正弦波为50HZ,输出电压波形光滑,失真度小,只需要硬件和软件相结合。电路简单,只修改程序就可以调整功能,成本低,可靠性主高。 #include avr/io.h #include avr/interrupt.h #define BIT(x) (1 x) //周期为20ms,产生50HZ的交流电,spwm频率为20k const unsigned char list ={1,4,7,10,13,16,19,22,25,28,31,34,37,39,42,45,48,51,54,57,60,62, 65,68,71,74,76,79,82,84,8
[单片机]
AVR单片机用于太阳能电池控制器的设计
简介:在此设计的太阳能控制器性能稳定,具有过充过放保护和温度补偿。经过测试,系统显示出良好的控制效果,不仅提高了太阳电池的工作效率,同时也保护了所使用的蓄电池,在利用绿色能源方面,具有一定的社会效益和广泛的推广价值。 随着能源危机和环境污染的加深,太阳能的研究和利用受到广泛的关注。太阳能是人类取之不尽用之不竭的可再生能源,也是清洁能源,不产生任何的环境污染,在太阳能的有效利用中,太阳能充电是近些年发展最快,最具活力的研究领域,是其中最受瞩目的项目之一。太阳能电池发电是基于“光生伏打效应”原理,将太阳能转化为电能,利用充电效应将太阳辐射直接转化为电能。它具有永久性、清洁性和灵活性大的优点,是其他能源无法比拟的。 1 太阳能控
[单片机]
<font color='red'>AVR单片机</font>用于太阳能电池控制器的设计
AVR单片机专辑——定时器
第二讲:AVR单片机的定时器 ATmega128有两个8位定时器0和2,两个16位定时器1和3。下面主要说一下定时器的不同用法。 1. T/C0可以外接32768Hz的晶振,实现RTC(实时时钟)。 2. T/C2 外部事件计数器(T2)。 3. 16位的T/C可以实现精确的程序定时、波形产生和信号测量。功能非常强。 本文主要以16位的T/C1为例介绍定时器的应用,其它的定时器可以依葫芦画瓢。 1. 采用T/C1的溢出中断实现电子钟的设计 定时器工作在普通模式,用数码管显示时间。这里问题是如何得到1s的定时。若晶振采用12M,256分频,则计数初值应设为X,0xFFFF-X=12M/256 ==〉X=0
[单片机]
基于AVR单片机的发电机负荷缸多路遥控开关量数字遥控并编解码的实现
负荷缸是船舶电力核心发电机性能的负荷试验必备的重要工装设备,通过负荷试验,可以检验发电机长期工作的性能稳定的情况(静态特性)和对突加突卸负荷的应变能力(动态特性) AVR单片机具有高性能低价格的优点,在本文中利用AVR单片机对发电机负荷缸的多路远程遥控开关量进行采集监控并进行数字信号编解码,用2芯的电缆取代原来40芯的粗电缆传输控制信号,有效地解决了工作中遇到的问题。 1 问题的提出 我们通过把由发电机供电的通电极板放到负荷缸水电阻中,用充气升降极板和补给水调节水电阻大小的方法控制试验发电机所带负荷的大小,对发电机的性能进行试验。体积庞大的负荷缸一般放置在码头,在船舶发电机的负荷试验中需要在船舶配电板处控制负荷缸的各个部件,
[单片机]
基于<font color='red'>AVR单片机</font>的发电机负荷缸多路遥控开关量数字遥控并编解码的实现
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved