ATMEGA Reset durchführen

pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

ATMEGA Reset durchführen

 · 
Gepostet: 22.04.2021 - 13:29 Uhr  ·  #1
Hallo Leute,

ich muss in einer älteren Steuerung von uns mit ATMEGA diesen bei bestimmten Bedingungen neustarten. Leider gibt es den Befehl/Function HardwareReset nur beim XMEGA.

Gibt es etwas in der Richtung für den ATMEGA?

Ansonsten würde ich es so lösen, ich nutze den Watchdog bei der Steuerung, für den Reset würde ich dann einfach eine Endlosschleife starten, damit der Watchdog den Reset durchführt. Gibt es da eine andere Lösung?

Thorsten
Merlin
Administrator
Avatar
Geschlecht:
Alter: 26
Beiträge: 1476
Dabei seit: 03 / 2005
Betreff:

Re: ATMEGA Reset durchführen

 · 
Gepostet: 22.04.2021 - 13:47 Uhr  ·  #2
The watchdog solution is the one I use. Otherwise

Code
SYSTEM_RESET;


but that of course is software reset not hardware reset. I think, though that hardware reset is less important in ATMegas because the XMegas have a lot more peripherals that are more independent of the main processor.

Regards

Merlin
pvs-deck
PowerUser
Avatar
Geschlecht:
Alter: 54
Beiträge: 1344
Dabei seit: 02 / 2009
Betreff:

Re: ATMEGA Reset durchführen

 · 
Gepostet: 24.04.2021 - 11:24 Uhr  ·  #3
Hi Merlin,

yes, i use the "loop ... endloop" and run in WatchDog.

With "SYSTEM_RESET" not everything is reset.
I think the way via the watchdog is better here.

Thorsten
Heinz
Benutzer
Avatar
Geschlecht:
Alter: 72
Homepage: brotz.ch
Beiträge: 42
Dabei seit: 04 / 2018
Betreff:

ATMEGA Reset mit WD => set all Registers to the "Inital Value" gemäss Manual ?

 · 
Gepostet: 11.05.2021 - 13:47 Uhr  ·  #4
hallo Thorsten
Verwende auch seit vielen Jahren den ATMega256. Da hat sich auch diese Frage gestellt.
Komme auch zum selben Schluss.
- System_Reset macht nur einen Restart, OHNE Löschen der Register.
Daher wäre System_Restart wohl ein besserer Name gewesen.
- WD-Timeout. Gemäss Timing Diagramm sollte eine interner Reset durchgeführt werden.
??? Hat das mal jemand verifiziert, ob wirklich alle Register gemäss Manual auf den "Initial Value"
??? gesetzt werden ???

Habe mich in diesem Zusammenhang nochmals vergewissert
mit dem kleinen Beispiel:
procedure ResetSWTest;
begin
System_Reset; // vià JUMP ResetVector. Löscht keine I/O-Register
end;

System_Reset macht gemäss Listing letztlich nur einen Restart mit: JMP SYSTEM.Reset.


.FUNC ResetSWTest, 002DBh, 00020h
SMCMDMonitor.ResetSWTest:
.RETURNS 0
.BLOCK 732
.LINE 733
CLI
IN _ACCB, mcusr
CBR _ACCB, 08h
OUT mcusr, _ACCB
LDI _ACCB, 007h
LDI _ACCA, 01Fh
STS wdtcr, _ACCA
STS wdtcr, _ACCB
SBRC Flags, IntFlag
SEI
CLI
LDI _ACCA, 0FEH ROLB IntFlag
AND Flags, _ACCA
IN _ACCB, mcusr
ANDI _ACCB, 0F3h
OUT mcusr, _ACCB
JMP SYSTEM.Reset
.ENDBLOCK 734
SMCMDMonitor.ResetSWTest_X:
.LINE 734
.BRANCH 19
RET
.ENDFUNC 734
Gewählte Zitate für Mehrfachzitierung:   0

Registrierte in diesem Topic

Aktuell kein registrierter in diesem Bereich

Die Statistik zeigt, wer in den letzten 5 Minuten online war. Erneuerung alle 90 Sekunden.
MySQL Queries: 8 · Cache Hits: 14   81   95 · Page-Gen-Time: 0.015886s · Speichernutzung: 2 MB · GZIP: ein · Viewport: SMXL-HiDPI