Come funziona la funzione di ripristino automatico di Arduino Deumilanove?


8

Mi piacerebbe sapere alcune spiegazioni su come Arduino Duemilanove ripristina ATMega328P su USB tramite il ricetrasmettitore FTDI FT232R.

So che coinvolge l'IDE giocando alcuni giochi con il segnale di handshaking seriale DTR. Dopo aver esaminato gli schemi, quello che mi interessa davvero capire meglio come funziona il circuito:

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

Il resistore da 10k è il solito pull-up sulla linea di reset. Quindi cosa realizza il condensatore in questo circuito?

Come sidenote, l'ho usato come scusa per provare ad imparare / usare LTSPICE, quindi non sono un professionista di questo strumento. L'ho modellato in LTSPICE come segue, ma mi sembra che il segnale / RESET corrisponda esattamente al segnale DTR, il che non ha davvero senso per me. Ho modellato il segnale DTR come sorgente di tensione a impulsi, forse è quello il modello sbagliato. È la natura del driver DTR dell'FTDI (ad es. Forse è open collector) o gli interni del pin / RESET sull'MCU che non sono presenti nel circuito che ho disegnato che fanno sì che tutto si blocchi elettricamente?

testo alternativo

Inoltre, ecco alcuni dei collegamenti pertinenti a schede tecniche e schemi di riferimento.

Risposte:


6

IIRC il cappuccio è cablato su / RTS non DTR.

Quando / RTS è alto, c'è 0 V attraverso il limite. Quando / RTS si abbassa, il cappuccio non può cambiare la tensione istantaneamente, quindi la linea di ripristino si abbassa. Il cappuccio si carica attraverso la resistenza da 10K. Una volta che la linea di ripristino supera la soglia di ripristino, viene avviato il programma uC.

@LouisDavis ha fatto riferimento a questa pagina , che afferma

L'ATmega168 viene ripristinato facendo pulsare il pin di ripristino su GND. ... impostando la linea DTR su LOW ... il pin di reset viene risucchiato su LOW fino a quando il condensatore viene caricato attraverso la resistenza pull up interna e R1 - che ripristina il chip.

simulata:

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) è DTRoe /RTSV (2) è/RESET
testo alternativo


@jluciani, dove vedi un limite su RTS? C'è un resistore non popolato su RTS. Il condensatore (C13) è cablato tra DTR (FT232L pin 2) e il pin di reset dell'MCU ...
vicatcu

@jluciani, la tua spiegazione ha un buon senso. Mi piace la tua spiegazione riguardo a nessuna variazione istantanea della tensione tra i condensatori. Questo è un comodo principio di base da tenere a mente. Una parte di me si chiede perché entrambi i lati dovrebbero scendere a zero, quindi un lato di ricarica, piuttosto che il lato DTR si scarica semplicemente attraverso la resistenza interna del pin DTR? Inoltre, perché hai usato una sorgente PWL invece di una sorgente PULSE nella sim?
vicatcu,

@vicatu, non conosco il periodo o il ciclo di lavoro dell'impulso e una semplice caduta a 0 V verifica bene tutte le ipotesi.
tyblu,

@tyblu, sì, intendo pienamente accettare questa risposta, spero solo in qualche elaborazione in risposta ai miei commenti sopra.
vicatcu,

@vicatcu la resistenza di ingresso di qualsiasi ingresso digitale è molto alta. Non scorrerà molta corrente. La corrente di carica può provenire solo dall'uscita digitale o da 10K.
jluciani,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.