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:
Den Start führe ich im MAIN_Proc aus und das Triggern im Loop vom Main_Proc:
{--------------------------------------------------------------}
{ 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
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