Watchdog XMEGA Problem

  • 1
  • 2
  • 3
  • 5
  • 6
  • 7
  • Page 1 of 7
pvs-deck
PowerUser
Avatar
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Watchdog XMEGA Problem

 · 
Posted: 26.02.2015 - 14:02  ·  #1
Hallo rolf,

meine aktuelle Steuerung ist gerade beim EMV-Test. :) (endlich)

Dabei ist mir etwas aufgefallen, was ich mir nicht so richtig erklären kann.

Evtl. hast Du eine Idee dazu oder es ist sogar ein BUG ;)

Bei dem Burst Test für DC-Geräte wird auf die DC-Eingangsseite ein 2.000V Burst mit 5kHz Impulsabstand eingekoppelt.

Bei meiner Leiterplatte hatte ich die falsche Diode vorgesehen, diese war zu langsam um diese schnellen Spitzen abzuleiten :(

Dies führte dazu, das sich der XMEGA aufgehängt hat, das wäre ja noch ok gewesen, aber der Watchdog wurde nicht ausgelöst ??? Und ich habe keine Ahnung warum nicht!

Kann das was mit dem Task/Process-System zu tun haben?

Im Define nutze ich:
Code
  WatchDog = msec500; // 500msec Watchdog


Den Start führe ich im MAIN_Proc aus und das Triggern im Loop vom Main_Proc:


Code


{--------------------------------------------------------------}
{ Main Program }
{$IDATA}
begin
  USB_SetControlCallback(@myUSB_ControlRequest); // optional, if you need it!
  USB_Init(@RxBuf);        // Attach USB and connect RxBuf for FIRST RX INT


InitPorts;
 EnableInts($87);
  InitCfg; // beim Start 1mal ausführen ansonsten nur beim Ändern
   I2CInit; // Init der I2C Bausteine

CompYear   :=COMPILEYEAR;
CompMonth  :=COMPILEMONTH;
CompDay    :=COMPILEDAY;
CompHour   :=COMPILEHOUR;
CompMinute :=COMPILEMINUTE;
ProjBuild  :=PROJECTBUILD;
ProjVer    :=1;

// Start-Meldung
DebugOut( 'DEGUG; System gestartet....');
//-------------------------------------------
DebugOut( 'Clear Memory..');
InitMem; // InitWerte des Speichers setzen beim Neustart

DebugOut( 'DiskInit..');
// ..
// hier sind sonst noch andere Inits, SD-Card usw.
//...
  I2CScan; // Scan die internen I2C-Bausteine und Modulare EA-Bausteine

WatchDogStart;  // Hier kommt der START

SetSysTimer( Time100ms, 10); // Timer starten
  SetSysTimer( ComTimer, 10);


 loop   // Main LOOP

// Blinken
 Blinktakt := LEDram.0;

//ziehe Hardware Eingänge
 LOCK( MAIN_PROC );
   ReadInput; // Lese Eingangsspeicher
    UNLOCK( MAIN_PROC );

LOCK( MAIN_PROC );
   UhrZeit;  // Lese Uhrzeit, Datum und Wochentag aus
   UNLOCK( MAIN_PROC );

 SysLEDflashOn( 0 ); // OKLED; // Zyklus LED starten

  LOCK( MAIN_PROC );
      DebugPrinting;
      b_inBuffer:= SPIinpByteC;
   UNLOCK( MAIN_PROC );

 Tuer; // Tür Funktionen und Ablaufsteuerungen ausführen 

  LOCK( MAIN_PROC );
     WriteOutput; // Schreibe Ausgänge zur Hardware
   UNLOCK( MAIN_PROC );

  WatchDogTrig;
 endloop;


Habe ich einen Denkfehler?

Muss das Programm/CPU noch irgendwo laufen damit der Watchdog-Reset ausgeführt wird?

Gruß
Thorsten
Merlin
Administrator
Avatar
Gender:
Age: 24
Posts: 1362
Registered: 03 / 2005
Subject:

Re: Watchdog XMEGA Problem

 · 
Posted: 26.02.2015 - 14:55  ·  #2
Hi Thorsten.

Reading around it a bit it looks at if the watchdog timer may share a clock source with the processor. Also there are various internal flags which control the watchdog, all of which suggest that the internal watchdog might not be a good choice for attempting to deal with EMV. It is fine for handling coding issues, but for anything else maybe an external device is better.

OOO (Own Opinions Only).
Harald_K
 
Avatar
 
Subject:

Re: Watchdog XMEGA Problem

 · 
Posted: 26.02.2015 - 18:26  ·  #3
normal startet man zuerst den Watchdog, dann erst den Rest

Begründung:

sagen wir mal deine Initialisierung dauert ne Millisekunde ....

die Störpulse kommen mit 5kHz, sind also 200 usec

jetzt läuft der Controller ...
Störung ..
CPU hängt
Watchdog-Reset
neuer Init braucht ne Millisekunde

leider kommt aber nach 200 usec der nächste Störpuls, da ist der watchdog noch nicht wach ....

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

Re: Watchdog XMEGA Problem

 · 
Posted: 26.02.2015 - 18:42  ·  #4
Hallo,

bei den XMegas kann man den Watchdog via Fuses aktivieren!
Das ist da der sichere Weg. Und die Watchdogs beim XMega haben einen separaten OSC.

rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Watchdog XMEGA Problem

 · 
Posted: 27.02.2015 - 08:47  ·  #5
Quote by rh

Hallo,

bei den XMegas kann man den Watchdog via Fuses aktivieren!
Das ist da der sichere Weg. Und die Watchdogs beim XMega haben einen separaten OSC.

rolf


Hallo rolf,

ok, das mit de FUSES schaue ich mir mal an, aber eigentlich sollte doch nur der Unterschied dann beim Startzeitpunkt liegen oder?

Beim Fuses, direkt beim einschalten und beim Softwarestart über "WatchDogStart;"

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

Re: Watchdog XMEGA Problem

 · 
Posted: 27.02.2015 - 13:23  ·  #6
Hallo Thorsten,

da sind gravierende Unterschiede. Ich habe mich aber noch nicht näher damit befasst.

rolf
pvs-deck
PowerUser
Avatar
Gender:
Age: 52
Homepage: pvs-deck.de
Posts: 1340
Registered: 02 / 2009
Subject:

Re: Watchdog XMEGA Problem

 · 
Posted: 27.02.2015 - 14:38  ·  #7
Quote by rh

Hallo Thorsten,

da sind gravierende Unterschiede. Ich habe mich aber noch nicht näher damit befasst.

rolf


Hallo Rolf,

hier noch mal ein paar Verständnisfragen zu den FuseBits:
Code

  FuseBits5              = [BODACT0, BodLevel0, BodLevel1, BodLevel2];


Beim XMEGA FuseByte 5 ist das ja so:
Bit 5 und 4 = BODACT
Bit 2 bis 0 = BODLEVEL

Wie ist das dann oben mit dem BodLevel0, 1, 2 gemeint?
BodLevel0 = Bit 0, BodLevel1 = Bit 1, BodLevel2 = Bit 2 ?

Oder ist das auf die XMEGA Tabelle bezogen?
BOD level 0 Bitmuster: 111 V:1.6
BOD level 1 Bitmuster: 110 V:1.9
BOD level 2 Bitmuster: 101 V:2.1
BOD level 3 Bitmuster: 100 V:2.4
BOD level 4 Bitmuster: 011 V:2.6
BOD level 5 Bitmuster: 010 V:2.9
BOD level 6 Bitmuster: 001 V:3.2
BOD level 7 Bitmuster: 000 V:3.4

Wenn das nach dieser Tabelle geht düfte ich doch eigentlich nur einen Level reinschreiben
Code
  FuseBits5              = [BODACT0, BodLevel2]; // für 2,1V


Wie ist das mit dem BodAct0 zu verstehen?
00 Reserved
01 Sampled
10 Enabled
11 Disabled

Eigentlich sollte doch der BodAct dann 10 sein oder?

Beim Watchdog müsste ich dann auf Fusebyte1, für das Normal Mode Operation für 512ms
eigentlich so schreiben:
Bit 3 bis 0: 0110 für 512CLK 0.512s
Wie schreibe ich das in den Define_Fuses, gibt es irgendwo eine Anleitung mit den möglichen Fuses für die Übergabe an den Programmer?

Muss ich den Watchdog noch irgendwo aktivieren? Oder läuft der automatisch durch die Fusebits los?
Ich habe jetzt im Handbuch kein Register/Fusebit gefunden zum aktivieren, also gehe ich mal davon aus das der sofort losläuft.

Und mit WatchDogTrig er immer neu angetriggert wird, richtig?

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

Re: Watchdog XMEGA Problem

 · 
Posted: 27.02.2015 - 18:54  ·  #8
Hallo Thorsten,

die einzelnen BODlevel und BODact bits ergeben immer zusamment die Werte
0..7 bzw. 0..3
Wie gsagt, mit dem XMega WatchDog habe ich keinerlei Erfahrung. Da muss das
XMega Manual ran.

rolf
  • 1
  • 2
  • 3
  • 5
  • 6
  • 7
  • Page 1 of 7
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: 15 · Cache Hits: 14   139   153 · Page-Gen-Time: 0.0309s · Memory Usage: 2 MB · GZIP: on · Viewport: SMXL-HiDPI