Wie funktioniert die Auto-Reset-Funktion von Arduino Deumilanove?

8

Ich würde gerne einige Erklärungen hören, wie der Arduino Duemilanove den ATMega328P über USB über den FTDI FT232R-Transceiver zurücksetzt.

Ich weiß, dass die IDE einige Spiele mit dem seriellen DTR-Handshake-Signal spielt. Nachdem ich mir die Schaltpläne angesehen habe, bin ich wirklich daran interessiert, die Funktionsweise der Schaltung besser in den Griff zu bekommen:

        100nF           10kOhm
DTR -----||------+------^v^v^----- VCC
                 |
                 +--/RESET

Der 10k-Widerstand ist das übliche Pull-up auf der Reset-Leitung. Was leistet der Kondensator in dieser Schaltung?

Als Nebenbemerkung habe ich dies als Ausrede benutzt, um LTSPICE zu lernen / zu verwenden, daher bin ich kein Profi in diesem Tool. Ich habe es in LTSPICE wie folgt modelliert, aber es sieht für mich so aus, als ob das / RESET-Signal genau mit dem DTR-Signal übereinstimmt, was für mich nicht wirklich sinnvoll ist. Ich habe das DTR-Signal als Pulsspannungsquelle modelliert, vielleicht ist das das falsche Modell. Ist es die Natur des DTR-Treibers des FTDI (z. B. ein offener Kollektor) oder die Interna des / RESET-Pins auf der MCU, die in der von mir gezeichneten Schaltung nicht vorhanden sind, die dazu führen, dass dies alles elektrisch zusammenhängt?

Alt-Text

Hier finden Sie auch einige relevante Links zu Datenblättern und Schaltplänen als Referenz.

vicatcu
quelle

Antworten:

6

IIRC die Kappe ist mit / RTS nicht DTR verdrahtet.

Wenn / RTS hoch ist, liegen 0 V an der Kappe an. Wenn / RTS niedrig wird, kann die Kappe die Spannung nicht sofort ändern, so dass die Rücksetzleitung niedrig wird. Die Kappe wird über den 10K-Widerstand aufgeladen. Sobald die Rücksetzzeile über der Rücksetzschwelle liegt, startet das uC-Programm.

@ LouisDavis hat auf diese Seite verwiesen , auf der steht

Der ATmega168 wird zurückgesetzt, indem sein Rücksetzstift auf GND gepulst wird. ... indem die DTR-Leitung auf LOW gesetzt wird ... wird der Reset-Pin auf LOW gesaugt, bis der Kondensator über den internen Pull-up-Widerstand und R1 aufgeladen wird - wodurch der Chip zurückgesetzt wird.

Simuliert:

Auto-Reset
VDTR    1 0 PWL(0 5 0.5m 5 0.000500004 0 1m 0)
Vcc 3 0 5
C1  1 2 100n
R1  3 2 10k
.control
delete all
tran 10n 5m
plot v(1) v(2)
.endc
.END

V (1) ist DTRoder /RTSund V (2) ist/RESET
Alt-Text

jluciani
quelle
@jluciani, Wo siehst du eine Obergrenze für RTS? Auf RTS befindet sich ein nicht bestückter Widerstand. Der Kondensator (C13) ist zwischen DTR (FT232L Pin 2) und dem Reset-Pin der MCU verdrahtet ...
Vicatcu
@jluciani, Ihre Erklärung macht Sinn. Ich mag Ihre Erklärung, dass sich die Spannung an den Kondensatoren nicht sofort ändert. Das ist ein praktisches Grundprinzip, das Sie berücksichtigen sollten. Ein Teil von mir fragt sich, warum beide Seiten auf Null fallen sollten, bevor sich eine Seite auflädt, anstatt dass sich die DTR-Seite einfach durch den Innenwiderstand des DTR-Pins entlädt. Warum haben Sie in der Sim eine PWL-Quelle anstelle einer PULSE-Quelle verwendet?
Vicatcu
@vicatu, ich kenne die Periode oder das Tastverhältnis des Impulses nicht und ein einfacher Abfall auf 0 V bestätigt alle Annahmen gut.
Tyblu
@tyblu, ja, ich beabsichtige voll und ganz, diese Antwort zu akzeptieren. Ich hoffe nur auf eine Ausarbeitung als Antwort auf meine obigen Kommentare.
Vicatcu
@vicatcu Der Eingangswiderstand eines digitalen Eingangs ist sehr hoch. Es fließt nicht viel Strom. Der Ladestrom kann nur vom Digitalausgang oder vom 10K kommen.
Jluciani