关键词:RTC X1288 高精度 精度调节
引言
X1288是Xicor公司最新推出的高精度多功能时间芯片。除了提供高精度的时间外,还提供了片内的32K×8位的EEPROM、看门狗、2个警告和备和电源的自动切换、频率输出等大量实用的功能。由于它使用的外部晶振可以选用低价格的32.768kHz晶体振荡器,所以芯片的价格便宜。它提供的时间分辨率为1/100s,以及小于5×10 -6的年变化率,使得它得以在手机、POS设备、智能仪表、控制装置及其它电子领域中得以广泛的应用,而且还可以作为低精度仪表的时间校准。
1 X1288简介
X1288的引脚如图1所示。
X1288共有两种封装形式:一种是16引脚的SOIC封装(表面帧式),另一种为14引脚的TSSOP封装(双列直插式)。
图1
X1,X2:外接32.768kHz晶振的引脚。
RESET:复位信号输出,作为看门狗时使用。
Vss:数字地。
SDA:用于串行传输数据的输入与输出双向引脚。引脚为开漏输出,因此需要接上拉电阻,线上的传输速度最高达400kHz。
SCL:串行时钟输入脚。
PHZ/IRQ:多功能复用引脚。
功能1——可编程的频率输出。可以输出32.768kHz、100Hz、1Hz或不激活四种状态。
功能2——中断输出。提醒上位机一个定时警告已产生,低电平表示激活。
VBACK:后备支撑电源引脚输入端。
Vcc:主电源。
NC:无内部连接。
2 X1288的内部框图及其工作原理
X1288内部由振荡电路、分频电路、计时单元、晶振补偿单元、时间保存寄存器、警告寄存器、256Kb EEPROM、状态寄存器、控制寄存器、串行接口译码器、控制译 码单元、看门狗定时器、低电平复位电路等组成。内部框图如图2所示。
图2
由于上位机是通过控制X1288的各寄存器对芯片进行操作的。因此,主要介绍内部寄存器及实现高精度定时的调节原理。
X1288内部共有可用的寄存器64个,其中0x00~0x37和0x3f已经使用。分别为状态寄存器、时间寄存器、控制寄存器、报警寄存器0、报警寄存器1。
2.1 主要寄存器介绍
状态寄存器(SR)是易失性的,其地址是03H,命令格式如下:
位7 | 位6 | 位5 | 位4 | 位3 | 位2 | 位1 | 位0 | 缺省值 |
BAT | AL1 | AL0 | 0 | 0 | RWEL | WEL | RTCF | 01h |
BAT:后备电源标志。BAT为“1”,表明器件在使用后备电源。
AL1、AL0:报警选择位。X1288中有两个报警寄存器。若其中的某一报警时间与实时时钟相同时,相应的AL1和AL0位将变为“1”;当读取SR的值后,该位又变为“0”。
RWEL:时钟/控制寄存器写入控制位。对控制寄存器进行写操作时,必须先使该位为“1”。
WEL:控制寄存器和内部的EEPROM的写入控制位。在对它们进行写操作时,必须先使该位为“1”。但是要对它进行写,先要写RWE1位为“1”,即先写“02H”到状态寄存器,再写“06H”到状态寄存器才可以。
RTCF:掉电标志位。当全部电源包括Vcc和VBACK失效后,该闰变为“1”;而在系统再次上电后,如果要对RTC进行第一次有效写操作,则应首先使该位为“0”。
2.2 计时精度调节原理
为了实现高精度的定时,X1288主要通过芯片内部的晶振补偿单元的数字微调寄存器和模拟微调寄存器来实现。这两个寄存器为非易失性的,掉电之后数据也不会丢失。数字微调寄存器(DTR)应用3位DTR2、DTR1、DTR0来调节每秒的计算次数和平均错误,获得更好的精度。其中DTR2为符号位:DTR2=0,频率补偿为正;DTR2=1,频率补偿为负。DTR1、DTR0是数值位,DTR1提供10×10 -6的调整范围。DTR0提供20×10 -6的调节范围。三个位组合起来提供-30×10 -6~+30×10 -6的调节。模拟微调寄存器(ATR)共有ATR5~ATR0的6个模拟微调位,用于调节芯片内加载电容的大小。加载电容的大小为3.25pF~18.75pF。内部电容大小的计算公式如下:
CATR=(ATR value×0.25pF)+11.0pF
典型可调节的晶振频率范围上下偏差为+116×10 -6~-37×10 -6。两个微调寄存器相结合,最大可调节+146×10 -6,实现高精度的定时微调。
图3
3 应用
3.1 X1288与CPU连接的原理图
X1288与89C92的连接比较简单,如图3所示。有点要注意的是,在SCL、SDA和RESET引脚要接上拉电阻。
3.2 为实现高精度定时的PCB设计
由于X1288的晶振输入引脚X1的输入阻抗非常高,会从电路板上的其它电路中拾取高频信号;同时,输入引脚X2接晶振的另外一个引脚,它也是一个敏感节点。另外,高频的噪声信号能够从两个节点注入晶振电路,产生双倍的时钟或杂乱的时钟信号,严重影响定时器的精确定。因此,需要小心设计的电路的布线,以避免哭声信号的拾取。在设计中,连接到X1、X2的晶振引脚要尽可能的短,而且最好在晶振周围布上宽的地线,以减少噪声的侵入。但是,在X1、X2引脚边要避免布地线,以防止增加X1、X2引脚的输入负载电容。还有,在Vcc与地线之间一定要接上一个非极性的电容。典型的布线如图4所示。
3.3 软件介绍
X1288与CPU的接口方式,遵循标准的I2C总线协议格式。即首先主器件发出启动信号,其次是命令帧、地址帧和数据帧格式。所有的命令、数据和地址字节首先传输最高位。关于I2C总线的格式在各种论文中已有详细描述。以下是C51对X1288进行基本操作的程序。
(1)读X1288的程序
uchar Read_x1288(void)/*读一个字节的数据*/
{ uchar temp=0;
uchar BitCounter=8;
Scl_x1288=Low;
do{
Scl_x1288=Low;
_nop_();_nop_();
Scl_x1288=High;
_nop_();_nop_();
if(Sda_x1288) /*如果Sda=1;*/
temp=temp|0x01|; /*temp的最低位置1*/
else
temp=temp&0xfe; /*否则temp的最低位清0*/
if(BitCounter-1)
{temp=temp<<1;}
BitCounter--;
}while(BitCounter);
Scl_x1288=Low;
return(temp);};
(2)写x1288的程序
void Write_x1288(uchar TempData)/*写数据子程序*/
{uchar BitCounter=8; /*位数控制*/
uchar temp; /*中间变量控制*/
temp=TempData;
Scl_x1288=Low;
do{
Scl_x1288=Low;
_nop_();_nop_();
Sda_x1288=((temp & 0x80)?1:0);
_nop_();_nop_();
Scl_x1288=High;
_nop_();_nop_();
temp=temp<<1;
BitCounter--;
}while(BitCounter);
Scl_x1288=Low;}
4 小结
实验证明,X1288多功能高精度时间芯片与其它时钟芯片相比,有精度高、功能全、使用灵活简单,性能价格比极高的特点。在实际应用中,作为低精度计时器的校时,也完全可行。它具有很高的应用价值。