www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik HW Reset auslösen


Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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."

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hanno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hanno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Hagen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen

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

MfG Stephan

Autor: Hanno (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
 |            |
 |           ---
 |           ---
---           |
 -           ---
              -

Autor: Schmittchen (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.