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

Ich würde gerne einige Erklärungen darüber 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-Handshaking-Signal spielt. Nachdem ich mir die Schaltpläne angesehen habe, bin ich wirklich daran interessiert, besser in den Griff zu bekommen, wie die Schaltung funktioniert:

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

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

Als Nebenbemerkung habe ich dies als Ausrede verwendet, um zu versuchen, LTSPICE zu lernen/zu verwenden, also 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 keinen Sinn ergibt. Ich habe das DTR-Signal als Impulsspannungsquelle modelliert, vielleicht ist das das falsche Modell. Ist es die Natur des DTR-Treibers des FTDI (z. B. ist es 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

Außerdem finden Sie hier einige der relevanten Links zu Datenblättern und Schaltplänen als Referenz.

Antworten (1)

IIRC die Kappe ist mit /RTS verdrahtet, nicht mit DTR.

Wenn /RTS hoch ist, liegen 0 V an der Kappe an. Wenn /RTS auf Low geht, kann die Kappe die Spannung nicht sofort ändern, sodass die Reset-Leitung auf Low geht. Die Kappe wird durch den 10K-Widerstand aufgeladen. Sobald die Reset-Linie über der Reset-Schwelle liegt, startet das uC-Programm.

@LouisDavis hat auf diese Seite verwiesen , die besagt

Der ATmega168 wird zurückgesetzt, indem sein Reset-Pin auf GND gepulst wird. ... durch Setzen der DTR-Leitung auf LOW ... wird der Reset-Pin auf LOW gesaugt, bis der Kondensator über den internen Pull-Up-Widerstand und R1 aufgeladen ist - was den Chip zurücksetzt.

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, wo siehst du eine Obergrenze für RTS? Es gibt einen unbestückten Widerstand auf RTS. Der Kondensator (C13) ist zwischen DTR (FT232L Pin 2) und dem Reset-Pin der MCU verdrahtet ...
@jluciani, deine Erklärung macht Sinn. Ich mag Ihre Erklärung bezüglich keiner sofortigen Spannungsänderung an Kondensatoren. Das ist ein praktisches Grundprinzip, das man sich merken sollte. Ein Teil von mir fragt sich, warum beide Seiten auf Null fallen und dann eine Seite wieder aufgeladen werden sollte, anstatt dass sich die DTR-Seite einfach durch den Innenwiderstand des DTR-Pins entlädt? Warum haben Sie in der Simulation eine PWL-Quelle anstelle einer PULSE-Quelle verwendet?
@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, ja, ich beabsichtige voll und ganz, diese Antwort zu akzeptieren, ich hoffe nur auf eine Ausarbeitung als Antwort auf meine obigen Kommentare.
@vicatcu Der Eingangswiderstand jedes digitalen Eingangs ist sehr hoch. Es wird nicht viel Strom fließen. Der Ladestrom kann nur vom Digitalausgang oder dem 10K kommen.
@vicatcu Ich glaube, ich habe das RTS auf einem Arduino-Schema gesehen. Auf allen meinen Platinen verdrahte ich den RTS mit dem Reset-Kondensator.
@vicatcu Auf dem Arduino-Schema habe ich sowohl DTR als auch RTS mit Reihenkondensatoren an den Reset angeschlossen. Boards, die ein FTDI-Kabel verwenden, müssen RTS verwenden, da die DTR-Leitung nicht am Header-Anschluss herausgeführt wird. Da die Boards, die ich verkaufe, entweder mit dem FTDI-IC oder dem Header gebaut werden können, war das RTS am sinnvollsten.
@jluciani, interessant, können Sie einen Link zu einem Referenz-Arduino-Schaltplan bereitstellen, der die RTS-Leitung vom FTDI-Chip verwendet? Ich denke, Sie würden zustimmen, dass der Link, den ich in meiner Frage angegeben habe, keine solche Verbindung hat, oder?