Hallo, ich steh gerade vor der Aufgabe ein Software Reset zu realisieren und suche nach der günstigsten Methode. zur Situation: Ein übergeordneter Microcontroller (Master) ist mit vielen untergeordneten Mikrocontrollern(Slaves -> Avr´s) über eine Rs232-Schnittstelle verbunden. Der Master hat nun die Aufgabe den Slaves ein neues Update zu verpassen. Dazu muss der AVR resetet werden und danach innerhalb eines Zeitfensters eine bestimmte Sequenz erkennen um den Bootloader zu starten. Der Reset Befehl kann nur vom Master kommen!! Welche Möglichkeiten der Realisierung kennt Ihr oder würdet Ihr favorisieren? ("Brown Out" und "Watch Dog") Danke für eure Hilfe
Also du könntest doch einfach die Resetleitung auf LOW ziehn, dan hast du doch nen richtigen Reset... Ansosnten Watchdog gige bestimmt auch Brown out ginge ja nur wenn du dem COntroller den Strom wegnimmst ;)
Hi Läubi "Also du könntest doch einfach die Resetleitung auf LOW ziehn, dan hast" die hab ich ja nicht!!: ( "Brown out ginge ja nur wenn du dem COntroller den Strom wegnimmst" ja, so ist´s, da wäre eine externe zusätzliche Beschaltung nötig, die zwar unschön wäre, aber noch machbar ist. :(
"Also du könntest doch einfach die Resetleitung auf LOW ziehn, dan hast" oder meinst Du mit irgend einem Portpin den Resetpin auf Masse zu ziehen? Das wär ja toll und so einfach!!:) Gruß und Dank
Schicke dem Slave eine bestimmte Bytefolge worauf hin der Slave zur Adresse 0x0000 stringt.
das reicht nicht unbedingt, das ist kein echter Hardwarereset. Einfacher: Watchdog starten, das Programm in eine Endlosschleife schicken (die dann durch den watchdog-reset keine Endlosschleife bleibt).
oh ja, noch einfacher, aber alle Registerinhalte sind dann nicht auf gesicherten Default Werten!! Könnte Probleme geben, auch mit den Interrupts. Muss ich mir nochmal überlegen,aber vielen Dank, gute Idee Gruß
crazy horse da wars´te schneller. Genau dies war meine erste Überlegung, aber der watchdog sollte eigentlich für solche Dinge nicht misbraucht werden, deshalb suche ich nach noch einer anderen einfachen möglichkeit. Gruß
was heisst denn hier missbrauchen? Da sehe ich keinen Missbrauch, du kannst ihn sogar ganz normal im Programm benutzen. Und nur, wenn ein reset ausgeführt werden soll, schickst du den MC in eine Schleife, kein Problem.
Hardware Reset ist doch auch nicht nötig. Es kommt doch nur darauf an, das der Bootloader gestartet wird. Dazu muss eh alles (RS232 usw.) softwaremäßig initialisiert werden.
Weil es z.B. (unabhängig von AVR) in manchen Prozessorarchitekturen Write-once-Register gibt, die aus Sicherheitsgründen nur einmal beschrieben werden dürfen und im laufenden Betrieb dann nicht mehr. Erst nach einem Reset darf wieder schreibend zugegriffen werden. Zudem herrschen nach einem Reset definierte Zustände in allen Registern und auch im RAM nach Durchlauf des Startupcodes. Watchdog-Reset ist die saubere Lösung. ----, (QuadDash).
Ja ich meinte mit einem Portpin den Resetpin auf LOW ziehn, ich weiss alerdings nicht ob der AVR sich slesbt resetten kann oder ob es da noch nen Kondesator oder so braucht.
Mach doch ´nen PullUp 33k an den Reset-Pin und verbinde einen Portpin (den Du nicht brauchst) über 4,7k mit dem Reset-Pin. Somit hast Du noch ISP-Funktionalität. Setze nach dem Anfahren des Programms den ensprechenden PortPin High, danach das entsprechende DDRx-Bit auch auf High. Willst Du nun einen Reset auslösen, schreibst Du ein Low auf den PortPin und alles andere erklärt sich von selbst. Fazit: Minimaler Hard- und Software-Aufwand; absoluter Hardware-Reset, ohne interne Features zu behindern.
Hallo, ich danke Euch allen, ich denke die Reset-Pin oder die Watchdog Variante werden zum Einsatz kommen. Ich werds mal ausprobieren!! Grüße
>>Willst Du nun einen Reset auslösen, schreibst Du ein Low auf den PortPin und alles andere erklärt sich von selbst. Zum Auslösen des Hardware-Reset muss aber lt. Datenblatt der Resetpin eine definierte Zeit auf low sein. Wenn Du das über einen Portpin machst, der ja dann hochohmig wird, kannst Du die Minimalzeit nicht garantieren. >>Fazit: Minimaler Hard- und Software-Aufwand; absoluter Hardware-Reset Was ist daran minimal? Du brauchst einen extra Pin, zusätzliche Beschaltung, damit auch ISP funktioniert und eine zusätzliche Routine dafür. Da ist die Watchdog-Variante doch wesentlich sauberer, und ein Watchdog in eiem Slave empfiehlt sich sowieso, damit ein "aufgehangener" Slave nicht im schlimmsten Fall den Bus blockiert. Sven
> Zum Auslösen des Hardware-Reset muss aber lt. Datenblatt der > Resetpin eine definierte Zeit auf low sein. Wenn Du das über einen > Portpin machst, der ja dann hochohmig wird, kannst Du die > Minimalzeit nicht garantieren. Ja? Ist das so? Ich hätte gedacht, daß der Portpin genauso lange low getrieben wird, bis ein Reset ausgelöst (angefangen) wird. Das ResetSignal wird doch erst durch den Reset selbst zurückgenommen, wie kann dann dieser zu kurz sein? Ich dachte ein zu kurzes Resetsignal läuft nicht sicher einen Reset aus - aber hier?! ----, (QuadDash).
Klar geht der PortPin erst in den Tristate-Mode, wenn der Reset bereits läuft. Was war zuerst da, Huhn oder Ei?!? Probier doch mal, dann siehst Du, ob´s funktioniert. Ist doch eh´ alles graue Theorie, bis man´s selber erlebt.
Ich weiß zwar nicght was die Landwirtschaft da jezt zu schaffen hat, aber wie (QuadDash) gesagt hat, wenn ich den Pin LOW lege geht er doch erst wieder in Tristate wenn der Reset ausgeführt wird... Warum sollte der Reset auf einmal "Abbrechen"?
@Quacks: Schreibe doch einfach in Deiner "Reset"-Routine 0b11000 oder 0x18 oder 24 in das Register "WDTCR" und gut ist. Binnen 16 mS kommt dann automatisch ein Reset. MfG Andi
Das ist doch kein Missbrauch, sondern einer der 2 Standard-Verwendungszwecke eines Watchdog - einerseits Schutz vor Absturz und bei einem absichtlichen echten Reset, geht man einfach in eine Endlosschleife! while(1); Besser, einfacher und sicherer geht es nicht! jörn
"Das ist doch kein Missbrauch" ja, ich geb Euch ja recht reumütig Ihr habt mich überzeugt, dass der Watchdog die einfachste und beste Wahl ist die zu realisieren!! Gruß und vielen Dank nochmals für diese interesanten Vorschläge, die, so denke ich, nicht nur mir weitergeholfen haben wieder etwas weiter in diese Materie einzutauchen.
Okay, ich werd´ mir zukünftig auch die 2 Widerstände und den PortPin sparen - man lernt ja nie aus...
> Zudem herrschen nach einem Reset definierte Zustände in allen > Registern und auch im RAM nach Durchlauf des Startupcodes. Das wage ich echt zu bezweifeln! Manchmal ist es von stepping zu stepping unterschiedlich auf welche Werte die Register liegen, und die RAM Inhalte sind meiste je nach Reset - Art mit zufälligen Werten belegt. Außer man schreibt sich den startupcode selbst, dann ist ein jmp auf den Reset Vector aber auch ausreichend
Wenn das von stepping zu stepping unterschiedlich ist, dann liegt ein Problem des Prozessorherstellers vor. ;-) > und die RAM Inhalte sind meiste je nach Reset - Art mit zufälligen > Werten belegt. Nein, ein Reset verändert keine RAM-Zellen. Diese ändern ihren Wert nur durch Absenken der Versorgungsspannung (bei Unterschreiten der "data retention voltage"). Aber ich schrieb deshalb: "auch im RAM nach Durchlauf des Startupcodes.". Die Betonung liegt auf _Durchlauf des Startupcodes_. Hier muß der Compiler dafür sorgen, daß nach Durchlauf des Startupcodes, die verwendeten Variablen auf definierten Startwerten liegen. > Außer man schreibt sich den startupcode selbst, dann ist ein jmp auf > den Reset Vector aber auch ausreichend Ok, ich dachte an C-Code. Hier gibt der Startupcode des Compilers vor, daß die RAM-Zellen zu initialisieren sind. Und nein, ein jump auf den Resetvektor reicht nicht. Aber wir drehen uns im Kreis... ----, (QuadDash).
Hallo, ich hab auch nochmal eine Frage zum Watchdog. Ich benötige ebenfalls einen Software-Reset. Es wurde ja etwas von einer while(1) schleife geschrieben. Wie ist das genau gemeint? Ich programmiere mit CodeVision in C. Da kriege ich leider so keinen Reset mit dem Watchdog hin.
while(1); ist so gemeint, wie es der C-Standard vorsieht: Eine Schleife, bis der Ausdruck in der Klammer false wird, hier also endlos. Hier hilft ein C-Buch deiner Wahl. Zu einem Reset führt das nur, wenn der watchdog auch aktiviert ist. Hier hilft das Datenblatt zu deinem Controller weiter.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.