Hallo zusammen Ich versuche über einen Tastendruck einen hardwaremäßigen Reset durchzuführen. Hier mal die Schaltung +5V | +-+ | | 4k75 | | +-+ TL7705 (Resetgenerator) | +----+ PD2---------+--------| 2 | | |----/Reset AVR +----+ PD2 ist als Eingang definiert und immer auf 1 gesetzt. Wenn ich nun den PD2 auf 0 legen soll der TL7705 einen Reset am AVR auslösen. Das Problem ist nur, daß wenn ich PD auf 0 schalte, sich am Resetin des TL7705 nichts ändert, warum? Ich habe den Pullup mal entfernt, dann kann ich zwar einmal einen Reset auslösen, jedoch dann kommt der PD2 nie mehr auf 1, und es wird ein dauerhafter Reset ausgeführt. Ich habe auch schon einen größeren und kleineren Widerstand ausprobiert, jedoch ohne Erfolg. Kann mir dies jemand erklären, bzw wie kann ich das Problem lösen? MfG Stephan
Aus dem Atmel DATENBLATT: "When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high ({DDxn, PORTxn} = 0b11), an intermediate state with either pull-up enabled ({DDxn, PORTxn} = 0b01) or output low ({DDxn, PORTxn} = 0b10) must occur. Normally, the pull-up enabled state is fully acceptable, as a high-impedant environment will not notice the difference between a strong high driver and a pull-up. If this is not the case, the PUD bit in the MCUCR Register can be set to disable all pull-ups in all ports. Switching between input with pull-up and output low generates the same problem. The user must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state ({DDxn, PORTxn} = 0b11) as an intermediate step."
Du weißt aber schon, daß ein Resetgenerator nur für die alten AVRs ohne Brown-Out-Reset benötigt wird ? Und ein Reset per Software kannst Du viel bequemer über den Watchdog machen, ohne einen Portpin verschwenden zu müssen. Peter
Selbst wenn, ich verstehe die Frage nicht ?! Wenn man den RESET des AVR's mit Pullup gegen Vcc zieht und nun einen Taster an RESET gegen GND, dann hat er doch seinen Taster mit dem er den AVR zurücksetzen kann. Gruß Hagen
Zu dem Thema habe ich auch mal ne Frage: Ich hätte gerne einen Taster, der als normaler Eingabe-Taster dient, gleichzeitig aber - wenn länger als z.B. 5 Sek. gedrückt - einen HW Reset auslöst. Gibts da Vorschläge? Gruß, Hanno
Hallo zusammen @Maddin Ich hab zwar noch nicht ganz verstanden was dies bedeutet, jedoch ich werdes mir mal genauer anschauen. @Peter Ich verwende eine AT90S8515, und so viel ich weiß ist dies hier noch sinnvoll. Ein Reset per SW hab ich mir auch anfangs überlegt, jedoch hierbei habe ich doch immer eine Zeitverzögerung, und ich möchte noch weiter Bauteile mit dem selben Reset zurücksetzen. Portpins habe ich noch genügend. @Hagen Ich vermute mal du verstehst nich warum ich diesen Aufwand treibe, oder? Was du schreibst ist richtig, jedoch der Taster befindet sich in einer Folienstastatur, und wird auserdem noch für weiter Funktionen verwendet. MfG Stephan
Ok, klar dann. Es gibt ja Spannungsstabiliserungen mit ShutDown Eingang. Falls für dich das Ausschalten der Spannung erwähnenswert ist könnstest du den AVR mit einer solchen Spanungsversorgung nutzen.Der AVR schaltet also die Spanungsversorgung ab. Da er aber damit autom. selber runterfährt liegt wieder korrektes Potential am Spannungsversorgungs-Chip an, und das Board wird wieder mit Strom versorgt. D.h. per Software im AVR kannste kurzzeitig alles runterfahren. Gruß Hagen
@Stephan: Das ist relativ einfach ;-) Genau das hier trifft auf deine Anwendung zu: "Switching between input with pull-up and output low generates the same problem. The user must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state ({DDxn, PORTxn} = 0b11) as an intermediate step." Du benutzt PD2 als Eingang mit aktivierten PullUps. ({DDxn, PORTxn} = 0b01) Und um einen Reset auszulösen, schaltest du auf Ausgang_low um. ({DDxn, PORTxn} = 0b10) Und genau das darf man laut Datenblatt nicht machen, sonden benötigt einen Zwischenschritt mit z.B. Eingang+PullUps aus 0b00, oder Ausgang_high 0b11. Ansonsten kann ich keinen Fehler erkennen, habe den TL7705 auch schon oft eingesetzt. Gruß, Maddin
Hallo zusammen @Hanno Also ich würde sagen, daß dies eigentlich durch einen Portpin gemacht werden kann, welcher wie bei mir an den Resetgenerator angeschlossen wird, oder eventuell auch an den Reseteignag des Controllers direkt. @Hagen Diese Variante kann ich zwar nicht verwirklichen, jedoch ich muß sagen die ist eine sehr trickreiche Möglichkeit. Dies muß ich mir merken. @Maddin Also nun hab auch ichs kappiert. ICh hatte den Pin sofot in main als Ausgang mit 1 definiert und später auf 0 gesetzt. Jedoch nun mache ich es wie du geschrieben hast. Also Eingang mit Pullup konfiguriert, und wenn ein Reset erzeugt werden soll den Pin umkonfigurieren. Ach noch was, wo steht dies den im Datenblatt? MfG Stephan
Im Prinzip ist es schon das, was ich brauche. Ich möchte aber einen Hardware-Reset erzwingen, auch wenn der Controller abgestürzt ist oder sonstwie nicht das tut, was er soll. Ich dachte an eine Lösung, die den Taster quasi puffert (RC?) und erst nach etwas Zeit den Pegel auf Low zieht.
Naja, rechne mal den WatchDog mit ein. Der fall das der AVR hängt wird ja über den WatchDog erschlagen. In der Reset ISR kannste dann abfagen ob dieser Reset per WatchDog ausgelösst wurde. Gruß Hagen
Hallo zusammen @Hanno Um einen Reset zu erzwingen, wenn der Controller abgestürzt ist, würde ich den Watchdog verwenden. MfG Stephan
Ok, ok. Natürlich kann man den Watchdog nehmen :) Aber ich traue dem nicht besonders, u.a. weil ich mehrere Tasks parallel ausführe. Wenn jetzt ein Task regelmäßig den WD zurücksetzt, können die anderen Tasks immernoch Unsinn machen. Andererseits: Wenn ich den WD-Reset einfach jedesmal überspringe, wenn ich die Taste gedrückt detektiere... Aber dann habe ich nur zwei Sekunden, die die Taste gedrückt sein muss. Etwas länger wäre schon gut... Ich hab mir gerade mal folgendes überlegt: VCC O | [R] | | +-----+ | | | v | | - --- | | +--o o-+-[R]-+-------O /RESET | | | --- | --- --- | - --- -
> Wenn jetzt ein Task regelmäßig den WD zurücksetzt, können die anderen
Tasks immernoch Unsinn machen.
Deswegen den WD auf mehrere Tasks "verteilen", d.h. jede der Tasks
setzt ein spezielles Bit, die dann vom Watchdog-Task auf
Vollständigkeit geprüft werden und dann erst den WD retriggert...
Schmittchen.
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.