查看: 2258|回复: 25
|
real time clock
[复制链接]
|
|
有没有人可帮帮我???
我正要做个real time clock 时要用basic来写的。
至少可指点小弟一下。。。
thanks sifu.... |
|
|
|
|
|
|
|
楼主 |
发表于 28-12-2007 02:22 AM
|
显示全部楼层
忘了注我是用 pic16f877a 的 mcu
help help 我啦大佬 !!! |
|
|
|
|
|
|
|
发表于 28-12-2007 10:51 AM
|
显示全部楼层
原帖由 zethteh 于 28-12-2007 02:22 AM 发表
忘了注我是用 pic16f877a 的 mcu
help help 我啦大佬 !!!
功课?
什么都没讲, 大大大大大大大大大大大大大大大大大大大大大大佬都很难帮你啦。
你要的是什么real time clock.是external ic 的real time clock还是自己用pic写real time clock?
用external的话,rtc ic number 是什么?? |
|
|
|
|
|
|
|
楼主 |
发表于 28-12-2007 11:37 AM
|
显示全部楼层
大大佬,谢谢你的回复我要的是自己用pic写real time clock 我的pic是 pic16f877A 有没有办法???
if 我的xtal 是用20Mhz 的能做吗??? |
|
|
|
|
|
|
|
发表于 28-12-2007 12:20 PM
|
显示全部楼层
原帖由 zethteh 于 28-12-2007 11:37 AM 发表
大大佬,谢谢你的回复我要的是自己用pic写real time clock 我的pic是 pic16f877A 有没有办法???
if 我的xtal 是用20Mhz 的能做吗???
可以写。
不过问题就是关电过后时间就会reset.
简单数学。 20mhz = 5 mips.
如果用interrupt 写, let say interrupt period = 10ms.
一秒= 100 个10ms.
一分钟 = 60 秒。
一小时 = 60分钟。
一天= 24个小时。
一个礼拜=7天。
用几个memory来hold 秒,分,时,天。在适当的时候increment / decrement。
你用什么language来写?asm, c, basic? |
|
|
|
|
|
|
|
楼主 |
发表于 28-12-2007 05:09 PM
|
显示全部楼层
basic 但是realtime clock 好像很复杂, 对吧?
but somehow, 我对picbasic 的coding不是很熟。
你有什么sample code 吗??? |
|
|
|
|
|
|
|
发表于 28-12-2007 07:20 PM
|
显示全部楼层
原帖由 zethteh 于 28-12-2007 05:09 PM 发表
basic 但是realtime clock 好像很复杂, 对吧?
but somehow, 我对picbasic 的coding不是很熟。
你有什么sample code 吗???
以前有写过。 in c language。要找找看。
如果要用basic写,你先打好你basic的基础。这样比较容易做porting. |
|
|
|
|
|
|
|
楼主 |
发表于 30-12-2007 01:05 PM
|
显示全部楼层
回复 7# 的帖子
我已写了些but 觉得时间有蛮大的差距,大约一小时out 15 sec
请问能不能tuned tuned 呢,是不是要放delay time??? |
|
|
|
|
|
|
|
发表于 30-12-2007 01:45 PM
|
显示全部楼层
原帖由 zethteh 于 30-12-2007 01:05 PM 发表
我已写了些but 觉得时间有蛮大的差距,大约一小时out 15 sec
请问能不能tuned tuned 呢,是不是要放delay time???
呵呵!我还不太了解你们所指的 realtime clock 的用途与目的呢! 可以告诉我们你要做的事项吗?为什么 16F877 要用到 20MHz 的 crystal 呢?有时候是看你的需要,而不是想要,也不要以为快就好。你的计时器一个小时相差 0.41%, 误差是太大了。当然是能调整咯!不过是否需要调整,而且要如何调整,就得看你要做的事项了。 |
|
|
|
|
|
|
|
发表于 31-12-2007 12:37 AM
|
显示全部楼层
原帖由 zethteh 于 30-12-2007 01:05 PM 发表
我已写了些but 觉得时间有蛮大的差距,大约一小时out 15 sec
请问能不能tuned tuned 呢,是不是要放delay time???
你用什么technique? polling? interrupt?
通常mcu写rtc不会很准。要准就要读他的assembly. 算execution time.才能tune到准。
所以建议用real time clock ic.容易。 又准。 |
|
|
|
|
|
|
|
发表于 31-12-2007 01:46 AM
|
显示全部楼层
对于 pic16F877A 的话,你可以用 32.768kHz 的crystal , 你的 rtc 将会非常准,要看你用的 crystal 是多少 ppm 了。因此在第九楼我就特别追问你要做的事项了。目的是要知道你要求的准确性有多高,mcu 执行的速度真的需要这么快吗?如果使用 mcu 要达到 rtc 请务必使用 interrupt 的方法,polling 这方法将会影响你的准确性,而且受限制。不鼓励用 intruction 来计算,原因是误差比较大,纵然是汇编语言也不例外。 |
|
|
|
|
|
|
|
发表于 31-12-2007 09:31 AM
|
显示全部楼层
原帖由 rothmans 于 31-12-2007 01:46 AM 发表
对于 pic16F877A 的话,你可以用 32.768kHz 的crystal , 你的 rtc 将会非常准,要看你用的 crystal 是多少 ppm 了。因此在第九楼我就特别追问你要做的事项了。目的是要知道你要求的准确性有多高,mcu 执行的速度真的 ...
如果用external clock 呢?
另外接一个 1second 的 clock 来interrupt ( 时钟里面的quartz)
准确性会高吗?(经过MCU) |
|
|
|
|
|
|
|
发表于 31-12-2007 09:52 AM
|
显示全部楼层
原帖由 rothmans 于 31-12-2007 01:46 AM 发表
对于 pic16F877A 的话,你可以用 32.768kHz 的crystal , 你的 rtc 将会非常准,要看你用的 crystal 是多少 ppm 了。因此在第九楼我就特别追问你要做的事项了。目的是要知道你要求的准确性有多高,mcu 执行的速度真的 ...
其实32.768khz的crystal也是会差一点。只是比较准而已。 因为mcu始终要有execution time.
用asm算可以去到很准,不懂为什么你讲误差比较大。
以前写过soft rtc.最后没用, 就是觉得tuning不如用ic算了吧。又省ram, rom等mcu资源。 |
|
|
|
|
|
|
|
发表于 31-12-2007 09:55 AM
|
显示全部楼层
原帖由 chan1314 于 31-12-2007 09:31 AM 发表
如果用external clock 呢?
另外接一个 1second 的 clock 来interrupt ( 时钟里面的quartz)
准确性会高吗?(经过MCU)
这个方法也是很准。depend to 你那1second的准确性有多高。
这个方法就不需要考虑到execution 所浪费的时间。 |
|
|
|
|
|
|
|
发表于 31-12-2007 10:18 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 31-12-2007 10:43 AM
|
显示全部楼层
原帖由 rothmans 于 31-12-2007 10:18 AM 发表
呵呵!这要看你的需求了,为什么要用external clock 呢?既然 mcu 已经有这个资源了,为什么不用?还特地接个外部时钟。。 (除非资源不足够了,就另当别论).
抱歉,没给大家说明白,我的意思是用mcu ...
哦。。。原来如此。看来rothmans大大误会我的意思了。。当然我也不建议polling.不过我说指的算instruction是当你要进interrupt service routine的时候, 一定会有一点delay。
假设每1ms interrupt一次。一次interrupt delay 1us.
1秒delay 1ms. 一个钟 = 3600秒= 3600*1ms = 3.6秒。
我相信楼主那15秒时这个原因而来。解决的方法就是读seembly code.找出interrupt delay,再从timer value下手修改。 |
|
|
|
|
|
|
|
发表于 31-12-2007 01:15 PM
|
显示全部楼层
其实, 要用MCU做RTC, 可以做到很准确的。。。是有一个简单的方法的。。。。(我的商业秘密, 所以不要问, 不好意思。。。)
我做过Game 的Score baord, 那种大型运动会用的stop watch + 计分表,是那时研发出来的技术, 几乎是零误差, 有误差也是crystal引起的。。。
一般的Interrupt 方法,也会有误差 , 要想办法纠正误差, 是重点。。。
有些人想到用preload timer,可是还是有误差, interrupt latency 的问题。。。。
解决了 , 就可以做到很准确了。。。
用External RTC, 32,768KHz 是重点。。。。一般能买到的是100ppm,还随温度改变, 还是不够好。。。要较好的, 可以用IC DS32Khz (+/- 2ppm, by Maxim), 一年的误差只有+/-60秒。。。。
还有一种方法, 就是用AC的50Hz, 这是一般旧式RTC clock的做法。。。。
TNB会定时的调成50.0Hz。。。
这里我发一个问题给大家猜猜看,
那种我们在马路边/户外看到的电子时钟,sign board型那种LED 钟, 是怎样的。。。。
1. 它的时间准确吗?
2. 它挂在电灯柱上那么高,谁人和怎样去调它的时间?
3. 什么原理?
(如果你不懂我说的那种钟, 那很抱歉。。。, 毕竟并不多见)
[ 本帖最后由 pic 于 31-12-2007 01:20 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 31-12-2007 05:19 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 31-12-2007 08:13 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 31-12-2007 09:09 PM
|
显示全部楼层
hey, 各位大佬别把话题扯得太远啦。
其实我正用着development board with xtal 在里面了,所以以为可以用现有的20Mhz xtal 来做我的real time clock。
除了以上各位大佬所讲的,我现在的这个setting真的很难tune比较准吗???
我也有听过maxim的那粒chip, 不知道有多贵呢??? |
|
|
|
|
|
|
| |
本周最热论坛帖子
|