WhyCan Forum

本站无需注册,无需积分,无需回复可下载所有资料,如果真的喜欢小站,请您注册之后请至少回复一个帖子激活Id,谢谢支持! 站长QQ: 516333132 (挖坑网/填坑网) admin@whycan.cn

您尚未登录。

#1 2019-05-20 17:23:54

605364021
会员
注册时间: 2018-10-23
累计积分: 249

关于V3开发板运行QT程序中Qtime类获取当前时间的问题

我在v3s上运行QT程序,输出结果中使用了QTime类进行当前时间的获取,但是获取的结果跟当前时间好像完全不相关,程序在Ubuntu上运行时输出是正确的,请问这个问题可以怎么解决?是开发板的设置问题?

离线

#2 2019-05-20 17:31:37

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,757

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

命令行输入 date 看下时间是多少?

离线

#3 2019-05-20 18:47:16

605364021
会员
注册时间: 2018-10-23
累计积分: 249

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

晕哥 说:

命令行输入 date 看下时间是多少?

好像是这个硬件系统时间问题,我显示尝试着移植ntpdate进行网络时间同步,或者还是有其他解决方法?我的程序需要实时获取当前时间

离线

#4 2019-05-20 19:32:38

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,757

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

605364021 说:
晕哥 说:

命令行输入 date 看下时间是多少?

好像是这个硬件系统时间问题,我显示尝试着移植ntpdate进行网络时间同步,或者还是有其他解决方法?我的程序需要实时获取当前时间

V3s自带RTC芯片,或者用外置的i2c RTC芯片,比如pcf8563等

离线

#5 2019-05-21 17:39:53

605364021
会员
注册时间: 2018-10-23
累计积分: 249

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

现在校准时候后通过hwclock -w写入硬件时钟,但是我发现跑了一个下午,这时间就差了好几分钟,这有什么解决办法?

离线

#6 2019-05-21 21:51:25

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,757

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

QQ20190521215035.jpg

QQ20190521215054.jpg

QQ20190521215109.jpg

离线

#7 2019-05-21 22:02:01

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,757

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

QQ20190521215840.png

这个RTC是跑在32K的

不是32.768k

只有掉电才跑在32.768

上电会计算一掉电跑了多久

然后减去这个时间 重新设置

好了 设置成内部32K时间正常

这个就是让在掉电的时候 自动切换到LOSC

想到解决办法了 设置时间全部设置成0 之前的时间算成秒写到后备域里 每次秒中断里
计算设置后的秒 减去这些时间多出的值 在加上之前的秒 在反推出时间


就是用utc

全志坑卓应该就是这么做的

32768的晶振 每分钟快1.4秒多

神一样设计

离线

#8 2019-05-21 22:05:50

605364021
会员
注册时间: 2018-10-23
累计积分: 249

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

讲得好像很复杂。。。。重点是这个设置内部时间32K?还有请问一下这个内部时间32K是在哪改?

离线

#9 2019-05-21 22:37:26

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,757

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

605364021 说:

讲得好像很复杂。。。。重点是这个设置内部时间32K?还有请问一下这个内部时间32K是在哪改?

其实我也没有看明白.


https://github.com/qq516333132/camdroid/blob/master/lichee/linux-3.4/drivers/rtc/rtc-sunxi.c


你看下 camdroid的驱动:

#define OSC_32K	32000
#define OSC_ORG	32768
/*
 * This RTC count flow on sun8iw8 platform.
 * 32.768KHz---   --- [32768 count] ---
 *              \/                     \___[seconds reg]
 *              /\                     /
 * 23KHz    ---   --- [32000 count] ---
 *
 * We can calculate how much seconds missing, call sunxi_rtc_fixup.
 */
void sunxi_rtc_fixup(unsigned long *org_time, unsigned long *time)
{
	unsigned long delta;
	unsigned long t1, t2;
	bool out;

	if (!time)
		return;

	if (!org_time) {
		t1 = (unsigned long long)sunxi_rtc_read(SUNXI_GPDATA_REG(6)) << 32;
		t1 |= (unsigned long)sunxi_rtc_read(SUNXI_GPDATA_REG(7));
	} else
		t1 = *org_time;

	t2 = *time;

	out = sunxi_rtc_read(SUNXI_LOSC_CTRL_REG) & RTC_SOURCE_EXTERNAL;

	delta = (t2 > t1) ? (t2 - t1) : (t1 - t2);
	delta = (delta * (OSC_ORG - OSC_32K)) / OSC_ORG;

	if (out)
		*time -= delta;
	else
		*time += delta;
}


void sunxi_rtc_save(unsigned long time, bool force)
{
	unsigned long long tsec = (unsigned long long)time;
	unsigned int save = (0x80000000 & sunxi_rtc_read(SUNXI_GPDATA_REG(6)));

	if (force || !save) {
		sunxi_rtc_write((unsigned int)tsec, SUNXI_GPDATA_REG(7));
		sunxi_rtc_write(((unsigned int)(tsec >> 32) | 0x80000000), SUNXI_GPDATA_REG(6));
	}
}
	/*
	 * If it first time read and have not save it
	 * we should save it to backup register
	 */
	sunxi_rtc_save(time, false);
	rtc_tm_to_time(rtc_tm, &time);
	sunxi_rtc_fixup(NULL, &time);
	rtc_time_to_tm(time, rtc_tm);

	dev_dbg(dev, "Read hardware RTC time %04d-%02d-%02d %02d:%02d:%02d\n",
			rtc_tm->tm_year + 1900, rtc_tm->tm_mon + 1, rtc_tm->tm_mday,
			rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec);

这个骚操作.

而主线的 RTC 没有做这样的修正操作.

离线

#10 2019-06-15 19:27:28

605364021
会员
注册时间: 2018-10-23
累计积分: 249

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

晕哥 说:

V3s自带RTC芯片,或者用外置的i2c RTC芯片,比如pcf8563等

晕哥,由于v3s没有电池对rtc进行供电,断电后硬件时间会重置,我使用外部纽扣电池给rtc进行断电供电来保持硬件时间的一致,这样的方法可行?还有就是v3s自带rtc芯片是下图这个?

_20190615192511.png

离线

#11 2019-06-15 20:15:26

晕哥
Administrator
注册时间: 2017-09-06
累计积分: 6,757

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

可行,但是RTC有点诡异,需要换算。

离线

#12 2019-06-15 20:23:22

605364021
会员
注册时间: 2018-10-23
累计积分: 249

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

bugfix 说:

https://whycan.cn/files/members/370/QQ20180202112836.jpg

https://whycan.cn/files/members/370/QQ20180202112307.png

终于解决V3s自带的RTC不准问题,
电阻电容调大又调小,始终解决不了时间不准问题,
淘宝买一片PCF8563, 外挂上去解决这个问题。


dts修改:

&i2c0 {
    status = "okay";

    ns2009: ns2009@48 {
        compatible = "nsiway,ns2009";
        reg = <0x48>;
    };


    rtc@51 {
        compatible = "nxp,pcf8563";
        reg = <0x51>;
    };

};

PCF8563驱动加入内核:

CONFIG_RTC_DRV_PCF8563=y

如果我使用外接PCF8563的方法,大概怎么去接。。。

离线

#13 2019-06-15 22:11:33

超级萌新
会员
注册时间: 2018-05-04
累计积分: 219

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

接上电源和地,i2c 两个脚接上就可以了

离线

#14 2019-06-19 16:46:03

Jmhh247
会员
注册时间: 2018-12-21
累计积分: 88

Re: 关于V3开发板运行QT程序中Qtime类获取当前时间的问题

学习了,RTC设计的秀

离线

页脚