Chinaunix

标题: s3c2410rtc 时间2天慢了5秒 [打印本页]

作者: jn200002    时间: 2008-06-13 09:54
标题: s3c2410rtc 时间2天慢了5秒
如题,据说能从软件调整误差,可从哪里入手呢~?这几天在看驱动,没注意到里面有调整的公式啊.手册的no.17里就给了一个中断周期公式吧~
作者: bitmilong    时间: 2008-06-13 10:47
首先確定,你用什麼工具測量,如何保證測量工具的準確性
作者: jn200002    时间: 2008-06-13 10:53
标题: 回复 #2 bitmilong 的帖子
这个....~  我就用hwclock 根据 PC机的时间进行设定的,方法土~但是在设定完后,显示时间的时候与PC机时间一致~ 由于时间短看不出误差来,所以,就板子跑了2天,结果回头再一看差了5秒多,这样虽然不够精确,也能说明问题吧~ 呵呵,偶土族的,所以用的土方子~
作者: bitmilong    时间: 2008-06-13 11:13
标题: 回复 #3 jn200002 的帖子
我做時鐘的時候也很苦惱這個事情,精確的時鐘買來很貴的,就不要提原子鍾之類了,呵呵

好一點的秒表可能會准一些(如果多準備幾只就會加大樣本空間,增加精確度),精度0.1s
示波器測量可以準確一些,但是樣本空間太小,精度為1us(取決於示波器)
高精度時鐘都是很貴的

不知道有啥不土方子可以解決的
作者: jn200002    时间: 2008-06-13 11:24
标题: 回复 #4 bitmilong 的帖子
汗~ rtc 寄存器可以调整吗?我没找到这个寄存器,这种软件手段调整不了吗~?
作者: bitmilong    时间: 2008-06-13 11:34
原帖由 jn200002 于 2008-6-13 11:24 发表
汗~ rtc 寄存器可以调整吗?我没找到这个寄存器,这种软件手段调整不了吗~?


寄存器不可以調整

可以調整晶體的匹配電容
作者: jn200002    时间: 2008-06-13 11:37
恩,试试吧看看成不成,3Q~
作者: jn200002    时间: 2008-06-16 15:02
标题: 回复 #6 bitmilong 的帖子
木有电容~居然没有~ 板上其他几个晶体都有,就这里没有~板设计的时候就没.
作者: bitmilong    时间: 2008-06-16 15:12
原帖由 jn200002 于 2008-6-16 15:02 发表
木有电容~居然没有~ 板上其他几个晶体都有,就这里没有~板设计的时候就没.



沒有設計電容的位置嗎?

晶體沒有電容是可以起振的,但是如果想控制晶體振蕩的頻率就必須加電容的. 這塊板子設計有問題.

我們做實時時鐘最主要的方法是調節電容.

還有一種就是芯片內部會有一個晶振校准的寄存器,可以通過改變這個寄存器的值來改變內部晶振的頻率, 做8位機時用內部晶振才會有用的

最無耐之舉就是軟件補償(強烈不推薦)

就是你多測量幾個樣品,取均值,比如2天慢5秒,通過這個計算出每秒鐘差多少us,然後軟件按每單位進行補償(每單位可以是每s,ms,us,ns之類)
這種很被動的,out of control
作者: jn200002    时间: 2008-06-16 16:12
标题: 回复 #9 bitmilong 的帖子
真没有,晶体的两端直接接的DS1302 的 2 3 脚另一边接的BAT,据维修这边的说,只要时间不准,一般换下32768K就行.
作者: bitmilong    时间: 2008-06-16 16:30
标题: 回复 #10 jn200002 的帖子
維修的當然會這麼說,畢竟不是designer,他是在設計好的版子上出了問題時才會進行維修,不用改設計的

晶振本身就跟環境溫度相關的,沒有電容就沒有調整,不會很准的

如果你是設計或測試,可以在管腳和晶體間飛上個10pF電容試下
作者: fjingxu    时间: 2008-06-17 08:21
有毛病! !!!!!!!!!
作者: jn200002    时间: 2008-06-17 10:52
标题: 回复 #11 bitmilong 的帖子
呵呵~ 我这么次的还称为不上工程师~  测试一下
我查了下,好象自激震荡都是把电容并联接地的,您说的是,让我在晶体脚与芯片脚间(2,3) 各串联一只10pF的电容么?这是普通的LC~?


问下MR.米龙,象这样的的人是捣乱的么?刷这么多...

[ 本帖最后由 jn200002 于 2008-6-17 10:55 编辑 ]
作者: bitmilong    时间: 2008-06-17 10:55
标题: 回复 #646 jn200002 的帖子
不好意思, 電容是並聯接地
作者: nicozhou    时间: 2008-06-17 11:02
mark  一下,做个记号
作者: jn200002    时间: 2008-06-17 11:11
标题: 回复 帖子
呵呵,我已经把一脚拿起来,底下串了个10p的电容了~


我再拿个板子换一下~~ 我再试试


找了一个DS1302的应用的图:

[ 本帖最后由 jn200002 于 2008-6-17 11:35 编辑 ]

ttttt200512257219204.jpg (15.6 KB, 下载次数: 38)

ttttt200512257219204.jpg

作者: bitmilong    时间: 2008-06-17 19:40
标题: 回复 #649 jn200002 的帖子
剛從內核版淘到一個貼子給你參考下
http://linux.chinaunix.net/bbs/v ... p%3Bfilter%3Ddigest


原文出自:http://www.linuxforum.net
作者:tommytang
=============================

大部分的PC机中都有两个时钟源,它们分别叫做RTC(Real Time Clock)和OS时钟。RTC也叫CMOS时钟,它是PC主板上一块依靠电池供电的芯片(晶振)。即使系统断电,RTC也可以维持日期和时间。由于它独立于操作系统,所以也被称为硬件时钟,它为整个计算机提供一个计时标准,是最底层的时钟数据。OS时钟并不是本质意义上的时钟,它实际上是硬件(定时/计数器)和软件(时钟中断处理程序)结合的产物。定时/计数器(Time Stamp Counter或TSC)所采用的最典型的芯片是8253/8254可编程定时/计数芯片。定时/计数器从RTC接收输入脉冲,并对接收到的脉冲计数,每次计数到期,定时/计数器就产生一个输出脉冲,而后再从头开始另一次计数。在开机时,操作系统取得RTC中的时间数据来初始化OS时钟,然后通过定时/计数芯片的向下计数形成OS时钟。

可编程定时/计数器总体上由两部分组成:计数硬件和通信寄存器。通信寄存器包含有控制寄存器、状态寄存器、计数初始值寄存器(16位)、计数输出寄存器等。通信寄存器在计数硬件和操作系统之间建立联系,用于二者之间的通信。操作系统通过这些寄存器控制计数硬件的工作方式、读取计数硬件的当前状态和计数值等信息。在操作系统内核初始化时,内核向定时/计数器写入控制字和计数初值,而后计数硬件就会按照一定的计数方式对晶振产生的输入脉冲进行计数操作:计数器从计数初值开始,每收到一次脉冲信号,计数器就减1。当计数器减至0时,就会输出高电平或低电平(输出脉冲),然后从计数初值开始重复另一次计数,从而产生出一个输出脉冲。定时/计数器产生的输出脉冲是OS时钟的硬件基础,因为这个输出脉冲将接到中断控制器上,定期产生中断信号。这个中断就是时钟中断。操作系统利用时钟中断维护OS时钟的正常工作,每次时钟中断,操作系统的时间计数变量就加1。

操作系统对可编程定时/计数器进行有关初始化,然后定时/计时器就对从晶振输入的脉冲进行计数(分频),产生三个输出脉冲Out0、Out1、Out2,三个输出脉冲分别输出到中断控制器、DRAM和扬声器。Out0送到中断控制器的0号管脚,触发周期性的时钟中断。每个时钟中断称为一个时钟“滴答” (tick)。Out0的输出频率就是产生时钟中断的频率,也就是tick的频率。Linux操作系统中,这个频率定义为:

#define HZ 100

即每秒100次始终中断。

计算机内部的时间以tick为单位,每一次时钟滴答,系统时间就会加1。Linux利用全局变量jiffies表示自系统启动以来的时钟滴答数目。其定义为:

unsigned long volatile jiffies=0;

除了jiffies外,Linux还提供了更符合人们习惯的时间表示方式,即用一个数据结构表示时间,其定义为:

struct timeval {
int tv_sec; //秒
int tv_usec; //微秒
}

在操作系统内定义更符合大众习惯的时间表示:年、月、日。当然,所有的时间都建立在jiffies上。

因此,RTC处于最底层,提供最原始的时钟数据。OS时钟建立在RTC之上,初始化完成以后将完全由操作系统控制,和RTC脱离关系。操作系统通过OS时钟提供给应用程序所有和时间有关的服务。由于OS时钟基本是一个软件变量,其表达时间的方式在各个操作系统上互不相同。
作者: guohua219    时间: 2008-06-18 09:09
学习了,很好的贴子,但被人搅和了
作者: jn200002    时间: 2008-06-18 09:49
回复 bitmilong

非常感谢~!! 我反复看了3遍~(头脑反应慢~) 对这块儿又清楚了不少~ 我对照了一个讲解kernel时钟中断的文章看完,也又看了看DS1302的应用的文章,对于时钟这块了解一些了,可能由于还是遗漏了一部分内容,所以对分频的作用还是不解~ 我查了查资料,(关于音箱的)说分频分成各个频段后,能够降低各个频段之间的干扰~ (而针对单片机的没说清楚,只是说了执行指令需要时间~汗~)而上面的资料也说了,分频后提供了3个频率,可究竟为什么需要分频呢? 这个问题问的挺白~但是我确实不知道.

[ 本帖最后由 jn200002 于 2008-6-18 09:58 编辑 ]
作者: jn200002    时间: 2008-06-18 10:00
标题: 回复 #651 guohua219 的帖子
据说是MASK  我也不解...




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2