<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div><br></div>Tom, Michael,<div><br></div><div>GPS time is extremely accurate, but once satellite coverage is lost, so is the time.</div><div><br></div><div>GSM time is dependent on the carrier keeping their times accurate in their cell towers. In the past this was a problem, but not so much nowadays. However, if the GSM connectivity is lost, the clock in the SIM908 module we use keeps running - and that is a huge advantage over GPS. You can see this in my example, earlier in this email thread - the clock is shown as 10/10/10 00:02:51 even in a module without a SIM card or GSM antenna attached. I think the SIMCOM chip we use will be pretty accurate.</div><div><br></div><div>Reflecting on this, I actually think the following approach would be 'good enough':</div><div><br></div><div><ol class="MailOutline"><li>Use the LED interrupt to keep a track of 104.8576ms ticks per interrupt, and increment car_time appropriately.<br><br></li><li>Use net.c polling to get the time from the GSM module. Convert it to epoch seconds (hopefully not too hard, if we can find a simple algorithm for it). If car_time and that differs, then adjust car_time to match but ALSO adjust car_parktime by the same amount. This would be done once every 60 seconds when GSM is online.<br><br></li><li>Use a net_fnbits bit to control whether the above is done or not. Remove all car_time code from vehicle modules that turn this on.</li></ol></div><div><br></div><div>The only tricky bit would be the epoch seconds function. We would need to convert a GSM date/time (like “10/10/10,00:02:51+00”) into UTC number of seconds since January 1st 1970. Or, maybe microchip C includes a gmtime() function? I haven't had a chance to check...</div><div><br></div><div>Regards, Mark.</div><div><br><div><div>On 11 Nov, 2013, at 2:47 am, Tom Saxton <<a href="mailto:tom@idleloop.com">tom@idleloop.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; font-size: 14px; font-family: Calibri, sans-serif;"><div>I had the same thought, but GPS doesn’t work when the car is in a garage, an important case for a parking timer. Cell coverage seems to be much more penetrating than GPS.</div><div><br></div><div>   Tom</div><div><br></div><span id="OLK_SRC_BODY_SECTION"><div style="font-family: Calibri; font-size: 11pt; text-align: left; border-width: 1pt medium medium; border-style: solid none none; padding: 3pt 0in 0in; border-top-color: rgb(181, 196, 223);"><span style="font-weight:bold">From: </span> Michael Jochum <<a href="mailto:mikeljo@me.com">mikeljo@me.com</a>><br><span style="font-weight:bold">Reply-To: </span> OVMS Developers <<a href="mailto:ovmsdev@lists.teslaclub.hk">ovmsdev@lists.teslaclub.hk</a>><br><span style="font-weight:bold">Date: </span> Sunday, November 10, 2013 at 10:30 AM<br><span style="font-weight:bold">To: </span> OVMS Developers <<a href="mailto:ovmsdev@lists.teslaclub.hk">ovmsdev@lists.teslaclub.hk</a>><br><span style="font-weight:bold">Subject: </span> Re: [Ovmsdev] Inaccurate car_parktime / car_time<br></div><div><br></div><div><meta http-equiv="Content-Type" content="text/html charset=windows-1252"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Hi,<div><br></div><div>what do you think about the GPS Clock?</div><div><br></div><div>Bye</div><div>Michael</div><div><br></div><div><br><div><div>Am 10.11.2013 um 14:01 schrieb Mark Webb-Johnson <<a href="mailto:mark@webb-johnson.net">mark@webb-johnson.net</a>>:</div><br class="Apple-interchange-newline"><blockquote type="cite"><meta http-equiv="Content-Type" content="text/html charset=windows-1252"><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Our approach at the moment is very kludgy and not at all accurate.<div><br></div><div>For the cars without internal support for a timer, we increment car_time on a ticker() call, which is approximately once per second, but not in delay loops. It is really just intended to give a very approximate 1 second ticker, not a clock-accurate timer.</div><div><br></div><div>In the PIC, we have four hardware-level timers. Currently:</div><div> - Timer 0: Used to drive the main event loop</div><div> - Timer 1: Interrupt-driven, and used for LED blinking</div><div> - Timer 2: Used for short delays</div><div> - Timer 3: Unused</div><div><br></div><div>I suspect that a better approach would be the Timer 1 we currently have. That runs off the FOSC/4 (20Mhz/4 = 5MHz) and uses a 1:8 pre-scaler, so the internal timer works at 625,000 ticks per second. With a 16 bit value, it will overflow (interrupt) 9.53674 times per second. By my calculations, that means each ‘tick’ is approximately 104.8576ms. It would be fairly trivial to keep a counter there, and drive car_time from that. I am just not sure how accurate that oscillator is (particularly as temperature changes) - but I suspect that it would be good enough for what we need.</div><div><br></div><div>Alternatively, or additionally, the GSM modem has a clock which can be polled by AT+CCLK. It would not be hard to do that in the net.c code (probably where we normally poll for status once a minute) and adjust car_time as necessary there. For example, changing net.c:</div><div><br></div><div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" type="cite">rom char NET_CREG_CIPSTATUS[] = "AT+CREG?;+CIPSTATUS;+CSQ\r";</blockquote></div><div><br></div><div>to:</div><div><br></div><div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" type="cite">rom char NET_CREG_CIPSTATUS[] = "AT+CREG?;+CSQ;+CCLK?;+CIPSTATUS\r";</blockquote></div><div><br></div><div>Produces:</div><div><br></div><div><blockquote style="margin: 0 0 0 40px; border: none; padding: 0px;" type="cite"><div>+CREG: 1,0</div><div>+CSQ: 0,0</div><div>+CCLK: “10/10/10,00:02:51+00”</div><div>ERROR</div></blockquote></div><div><br></div><div>(for my disconnected state).</div><div><br></div><div>The fact that the time is wrong is irrelevant. All we’d need it to do is look at the GSM module time and look for drift against car_time. We would need to protect against large changes (as the module gets a GSM connection, there may be a very large jump as the timezone and other things get set correctly).</div><div><br></div><div>The only other ‘trick’ here is that this function would need to be controlled by a vehicle feature bit - some cars don’t need it.</div><div><br></div><div>The coding should not be too hard, but the testing might take some work.</div><div><br></div><div>Regards, Mark.</div><div><br><div><div>On 7 Nov, 2013, at 10:17 pm, Håkon Markussen <<a href="mailto:hakon.markussen@gmail.com">hakon.markussen@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div><div><div><div><div><div><div><div>Hi,<br><br></div>The car_time is incremented in the state_ticker1 (approx once every second).<br></div>However I've noticed that this is extremely inacurate <br><br></div>Today I started a stopwatch when parking the car, and compared it to the car_parktime in the iOS app:<br></div> - Stopwatch: 8:00 (eight hours)<br></div> - car_parktime: 6:01 (six hours and one minute<br></div>A difference of 1 hour and 59 minutes during 8 hours!<br><br>I wonder if this could be done in an other way? <br>E.g. by pulling the time from the GPS?<br><br></div>Best regards.<br></div>Håkon Markussen<br></div>
_______________________________________________<br>OvmsDev mailing list<br><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br></blockquote></div><br></div></div>_______________________________________________<br>OvmsDev mailing list<br><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br><a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a><br></blockquote></div><br></div></div></div>_______________________________________________
OvmsDev mailing list
<a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a>
<a href="http://lists.teslaclub.hk/mailman/listinfo/ovmsdev">http://lists.teslaclub.hk/mailman/listinfo/ovmsdev</a>
</span></div>
_______________________________________________<br>OvmsDev mailing list<br><a href="mailto:OvmsDev@lists.teslaclub.hk">OvmsDev@lists.teslaclub.hk</a><br>http://lists.teslaclub.hk/mailman/listinfo/ovmsdev<br></blockquote></div><br></div></body></html>