Go Down

Topic: Programmation et communications avec l'Arduino Pro Mini 8MHz/3V3 (Read 234 times) previous topic - next topic

_pepe_

Bonjour à tous,

Plusieurs de mes correspondants m'ont récemment demandé comment programmer et communiquer avec la version 3,3V de l'Arduino Pro Mini à l'aide du matériel prévu pour la version 5V, en l'occurrence l'USB Serial Light Adapter Arduino. Comme cette question semble revenir assez souvent, je vous livre un petit montage express qui répond à ce problème.

Pour rappel, l'ATmega présent sur l'Arduino Pro Mini 3V3 pourrait en principe fonctionner sous 5V. Mais cela n'est en général pas le cas des composants, capteurs et autres périphériques qui l'accompagnent, qui sont justement la raison la plus courante pour laquelle on a choisi cette version 3V3.

Or, l'application directe de signaux logiques 5V sur les entrées de l'Arduino provoquerait une augmentation inopportune du niveau de l'alimentation VCC. Le branchement direct sur la carte d'une interface série fonctionnant sous 5V poserait par conséquent des problèmes de compatibilité.

On trouve dans le commerce des circuits intégrés et des modules permettant la translation des niveaux logiques 5V vers 3,3V et réciproquement. Cependant, dans le cas présent un simple montage avec quelques résistances de valeurs courantes peut suffire.

En effet :
- D'une part, en l'absence d'une charge importante (IO<1mA), le signal TX 3,3V issu de l'Arduino présente un niveau haut suffisant pour être directement interprété de façon correcte par l'entrée RX de l'interface série (VIHmin=3,0V).
- D'autre part, les niveaux hauts 5V des signaux TX et RESET (ou DTR) issus de l'interface peuvent être réduits à des niveaux de 3,3V à l'aide de ponts diviseurs résistifs présentant un rapport proche de k=0,66 (=3,3/5). Chaque pont diviseur est normalement constitué de deux résistances (de valeurs kR et (1-k)R ), mais l'interface série Arduino citée plus haut présente déjà une résistance de 500Ω en série avec le signal TX.
- Enfin, la tension de 5V fournie par l'interface série peut servir à alimenter le régulateur interne 3,3V de l'Arduino.

Pour une utilisation de l'interface série Arduino citée plus haut, le schéma est le suivant :


L'interface série est en vert, l'Arduino en bleu, et le montage à réaliser en noir.

[ ATTENTION: a priori ce schéma-ci ne convient pas aux autres interfaces série, comme notamment la solution à base d'Arduino Uno ôté de son microprocesseur applicatif. Néanmoins le principe retenu est assez simple pour être adapté à chaque situation. ]


Le montage correspondant peut être facilement réalisé sur une plaque à pastilles, une plaque à bandes ou une platine d'expérimentation sans soudure (breadboard).

Dans le cas où les pastilles de connexion de l'Arduino ne sont pas déjà soudées, on peut fabriquer des pinces de contact en façonnant du fil de cuivre rigide de gros diamètre. Un fil émaillé de Ø1 mm, enroulé sur deux tours et limé au niveau des zones de contact, pourrait convenir.



Voilà ce que peut donner l'adaptateur en état de marche, rapidement bricolé avec du matériel récupéré dans les fonds de tiroir :



_pepe_

Suite au message ci-dessus, on m'a soumis un cas qui se résume ainsi :

On utilise un Arduino Uno débarrassé de son microcontrôleur comme interface série, et on ne souhaite pas utiliser les contacts de l'Arduino Pro Mini situés en bout de carte, parmi lesquels figure l'entrée de réinitialisation GRN. On est donc tenu de se connecter sur l'entrée RESET pour ne pas devoir appuyer sur le bouton RESET quand on lance la programmation (ce qui n'est pas très pratique, ni toujours couronné de succès). Mais le principe du simple pont diviseur ne peut être appliqué, car la résistance connectée à GND imposerait alors un reset permanent.


Effectivement. L'entrée GRN présentait l'avantage de n'être sensible qu'au front descendant du signal et de fabriquer sa propre impulsion de reset. Mais pour l'entrée RESET, c'est différent : elle reste sollicitée tant que le niveau bas perdure.

Si l'on souhaite juste placer un pont diviseur entre la sortie et GND, la paire de résistances devrait présenter des valeurs à la fois assez élevées pour garantir le niveau haut au repos sans dépasser 3,3V de façon permanente, et assez faibles pour garantir le niveau bas lors de l'impulsion. Et ce n'est pas possible.

Toutefois, on peut encore réaliser le montage avec quelques résistances, comme sur le schéma suivant :



Comme précédemment, la partie du montage à réaliser figure en noir.

La résistance de 18kΩ empêche le niveau de repos de l'entrée RESET de dépasser 3,3V, et la résistance de 5,6kΩ limite l'amplitude de la tension de l'impulsion sur le front descendant, et aussi l'amplitude du courant sur le front montant. (NB: si l'on n'a pas de résistance de 5,6kΩ, alors prendre la valeur immédiatement inférieure.)

Sur RX et TX, les deux résistances de 1,8kΩ constituent des ponts diviseurs avec les résistances internes de 1kΩ de la carte Arduino. À noter que le rôle de ces deux signaux est inversé par rapport à leur dénomination. De ce fait, contrairement au montage du précédent message, on doit brancher RXI à RX et TX0 à TX.

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy