Forum: Mikrocontroller und Digitale Elektronik HW Reset auslösen


von Stephan (Gast)


Lesenswert?

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

von Maddin (Gast)


Lesenswert?

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."

von Peter D. (peda)


Lesenswert?

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

von Hagen (Gast)


Lesenswert?

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

von Hanno (Gast)


Lesenswert?

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

von Stephan (Gast)


Lesenswert?

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

von Hagen (Gast)


Lesenswert?

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

von Maddin (Gast)


Lesenswert?

@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

von Stephan (Gast)


Lesenswert?

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

von Hanno (Gast)


Lesenswert?

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.

von Hagen (Gast)


Lesenswert?

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

von Stephan (Gast)


Lesenswert?

Hallo zusammen

@Hanno
Um einen Reset zu erzwingen, wenn der Controller abgestürzt ist, würde
ich den Watchdog verwenden.

MfG Stephan

von Hanno (Gast)


Lesenswert?

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
 |            |
 |           ---
 |           ---
---           |
 -           ---
              -

von Schmittchen (Gast)


Lesenswert?

> 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
Noch kein Account? Hier anmelden.