Comment fonctionne la fonction de réinitialisation automatique de l'Arduino Deumilanove?

8

J'aimerais entendre quelques explications sur la façon dont l'Arduino Duemilanove réinitialise l'ATMega328P via USB via l'émetteur-récepteur FTDI FT232R.

Je sais que cela implique que l'IDE joue à certains jeux avec le signal de négociation en série DTR. Après avoir regardé les schémas, ce qui m'intéresse vraiment pour mieux comprendre le fonctionnement du circuit:

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

La résistance 10k est le pull-up habituel sur la ligne de réinitialisation. Alors qu'est-ce que le condensateur accomplit dans ce circuit?

En tant que sidenote, j'ai utilisé cela comme excuse pour essayer d'apprendre / utiliser LTSPICE, donc je ne suis pas un pro de cet outil. Je l'ai modélisé dans LTSPICE comme suit, mais il me semble que le signal / RESET correspond exactement au signal DTR, ce qui n'a pas vraiment de sens pour moi. J'ai modélisé le signal DTR comme une source de tension d'impulsion, c'est peut-être le mauvais modèle. Est-ce la nature du pilote DTR du FTDI (par exemple, c'est peut-être un collecteur ouvert) ou les internes de la broche / RESET sur le MCU qui ne sont pas présents dans le circuit que j'ai dessiné qui font que tout cela se raccorde électriquement?

texte alternatif

En outre, voici quelques liens pertinents vers des fiches techniques et des schémas pour référence.

vicatcu
la source

Réponses:

6

IIRC le capuchon est câblé à / RTS et non à DTR.

Lorsque / RTS est élevé, il y a 0 V à travers le capuchon. Lorsque / RTS devient bas, le capuchon ne peut pas changer la tension instantanément, donc la ligne de réinitialisation devient basse. Le capuchon se charge à travers la résistance 10K. Une fois que la ligne de réinitialisation est supérieure au seuil de réinitialisation, le programme uC démarre.

@LouisDavis a référencé cette page , qui indique

L'ATmega168 est réinitialisé en pulsant sa broche de réinitialisation sur GND. ... en réglant la ligne DTR sur LOW ... la broche de réinitialisation est aspirée à LOW jusqu'à ce que le condensateur soit chargé via la résistance de rappel interne et R1 - qui réinitialise la puce.

Simulé:

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) est DTRou /RTSet V (2) est/RESET
texte alternatif

jluciani
la source
@jluciani, où voyez-vous un plafond sur RTS? Il y a une résistance non peuplée sur RTS. Le condensateur (C13) est câblé entre DTR (FT232L broche 2) et la broche de réinitialisation du MCU ...
vicatcu
@jluciani, Votre explication est logique. J'aime votre explication concernant l'absence de changement instantané de la tension entre les condensateurs. C'est un principe de base pratique à garder à l'esprit. Une partie de moi se demande pourquoi les deux côtés devraient tomber à zéro puis se recharger d'un côté, plutôt que le côté DTR se déchargeant simplement à travers la résistance interne de la broche DTR? Aussi pourquoi avez-vous utilisé une source PWL au lieu d'une source PULSE dans la simulation?
vicatcu
@vicatu, je ne connais pas la période ou le rapport cyclique de l'impulsion, et une simple chute à 0V vérifie bien toutes les hypothèses.
tyblu
@tyblu, oui j'ai bien l'intention d'accepter cette réponse, j'espère juste une élaboration en réponse à mes commentaires ci-dessus.
vicatcu
@vicatcu la résistance d'entrée de toute entrée numérique est très élevée. Il n'y aura pas beaucoup de courant. Le courant de charge ne peut provenir que de la sortie numérique ou du 10K.
jluciani