La chose la plus étrange arrive à une carte Arduino autonome que j'ai conçue et construite. La carte (dont les schémas sont ci-dessous) présente les caractéristiques suivantes:
- Il dispose d'un ATmega328P avec un régulateur de tension de 5 V et des circuits habituels lorsqu'il est configuré en tant que contrôleur autonome.
- Il contrôle un tableau de bord avec plusieurs chiffres à 7 écrans reliés par les connecteurs de droite (JP1 à JP12).
- Il a des boutons de curseur décodés à l'aide d'une échelle de tension via ANALOG_0 (A0).
- Il a une horloge en temps réel pour garder l'heure quand il est éteint.
- Il dispose d'un module récepteur RF.
- Il a un en-tête UART (JP17) afin que je puisse programmer la carte en utilisant un port série.
- Il a un haut-parleur attaché à la broche numérique 3 (D3).
J'y télécharge des croquis à l'aide d'un adaptateur RS232-à-TTL que j'ai également construit (schémas également ci-dessous) et d'un câble série-USB. Lors de sa programmation, la carte se comporte comme une carte Severino .
Ce qui est étrange, c'est que lorsque je télécharge un croquis, le processus est interrompu au milieu, puis le haut-parleur commence à émettre un bip continu. Il s'arrête avec les messages avrdude suivants:
avrdude: Version 5.11, compilée le 2 septembre 2011 à 19:38:36 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\arduino-1.0.3\hardware/tools/avr/etc/avrdude.conf"
Using Port : \\.\COM1
Using Programmer : arduino
Overriding Baud Rate : 115200
Lorsque j'appuie sur reset sur le tableau, avrdude continue de sortir ses messages (comme ci-dessous), le bip s'arrête, le téléchargement continue et l'esquisse est téléchargée avec succès sur le tableau.
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
avrdude: Send: 0 [30] [20]
... messages and upload continue and completes successfully.
Je n'ai pas le reste des messages à portée de main ici, mais j'espère que vous avez compris l'idée.
Donc, mes questions sont:
- Qu'est-ce qui met le processus de téléchargement en pause?
- Pourquoi le signal sonore retentit-il lorsque le processus s'arrête?
Réponses:
Eh bien, compte tenu de tous les commentaires formulés dans le cadre de votre question, celle-ci est certainement délicate. Vous voudrez peut-être essayer d'ajouter un condensateur de découplage comme suggéré par @jfpoilpret, bien que vos schémas me semblent bien… (peut-être demander un examen sur EE SE ).
Je vous conseille également de copier la
avrdude
commande à partir de la sortie Arduino IDE (vous la trouverez en haut) et de l'exécuter dans le shell de commande avec un débit binaire inférieur:plus la
-B
valeur est élevée, plus votre débit binaire est faible. et-b
à la vitesse de transmission correcte pour votre chargeur de démarrage (êtes-vous sûr que c'est 115200? il est plus courant de voir 57600).Avez-vous également réglé correctement les fusibles? Vous pourriez aussi bien vouloir vérifier les valeurs des fusibles pour voir si les horloges sont correctement configurées:
qui affichera les valeurs des fusibles. Ensuite, pour rendre les valeurs lisibles, placez les valeurs au bas du formulaire sur le site du calculateur de fusible , après avoir choisi le
Atmega328P
MCU dans la liste déroulante.Vérifiez que:
C'est parce que lorsque le processeur n'a pas configuré la sortie, les valeurs dans les registres sont dans un état indéfini et imprévisible. Ce qui signifie qu'il conserve généralement la dernière valeur qu'il avait avant une réinitialisation ou un état changé en raison d'une étrangeté électrostatique, ou donne une sortie PWM étrange en raison de l'influence d'une horloge à proximité.
Donc, fondamentalement, quelque chose ne va pas lorsque vous téléchargez votre code et cette mauvaise chose a un effet indirect sur l'audio. Je ne m'inquiéterais pas beaucoup de ces trucs, mais plutôt de la cause de la pause.
Malheureusement, je n'ai pas de réponse directe pour vous, mais au mieux quelques pistes que vous devriez approfondir. HTH
la source
J'ai finalement trouvé la cause du problème: le signal de réinitialisation de la broche 4 (DTR - Data Terminal Ready) sur le connecteur DB9-Femelle atteignait 10 V avant de passer à 0 V et déclenchait une programmation haute tension sur l'ATmega. Ci-dessous, une vue d'ensemble montrant la situation:
La trace jaune est le
DTR
signal tandis que la trace verte est leRESET
signal sur l'ATmega.Selon la note d'application Atmel AVR042: AVR Hardware Design Considerations d' Atmel , il convient d'ajouter une diode ESD entre les ATmega
RESET
etVcc
d'empêcher le signal de réinitialisation de déclencher le mode de programmation haute tension, comme ceci:Après avoir ajouté une si petite diode de signal (1N4148) comme la note d'application recommandée, j'ai résolu le problème. Voir ci-dessous la prise de vue prise après l'ajout de la diode.
Maintenant, le pic de 10V a disparu.
C'était une question délicate !! Mais je ne pourrais jamais trouver ce qui n'allait pas sans la recherche et les bons outils. L'argent sur une lunette est de l'argent bien dépensé !!
la source
Je ne suis pas sûr, mais le problème peut également être lié à la fonction de réinitialisation automatique de la carte convertisseur.
J'ai copié la conception de la carte convertisseur de l' Arduino Severino et selon son manuel , la communication série doit être réglée à 19 200 bps pour que la fonction de réinitialisation automatique fonctionne.
Eh bien, j'utilise 115 200, donc ça doit être un problème.
la source