RTC erhebliche Ungenauigkeit (XMega)

  • 1
  • 2
  • Page 1 of 2
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 18.10.2017 - 09:14  ·  #1
Guten Morgen
wir müssen in einem bestehenden Projekt ein Uhr nachrüsten. Dazu steht ja eine Software-RTC zur Verfügung. Die ist nahezu perfekt und der Einbau hat nicht wirklich lange gedauert. Durch die Callbacks sind eigentlich alle Wünsche sofort erfüllt. Leider hat die Uhr über einen Zeitraum von gestern Nachmittag 16:00 Uhr bis heute morgen 8:00 Uhr eine Abweichung von 1:15 Stunden.
Code

Device = xmega384C3, VCC=3.3;
{ $BOOTRST $30000}         {Reset Jump to $30000}
{$DEFINE Language_GER_ENG_RUS}
{$DEFINE LCD640x480}

Define_Fuses
//  Override_Fuses;
  NoteBook   = A;
  COMport    = USB;
  LockBits0 = [];
  FuseBits1  = [];
  FuseBits2  = [];

Import SysTick, TWI_E,
       ADC_A,
       SlipPortC0,                  //Meßgeräteport
       SlipPortE0,                  //Meßgeräteport
       SlipPortD0,                  //Meßgeräteport
       EVE_Graphic,
       AT25DFxx,
       FAT16_32,
       RTclock,
       XMega_CRC,
       XMegaSupport;

From System Import LongWord, LongInt, SystemTime32,Float;


Define
  OSCtype        = int32MHz, PLLmul=4, prescB=1, prescC=1;
  SysTick        = 10;             {msec}
  StackSize      = $0A00, iData;
  FrameSize      = $0900, iData;
  RTclock        = iData, DateTime; {Time or DateTime}
  RTCsource      = SysTick;

Den Adj-Parameter lässt der Compiler nicht zu, kann man die Gangabweichung irgendwie anders einstellen.
Und als Wunsch, könnte man den RTC-Alarm auf mehr Kanäle aufbohren, so wie bei RTC-Timer. Das wäre wunderbar.

einen schönen Tag
rage
pvs-deck
PowerUser
Avatar
Gender:
Age: 53
Homepage: pvs-deck.de
Posts: 1341
Registered: 02 / 2009
Subject:

Re: RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 18.10.2017 - 10:49  ·  #2
Hallo rage,

wenn Du die interne UHR ohne viel Abweichung zum laufen bekommst, sag bescheid.
Ich habe es damals aufgegeben. Entweder ein passender externer Uhrenquarz oder einen externen CHIP. Ich habe mich für den Chip mit eigener Batterie und Uhrenquarz entschieden.

Gruß
Thorsten
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 18.10.2017 - 11:07  ·  #3
Hallo PVS-Deck
bei diesem Projekt geht das leider nicht, da die bestehende Hardware nicht nachgerüstet werden kann. Wegen Ex-Schutz etc, ist die Hardware so festgeschrieben. Wir können per RS-485-Netz, die aktuelle Uhrzeit zu den Geräten schicken, wegen dem Stellender Uhrzeit, von mir aus auch jede Stunde. Aber auch da ist die Abweichung noch zu groß um der Vorgabe der Datenspeicherung zu entsprechen. Da im Handbuch eine Abweichung von +/- 1 Sekunde pro Tag angegeben waren, habe wir das Problem nicht so gesehen, auch 10 Sekunden pro Tag wären nicht das Problem.
In unseren aktuellen Projekten haben wir immer eine MPC79412 eingebaut, das ergibt gleich noch ein wenig gepufferten RAM und ein paar hundert Bytes EEPROM + eine eindeutigen Seriennummer.
Aber hier muß eine Softwarelösung eingesetzt werden. Die ja auch schon da ist. Leider mit der massiven Ungenauigkeit.

LG rage
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 18.10.2017 - 15:41  ·  #4
Hallo Rage,
Das Problem liegt in der schlechten Auflösung des Standard Timers mit dem man nicht auf 10msec systick kommt. Wenn man als systicktimer einen der grossen Tier nimmt sollte das hinzukriegen sein.
Rolf
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 18.10.2017 - 16:07  ·  #5
Hallo Rolf
ich nehme an, kann man nicht alleine einstellen, sondern müsste vom Compiler erledigt werden, richtig?
Die großen XMega haben ja eigentlich genug 16-Bit-Timer, oft auch internen 32 Khz Ozillator mit 30,5 µs Auflösung. Habe gerade im Datasheet vom XMega384C3 gesehen. Damit sollte man auf eine recht feine Auflösung kommen und damit auch eine gute Genauigkeit erreichen.

einen schönen Tag
rage
Attachments
RTC erhebliche Ungenauigkeit (XMega)
Filename: RTCClock.jpg
Filesize: 57.35 KB
Title:
Download counter: 102
rh
Administrator
Avatar
Gender:
Location: Germany
Age: 24
Homepage: e-lab.de
Posts: 5558
Registered: 03 / 2002
Subject:

Re: RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 18.10.2017 - 16:17  ·  #6
Doch man kann für den systick einen 16bit Timer einstellen.
Rolf
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 19.10.2017 - 13:54  ·  #7
Hallo Rolf

das funktioniert recht gut. Ich schau morgen früh nochmal drauf wie die Abweichung über einen großen Zeitraum ist. Vielen Dank für den Tip.

Hallo pvs-deck

damit Du das nicht zusamensuchen musst, habe ich das mal als Codeschnipsel abgehängt.

Code

Define
  OSCtype        = int32MHz, PLLmul=4, prescB=1, prescC=1;//, DFLLint;
  SysTick        = 10,User;             {msec}
  StackSize      = $0A00, iData;
  FrameSize      = $0900, iData;
  RTclock        = iData, DateTime; {Time or DateTime}
  RTCsource      = SysTick;
  TickTimer      = Timer_C0;

......

{*******************************************************************************}
{Korrekturfaktor für Systick setzen                                             }
{*******************************************************************************}
Procedure SetClockKorrektur;
var K:LongWord;
Begin
  {eTimeKorrektur Integer im EEPROM wenn noch nicht beschrieben dann vorbelegen}
  if eTimeKorrektur=$FFFF then                        
    {grob überschlagender Wert }
    eTimeKorrektur:=-40;                                    
  endif;
  {vorsichthalber}
  TickTimerStop;                                                
  {wenn größer als 0 dann addieren 10000usec = 10msec}
  if eTimeKorrektur>0 then                                
    k:=10000+LongWord(eTimeKorrektur);           
  {sonst subtrahieren}
  else                                                                  
    k:=10000-LongWord(Abs(eTimeKorrektur));    
  endif;
  {Wert setzen}
  TickTimerTime(K);                                             
  {Ticktimer starten}
  TickTimerStart;                                                 

end;

begin
  EnableInts($87);
  SetClockKorrektur;                                           // kalibrierten Wert setzen und starten
  ....
  loop

  endloop;
end.


einen schönen Tag noch.
rage
rage
Benutzer
Avatar
Gender: n/a
Age: 65
Homepage: processanalytik.de
Posts: 237
Registered: 02 / 2007
Subject:

Re: RTC erhebliche Ungenauigkeit (XMega)

 · 
Posted: 20.10.2017 - 08:09  ·  #8
Guten Morgen

Nach 24 Stunden, kann ich sage, ja es ist besser, aber nicht wirklich befriedigend. +20 Sekunden in 24 Stunden mit einem Wert von 961 für den Ticktimer, -2:45 Minuten mit einem Wert von 962 für den Ticktimer.

Einen schönen Tag
rage
  • 1
  • 2
  • Page 1 of 2
Selected quotes for multi-quoting:   0

Registered users in this topic

Currently no registered users in this section

The statistic shows who was online during the last 5 minutes. Updated every 90 seconds.
MySQL Queries: 16 · Cache Hits: 15   142   157 · Page-Gen-Time: 0.044299s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI