Un câble de programmation USB à moins de 3 euros

Il y a peu de temps, j’ai acquis 2 atmega328 chargés avec le bootloader Duemilanove. J’aime mettre la main à la pâte. J’ai donc placé un atmega sur une breadboard, avec un quartz de 16 MHz et ses 2 condensateurs, un bouton de reset muni d’une résistance pull-up de 10K, une led de contrôle de l’alimentation et la led à laquelle aucun arduinophile débutant n’échappe : celle de la Pin Arduino 13 (= Pin 19 de l’Atmega).

N’ayant pas le câble USB officiel de l’Arduino, j’ai utilisé un adaptateur USB-TTL acheté sur eBay il y a quelques mois pour moins de 3 euros, envoi de Chine compris. Cet adaptateur fonctionne très bien mais il nécessite d’appuyer manuellement sur le bouton Reset pour démarrer la programmation.

Ce n’est pas un gros problème d’appuyer sur le bouton. Ce qui est plus délicat, c’est le tempo. Avec ce Duemilanove, j’obtenais de bons résultats en appuyant avant le lancer la commande Upload et en relâchant le bouton dès que le message « Binary sketch size: xxxx bytes » apparaissait.

Malgré le bon fonctionnement du système, je me suis demandé qu’est-ce que le câble USB officiel avait de plus pour déclencher l’AutoReset, et j’ai trouvé cette page :
http://www.arduino.cc/playground/Learning/AutoResetRetrofit
On y explique que pour provoquer l’AutoReset, il faut relier le signal DTR à la Pin 0 de l’Atmega (la Pin de Reset) à l’aide d’un condensateur de 0,1 µF.

Mon adaptateur mesure 15 x 20 mm et se présente comme ceci :

A l’arrière, on peut y lire la dénomination des pin :

Je me sert du +5V pour alimenter l’atmega et les signaux Tx et Rx sont évidement reliées aux Pins Rx et Tx de l’Atmega.
J’ai essayé de relier la Pin RST au Reset de l’atmega, mais je n’ai obtenu aucun résultat.

L’adaptateur comporte au centre un chip minuscule. A l’aide d’une loupe, on peut y lire CP2102. Un coup d’œil à la datasheet m’apprend qu’il s’agit d’un chip de Silicon Labs constituant un pont USB-UART dont voici le brochage :

On voit qu’il y a bien une Pin de sortie DTR, correspondant à la Pin 28 du chip. J’ai donc décidé d’essayer de souder un condensateur de 0,1µF entre cette Pin et la broche RST de l’adaptateur. Après quelques mesures et observation par transparence, j’ai vu que la broche RST était reliée au 5V par l’intermédiaire de la résistance SMD R2 de 2,2Kohm. Sous une loupe binoculaire, j’ai soudé le condensateur à la Pin 28 et à la résistance R2.

Dans un premier essai, je n’ai pas coupé la piste menant de R2 au 5V, me réservant cette manœuvre au cas où le Reset ne fonctionnerait pas.

En fait, l’AutoReset fonctionne parfaitement comme cela. Il suffit donc maintenant de relier la broche RST à la Pin0 de l’atmega pour profiter de l'AutoReset.

Cet adaptateur est toujours disponible sur eBay. Il suffit de faire une recherche sur CP2102. Il n’y a que l’embarras du choix, et c’est très très léger pour le portefeuille. Le seul point délicat est la soudure sous une grosse loupe.

Zut, comment fait-on pour insérer des images dans le texte. Mes images sont sur Picasa web. En inscrivant les adresses entre "img" et "/img" çà ne marche pas !
Finalement, je suis obligé d'inclure seulement les adresses des images au lieu des images elles-mêmes.

Edit de Jean-François : pour les photos, c'est fait... XD

Cool merci ! Je garde ton astuce on sait jamais ça peut servir pour plus tard.

Sinon pourquoi s'embêter quand on peut avoir pour le même prix un adaptateur complet ?
ebay -> "FTDI USB to serial UART Module Based TTL FT232RL" 1.10€ :wink:

et dans le genre bonne astuce, l'adaptateur apm usb->RS-232 qu'on peut trouver en grande surface pour même pas 7€ contient un CP2102 et un buffer 5v/+-8v (rs-232) donc pour 7€ on peut avoir un câble usb série et rs-232 :wink:

Hello Skywodd,

J'ai évidemment été voir mais le prix que tu renseignes est une enchère. Le premier prix en "achat immédiat" pour ce module est de 11,26€ + 2,25€ de port.

De plus, ce modèle ne donne pas non plus accès au signal DTR, à moins bien sûr d'y souder à nouveau un condensateur.

Ouf ! Tu m'as fait croire un moment que j'avais passé ma journée pour rien :wink:

:fearful: j'avais pas vu les frais de port désolé, effectivement si ton module est en achat immédiat c'est plus intéressant !

Sinon moi j'ai fait mon bidouillage avec un adaptateur usb/rs232 et là j'en suis sur que c'est un achat immédiat et à 2€ :wink:
ebay -> "Câble Convertisseur USB vers RS232/DB9 Série 9 Pin,F111" (il existe différent type mais presque tous à 1€ c'est le genre de truc à savoir)
J'ai découvert cette astuce ici (qu'on ne me demande pas ce que je voulai faire avec ma box hein ;)) http://www.neufbox4.org/wiki/index.php?title=APM_USB_to_Serial_Adapter

Merci Jean Marie .... et bravo pour avoir été jusqu'au bout !!

J'ai suivi la même démarche .... sans 'conclure' vu la difficulté dans mon cas pour réaliser la soudure sur la broche 28 ! Je suis par contre surpris que cela fonctionne en laissant en place la liaison RST qui est l'entrée de Reset du CP2102. A première vue on pouvais supposer que le passage de DTR à l'état bas provoque dans ces conditions un reset du CP2102 et que cela perturbe le début de l'émission des données vers le bootloader.
Ces modules se trouvent sur ebay avec les mots clefs "USB TTL 6 PIN"
La puce utilisée (Silicon Labs CP2102) a un petit avantage sur celle de FTDI : sortie 3,3V -> près de 100mA disponibles.

PS : quand tu édites un message tu peux joindre une image ou un document avec "Additional Options"

DTR.jpg

@Skywodd
ta box a sans doute bénéficié des mêmes soins qu'une Fonera de récupération
munie hier d'un de ces petits modules "Usb-TTL 6 pins" !!

F2200.jpg

Super, merci pour ce truc que je mettrai en pratique prochainement sur une des mes standalones.

al1fch:
@Skywodd
ta box a sans doute bénéficié des mêmes soins ce qu'une Fonera de récupération
munie hier d'un de ces petits modules "Usb-TTL 6 pins" !!

Les grands esprit ce rencontre :slight_smile:

@ Skywodd: merci pour ton article. Il paraît intéressant mais je n'ai fait que le survoler car je m'absente pour 2 jours et je n'ai pas le temps.

@al1fch: Je m'étais dit que RST voulait peut-être dire Reset mais je j'ai pas pensé que ce Reset pouvait s'appliquer au CP2102 lui-même. Je pensais à un Reset de l'Atmega. Cependant, la seule liaison que j'ai trouvé pour cette broche est avec le +5V par la résistance de 2,2K. Je n'ai trouvé aucune trace vers une broche du CP2102.

@Jean-François: C'est probablement à toi que je dois l'affichage des photos dans le texte. Merci. Je crois que j'avais essayé en insérant l'adresse de la page web et non l'adresse de la photo elle-même. Mon plus grand plaisir serait que d'autres réussissent ce mini hacking.

@Jean-Marie
La liaison entre la broche 9 (Reset du CP2102) et la résistance R2 est principalement sur la face inférieure.
La piste est facile à couper en cas de doute !
Couper cette piste n'est à la réflexion pas une bonne idée : il faut laisser au circuit sa résistance R2 de tirage (pull up) sur son reset.

vers pin 9.jpg

Bonjour,

Une adaptation similaire est-elle aussi nécessaire avec cet adaptateur?

USB2.0 to TTL Converter Module PL2303 +4pcs Free cable :

Plus généralement comment savoir si une adaptation et nécessaire?

Par avance merci :slight_smile:

Edit de Jean-François : pas de lien Ebêee SVP, ils ne sont plus valides après un certain temps et le post perd en compréhension.

Oui Ojal l'adaptation est nécessaire car le module ne sort pas les signaux DTR ou RTS suceptibles de resetter le Mega328 et ainsi amorcer le bootloader.
Ces signaux existent au niveau de la puce Prolific PL2303 (broches 2 et 3, voir PDF en lien) mais la soudure d'un fil pour récupérer l'un de ces signaux est quand même acrobatique !!
http://www.prolific.com.tw/support/files/\IO%20Cable\PL-2303HX\Documents\Datasheet\ds_pl2303HX_v15F.pdf
Tout module ne sortant pas DTR ou RTS nécessite une modification.

Je comprends bien qu'il faille que la puce utilisée puisse sortir le signal adéquat, néanmoins comment savoir pour un adaptateur donné si l'adaptation doit être réalisée???

A mon avis un adaptateur qui fournit RTS, DTR (ou les deux) est utilisable sans modification.
Pour info voir ci dessous le brochage "FTDI" de référence et un exemple d'adaptateur qui fournit DTR a la place de RTS.
-> S'il n'y a ni DTR ni RTS, il faut aller en chercher un des deux sur la puce.

Cable FTDI.jpg

full.jpg

Jean-Marie:
On y explique que pour provoquer l’AutoReset, il faut relier le signal DTR à la Pin 0 de l’Atmega (la Pin de Reset) à l’aide d’un condensateur de 0,1 µF.

Ce n'était pas possible de rajouter le condensateur après la sortie de la pin RST??? Facilement réalisable plutôt que de venir micro-souder comme tu l'as fait...??? J'imagine que tu as essayé cette solution???

al1fch:
@Jean-Marie
La liaison entre la broche 9 (Reset du CP2102) et la résistance R2 est principalement sur la face inférieure.
La piste est facile à couper en cas de doute !
Couper cette piste n'est à la réflexion pas une bonne idée : il faut laisser au circuit sa résistance R2 de tirage (pull up) sur son reset.

Je n'ai pas pu répondre plus tôt car j'étais absent.
Effectivement, le Reset du CP2102 est en liaison avec la broche RST de l'adaptateur par l'intermédiaire de pistes supérieures et inférieures et de vias. Cela m'avait échappé. Il est difficile de dire si cette liaison est directe, par résistance ou par condensateur ou les deux. En effet il est extrêmement malaisé d'aller faire des mesures. En plus je ne dispose pas d'un capacimètre. ( L'occasion d'en fabriquer un avec un atmega ?). Je ne sais pas pourquoi mon système ne provoque pas le Reset du CP2102 mais il y avait effectivement des risques qu'il le fasse.

Ojal:
Ce n'était pas possible de rajouter le condensateur après la sortie de la pin RST??? Facilement réalisable plutôt que de venir micro-souder comme tu l'as fait...??? J'imagine que tu as essayé cette solution???

J'ai effectivement pensé ajouter le condensateur sur la breadboard au lieu de le souder sur l'adaptateur. Mais il fallait de toute façon amener le signal DTR de la pin28 du CP2102 sur la breadboard. Cette pin est bien trop fragile pour y souder un câble vers la breadboard. La seule solution était de souder un fil de la pin28 à la broche RST de l'adaptateur. Or il n'est pas plus difficile de souder un condensateur que de souder un fil. J'ai donc soudé le condensateur. Et l'autoreset est évidemment débrayable puisque rien n'oblige de raccorder sur la breadboard la broche RST de l'adaptateur à la Pin0 de l'atmega.

skywodd:
Sinon moi j'ai fait mon bidouillage avec un adaptateur usb/rs232 et là j'en suis sur que c'est un achat immédiat et à 2€ :wink:
ebay -> "Câble Convertisseur USB vers RS232/DB9 Série 9 Pin,F111" (il existe différent type mais presque tous à 1€ c'est le genre de truc à savoir)

Cela fait moins de 2 euros avec les frais de port. Je suis battu! :zipper_mouth_face:
Cependant, j'ai l'impression que ce câble donne les niveaux RS232 et non TTL. Attention de ne pas raccorder cela directement à l'atmega, sous peine de le griller.

skywodd:
J'ai découvert cette astuce ici (qu'on ne me demande pas ce que je voulai faire avec ma box hein ;)) http://www.neufbox4.org/wiki/index.php?title=APM_USB_to_Serial_Adapter

Ici par contre, on voit que l'adaptateur donne en sortie les niveaux RS232. La transformation consiste à désactiver le MAX213 qui est l'adaptateur de niveau RS232 et à prélever les signaux au niveau TTL, c'est-à-dire à la sortie du PL2302. Il s'agit donc d'une "chirurgie" beaucoup plus lourde qu'avec l'adaptateur à base de CP2102.

Pour ceux que cela rebute de souder des pattes de mouche à l'aide d'un manche à balai, je crois avoir trouvé une autre solution, toujours sans épuiser le portefeuille.

Interrogez eBay avec les mots "USB TTL". Vous allez bien sûr trouver de nombreux adaptateurs rouges comme j'avais mentionné. Mais vous allez en trouver d'autres, noirs, qui se présentent comme celui-ci:

La dénomination est "USB 2.0 to TTL UART 6PIN CP2102 Module Serial Converter"
Le chip est donc le même que dans mon adaptateur rouge, mais le layout est différent. Sur les côtés on remarque des trous pouvant recevoir des pins supplémentaires ou des fils et si on observe la face inférieure, on voit ceci:

L'un des trous est donc raccordé à DTR. Un autre à DSR.
Un petit coup de fer à souder sans acrobatie et le tour est joué. On peut raccorder sans difficulté DTR au reset de l'Atmega.
Je n'ai même pas à changer le titre du thread puisqu'on est toujours en-dessous de 3 euros.

Jean-Marie:
On peut raccorder sans difficulté DTR au reset de l'Atmega.

Ne pas oublier de prévoir quelque part sur la ligne le condensateur de 0,1µF. (Cela va sans dire mais cela va encore mieux en le disant. :wink: )

Superbe trouvaille Jean Marie !
Tous les signaux de contrôle de modems sont directement disponible.
F1 est sans doute un fusible de protection.
Le cavalier reliant (provisoirement !) Tx et Rx permet de faire un test par rebouclage.
L'adaptateur à l'air d'etre en plus livré avec 4 cordons.
C'est plus que complet et bien tentant même si je ne rencontre pas de probleme pour 'resetter' l'Arduino au bon moment que ce soit avec l'"ancien" ou le "nouveau bootloader (Optiboot).
J'appuie dès que l'IDE lance Avrdude, c'est à dire juste après l'appartion du message "Binary sketch size XXXX")