ADuC812应用中的若干问题
摘要:ADμC812作为新一代微控制器,具有强大的功能,比以往的单片机有着更广阔的应用前景。在实际应用中发现,芯片本身尚存在一些应注意的问题及使用时的特殊要求。本文对这些问题进行总结,以供读者参考。
关键词:在线调试 数据转换 SPI
引言
ADμC812是高度集成的高精度12位数据采集系统,其功能方框图如图1所示。从图中可知,该芯片内不仅集成了可重新编程非易失性闪速/电擦除程序存储器的高性能8位(与8051兼容)MCU,还包含了高性能的自校准8通道ADC及2通道12位DAC。
如所有与8051兼容的器件一样,对于程序和数据存储器,ADμC812具有各自独立的地址空间:64KB外部程序地址空间和16MB外部数据地址空间。但与其他器件不同的是,它包含了片内闪速存储器技术,向用户提供8KB的闪速/电擦除程序存储器、640B的闪速/电擦除数据存储器。
芯片集成了全部辅助功能块以充分支持可编程的数据采集核心。这些辅助功能块包括看门狗定时器(WDT)、电源监视器(PSM)以及ADC DMA功能。另外,为多处理器接口和I/O扩展提供了32条可编程的I/O线、I2C兼容的SPI和标准UART串行端口。
与以往的80C51单片机不同,ADμC812具有独特的在线调试和下载功能,由支持ADμC812的开发工具包QuickStart开发系统来提供。也就是说,在用户系统保留ADμC812的情况下,通过开发系统与ADμC812的串口通信,可直接对用户系统进行调试,并在调试完成后将已调试好的程序下载到ADμC812中。
虽然ADμC812具有上述各种优良性能,但由于它是一种新型微控制器,与以往的单片机相比,在用法上有许多不同之处。因此,在进行ADμC812系统开发应用时,仍然有许多问题须要注意。下面,将我们在应用ADμC812开发产品时发现的一些应注意的问题及其解决办法介绍如下。
javascript:window.open(this.src);" style="cursor:pointer;"/>
应用中存在的若干问题
1.在线调试注意事项
ADμC812与其他单片机突出不同之处在于支持它的开发系统不同。QuickStart开发系统是支持ADμC812的开发工具包,功能完善,包括下载、调试和模拟等功能。
(1)RS232接口电路
对于用户开发系统来说,在线调试和下载功能最重要,也是最常使用的,但二者都需通过PC机上的串行端口与ADμC812的UART串行端口之间连接的串行端口电缆进行数据通信才能发挥作用。因此,用户在开发应用系统的同时,应设计一个RS232接口电路(如图2所示)来实现PC机与ADμC812的串口通信。
由于RS232接口电路是PC机和用户开发系统的唯一通路,因此,它是在线调试和下载功能实现的关键。在用户系统的开发研制过程中,经常会出现在线通信故障问题。导致该现象发生的原因有很多,但最有可能的是接口电路工作异常所产生。要判断RS232接口电路工作是否正常,可按以下步骤逐一检查RS232通信是否正常。
① V+和V-引脚电压是否足够高(分别超过+8V和-8V)。若电压较低,则可能ADM202芯片已损坏。
② R1IN脚是否存在±12V的脉冲信号。若存在,则说明PC机方面通信发送信号正常。
③ R1OUT脚是否存在+5V信号。若存在,则说明ADM202接收PC机信号工作正常。
④ T1IN脚是否存在+5V信号。若存在,则说明ADμC812对PC机的通信产生响应;否则是ADμC812通信存在问题,说明ADμC812工作不正常。
⑤ T1OUT脚是否存在±12V的脉冲信号。若存在,但ADμC812还无法进入在线调试状态,则说明DB9与PC机之间的串行接口电缆有问题。
javascript:window.open(this.src);" style="cursor:pointer;"/>
(2)PSEN引脚
用户系统在具备RS232接口电路之后,还需通过一个与地相连的1kΩ电阻将ADμC812的PSEN引脚拉至低电平(见参考文献[1]、[2]),才能进入在线调试和下载状态。因此,PSEN引脚拉低是在线调试和下载功能实现的另一关键所在。
值得强调的是,PSEN引脚与地之间连上1kΩ电阻并不一定就能保证PSEN为低电平。若静电造成PSEN引脚损伤,则1kΩ电阻不能将PSEN引脚拉低。经试验证明,在PSEN引脚损伤不严重时,可通过把PSEN直接对地短路将其拉至低电平;但若损伤严重,则即使直接接地,器件仍然不能工作。因此,在使用ADμC812时,应特别小心、谨防静电。如焊接芯片时应将电烙铁接地,并戴上防静电手镯。
由于ADμC812的调试器是在用户系统复位时检测PSEN引脚状态的,因此,为提高通信成功几率,可在用户系统复位瞬间将PSEN引脚直接对地短路。但在ADμC812芯片进入在线调试或下载状态之后,PSEN引脚仍应通过1kΩ电阻接地。当然,若需要在下载程序后脱机运行,应将PSEN引脚与1kΩ下拉电阻断开,否则,ADμC812将一直保持在线调试状态。
(3)资源占用问题
ADμC812具有3个16位定时器/计数器,即:定时器0、定时器1和定时器2。每一个定时器/计数器包含2个8位寄存器THX和TLX(X=0,1和2)。所有3个定时器/计数器均可配置作为定时器或计数器,此功能和普通单片机相同。
由于与其他单片机不同,ADμC812具备在线调试功能,因此,芯片处于在线工作状态下某些功能将会受到限制。这是因为在线调试时,计算机和芯片之间的通信占用一定的资源所导致。经实践证明,定时器1就是被占用的资源之一。若用户在线调试的程序中使用了定时器1,则无论是设断点调试,还是单步或连续运行,都会有程序无法执行的情况发生。但若将程序中的定时器1屏蔽掉,则程序能正常运行,实现用户预定的功能。当然,在线调试程序时可以使用定时器0和定时器2,因它们未被占用。
虽然在线调试时,定时器1无法使用,但并不意味着用户不能在用户系统中利用该定时器。用户可先将预定功能用定时器0实现,在调试通过之后,再改用定时器1来实现;也可直接用定时器1实现,但只能盲调,因程序必须下载后脱机运行。javascript:window.open(this.src);" style="cursor:pointer;"/>
2.A/D转换器的使用问题
ADμC812内集成的ADC转换模块,包含了8通道、12位、单电源A/D转换器,这些A/D转换器是由基于电容DAC的常规逐次逼近转换器组成的,接收的模拟输入范围为0至+VREF(+2.5V)。另外,此模块还为用户提供片内基准、校准特性,模块内的所有部件能方便地通过3个寄存器SFR接口来设置。总之,ADμC812的ADC模块具有与一般ADC芯片相比拟的性能,并且操作简单、可靠性高,采集速率可高达200kHz。
(1)基准电压
A/D转换器的2.5V基准电压既可由片内提供,也可由外部基准经VREF引脚驱动。若使用内部基准,则在VREF和CREF引脚与AGND之间都应当连接100nF电容以便去耦。这些去耦电容应放在紧靠VREF和CREF引脚处。为了达到规定的性能,建议在使用外部基准时,该基准应当在2.3V和模拟电源AVDD之间。
由于片内基准高精度、低漂移且经工厂校准,并且当ADC或DAC使能时,在VREF引脚会出现此基准电压。因此,在进行系统扩展时,可将片内基准作为一个2.5V的参考电源来使用。若要把片内基准用到微转换器之内,则应在VREF引脚上加以缓冲并应在此引脚与AGND之间连接100nF电容。
在实际应用中应当特别注意,内部VREF将保持掉电直到ADC或DAC外围设备模块之一被它们各自的使能位上电为止。
(2)模拟输入
与其他ADC芯片相比,ADμC812的ADC模块有一个缺点,就是ADC正常工作的模拟输入范围为0~+2.5V;而允许输入的电压范围只能为正电压(0~+5V)。经实验证明,若输入的模拟电压超过+2.5V(最大值为+5V),ADC的采样结果为最大值(0FFFH),虽然结果不对,但并没有影响ADμC812正常工作;但是,一旦输入负的模拟电压,则会影响ADμC812正常工作,表现为ADC的基准电压(VREF=+2.5V)消失和采样结果不正确,且若长时间输入负电压,将有可能损坏芯片。因此,在实际应用中,若发现启动ADC之后VREF端无电压,则应立即将芯片复位,并检查模拟输入信号的采集放大部分。在确保进入ADμC812的模拟信号在0~+2.5V范围内之后,才能再次启动ADC。实际应用时,应保证输入的模拟电压为正电平。
3.并行I/O端口的使用问题
与其他单片机一样,ADμC812也有4个通用数据端口(P0~P3)与外部器件交换数据,且除了用作通用I/O之外,某些端口还能实现外部存储器操作。另有一些端口则与器件上外围设备其他功能多路复用。
(1)P1口
值得注意的是,在ADμC812中端口0、2和3是双向端口,javascript:window.open(this.src);" style="cursor:pointer;"/>而端口1是只输入端口。在图3中可以看到在P1口的电路中包括了位锁存器和输入缓冲器,但没有输出驱动器,因而P1口只能被配置为数字输入或模拟输入,不能用于输出。
当P1口用作模拟输入时,它对应于ADμC812内8通道模数转换的输入端口ADC0~ADC7。若在实际使用中,不须将8个通道ADC都用上,可将剩余的P1口引脚设置为数字输入,但此时须注意,它与标准的8051单片机用作数字输入的通用I/O口不同,认为高电平有效。因此,P1口用作数字输入时,在检测是否有输入信号之前,须将0写至对应端口,然后再判断。这就要求系统在设计时,应将用作数字输入的P1口外加1个下拉电阻,一般为几kΩ。
(2)P2口
如前所述,ADμC812的P2口也是双向端口,包含输入缓冲器、输出锁存器和输出驱动器。通过与P2口相应的端口SFR,可将P2口的各端口引脚独立地配置为数字输入或数字输出,以及对它们进行读、写访问。这些与一般单片机P2口作通用I/O口的用法相同。
但当ADμC812接有外部数据存储器时,P2口不仅要用于输出中8位地址(A8~A15),还要用于输出高8位地址(A16~A23),此用法类似于P0口。不同的是,P0口是数据和地址总线复用,而P2口是中位、高位字节地址总线复用。因此,P2口在用于外扩大容量数据存储器时,也应通过一个锁存器将高位字节地址锁存,如图4所示。
4.外部寻址问题
与其他单片机不同,ADμC812具有24根地址线。它可寻址的外部数据存储器空间为16MB,此超大容量的存储空间可满足众多应用领域的需求。由于外部数据存储器空间高达16MB,只用DPTR作间址寄存器是不够的。因此,ADμC812的数据指针是由3个8位寄存器来组成,分别是DPP(页字节寄存器)、DPH(高位字节寄存器)和DPL(低位字节寄存器),在进行内部和外部代码访问或外部数据访问时,由它们来提供存储器地址。与其他单片机一样,DPTR仍然是由DPH和DPL两个寄存器来构成,且用法相同;而DPP是用于传送A23~A16最高8位地址的寄存器,这相当于若将外部数据寄存器每64KB划分为1页,则不同的DPP值将对应于不同的页,因此取名为页寄存器。
5.SPI串口对P3口的影响
为便于MCU与各种外围设备进行通信,ADμC812提供了三种串行I/O端口:UART接口、I2C兼容的串行接口和串行外设接口(SPI)。其中,SPI接口是工业标准的同步串行接口,它允许MCU与各种外围设备以串行方式(8位数据同时同步地被发送和接收)进行通信。由于只须使用4条线就可与多种标准外围器件直接接口,因此,SPI接口在串口通信方面有着广泛的应用。
然而,我们在使用ADμC812的SPI串口进行通信时,发现它与其他芯片(具有SPI串口功能)不同,此SPI串口的使能会对P3口产生影响,其现象表现为:无论P3口实际输入电平为何值,P3口的内部锁存器都认定为高电平,从而程序中的JB或JNB等判断转移指令将失去作用。这说明,SPI串口使能将使P3口只能作为输出口来使用。因此,在同时使用SPI串口和P3口作输入口时,为避免错误发生,必须在每次P3口检测输入信号之前都将SPI串口禁止。
结束语
ADμC812作为一种新型的微控制器,具有一般单片机所不能比拟的强大功能。它内部集成的8通道高精度ADC和双12位DAC,使其能极有效地简化仪器中数据采集系统部分,同时它所提供的三种串口通信方式,可满足各种串行器件的接口问题。它的在线调试和下载功能可极大地方便用户系统的开发研制。经过一段时间探索和应用,我们已基本掌握ADμC812的各种功能,总结出一些经验和教训,本文旨在为用户提供借鉴参考。