Forum: Mikrocontroller und Digitale Elektronik AVR chip: wie kann man einen reset programmieren?


von Guillaume B. (gjom)


Lesenswert?

Hello

Ich habe einen ATMega64 Kontroller der eine Luftpumpe steuert, mit 
Bascom AVR (Version 1.11.8.3) programmiert und möchte jetzt einen Knopf, 
der einen Reset vom internen Program auslöst, auf dem System bauen. Wie 
kann ich das am besten programmieren? Mit dem Watchdog timer läuft es 
nicht immer...

Danke!

Gjom

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

asm
 jmp 0x0
end asm

oder so in der art ^^

von Karl H. (kbuchegg)


Lesenswert?

Guillaume Bugnard wrote:
> kann ich das am besten programmieren? Mit dem Watchdog timer läuft es
> nicht immer...

Dann solltest du diesem Phänomen nachgehen.
Der Sinn eines Watchdog Timers ist es ja gerade, den µC zu
reseten, egal in welchem Zustand sich der gerade befindet.
Und zwar immer.

von Andreas K. (a-k)


Lesenswert?

Wobei ein Kopf für Reset ja nicht unbedingt dem umständlichen Weg über 
Abfrage und Watchdog gehen müsste. Was spricht gegen den Klassiker mit 
dem Taster direkt an der Reset Leitung?

von Andreas K. (a-k)


Lesenswert?

Wenn man den Taster abfragt und bei aktivem Zustand den Watchdog für 
erzwungenen Reset verwendet, dann geht es genau dann nicht, wenn die 
Abfrage nach dem Taster unterbleibt und folglich garnichts passiert. Und 
das passiert u.U. bei einem Programmfehler.

Wenn schon so, dann muss der Taster als umgedrehte Totmanntaste 
realisiert werden. D.h. der Watchdog wird vorneweg eingeschaltet und 
dort wo der Taster abgefragt wird, wird der Watchdog genau dann 
zurückgesetzt wenn der Taster inaktiv ist. Ist er aktiv wird der 
Wachhund nicht gestreichelt, und drückt man lange genug wird der sauer 
und beisst zu.

von Guillaume B. (gjom)


Lesenswert?

Andreas Kaiser wrote:
> Was spricht gegen den Klassiker mit
> dem Taster direkt an der Reset Leitung?

Am Anfang wollte ich, dass, wenn der Knopf gedrückt wird, der Kontroller 
zuerst einen Wert auf dem LCD Anzeige schreibt, dann 1 Sekunde wartet 
und erst dann den Reset macht. Aber wird dieses Wert alle 50ms zu einem 
PC mit LabView geschickt und dort gespeichert. Das heisst, jetzt kann 
ich den Reset Pin benütze

Die Methode mit dem Assembler hatte ich nicht gedacht! Werde ich noch 
ausprobieren!

Und die Erklärung mit dem Abtasten vom Knopf und Interaktion mit dem 
Watchdog macht Sinn, wieso es nicht immer funktioniert hat!

Danke!

von Guillaume B. (gjom)


Lesenswert?

Noch eine Frage, altert einen Reset eigentlich den Hardware? Also darf 
ich diese Funktion (durch den Pin) so oft wie ich es will benützen oder 
gibt es einen Risiko, dass meine Platine kaputt wird?

Sorry für diese Anfängerfrage, aber ich bin Maschineningenieur, und es 
ist meine erste Erfahrung mit Elektronik ;-)

von Gerhard. (Gast)


Lesenswert?

Komisch dass eine endlose Warteschleife nicht den Watchdog zuverlaessig 
zubeissen laesst. Alle meine Programme mit RS232 interface haben eine 
Kommand mit dem man den RESET durch eine endlose Warteschleife erzwingt 
und habe noch nie damit ein Problem gehabt. Mache ich genauso bei PIC, 
AVR, und ARM.

von Gast (Gast)


Lesenswert?

Bei jmp auf 0x00 gilt es halt zu bedenken, dass nix initialisiert wird 
(Register). Den Vorteil haste aber beim WD.

von Andreas K. (a-k)


Lesenswert?

Gerhard. wrote:

> Kommand mit dem man den RESET durch eine endlose Warteschleife erzwingt
> und habe noch nie damit ein Problem gehabt.

Du hast wahrscheinlich auch noch nie einen Programmfehler gehabt, oder 
eine klemmende Peripherie auf die ewig gewartet wird, oder  ...

von Olli (Gast)


Lesenswert?

Der Sinn des WD ist es ja gerade bei solchen Sachen auszulösen.
Sprich, Programm macht Grütze...

von Εrnst B. (ernst)


Lesenswert?

Statt bei Tastendruck den Watchdog einzuschalten und dann ne 
Endlosschleife laufen zu lassen, würd ich eher den Watchdog durchlaufen 
lassen, und den Watchdog-Reset nur ausführen, wenn der Taster nicht 
gedrückt ist.

So könnte der Taster auch noch für normale Funktionen verwendet werden, 
und der Chip resettet zuverlässig, sobald der Taster länger als die 
WD-Timeout-Zeit gedrückt gehalten wird.

/Ernst

von Paul H. (powl)


Lesenswert?

verbind doch n I/O Pin mit dem Reset-pin.. dann kannst du ganz einfach 
per software resetten indem du diesen (als ausgang geschalteten) I/O Pin 
auf LOW schaltest. Sobald der Reset eingetreten ist wird der Pin als 
Eingang wieder in den Hochohmigen Zustand geschaltet. Dein Reset 
benötigt dann halt noch dringend einen stärkeren Pullup, hier macht sich 
wohl ein 10kohm widerstand nach vcc ganz gut.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.