Je ne peux pas télécharger de croquis sur mon Arduino Uno.
- Est-ce que je l'ai "maquillé"?
- Quelles mesures puis-je prendre pour déterminer ce qui ne va pas?
- Que puis-je faire pour le réparer?
Je ne peux pas télécharger de croquis sur mon Arduino Uno.
Réponses:
J'ai pas mal d'Arduinos, et au cours des dernières années, je n'en ai jamais fabriqué qu'un seul, et je pense que c'était en le zappant avec de l'électricité statique. Malheureusement, celui-ci avait une puce de processeur SMD (monté en surface), il n’est donc pas facile de l’échanger avec une autre puce.
Restez calme et essayez les étapes suivantes ...
Un "Arduino Uno" n'est pas une chose qui pourrait échouer. Il comporte plusieurs composants principaux, et un seul peut avoir échoué (le cas échéant). Voir cette photo de référence:
Les principaux composants sont:
Notez que les voyants Rx et Tx ne sont pas directement connectés aux broches numériques 0 et 1 de la carte (marquées Rx et Tx). Ils ne s'allument que si vous établissez des communications série via USB , pas si vous avez quelque chose (comme un GPS) branché directement sur les broches numériques 0 et 1.
Notez également que, puisque la DEL "L" est connectée via un amplificateur opérationnel, elle peut s’allumer si la broche 13 est définie sur une entrée de votre esquisse. C'est normal. Cela ne signifie pas que quelque chose envoie par erreur des données.
Branchez la carte dans votre ordinateur avec le câble USB et vérifiez que le voyant vert "On" s'allume.
Utilisez un multimètre et deux cavaliers pour tester entre la broche 5V et la broche GND (flèche en bas). Vous devriez avoir une lecture d'environ 5,0 V (j'ai 5,04 V sur le mien).
(Vous pouvez acheter un multimètre bon marché pour environ 10 USD si vous n'en avez pas, mais vous feriez mieux d'en acheter un meilleur pour environ 50 USD - consultez tous les sites Web et les magasins de produits électroniques.)
Si vous n'obtenez pas le 5 V avec le câble USB branché, assurez-vous que l'autre extrémité est connectée à votre ordinateur. Essayez également un autre câble.
Si vous utilisez ou prévoyez d’utiliser la prise d’alimentation (marquée "power in" sur la photo), débranchez le câble USB et branchez un bloc d’alimentation - qui devrait être de 7 à 12 V CC avec le positif sur la broche centrale .
Mesurez les broches 5 V et 3,3 V comme ci-dessus. Vous devriez toujours voir les mêmes tensions sur eux.
Si vous obtenez 5 V avec le port USB connecté, mais pas avec l'alimentation, le régulateur de tension (indiqué sur la photo) est probablement endommagé. Ou, éventuellement, l'alimentation est en panne. Essayez une alimentation différente pour confirmer laquelle.
Si vous avez le chargeur d'amorçage Optiboot (normalement livré avec l'Uno), si vous appuyez puis relâchez le bouton de réinitialisation ou si vous débranchez et branchez le câble USB ou le câble d'alimentation, le voyant "L" doit clignoter rapidement 3 fois. Les temps "marche" et "arrêt" sont de 50 ms chacun, les trois clignotements devraient être terminés en environ 1/3 de seconde.
Si ce n'est pas le cas, vous pouvez avoir un problème avec le chargeur de démarrage ou la puce du processeur principal (Atmega328P).
Important: si vous rencontrez des problèmes pour télécharger des esquisses, supprimez tous les périphériques connectés (tels que les boucliers). Retirez également les fils de connexion branchés dans les prises de la carte. En particulier, rien ne doit être branché sur les broches numériques 0 et 1 (Rx et Tx) car cela gênerait la communication avec l’ordinateur qui télécharge.
Choisissez l’un des exemples simples (par exemple, Blink) et essayez de le télécharger. Voici ce que vous devriez voir:
Le voyant "L" doit clignoter 3 fois. En effet, la puce principale est réinitialisée par une commande du processus de téléchargement.
Le voyant "Rx" devrait clignoter rapidement. Voici les instructions du processus de téléchargement essayant d'activer le chargeur de démarrage.
Le voyant "Tx" devrait clignoter rapidement. C'est le processeur qui acquitte les données téléchargées.
Vous pouvez voir ce qui précède même si le processus de téléchargement échoue. Cela peut être dû au fait que le type de carte sélectionné est incorrect.
Si seul le voyant "Rx" clignote, cela peut être dû à un problème lié au chargeur de démarrage ou à la puce du processeur principal (Atmega328P). Quelqu'un frappe à la porte, mais personne n'est à la maison!
Si les voyants clignotent mais que vous recevez un message comme celui-ci:
avrdude: stk500_recv(): programmer is not responding
Vérifiez le type de tableau:
Si vous avez sélectionné le mauvais type de carte, il enverra probablement les instructions de chargement incorrectes, ainsi que le délai d'expiration ou l'échec. Si vous êtes comme moi et que vous avez différents forums, il est facile d’oublier que le dernier téléchargement que vous avez effectué concernait un type de forum différent.
Si les voyants ne clignotent pas du tout, vous avez peut-être sélectionné le mauvais port de communication.
Vérifiez le port de communication:
Essayez votre Arduino sur un autre PC / Mac si vous en avez un. Cela peut permettre de déterminer si vous avez un problème avec l'ordinateur auquel vous l'avez branché ou avec les ordinateurs en général.
Câblage:
Si tout est renvoyé: cela confirme que vous avez le bon port de communication, le câble USB est en bon état et la puce d’interface USB (Atmega16U2) est probablement en bon état.
Si rien n'est renvoyé, vérifiez:
Si votre carte échoue au test de bouclage et que vous êtes certain que le câble USB est correct, vous pouvez alors tester la puce Atmega16U2 elle-même. Un en-tête ICSP (In Circuit Serial Programming) se trouve sur la carte, à côté de la puce Atmega16U2 et à proximité du port USB.
Débranchez d'abord l'alimentation (débranchez le câble USB et tous les câbles d'alimentation).
Ensuite, vous pouvez connecter l’en-tête ICSP via 6 fils de liaison à une bonne Uno, comme indiqué sur la photo:
Les broches de l'en-tête ICSP sont (depuis le haut):
La broche 1 sur l'en-tête ICSP près de la puce Atmega16U2 est marquée d'un petit point blanc, près du "F" dans "AREF". La broche 1 sur l'en-tête ICSP près de la puce ATmega328P est marquée d'un petit point blanc, situé sous le "N" de "ON".
Connectez-vous:
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
Vérifiez votre câblage.
Ensuite, installez l’esquisse "Atmega_Board_Detector" sur la carte "correct", comme décrit sur la page de programmation du chargeur de démarrage Atmega . Le code est à GitHub - nickgammon / arduino_sketches . Si vous cliquez sur le bouton Télécharger sur cette page, vous obtiendrez un certain nombre de croquis utiles. Celui que vous voulez s'appelle "Atmega_Board_Detector".
Une fois installé, ouvrez le moniteur série, réglez-le sur 115200 bauds et vous devriez voir quelque chose comme:
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000
Bootloader:
3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3
First 256 bytes of program memory:
0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...
Cependant, si vous recevez un message comme celui-ci:
"Failed to enter programming mode. Double-check wiring!"
Cela semblerait indiquer que votre ATmega16U2 ne fonctionne pas.
Déconnectez l'alimentation de l'Arduino Uno "connu" et rebranchez les cavaliers ICSP comme indiqué sur cette photo pour les connecter au processeur "principal" de votre Uno:
Les broches de l'en-tête ICSP sont (depuis le haut):
La broche 1 sur l'en-tête ICSP près de la puce ATmega328P est marquée d'un petit point blanc, situé sous le "N" de "ON".
Le câblage est le même qu'auparavant, sauf que vous vous connectez à l'autre en-tête ICSP - celui situé à l'extrémité du tableau, le plus éloigné du port USB.
Good board Target Uno
MISO MISO (pin with dot - pin 1)
VCC VCC
SCK SCK
MOSI MOSI
D10 /RESET
GND GND
Une fois connecté, ouvrez le moniteur série, réglez-le sur 115200 bauds et vous devriez voir quelque chose comme:
Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul 9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00
Bootloader:
7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...
MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328
First 256 bytes of program memory:
0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...
Dans ce cas, il confirme que le processeur principal fonctionne et contient le chargeur d'amorçage Optiboot.
Ce n'est pas facile à remplacer, mais cela n'est nécessaire que si vous utilisez la prise d'alimentation. Si vous utilisez une clé USB, ce n'est pas nécessaire. Vous pouvez également disposer d’une alimentation de 4 à 5 V (par exemple, 3 piles AA) et les connecter directement à la prise 5 V de la carte.
Ceci n'est requis que pour télécharger des esquisses via le port USB et pour le débogage en série. Il n'est pas particulièrement facile à remplacer car il s'agit d'un SMD (appareil monté en surface). Cependant, vous pouvez vous en passer.
Vous pouvez télécharger des esquisses via l'en-tête ICSP si vous achetez un périphérique de programmation ICSP.
Exemples de tels périphériques branchés sur le socket ICSP:
(Ces photos ont été prises avec un Ruggeduino, mais le concept est le même).
Vous pouvez également obtenir un câble FTDI, comme ceci:
Connectez-le aux ports série de votre carte comme ceci:
FTDI Arduino Uno
GND GND (black wire on FTDI cable, blue jumper wire)
CTS not connected
VCC 5V
TxD D0 (RX)
RxD D1 (TX)
RTS To RESET with a 0.1 µF capacitor in series with it (green wire)
Vous pouvez maintenant télécharger des esquisses directement sur le processeur principal, en contournant la puce USB.
Vous pouvez également utiliser mon programmeur autonome à puce Atmega pour télécharger des fichiers .hex . Cela vous permet de copier le fichier .hex d'un croquis sur une carte SD, puis de programmer le tableau via l'en-tête ICSP.
Le processeur principal peut être remplacé assez facilement s'il est monté dans un socket. Obtenez une puce de remplacement quelque part comme Adafruit pour environ 6 dollars américains. Sinon, essayez eBay. Essayez d’obtenir une puce sur laquelle figure déjà le chargeur d’amorçage Optiboot, afin d’éviter les tracas.
Sortez soigneusement la puce existante de la prise et installez la nouvelle, en tenant compte de l'emplacement de la broche 1. La broche 1 a une encoche sur la puce et son orientation correcte est indiquée sur la première photo de cet article par un jaune. point (le plus proche du bord du tableau). Vous aurez probablement besoin de redresser légèrement les jambes. Tenez la puce par les extrémités et poussez-la doucement sur une surface plane, comme un bureau, jusqu'à ce qu'elle soit légèrement poussée vers l'intérieur. Essayez de ne pas toucher les broches métalliques, vous pouvez les zapper avec de l'électricité statique.
J'ai un schéma chez Atmega Bootloader Programmer qui remplacera le chargeur Optiboot. Le câblage est le même que pour le schéma du détecteur de copeaux. Le code est à GitHub - nickgammon / arduino_sketches . Si vous cliquez sur le bouton Télécharger sur cette page, vous obtiendrez un certain nombre de croquis utiles. Celui que vous voulez s'appelle "Atmega_Board_Programmer".
Installez le croquis sur votre Uno "connu comme bon" et connectez-le à la carte cible avec le câblage présenté précédemment.
Ouvrez le moniteur série sur votre "bon" Uno et vous devriez voir ceci:
Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul 9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Tapez "U" pour le chargeur Uno (Optiboot).
Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or 'G' to program the chip with the bootloader ...
Tapez "G" pour programmer la puce.
Tu devrais voir:
Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...
Cela prend environ une seconde. Maintenant, le chargeur de démarrage est installé.
Le minuteur de surveillance (désactivé par défaut) peut être configuré pour réinitialiser le processeur après un certain temps. L'intention est de récupérer d'un "blocage" pour un processeur déployé sur le terrain. Toutefois, si le temporisateur est réglé sur une courte période (environ 16 ms), le processeur peut être réinitialisé avant que le chargeur de démarrage ne puisse rien faire.
Les symptômes sont que vous ne pouvez pas télécharger de nouveaux croquis. Certains chargeurs de démarrage modernes (tels qu'Optiboot) prennent des mesures pour résoudre ce problème. Cependant, d'autres non.
Cela peut être difficile à résoudre, car une fois que l'esquisse est exécutée, vous avez le problème de la réinitialiser et si vous avez le problème, vous ne pouvez pas remplacer l'esquisse. Les gens signalent souvent qu'ils doivent graver un nouveau chargeur de démarrage pour récupérer. Cependant, c’est uniquement parce que la gravure d’un chargeur de démarrage a pour effet secondaire d’effacer la construction actuelle.
Il y a un moyen de récupérer. Prenez ces mesures:
Je le mentionne ici, même si cet article vise vraiment le tableau Uno, car il est assez courant.
Certaines versions du chargeur de démarrage Mega2560 recherchent "!!!" dans le téléchargement entrant à partir du PC, et s’ils le voient, passez en mode débogage. Cela fait échouer le téléchargement.
Exemple de code:
Serial.println ("Furnace overheating!!!");
Solutions:
Ou (plus simplement):
Il peut être plus difficile de télécharger des cartes avec l’ATmega32u4 comme processeur principal (et unique). En effet, la même puce doit gérer les téléchargements et exécuter votre code.
Une fois le tableau réinitialisé, il existe une petite fenêtre d’opportunité lorsqu’il cherche un nouveau dessin à télécharger. La technique de téléchargement sur ces forums est la suivante:
Vous ne disposez que d'une seconde ou plus pour le faire, avant que l'ancienne esquisse ne commence à être exécutée. Ne vous découragez pas si vous devez répéter ce processus plusieurs fois. C'est normal.
Au moins, car je suppose que vous envoyez votre esquisse via avrdude, donnez plus d'informations sur l'échec de l'envoi (par exemple, la sortie de l'outil de téléchargement d'esquisse) afin que les personnes ici présentes puissent vous aider à mieux.
En plus de la bonne réponse de Nick Gammon, veuillez rechercher des points d'exclamation dans votre croquis. Si votre esquisse contient une chaîne comportant plus de 3 points d'exclamation, le téléchargement échouera, car les anciennes versions du chargeur de démarrage Arduino interpréteraient ces points d'exclamation comme une autre fonction et le téléchargement s'interromprait.
Un exemple pour arrêter le téléchargement:
char* test = "This will stop the upload!!!";
Voir le numéro de code Google .
J'ai branché 2x ATMega328P sur ma carte Arduino Uno à cause de la statique (je pense).
La statique semble avoir tué la broche TX et le programme ne peut donc pas être téléchargé à l'aide du câble USB.
La solution la plus simple consiste à remplacer le microcontrôleur. Vous pouvez acheter un nouveau DIP ATMega328P programmé avec le chargeur de démarrage Arduino ( comme celui-ci d'Adafruit ) et vous êtes prêt à recommencer.
Sinon, vous pouvez toujours programmer les ATMega328P en utilisant le programmateur AVRISPmkII. Lorsque vous le faites, tout sauf la broche Tx fonctionne bien.