Como funciona a função de redefinição automática do Arduino Deumilanove?


8

Gostaria de ouvir algumas explicações sobre como o Arduino Duemilanove redefine o ATMega328P sobre USB através do transceptor FTDI FT232R.

Eu sei que envolve o IDE jogando alguns jogos com o sinal de handshaking serial do DTR. Depois de analisar os esquemas, o que realmente me interessa é saber como o circuito funciona:

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

O resistor de 10k é o pull-up usual na linha de redefinição. Então, o que o capacitor realiza neste circuito?

Como nota de rodapé, usei isso como desculpa para tentar aprender / usar o LTSPICE, por isso não sou profissional nessa ferramenta. Eu o modelei no LTSPICE da seguinte maneira, mas parece-me que o sinal / RESET apenas corresponde exatamente ao sinal DTR, o que realmente não faz sentido para mim. Modelei o sinal DTR como uma fonte de tensão de pulso, talvez esse seja o modelo errado. É a natureza do driver DTR do FTDI (por exemplo, talvez seja o coletor aberto) ou as partes internas do pino / RESET no MCU que não estão presentes no circuito que eu desenhei que fazem tudo isso ficar eletricamente conectado?

texto alternativo

Além disso, aqui estão alguns dos links relevantes para folhas de dados e esquemas para referência.

Respostas:


6

IIRC a tampa está conectada a / RTS e não DTR.

Quando / RTS é alto, há 0V no limite. Quando / RTS baixa, a tampa não pode mudar instantaneamente a tensão, de modo que a linha de redefinição fica baixa. A tampa é carregada através do resistor de 10K. Quando a linha de redefinição estiver acima do limite de redefinição, o programa uC será iniciado.

@LouisDavis fez referência a esta página , que afirma

O ATmega168 é redefinido pulsando seu pino de redefinição para GND. ... ajustando a linha DTR para LOW ... o pino de reset é sugado para LOW até que o capacitor seja carregado através do resistor pull-up interno e R1 - que redefine o 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) é DTRou /RTSe V (2) é/RESET
texto alternativo


@ jluciani, onde você vê um limite no RTS? Existe um resistor não preenchido no RTS. O capacitor (C13) está conectado entre o DTR (pino 2 do FT232L) e o pino de redefinição do MCU ...
vicatcu

@ jluciani, sua explicação faz muito sentido. Gosto da sua explicação sobre nenhuma mudança instantânea de tensão nos capacitores. Esse é um princípio básico útil a ter em mente. Parte de mim se pergunta por que os dois lados devem cair para zero e depois recarregar um lado, em vez de o lado do DTR simplesmente descarregar através da resistência interna do pino do DTR? Além disso, por que você usou uma fonte PWL em vez de uma fonte PULSE no sim?
vicatcu

@vicatu, eu não sei o período ou ciclo de trabalho do pulso, e uma simples queda para 0V verifica bem todas as suposições.
tyblu

@tyblu, sim, pretendo aceitar totalmente essa resposta, só espero alguma elaboração em resposta aos meus comentários acima.
vicatcu

@vicatcu a resistência de entrada de qualquer entrada digital é muito alta. Pouca corrente fluirá. A corrente de carga só pode vir da saída digital ou 10K.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.