使用实时时钟模块的高精度对时
8025(实时时钟模块)

3.0 6.5 µA
! 电源检测电压
项目 高电压模式 低电压模式
符号 VDETH VDETL
条件 VDD 引脚 VDD 引脚
Ta = −30 °C~+70 °C Min. Typ. Max. 单位 1.90 2.10 2.30 V 1.15 1.30 1.45 V
http://www.epsontoyocom.co.jp
『 QMEMS 』 Epson Toyocom 公司。
数字技术、宽带技术在网络社会中无处不在,为了满足顾客的需 要,Epson Toyocom 遵循既定的 3D 战略,扩充【定时器件】、【传感 器件】、【光学器件】三类元器件产品进行“水平展开”并依托三类 产品组合开拓“纵向发展”,提供领先市场的具有卓越品质的产品。 Epson Toyocom 公司提供的『QMEMS』,利用超精微加工技术 (MEMS)充分发挥石英(Quartz)材质的特性生产出高附加值的 石英器件,加速拓展 3D 战略来满足顾客的需求。
0.5 6.3 Max.
RX − 8025 NB
22. N.C. 21. N.C.
4.8 5.0 ± 0.2
20. 19. 18. 17. 16. 15.
1.3 ± 0.1
14. 13. 12.
N.C. N.C. N.C. N.C. N.C. N.C. N.C. − −
SON − 22 引脚
金属可能暴露在该产品的顶部或底部。但这不会影响任何规格性能。
·本材料中规格表中的数值大小通过数值线上的大小关系表示。
·您不可将产品(以及任何附有的技术信息,如有)用于开发和/或制造大规模杀伤性武器,或其他军事用途; 同时,您也不可向任何可能将产品用于此类违禁用途的第三方提供产品。
实时系统中的任务调度与时钟同步方法(七)

实时系统中的任务调度与时钟同步方法在实时系统中,任务调度和时钟同步是两个重要的关键问题。
任务调度负责根据任务的优先级和约束条件,合理安排任务的执行顺序和时间片,以确保系统的实时性能。
时钟同步则是为了保证各个节点的时钟能够保持一致,以便协调任务的执行和数据的交互。
本文将就实时系统中的任务调度和时钟同步方法展开讨论。
一、任务调度方法1. 静态调度方法静态调度方法是在系统设计阶段就确定好任务的调度策略,并在运行时严格按照设定的策略进行调度。
这种方法通常适用于任务周期性且固定的情况,可以提前进行任务的优化和分配,以满足系统的实时性要求。
常见的静态调度方法有周期性调度和静态优先级调度。
- 周期性调度:根据任务的周期性,按照固定的时间间隔进行任务的调度。
这种调度方法简单高效,但适用范围较窄,只适用于周期性且固定的任务。
- 静态优先级调度:根据任务的优先级进行调度,优先级越高的任务被优先执行。
这种调度方法可以灵活适应不同任务的执行需求,但需要提前确定好任务的优先级,不适用于任务动态变化的情况。
2. 动态调度方法动态调度方法是根据系统运行时的实时状态和任务需求,动态调整任务的执行顺序和时间片。
这种方法灵活适应实时环境的变化,但需要对系统性能有更高的要求。
常见的动态调度方法有最早截止时间优先调度和最短剩余时间优先调度。
- 最早截止时间优先调度:根据任务的截止时间和执行时间,选择最早截止时间的任务进行调度。
这种调度方法可以确保任务能够按时完成,但需要实时监测任务的执行情况。
- 最短剩余时间优先调度:根据任务还需要执行的时间,选择剩余时间最短的任务进行调度。
这种调度方法适用于任务执行时间变化较大的情况,能够灵活适应任务的实时需求。
二、时钟同步方法1. 外部同步方法外部同步方法是利用外部信号或设备来同步各个节点的时钟。
常见的外部同步方法有GPS同步和PPS同步。
- GPS同步:利用全球定位系统的信号来同步各个节点的时钟。
利用GPS实现高精度时钟

图 1 G S应 用系统 结 构 P
地提供 高精度 的全天候 三位 坐标 、 位速 度 以及 时间 信息 。 三
全球定位 系统 由三部分 构成 :
3 系统 实现
目前市 场 上 的 大部 分 G S接 收 模 块 都 是 通 过 串 口与 P 控制 系统 的工作 ) 地 面天线 ( 主控 站 的控 制下 , 、 在 向卫 星注 MC U进行数据传输 的。输出数据每秒更新一次 , 数据包括 经 入导航 电文 ) 监测站 ( 、 数据 自动 收集 中心 ) 和通 讯辅 助 系统 度 、 纬度 、 拔高度 、 海 时间 、 星使 用情 况 等基本 信 息 。开 发 卫 ( 数据 传输 ) 成 ; 组
维普资讯
圈
僵J技术 与僵J亿 I I
利 用 G S实现 高精 度 时钟 P
Re lz t n o r cs o k Ba e n GPS ai ai fP e ie Clc s d o o
周 强 丛 海 波 一 吴 希 杰 …
面上 , 每颗卫 星上都携 带 有铷原 子钟 或铯 原 子钟 , 供高 精 提
度 的 时钟 ;
() 3 用户装置部分 , 主要 由 G S接收机和卫 星天线 组成。 P 系统 的 2 4颗 G S卫 星在离地 面 2 20公 里 的上空 , P 00 以约 1 2
t n r eEet n s soit n 格式和二进制格式 。N - i a Ma n l r i scal ) ol i coc A i o E MA一0 8 13格式数据 是以 A C I S I 码形 式表 示 的。每条 信息 以
MC9S08MG64实时时钟的校准和补偿

-30
59
-58
-0.033567743
表 2 不同补偿间隔对应的补偿值(晶体误差=-2 ppm)
补偿间隔
补偿间隔 内总误差
补偿值
取整后的补偿值
补偿后误差 (ppm)
1
-2 -0.065536131
0
-2
2
-4 -0.131072262
0
-4
表 1 晶体误差对应的补偿值(补偿间隔< 128)
3
-6 -0.196608393
T= 32768 个振荡周期 Tcomp+/- =(32768 ± |V|)个振荡周期 由补偿值决定,第一秒钟(Tcomp)被减少或增加|V| 个振荡周期。其它的秒脉 冲时长仍然是 32768 个振荡周期。
补偿间隔和补偿值的选择可以根据晶体的误差和需要的补偿精度来决定。 表 1 中的例子说明如何根据补偿误差最小化来选择补偿间隔和补偿值。 表 2 列出了当晶体的误差为-2ppm ,不同补偿间隔的补偿值及补偿后的误差。根 据公式 2 为不同的补偿间隔计算补偿值;根据公式 3 可以计算出各补偿间隔和补 偿值组合补偿之后的误差。最佳补偿间隔(61)和补偿值(-4)是根据补偿后误 差最小而选取的。
公式 1 用来计算引入误差后的晶体振荡周期,它可以由晶体的误差定义 CrystalError = Δ f/f 推导得出。晶体误差一般用 ppm 表示,注意量纲的换算。
在表 1 中对不同的晶体误差列出了对应的补偿值和补偿后的误差。补偿间隔限制 在 127 之内。在补偿之后,如果测量的时间大于补偿间隔,测得误差大为减小。
1.2 温漂
上图是音叉型的晶体振荡频率随温度变化的曲线,它可以用抛物线方程描述为: Fdev = B (T - TQ)2 + K 其中:
Raspberry Pi树莓派NTP高精度对时服务解决方案

目录1Raspberry Pi树莓派系统NTP对时服务解决方案 (2)1.1解决方案概述 (2)1.2对时服务程序 (3)1.2.1main.cpp (3)1.2.2config_file.h (9)1.2.3config_file.cpp (9)1 Raspberry Pi树莓派系统NTP对时服务解决方案1.1 解决方案概述Raspberry Pi树莓派系统在实际的应用过程中,特别是作为产品级应用中,有对系统时间的精准度有高指标要求的应用场景,比如要求时间服务精度达到0.1秒内或者更高要求。
树莓派设备本身没有硬件时钟,因此每次设备通电开启后都需要重新授时来获得准确的系统时间,树莓派系统的时间主要是通过NTP协议同步网络时间来实现的。
本方案提供一套完整的高精度系统时间服务解决方案,思路如下:1、使用ntpdate取缔默认的ntp实现NTP对时服务功能;2、开发基于C语方的对时程序,实现NTP对时服务以及状态信息(最重要的是误差时间信息)产出,并提供专用调用接口服务,程序代码请参考下面章节。
3、配置crontab定时任务定期执行对时脚本,实现定期系统对时,为什么要定时对时呢?因为树莓派设备本身的守时精度不是特别高的,因此需要定期执行时间同步操作来校正系统时间。
4、实际应用程序在需要获取精准时间服务时,综合系统最新时间信息以及误差时间信息进行校正处理,得到精准时间,如下图所示。
在上图中为ntpdate执行对时服务后的状态信息,其中最重要的是offset状态数据,它代表的是与上次对时间的偏移量,也就是误差值,经过实际经验总结,如果对时后出现offset数值过大,需要进行重复多次执行同步,直到误差足够小(本人设定offset要小于0.01),要得到精准的时间,这个offset值起到关键作用,经大量实验证明,精准时间=当前系统时间+offset,当然前提是offset 误差值一定要足够小才可以这样处理。
以下附上使用ntpdate实现NTP对时服务功能代码:1.2 对时服务程序1.2.1 main.cpp#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include "config_file.h"#include <time.h>#include <sys/time.h>using namespace std;int getLogPath(char* retbuf, int len, int server){char configFile[] = "/home/pi/params/pi.ini";char defPath[] = "/home/usb/log/ntp.log";memset(retbuf, 0, len);char tmp[256];//resultint res = GetConfigStringValue(configFile, "PI_PAR","LOGSTATUS_DIR", tmp);if(res)//no value, set as default{strcpy(retbuf, defPath);cout << "error" << endl;}else{strcpy(retbuf, tmp);size_t len = strlen(tmp);if(tmp[len-1] != '/')strcat(retbuf, "/");const char* filename = server ? "ntp1.log\0" : "ntp.log\0";strcat(retbuf, filename);}return strlen(retbuf);}void WriteLog(const string& logfile, const string& msg, const string& server){struct timeval tv;gettimeofday(&tv, NULL);tm tm1 = *localtime(&_sec);char msgLog[512];sprintf(msgLog,"%04d-%02d-%02d %02d:%02d:%02d.%06d\n%s\n%s\0", tm1.tm_year+1900,tm1.tm_mon+1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min,tm1.tm_sec,_usec, msg.c_str(), server.c_str());// char path[256];// int len = getLogPath(path, sizeof(path));FILE * fp = fopen(logfile.c_str(), "w");if(fp != NULL){// int size = ftell(fp);fprintf(fp, "%s", msgLog);fclose(fp);}}string getCmdResult(const string &strCmd) // 这个是获取命令执行的结果,类似于system{char buf[1024] = {0};FILE *pf = NULL;if( (pf = popen(strCmd.c_str(), "r")) == NULL ){pclose(pf);return "";}string strResult;while(fgets(buf, sizeof buf, pf)){strResult += buf;}pclose(pf);size_t iSize = strResult.size();if(iSize > 0 && strResult[iSize - 1] == '\n') // linux {strResult = strResult.substr(0, iSize - 1);}return strResult;}unsigned parseArg(int argc, char** argv){unsigned ret = 0;int ch = 0;while((ch = getopt(argc, argv, "bd")) != -1 ){switch(ch){case 'b'://backup ntp serverret |= 0x01;break;case 'd'://debugret |= 0x02;default:break;}}return ret;}int main(int argc, char** argv){unsigned mode = parseArg(argc, argv);// cout << mode << endl;bool bDebug = (mode >> 1) & 0x1;if(bDebug){printf("Enter debug mode!\n");printf("Version 19.07.14.\n");}char tmp[1024];char configFile[] = "/home/pi/params/service.ini";int serverNo = mode & 1;char logfile[1024];int len = getLogPath(logfile, sizeof(logfile), serverNo);string filepath(logfile);cout << filepath << endl;int res = GetConfigStringValue(configFile, "SERVICE_PAR", "NTP_SERVICE", tmp);int use = 1;if(use == 0)//never{printf("Not use ntp.\n");string response("Fail.");WriteLog(filepath, response, "No use");return 0;}if(!serverNo)res = GetConfigStringValue(configFile, "SERVICE_PAR", "NTP_SERVER", tmp);elseres = GetConfigStringValue(configFile, "SERVICE_PAR", "NTP_SERVER1", tmp);string server(tmp);cout << server << endl;string response;if(res){printf("Error reading config file!\n");response = "Fail.";WriteLog(filepath, response, server);return -1;}else{char cmd[256];memset(cmd, 0, sizeof(cmd));sprintf(cmd, "sudo ntpdate %s\n", tmp);response = getCmdResult(cmd);string msg = response.empty() ? "Fail." : response;WriteLog(filepath, msg, server);return 0;}return 0;}1.2.2 config_file.h#ifndef CONFIG_FILE_H#define CONFIG_FILE_H#define SUCCESS 0x00 /*成功*/#define FAILURE 0x01 /*失败*/#define FILENAME_NOTEXIST 0x02 /*配置文件名不存在*/#define SECTIONNAME_NOTEXIST 0x03 /*节名不存在*/#define KEYNAME_NOTEXIST 0x04 /*键名不存在*/#define STRING_LENNOTEQUAL 0x05 /*两个字符串长度不同*/ #define STRING_NOTEQUAL 0x06 /*两个字符串内容不相同*/ #define STRING_EQUAL 0x00 /*两个字符串内容相同*/int CompareString(char *pInStr1,char *pInStr2);int GetKeyValue(FILE *fpConfig,char *pInKeyName,char *pOutKeyValue);int GetConfigIntValue(char *pInFileName,char *pInSectionName,char *pInKeyName,int *pOutKeyValue);int GetConfigStringValue(char *pInFileName,char *pInSectionName,char *pInKeyName,char *pOutKeyValue);#endif // CONFIG_FILE_H1.2.3 config_file.cpp/*************************************************************FileName : config.cFileFunc : 定义实现文件Version : V0.1Author : SunrierDate : 2012-05-09Descp : Linux下获取配置文件信息*************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "config_file.h"int GetConfigStringValue(char *pInFileName,char *pInSectionName,char *pInKeyName,char *pOutKeyValue){FILE *fpConfig;char szBuffer[150];char *pStr1,*pStr2;int iRetCode = 0;/*test*//*printf("pInFileName: %s !\n",pInFileName);printf("pInSectionName: %s !\n",pInSectionName);printf("pInKeyName: %s !\n",pInKeyName);*/memset(szBuffer,0,sizeof(szBuffer));if( NULL==( fpConfig=fopen(pInFileName,"r") ) )return FILENAME_NOTEXIST;while( !feof(fpConfig) ){if( NULL==fgets(szBuffer,150,fpConfig) )break;pStr1 = szBuffer ;while( (' '==*pStr1) || ('\t'==*pStr1) )pStr1++;if( '['==*pStr1 ){pStr1++;while( (' '==*pStr1) || ('\t'==*pStr1) )pStr1++;pStr2 = pStr1;while( (']'!=*pStr1) && ('\0'!=*pStr1) )pStr1++;if( '\0'==*pStr1)continue;while( ' '==*(pStr1-1) )pStr1--;*pStr1 = '\0';iRetCode = CompareString(pStr2,pInSectionName);if( !iRetCode )/*检查节名*/{iRetCode = GetKeyValue(fpConfig,pInKeyName,pOutKeyValue);fclose(fpConfig);return iRetCode;}}}fclose(fpConfig);return SECTIONNAME_NOTEXIST;}/*区分大小写*/int CompareString(char *pInStr1,char *pInStr2){if( strlen(pInStr1)!=strlen(pInStr2) ){return STRING_LENNOTEQUAL;}/*while( toupper(*pInStr1)==toupper(*pInStr2) )*//*#include <ctype.h>*/while( *pInStr1==*pInStr2 ){if( '\0'==*pInStr1 )break;pInStr1++;pInStr2++;}if( '\0'==*pInStr1 )return STRING_EQUAL;return STRING_NOTEQUAL;}int GetKeyValue(FILE *fpConfig,char *pInKeyName,char *pOutKeyValue) {char szBuffer[150];char *pStr1,*pStr2,*pStr3;unsigned int uiLen;int iRetCode = 0;memset(szBuffer,0,sizeof(szBuffer));while( !feof(fpConfig) ){if( NULL==fgets(szBuffer,150,fpConfig) )break;pStr1 = szBuffer;while( (' '==*pStr1) || ('\t'==*pStr1) )pStr1++;if( '#'==*pStr1 )continue;if( ('/'==*pStr1)&&('/'==*(pStr1+1)) )continue;if( ('\0'==*pStr1)||(0x0d==*pStr1)||(0x0a==*pStr1) )continue;if( '['==*pStr1 ){pStr2 = pStr1;while( (']'!=*pStr1)&&('\0'!=*pStr1) )pStr1++;if( ']'==*pStr1 )break;pStr1 = pStr2;}pStr2 = pStr1;while( ('='!=*pStr1)&&('\0'!=*pStr1) )pStr1++;if( '\0'==*pStr1 )continue;pStr3 = pStr1+1;if( pStr2==pStr1 )continue;*pStr1 = '\0';pStr1--;while( (' '==*pStr1)||('\t'==*pStr1) ){*pStr1 = '\0';pStr1--;}iRetCode = CompareString(pStr2,pInKeyName);if( !iRetCode )/*检查键名*/{pStr1 = pStr3;while( (' '==*pStr1)||('\t'==*pStr1) )pStr1++;pStr3 = pStr1;while( ('\0'!=*pStr1)&&(0x0d!=*pStr1)&&(0x0a!=*pStr1) ) {if( ('/'==*pStr1)&&('/'==*(pStr1+1)) )break;pStr1++;}*pStr1 = '\0';uiLen = strlen(pStr3);memcpy(pOutKeyValue,pStr3,uiLen);*(pOutKeyValue+uiLen) = '\0';return SUCCESS;}}return KEYNAME_NOTEXIST;}int GetConfigIntValue(char *pInFileName,char *pInSectionName,char *pInKeyName,int *pOutKeyValue){int iRetCode = 0;char szKeyValue[16],*pStr;memset(szKeyValue,0,sizeof(szKeyValue));iRetCode = GetConfigStringValue(pInFileName,pInSectionName,pInKeyName,szKeyValu e);if( iRetCode )return iRetCode;pStr = szKeyValue;while( (' '==*pStr)||('\t'==*pStr))pStr++;if( ('0'==*pStr)&&( ('x'==*(pStr+1))||('X'==*(pStr+1)) ) )sscanf(pStr+2,"%x",pOutKeyValue);elsesscanf(pStr,"%d",pOutKeyValue);return SUCCESS; }。
PPS (精密时间同步)

PPS (精密时间同步)PPS(精密时间同步)是一种用于确保计算机和其他设备之间时间同步的技术。
它的作用是通过提供精确的时间信号,使得参与者能够在精确的时间点进行协调操作。
原理PPS的原理基于一个高精度的参考时钟源,通常是GPS(全球定位系统)。
GPS通过卫星定位提供精确的时间信号,这种信号可以用作参考时钟源。
接收到GPS信号的设备可以使用这个参考时钟源来校正自身的时钟,并通过PPS信号通知其他设备。
应用PPS主要应用于需要精确时间同步的领域,例如科学研究、网络通讯、金融交易等。
以下是一些常见的应用场景:1. 科学实验:精确的时间同步对于科学实验非常重要,特别是需要多个设备协同工作的实验。
PPS可以确保实验设备在同一时间点开始、结束或进行特定操作。
2. 金融交易:在金融交易中,时间的精确性非常关键。
PPS可以用于确保各个交易所的计算机系统在同一时间接收并处理交易请求,以避免出现时间偏差导致的错误。
3. 通信网络:在网络通信中,时间同步对于确保数据的准确性和顺序非常重要。
PPS可以用于确保不同设备之间的时间一致性,从而提高网络通信的可靠性和性能。
4. 数字广播:PPS可以应用于数字广播系统中,确保广播信号在不同设备上的播放时间同步,以提供更好的用户体验。
5. 科研观测:在科研观测中,时间的精确性对于数据的准确分析和解读至关重要。
PPS可以用于确保观测设备记录数据的时间一致性,从而提高科研结果的准确性。
总结PPS(精密时间同步)是一种用于确保计算机和其他设备之间时间同步的技术。
它通过提供精确的时间信号,使得参与者能够在精确的时间点进行协调操作。
PPS在科学实验、金融交易、通信网络、数字广播和科研观测等领域具有广泛应用。
它提供了时间同步的解决方案,确保各个设备的时间保持一致,从而提高系统的可靠性和性能。
以上是PPS(精密时间同步)的相关介绍。
如有其他问题,请随时向我提问。
纳秒级授时对时方案

纳秒级授时对时方案
在现代社会中,时间的准确性对于各种行业和领域来说都至关重要。
无论是金融交易、科学研究还是通信网络,精确的时间同步都是关键。
为了满足这一需求,纳秒级授时对时方案应运而生。
纳秒级授时对时方案是一种能够提供高精度时间同步的技术。
它的实现基于先进的时钟同步协议和先进的硬件设备。
通过这种方案,我们可以实现纳秒级的时间同步,确保各个系统和设备之间的时间一致性。
首先,纳秒级授时对时方案需要使用精密的时钟源。
现代的高性能计算机和网络设备通常配备了高精度的时钟。
这些时钟可以提供纳秒级的时间分辨率,确保时间的准确性和一致性。
其次,纳秒级授时对时方案需要使用先进的时钟同步协议。
一种常用的协议是网络时间协议(NTP)。
NTP可以通过网络同步各个设备的时间,确保它们之间的时间同步误差在纳秒级别。
另外,纳秒级授时对时方案还需要在硬件设备上进行优化。
高性能的时钟同步芯片和精密的时钟分频电路可以提高时间同步的精度。
此外,使用高速网络传输数据也可以减少时间同步的延迟,提高同步的准确性。
需要注意的是,纳秒级授时对时方案在实际应用中还面临一些挑战。
例如,网络延迟、时钟漂移等因素都可能影响时间同步的准确性。
因此,对于一些对时间要求非常严格的应用场景,可能需要采用更加复杂和精密的方案来保证时间的准确性。
综上所述,纳秒级授时对时方案是一种能够提供高精度时间同步的技术。
它可以应用于各个领域,确保系统和设备之间的时间一致性。
然而,在实际应用中还需要解决一些挑战,以进一步提高时间同步的准确性和可靠性。
高精度实时时钟完全解决方案-SD2300系列

管脚图:
管脚功能表:
标号
功能
特征
VBAT
外加备用电池引脚
由于在模块内部有电池,故在其电池能量未耗尽之前不接
TEST
测试
内部电池电压检测脚(通常不接)
GND
负电源
SCL
串行时钟输入脚,由于在SCL上升/下降沿处理信号,要特别注意SCL信号的上升/下降升降时间,应严格遵守说明书。
SD2300全系列性能特点:包括SD2300/SD2101(A/B/C/D/E)/SD2303/SD2304/SD2310及SD2300L
低功耗:典型值1.0μA(VDD=3.6V,Ta=25℃,SD2300A)
工作电压:3.0V~5.5V(其中NVSRAM在4.5V~5.5V作)
工作温度:民用级0℃~70℃,工业级-40℃~85℃。
INTRB
报警中断B输出脚,根据控制寄存器1与控制寄存器2来设置其工作的模式,当定时时间到达时输出低电平或时钟信号。它可通过重写控制寄存器来禁止。
N-沟道开路输出(与VDD端之间无保护二极管
VDD
正电源Biblioteka 16SOP:SD2303AS/SD2310AS
SD2300系列型号:
型号
功能
封装
资料下栽
(pdf格式)
一次性电池
晶振
充电电池
NVSRAM
EEPROM
数字温度传感器
SD2300A/B/C/D/EP
DIP24
SD2300A VER1.30
SD2300RAMVER1.30
SD2300F/B/C/D/ELP
SD2310ASI
SOP16
SD2310ASI VER1.00
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
·RESET 位与动作说明(含时序图例) RESET 位设定为“1”后,计时电路的低于 1 秒的计时器将在命令结束时被重置。欲在特定时间开始准确计时时,可在设定时
间后进行重置,之后将每秒更新秒位计时器。
命令输入期间 (CE=”H”or S-P 间)
命令
重置及清除进位信息 sec min hour week
处于重置待机状态
RESET
命令结束时执行重置
低于 1 秒分频计时器
(包括 1/100 秒)
n+1 n+2 n+3 n+4 n+5 0
+1 +2
+21 +22 +23 +24 +25 +26 +27 +28 +29 0 +1 +2 +3 +4 +5 +6
设定秒寄存器后,请在不到 1 秒的时间内执行重置。 该时间达到 1 秒以上时,秒计时器进位 (因为重置时不清除进位信息)。
·周日的设定
[Bank1] Reg(3)h←(20)h Write[周日]
·时间的设定
[Bank1]
Reg(2)h←(15)h Write[点]
*3
Reg(1)h←(30)h Write[分]
Reg(0)h←(00)h Write[秒]
*4 No
设定确认 OK?
·年月日的设定
[兼容寄存器]
Reg(06)h←(14)h Write[年]
技术说明
使用实时时钟模块的高精度对时
搭载秒以下时间调节功能的爱普生实时时钟模块之解说
【序文】 近年,随着电波手表的普及以及可从 NTP 时间服务器获取标准时间等,获取极为准确的时间已不再繁琐劳神。因此,用于金
融、交通管理、电力控制、安全及体育等应用系统设计一般均以可参照正确时间为基础。这类处理系统在数据输入、输出部分必 须设置为数众多的终端设备,且这些终端设备也需要有正确的时间。为了回应上述需求,爱普生向市场提供了内建以高稳定频率 振荡的石英晶体单元的实时时钟模块。
2
技术说明
2.使用 ERST 位对时例 以硬件进行的 ERST 位对时可事先设定寄存器后输入事件信号,以此调节时间。该方法与之前说明的使用 RESET 位对时相比,
不会因软件处理时间而产生时间偏差,因此能够以更准确的时间实现同步。
·关联寄存器
●4803系列(Bank3)
Address
功能
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
很多爱普生的实时时钟模块搭载了 RESET 功能,可使用软件对上述低于 1 秒的误差进行调节。但是,使用软件调节时间的方 法会因软件处理时间而产生时间偏差。这对需要以精确时间实现同步的用户来说,这个误差也须解决。为此,4803 系列和 8803 系列又搭载了使用硬件调节时间的 ERST 功能。
本次说明内建 TCXO 数字式实时时钟模块 4803 系列与 8803 系列所搭载的用于调节低于 1 秒时间的 RESET 功能及 ERST 功 能,并使用时序图等以具体实例进行说明。
RTC 计时信息
n
n
t
t
t+1
(1/100 秒位)
(00)
(00)
(00)
请务必注意的是,该功能在 GPS 模块无法正确接收卫星信息的环境下有可能不能准确对时。
如至今为止的说明所示,爱普生在向顾客提供高性能(=时钟精度)实时时钟模块的同时,还将提供搭载顾客所需功能的产品, 为构建高精度同步时间处理系统而助力。而且,爱普生的实时时钟模块在出厂前均调整了频率精度,在保证了精度的基础上提供给 顾客,所以使用时不需要调节频率,为顾客提高设计效率和产品质量做出贡献。
F
事件控制
ECP
EHL
ET1
ET0
ERST
●8803系列(Bank3)
Address
功能
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
2F
事件控制
ECP
EHL
ET1
ET0
ERST
·ERST 位与动作说明(含时序图例) ERST 位设定为“1”后,计时电路的低于 1 秒的计时器将在检测出输入 EVIN 端子的外部事件的同时被重置。欲在特定时间开
重置及清除进位信息
处于重置待机状态
命令
sec min hour week
ERST
向 EVIN 端子输入 事件信号
发生事件时执行重置
输入高电平信号
低于 1 秒分频计时器
(包括 1/100 秒)
n+1 n+2 n+3 n+4 n+5 0
+1 +2
+21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 0 +1 +2 +3
间信息。
1.使用 RESET 位对时例 以软件进行的 RESET 位对时可通过操作实时时钟模块的寄存器调节时间。除了 4803 系列与 8803 系列以外,很多爱普生的
实时时钟模块产品采用了该手法。
·关联寄存器
●4803 系列(Bank1、2)
Address
功能
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
但是,即便上述产品具备高时间精度,有些顾客因用途需要亦要求对低于 1 秒的微小误差进行调节。实时时钟模块生成 1 秒的 原理是以 32.768kHz 的石英晶体单元做为波源,通过分频而获得。如果需要让多台设备同时执行某一动作,则有必要对低于 1 秒的误差进行调节,使各设备的时间保持一致。4803 系列与 8803 系列产品可调节低于 1 秒的误差,以回应这种需求。
(*a)进行高精度对时时的信号检测不去除输入切跳,但最小脉冲宽度保持时间必须达到 367 微秒以上,以便在内部时钟实现计时动作和 EVIN 端子输入的同步。
3
技术说明
·使用 ERST 位的高精度对时设定例 时间与日历的设定例【设定值:2014 年 4 月 18 日[周五] 15:30:00】
4803 系列
*4 No
设定确认 OK?
Yes
低于 1 秒计时器执行重置 将 EVIN 端子的输入从低电平改为高电平后, *5 执行重置,重新开始计时
Yes
低于 1 秒计时器执行重置 将 EVIN 端子的输入从低电平改为高电平后, *5 执行重置,重新开始计时
*1) ERST 位为“1”时低于 1 秒的计时器进入重置待命状态,又进入等待外部事件输入的状态。 *2)、*3) 数据是二进制编码十进制。 *4) 查看写入的数据,确认是否写入了需要的数据(可省略)。 *5) 当 EVIN 端子输入所需的外部事件时,低于 1 秒计时器被重置。 不受 ET0 和 ET1 位所设定的去除 EVIN 端子输入切跳的设定所限,将立即执行计时器的重置(但受内部元件延误的影响将产生几十毫 微秒的延误)。
Reg(05)h←(04)h Write[月]
*2
Reg(04)h←(18)h Write[日]
·周日的设定 [兼容寄存器] Reg(03)h←(20)h Write[周日]
·时间的设定
[兼容寄存器]
Reg(02)h←(15)h Write[点]
*3
Reg(01)h←(30)h Write[分]
Reg(00)h←(00)h Write[秒]
1
技术说明
【使用爱普生实时时钟模块的高精度对时方法(低于 1 秒时间的调节)】
4803 系列与 8803 系列爱普生实时时钟模块可使用以下两种方法,对低于 1 秒的时间进行高精度调节:
1.使用 RESET 位对时
:应用软件的对时方法
2.使用 ERST 位对时
:应用硬件的对时方法
下文详细说明使用上述两种对时方法相关的寄存器、重置的动作及设定例。使用上述方法之前,务必先从外部输入已同步的时
5
·SEC 寄存器的设定(清除进位信息) [Bank1] Reg(0)h←(00)h Write[秒]
·低于 1 秒计时器重置待命
[Bank3]
*1
Reg(F)h←(41)h Write
(ECP=0,EHL=1,ET1=0,ET0=0,ERST=1)
8803 系列
·SEC 寄存器的设定(清除进位信息) [兼容寄存器] Reg(00)h←(00)h Write[秒]
始准确计时时,可在设定时间后向 EVIN 端子输入事件,之后将每秒更新秒位计时器。EHL 位为“0”时,向 EVIN 端子输入信 号的事件检测结果为低电平;EHL 位为“1”时则检测出高电平(*a)。以下是 EHL 位设定为“1”(检测出高电平)时的动作例。
命令输入期间 (CE=”H”or S-P 间)
该产品群中,内建 TCXO 数字式实时时钟模块、具有温度补偿功能的高精度产品如下:RX-4803SA/LC、RA4803SA(串行接 口,以下称为“4803 系列”)及 RX-8803SA/LC、RA8803SA(I2C 接口,以下称为“8803 系列”)。这些产品可在-40 至+85℃ 的温度范围内将频率输出精度保持在±3.4×10-6(相当于月差 9 秒),即每天平均时间误差控制在±压
(输入 RTC 的 EVIN)
EVIN 接收
EVIN 接收
TD(自 GPS)
(非同步串联输出数据)
电压 电压
时间 t-1 的串联数据