Reset beim Arduino steuerbar machen

OP #7374934
Lesenswert?

Ich suche nach Schaltung, mit der man den Reset des Arduino Nano über das DTR-Signal per Software sperren kann. Sie sollte folgende Eigenschaften haben:

  • wenn der Port-Pin des 328P auf Input steht, soll DTR einen Reset auslösen können.
  • wenn der Port-Pin des 328P auf Output steht, soll DTR gesperrt oder frei geschaltet sein, je nach Ausgabesignal
  • die Schaltung soll möglichst einfach aufgebaut sein

Ich habe lange überlegt, wie man das machen könnte, bin aber auf keine überzeugende Idee gekommen.

Hat jemand eine Idee?

Anhang: wie der Reset beim Nano realisiert ist.

Angehängte Dateien:
OP #7374948
Lesenswert?

Christian M. schrieb:

Deine Anforderungen sind zu umgekehrt!

Per I/O-Port einen Reset auszulösen, ist nicht mein Ziel – einen SW-Reset bekomme ich auch mit dem Watchdog hin.

Sinn der Schaltung soll es sein, den Nano vor dem Reset zu schützen, wenn man ihn während des Betriebs per USB an den PC anschließt – der wird nämlich ausgelöst, wenn Linux das ttyUSB anlegt.

Auf der anderen Seite soll ein verflashter oder leerer Controller, der keine Kontrolle über den Pin geben kann, per Bootlader und avrdude neu programmiert werden können.

#7374958
Lesenswert?

Moriz schrieb:

Sinn der Schaltung soll es sein, den Nano vor dem Reset zu schützen

DTR geht auf LOW um den RESET auszulösen. Der 100n erzeugt dann einen kurzen RESET-Puls.

Du kannst zum Beispiel zwischen DTR und diesen Kondensator einen NFET setzen, mit S an DTR, D am Kondensator, und G an deinem Port, und noch einem 10k von G/Port an VCC. Wenn dann der Port auf Input, oder auf Output High steht, leitet der FET und DTR löst den RESET aus; wenn aber der Port auf Output Low steht, sperrt der FET und DTR Low löst den RESET nicht aus.

LG, Sebastian

#7374980
Lesenswert?

Ein leerer Controller schaltet den Pin nicht auf Output - Reset ist möglich. Ein gutes Programm macht das und verhindert so den Reset. Alles gut, aber: Ein böses Programm wird das (natürlich) auch machen. Also in erster Näherung ist es unmöglich.

Ein gutes Programm könnte auf einem Pin ein Rechteck ausgeben, und zwar per Programm, nicht per Timer. Die zusätzliche Hardware würde den Reset genau dann sperren, wenn die Frequenz stimmt. Natürlich würde ein böses Programm auch die richtige Frequenz ausgeben.

Man könnte die Sperre erst eine gewisse Zeit nach dem Einschalten freigeben. In der Zeit ist es egal, was das Programm macht, ein Reset ist möglich. Man muss dann nur schnell genug die Programmierung starten.

Deshalb benutze ich nicht DTR oder RTS, sondern sende ein BREAK. Ja, das kostet 5 oder 6 Bauteile, aber dafür funktioniert es. Bonus: es funktioniert auch ohne USB bzw. mit jedem USB-UART-Konverter, weil man nur die Datenleitungen braucht.

OP #7375024
Lesenswert?

Bauform B. schrieb:

Also in erster Näherung ist es unmöglich.

In dem raren Fall müsste man einmal auf den Bootlader verzichten und den Chip per ISP flashen – das wäre in meinen Augen vertretbar.

Deshalb benutze ich nicht DTR oder RTS, sondern sende ein BREAK. Ja, das kostet 5 oder 6 Bauteile, aber dafür funktioniert es.

RTS für Reset verwenden? Das ist Unsinn, RTS ist eine Handshakeleitung, die jederzeit vor einer neuen Datenübertragung vom Sender aktiviert werden kann – damit will man ganz sicher kein Reset lostreten…

Das mit dem BREAK könnte man machen, hat aber den Nachteil, dass das mit dem Arduino-Bootlader nicht kompatibel ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren