[Ovmsdev] Inaccurate car_parktime / car_time

Michael Jochum mikeljo at me.com
Mon Nov 11 18:38:01 HKT 2013


Hi,

why so complicated?
Remember the time/date from GSM when car gets parked.
Every 60 sec. get the new Time/date from the GSM Module.
Little math and you have the Parking time.
If you need smaller time frames use a ticker with an offset. The offset is calculated with the difference between the GSM time an the time from the ticker.

Bye
Michael


Am 11.11.2013 um 09:50 schrieb Matt Beard OVMS <smvo at mxf.org.uk>:

> Can I suggest that the update from the SIM908 time has a sanity check such that a time well outside the expected range is taken as a new starting time for the updates. This will prevent an error that I have seen on some charging posts where the clock gets updated during a charge (I suspect after a reboot the first time a genuine time is received, which could be several minutes after the reboot and after your charge starts) this can give very strange times in the charger log. So, I would suggest a system similar to the following:
> 
> 1) First time through, record the SIM908 time in epoch seconds, and the corresponding car_time
> 2) Next time through (60 seconds later) get the SIM908 time in epoch seconds and subtract the stored value
> 3) If the difference is between 30 and 120, change car_time to stored_car_time + diff
> 4) Store current SIM908 time in epoch seconds, and the newly corrected car_time
> 5) goto 2
> 
> There is an issue with this in that the time can jump backwards a number of seconds - which may break some code at some point!
> 
> A solution to this would be to update car_time if it moves forward, but if it moves backwards do this by setting a "stall count" that prevents the car_time being updated for that number of 1 second intervals. This could safely be a byte as step 2 above ensures we can never move backwards more than 30 seconds.
> 
> Matt Beard
> 
> 
> 
> On 11 November 2013 01:33, Mark Webb-Johnson <mark at webb-johnson.net> wrote:
> 
> Tom, Michael,
> 
> GPS time is extremely accurate, but once satellite coverage is lost, so is the time.
> 
> 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.
> 
> Reflecting on this, I actually think the following approach would be 'good enough':
> 
> Use the LED interrupt to keep a track of 104.8576ms ticks per interrupt, and increment car_time appropriately.
> 
> 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.
> 
> 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.
> 
> 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...
> 
> Regards, Mark.
> 
> On 11 Nov, 2013, at 2:47 am, Tom Saxton <tom at idleloop.com> wrote:
> 
>> 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.
>> 
>>    Tom
>> 
>> From: Michael Jochum <mikeljo at me.com>
>> Reply-To: OVMS Developers <ovmsdev at lists.teslaclub.hk>
>> Date: Sunday, November 10, 2013 at 10:30 AM
>> To: OVMS Developers <ovmsdev at lists.teslaclub.hk>
>> Subject: Re: [Ovmsdev] Inaccurate car_parktime / car_time
>> 
>> Hi,
>> 
>> what do you think about the GPS Clock?
>> 
>> Bye
>> Michael
>> 
>> 
>> Am 10.11.2013 um 14:01 schrieb Mark Webb-Johnson <mark at webb-johnson.net>:
>> 
>>> Our approach at the moment is very kludgy and not at all accurate.
>>> 
>>> 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.
>>> 
>>> In the PIC, we have four hardware-level timers. Currently:
>>>  - Timer 0: Used to drive the main event loop
>>>  - Timer 1: Interrupt-driven, and used for LED blinking
>>>  - Timer 2: Used for short delays
>>>  - Timer 3: Unused
>>> 
>>> 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.
>>> 
>>> 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:
>>> 
>>>> rom char NET_CREG_CIPSTATUS[] = "AT+CREG?;+CIPSTATUS;+CSQ\r";
>>> 
>>> 
>>> to:
>>> 
>>>> rom char NET_CREG_CIPSTATUS[] = "AT+CREG?;+CSQ;+CCLK?;+CIPSTATUS\r";
>>> 
>>> 
>>> Produces:
>>> 
>>>> +CREG: 1,0
>>>> +CSQ: 0,0
>>>> +CCLK: “10/10/10,00:02:51+00”
>>>> ERROR
>>> 
>>> 
>>> (for my disconnected state).
>>> 
>>> 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).
>>> 
>>> 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.
>>> 
>>> The coding should not be too hard, but the testing might take some work.
>>> 
>>> Regards, Mark.
>>> 
>>> On 7 Nov, 2013, at 10:17 pm, Håkon Markussen <hakon.markussen at gmail.com> wrote:
>>> 
>>>> Hi,
>>>> 
>>>> The car_time is incremented in the state_ticker1 (approx once every second).
>>>> However I've noticed that this is extremely inacurate 
>>>> 
>>>> Today I started a stopwatch when parking the car, and compared it to the car_parktime in the iOS app:
>>>>  - Stopwatch: 8:00 (eight hours)
>>>>  - car_parktime: 6:01 (six hours and one minute
>>>> A difference of 1 hour and 59 minutes during 8 hours!
>>>> 
>>>> I wonder if this could be done in an other way? 
>>>> E.g. by pulling the time from the GPS?
>>>> 
>>>> Best regards.
>>>> Håkon Markussen
>>>> _______________________________________________
>>>> OvmsDev mailing list
>>>> OvmsDev at lists.teslaclub.hk
>>>> http://lists.teslaclub.hk/mailman/listinfo/ovmsdev
>>> 
>>> _______________________________________________
>>> OvmsDev mailing list
>>> OvmsDev at lists.teslaclub.hk
>>> http://lists.teslaclub.hk/mailman/listinfo/ovmsdev
>> 
>> _______________________________________________ OvmsDev mailing list OvmsDev at lists.teslaclub.hk http://lists.teslaclub.hk/mailman/listinfo/ovmsdev
>> _______________________________________________
>> OvmsDev mailing list
>> OvmsDev at lists.teslaclub.hk
>> http://lists.teslaclub.hk/mailman/listinfo/ovmsdev
> 
> 
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.teslaclub.hk
> http://lists.teslaclub.hk/mailman/listinfo/ovmsdev
> 
> 
> _______________________________________________
> OvmsDev mailing list
> OvmsDev at lists.teslaclub.hk
> http://lists.teslaclub.hk/mailman/listinfo/ovmsdev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openvehicles.com/pipermail/ovmsdev/attachments/20131111/d583461e/attachment.htm>


More information about the OvmsDev mailing list