¿Cómo funciona la función de reinicio automático de Arduino Deumilanove?

8

Me gustaría escuchar algunas explicaciones sobre cómo el Arduino Duemilanove restablece el ATMega328P a través de USB a través del transceptor FTDI FT232R.

Sé que involucra al IDE jugando algunos juegos con la señal de apretón de manos serie DTR. Después de ver los esquemas, lo que realmente me interesa es entender mejor cómo funciona el circuito:

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

La resistencia de 10k es el pull-up habitual en la línea de reinicio. Entonces, ¿qué logra el condensador en este circuito?

Como nota al margen, utilicé esto como una excusa para tratar de aprender / usar LTSPICE, por lo que no soy profesional en esta herramienta. Lo modelé en LTSPICE de la siguiente manera, pero me parece que la señal / RESET coincide exactamente con la señal DTR, lo que realmente no tiene sentido para mí. Modelé la señal DTR como una fuente de voltaje de pulso, tal vez ese es el modelo incorrecto. ¿Es la naturaleza del controlador DTR del FTDI (por ejemplo, tal vez es un colector abierto) o las partes internas del pin / RESET en la MCU que no están presentes en el circuito que he dibujado que hacen que todo esto cuelgue eléctricamente?

texto alternativo

Además, aquí hay algunos enlaces relevantes a hojas de datos y esquemas de referencia.

vicatcu
fuente

Respuestas:

6

IIRC la tapa está conectada a / RTS no DTR.

Cuando / RTS es alto, hay 0V en la tapa. Cuando / RTS baja, la tapa no puede cambiar el voltaje instantáneamente, por lo que la línea de reinicio baja. La tapa se carga a través de la resistencia de 10K. Una vez que la línea de reinicio está por encima del umbral de reinicio, comienza el programa uC.

@LouisDavis hizo referencia a esta página , que establece

El ATmega168 se restablece pulsando su pin de restablecimiento a GND. ... al establecer la línea DTR en BAJA ... el pin de reinicio se aspira a BAJA hasta que el condensador se carga a través de la resistencia de extracción interna y R1, que restablece el chip.

Simulado:

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) es DTRo /RTSy V (2) es/RESET
texto alternativo

jluciani
fuente
@jluciani, ¿Dónde ves un límite en RTS? Hay una resistencia no poblada en RTS. El condensador (C13) está conectado entre DTR (pin 2 FT232L) y el pin de reinicio de la MCU ...
vicatcu
@jluciani, tu explicación tiene sentido. Me gusta su explicación con respecto a ningún cambio instantáneo en el voltaje a través de los condensadores. Ese es un principio básico útil para tener en cuenta. Parte de mí se pregunta por qué ambos lados deberían caer a cero y luego recargar un lado, en lugar de que el lado DTR simplemente se descargue a través de la resistencia interna del pin DTR. Además, ¿por qué usaste una fuente PWL en lugar de una fuente PULSE en el sim?
vicatcu
@vicatu, no sé el período o el ciclo de trabajo del pulso, y una simple caída a 0V verifica todos los supuestos muy bien.
tyblu
@tyblu, sí, tengo toda la intención de aceptar esta respuesta, solo espero alguna explicación en respuesta a mis comentarios anteriores.
vicatcu
@vicatcu la resistencia de entrada de cualquier entrada digital es muy alta. No fluirá mucha corriente. La corriente de carga solo puede provenir de la salida digital o del 10K.
jluciani