ARDUINO DIY-PARTIE 2

ATmega  Standalone

Le but de ce tutoriel est de fabriquer sa propre carte de prototypage à l’image de l’Arduino-Uno. Pour ce faire je vais vous détailler sur plusieurs parties les différentes composantes de la carte, de la partie alimentation à la partie contrôleur USB…   Nous verrons tout pour reproduire à moindre frais notre carte, sans perte de fonctionnalité comparé à l’original Arduino-Uno.

Plan du tutoriel

> Partie1- Bootloader un ATmega328

> Partie2- Réalisation montage standalone.

> Partie3- Montage de l’alimentation.

> Partie4- Intégration du contrôleur USB.

> Partie5- Assemblage de la carte.                                                                  **********************************

Pour cette seconde partie nous allons voir comment monter l’essentiel de notre carte Arduino-Uno sur une breadboard. Ce type de réalisation se nomme un montage standalone (anglicisme qui signifie littéralement : « se tenir seul »).  Autrement-dit il s’agit d’un montage permettant à notre ATmega de fonctionner sans sa carte originelle.

La Réalisation du montage standalone est assez simple, par ailleurs de nombreux tutoriels existent déjà à ce sujet sur le web, y compris sur le site arduino.cc, que je vous conseil de visiter.

https://www.arduino.cc/en/Main/Standalone

https://www.arduino.cc/en/Tutorial/ArduinoToBreadboard

Je vous propose ici une approche pas à pas ainsi que des schémas détaillés pour chaque étapes de construction.

Alors à vos breadboard !

Le montage standalone d’un ATmega328-P-PU

Notez que l’on peut utiliser au moins deux types de résonateurs ou oscillateur, que vous trouverez exposez ci-dessous. Les céramiques, et ceux en crystal que l’on retrouve sur le Arduino (16MHz). L’intérêt des résonateurs céramiques et qu’ils ne requièrent aucun composants additionnels, tels que des condensateurs, comme c’est le cas pour le résonateur crystal.

Schéma 0 : Standalone basique, résonateur céramique

Schéma0_ATmega_Resonateur_ceramique

Schéma 0 : Standalone basique, résonateur crystal

Schéma0_ATmega_Resonateur_crystal

Le schéma est basique, et bien sûr il nous faut une source d’alimentation pour que le montage fonctionne, l’idée étant plutôt de comparer les deux types de résonateurs.

Néanmoins  ce montage s’impose pour tout assemblage standalone. Il s’agit d’un pré requis à tous nos montages ATmega sur breadboard.

En définitif, pour réaliser votre montage standalone, vous aurez besoin uniquement d’une breadboard,  un résonateur, une source d’alimentation, quelques câbles, ainsi qu’un ATmega bootloader.

On peut évidemment améliorer notre montage comme vous pourrez le voir sur les différents schémas que je vous propose ci-dessous.

Schéma 1 : Standalone avec voyant d’alimentation

Schéma1 _Standalone_voyant_alim

On ajoute ici un voyant LED et sa résistance, permettant de savoir lorsque notre montage est sous tension.

De plus un petit condensateur (100nF) est ajouté permettant de filtrer l’alimentation.

Notez que j’utilise ici une batterie connectée directement au ATmega, or ceci n’est faisable qu’avec des batteries dont la tension est comprise entre 3.3V et 5.0V (par exemple avec les batteries lithium à 3.7v). Aussi lorsque vous voudrez brancher une batterie d’un voltage supérieur à 5 v il vous faudra réaliser un montage de régulation (montage que nous verrons lors de la prochaine partie). Néanmoins notre source d’alimentation n’est pas nécessairement une batterie, il peut s’agir d’un module d’alimentation pour breadboard, d’une alimentation par transformateur séparé, ou encore d’utiliser l’alimentation d’une carte Arduino…

Schéma 2 : standalone avec LED sur le pin 13

Schéma2_ standalone_LEDpin13

Ici nous rajouterons une LED accompagnée de sa résistance (résistance de l’ordre de 100 à 200 Ohms), branchés sur le pin 13. Ce qui permet d’obtenir le voyant monté initialement sur les cartes Arduino.

Schéma 3 : Standalone final

Schéma3_Standalone_final

Enfin pour parfaire notre montage standalone nous ajoutons un bouton poussoir, ainsi qu’une résistance de 10K Ohms dite de ‘pull-up’ (raccordée du reset ATmega vers VCC), ceci nous permettra d’obtenir le bouton actionnant le reset lui aussi monté sur les cartes Arduino officielle.

Enfin sachez que le condensateur (100nF) à la base de l’alimentation est optionnel, donc si vous ne l’avez pas, pas de soucis. Toutefois sur le long terme il est intéressant de s’en procurer. De même la LED et sa résistance sont optionnelles, puisque comme vous pouvez le voir elle ne sert qu’en voyant de contrôle d’alimentation.

Notre ATmega 328 est à présent capable d’exécuter son programme (par exemple le test « blink », disponible dans l’IDE Arduino sous la rubrique Fichier/Exemple/Basique, qui fera clignoter la LED montée sur le pin 13). Notre montage standalone est donc terminé, et comme la partie permettant d’intégrer le contrôleur USB n’arrivera que dans quelques pages, je vous propose de voir dès maintenant comment programmer (ou ‘téléverser’) notre montage standalone.

Téléverser un ATmega328 Standalone

Evidemment la portée de ce tutoriel et de vous guider vers la création d’une carte DIY, et donc absolument pas de réutiliser votre carte Arduino à chaque fois que vous souhaiterez téléverser votre montage. Néanmoins à ce niveau il est intéressant de savoir que cette possibilité existe, afin de vous en servir si nécessaire.

L’idée est donc de réinscrire ou téléverser votre nouveau script de programmation sur le microcontrôleur qui se trouve maintenant sur une breadboard, et pourtant nous n’avons à ce stade aucune connectique USB permettant cela, ni même et c’est le plus important ; aucun contrôleur USB !

Et donc vous l’aurez certainement compris nous avons la possibilité de réinscrire notre ATmega déporté à l’aide de notre carte Arduino. Pour cela il suffit de retirer l’ATmega sur votre carte Arduino et d’effectuer le branchement suivant. En réalité cela revient simplement à recréer la connectique existant normalement entre une carte Arduino et son ATmega lors de sa reprogrammation, comme si l’on avait mis une rallonge entre notre microcontrôleur et la carte Arduino-Uno 🙂 !

Schéma de connexion

Téléverser_ATmegaStandalone_Arduino

Détails des connexions

> Arduino sans ATmega

> Arduino rx(0) vers ATmega (rx)

> Arduino tx(1) vers ATmega (tx)

> Arduino reset vers ATmega reset

> ATmega reset vers résistance 10K (L’autre pôle de la résistance vers 5v)

> Arduino GND vers ATmega GND

> Arduino VCC ( 5v) vers ATmega VCC

> Ne pas oublier le résonateur ATmega

> Relier les GND des deux côtés du ATmega

> Relier les VCC des deux côtés du ATmega

Méthode de téléversement

>Ouvrez le script à téléverser

>Choisir le port COM

>Choisir le programmateur : ‘Arduino As ISP’

>Choisir le type de carte

>Un téléversement normal suffit

Téléverser un ATtiny 13A avec un Arduino –UnoATtiny 13A

Un atmega328 P-PU, c’est gros, et nos montages on les souhaite petits évidemment ! Nous avons donc différentes possibilités ; souder des ATmega format machine (tel que l’ATmega 328-AU), mais là c’est petit, en tout cas trop petit pour être soudé facilement à la main… L’autre possibilité et de se familiariser avec différents microcontrôleurs de différentes tailles et fonctionnalités. Et cela tombe bien puisque ATMEL la société qui produit les ATmega328, produit également de nombreux autres composants.

Nous allons ici en voir un en particulier, qui ne nécessite aucun matériel supplémentaire : il s’agit de l’ATtigny 13A. Je vous propose donc en attendant la prochaine partie du tutoriel d’en apprendre un peu plus sur ce microcontrôleur.

Schéma ATtigny 13A

ATtiny13A

Schéma connexion Arduino vs. ATtigny 13A

Schéma connexion Arduino vs. ATtigny 13A

Cette réalisation vous permettras de téléverser votre script sur un ATtigny 13A depuis votre IDE Arduino, simplement à l’aide  de votre carte Arduino.

************************

La partie 2 est à présent finie, dans la prochaine partie nous allons voir comment intégrer une alimentation régulée pour notre prototype de carte qui commence tout juste à prendre forme.

Publicités

15 commentaires

  1. Bonjour, merci premièrement pour ce tuto qui est très clair!
    Je voulais savoir si vous avez rencontré le problème que moi lorsque j’ai voulu programmer mon ATmega328. En fait je souhaite réaliser un clone de l’arduino UNO avec un ATmega 328 et un ATmega8U2. J’ai flashé le bootloader dans les deux et lorsque je souhaite téléverser un sketch dans le ATmega328 via le port série cela ne marche pas, seul la méthode par ICSP fonctionne. Lorsque j’essaye en série, la led RX clignote 3 fois et rien ne se passe.

    Autre fait troublant, une fois que j’ai téléversé un sketch en ICSP avec des « Serial.print », avec une initialisation à 9600 bauds, sur mon moniteur je n’arrive pas à lire ce que j’écris et à l’oscilloscope je m’aperçois que le baudrate est à 1200 bauds.

    Voyez-vous d’où cela peut venir?

    Merci.

    1. Bonjour,
      Merci de votre intérêt pour domologis.fr

      La question est très intéressante, et j’ai effectivement rencontré de nombreux problèmes en essayant de flasher le bootloader du contrôleur USB. C’est d’ailleurs pour cela que je conseil d’utiliser un contrôleur déporté dans le tutoriel (prés à l’emploi dès l’achat).

      Pour bootloader le ATmega328 aucun souci, c’est le contrôleur qui pose problème.
      Concernant votre problème spécifique je ne peux donc pas vous aider. Seulement si la LED Rx clignote et que cela échoue avant l’allumage de la LED Tx, on peut supposer que cela provient d’un disfonctionnement dans les échanges de données, et plus particulièrement dans la transmission de votre contrôleur vers l’ATmega328. Peut-être essayez d’inverser les GPIO Rx et Tx .
      Néanmoins vu que le baudrate ne semble pas fixé comme prévu, j’opterais plutôt pour un disfonctionnement de contrôleur au niveau du soft.
      Avez-vous utilisé les logiciels préconisés, pour compiler votre code vers votre contrôleur ?
      Cordialement

      1. Bonjour,
        Premièrement merci pour cette réponse,

        Je comprends aujourd’hui pourquoi vous avez déporté le contrôleur!
        C’est pourquoi j’utilise le contrôleur de ma carte clonée et j’essaye de programmer un ATmega328 sur une breadboard pour justement pouvoir inverser les fils etc… Je n’arrive toujours pas à flasher mon ATmega328 et le les caractères sont toujours illisibles sur le port série. Toutefois si je branche mon RX et TX sur les bornes d’une arduino MEGA que j’ai, je lis correctement les caractères sur le port série. Mon ATmega8U2 a donc bien un problème.

        Pour programmer mon ATmega8U2 je l’ai mis en mode DFU et avec le logiciel FLIP je l’ai flashé avec le soft « Arduino-usbserial-uno.hex » qui se trouve dans les fichiers arduino de mon PC.
        Il reste peut-être une étape que je ne fais pas ou mal mais une fois cela fait j’imagine que le ATmega8U2 est capable de communiquer avec le ATmega328, je me trompe?

        En tout cas merci de m’aider, je commençais à sécher niveau idée!

      2. Bonjour,
        Désolé pour le délai de réponse mais je suis plutôt pris en ce moment.
        Pour votre dernière question je vous confirme que la puce ATmega8U2 est bien capable de communiquer avec l’ATmega328, pour preuve, il s’agit de la configuration matérielle de l’Arduino-Uno.
        Concernant votre problème une hypothèse me vient en voyant les difficultés liées à la communication. Avez-vous bien installé un résonateur externe (16MHz) pour votre ATmega8U2 ?
        La cadence réelle à 1200 bauds et la communication désynchronisée indique que votre contrôleur USB tourne peut-être avec son résonateur interne à 8MHz.

        Cordialement

  2. Bonjour,

    j’ai effectivement installé un quartz de 16MHz avec deux condensateurs de 18pF. Une question me vient à ce sujet, le firmware « Arduino-usbserial-uno.hex » comprend-t-il directement le fait que j’utilise un résonateur externe ou il faut modifier un paramètre dans le fichier.c et recompiler ensuite?

    Pour être sûr que le quartz n’est pas en cause je vais essayer de le remplacer par un autre pour voir si j’ai le même problème.
    Je vous remercie pour ces pistes! 🙂

    Cordialement

    1. Bonjour,

      Aucun soucis, j’espère que cela pourra vous être utile, et je serais heureux de connaître le dénouement de votre prototype, qui semble très intéressant!
      Pour votre question, je pense que le firmware doit être réécrit manuellement afin de prendre en compte ce type de modification. Afin de vous en assurer, vous pouvez effectivement changer le résonateur pour une autre valeur, voire ne pas en mettre du tout! Si le résultat à l’oscilloscope ne change pas alors vous êtes fixé, votre ATmega 8U2 fonctionne avec son résonateur interne.

      Une autre suggestion, avez-vous parcouru la partie 4 du tutoriel ARDUINO-DIY ?
      Dédiée au contrôleur USB, cette partie met notamment en avant les problèmes de communication série liés au pin DTR, et permet entre autre de crée ce pin pour un contrôleur qui en serait dépourvu. Je ne sais pas si ce principe s’applique sur l’ATmega 8U2 mais cela engendre aussi une absence de communication série.

      Cordialement

  3. Bonjour,

    je dois avouer que réécrire la firmware me fait un peu peur car je n’ai jamais fais cela auparavant ^^
    Je vais déjà essayer d’enlever le résonateur pour m’assurer que le problème ne vient pas de là et je reviens vers vous lorsque c’est fait.

    Oui oui j’ai parcouru tout votre site qui regorge de réponses que j’aurais aimé avoir durant mon périple 🙂 Cependant mon signal DTR à l’air de marcher car je l’observe bien à l’oscilloscope lorsque je souhaite téléverser.

    Je vous donne des nouvelles dans la journée de mes avancements, merci!!!

    Cordialement

  4. Je viens de tester sans quartz, mon PC ne fais pas apparaître le port COM associé, donc je pense qu’il est indispensable de la mettre.

    1. Bonjour,
      Merci du compliment, j’ai effectivement monté Domologis avec l’idée de détailler notamment les points qui m’ont posés problèmes et de belles choses sont encore à venir !
      Sinon la réécriture du firmware ne doit pas vous effrayer, si elle est nécessaire, et rien n’est moins sûr, il s’agira de modifier une valeur ciblée à un endroit précis du code.
      Pour le résonateur nous avons donc la réponse, il est bien pris en charge puisque votre microcontrôleur n’est plus reconnu lorsque vous ne le mettez pas.

      Je pense que nous devrions reprendre au début. Pouvez-vous me donner plus de détails afin que je puisse vous aider efficacement ?
      Donc vous avez un ATmega328, l’avez-vous testé sur une carte Arduino, d’ou provient-il, l’avez-vous bootloader ?
      Vous avez un ATmega8U2, le même format que sur la carte Arduino-Uno, et que vous souhaitez utiliser en contrôleur USB ?
      Avez-vous des plans à fournir de votre montage ?

      On va résoudre votre problème, et désolé pour la tartine de question.
      Cordialement

  5. Bonjour,

    pas de problème pour la tartine de questions comme vous dites au contraire c’est très sympa de votre part de passer du temps pour m’aider.

    En ce qui concerne l’ATmega328 j’ai essayé de reproduire le schéma qui se trouve à cette adresse : https://itechnofrance.wordpress.com/2013/04/13/construire-un-arduino/ (je ne peux pas coller l’image ici ^^). J’utilise pour ma part un ATmega328P, je ne sais pas s’il y a une grande importance. Je l’ai bootloadé via ISP car il est arrivé vierge (acheté sur Mouser), j’ai donc utilisé un de mes arduinos que j’ai programmé en ArduinoISP. Déjà à ce moment là quelques soucis pour le bootloader car arduino reconnais la différence entre ATmega328 et ATmega328P, donc petite modification des signatures des deux µprocesseurs dans le fichier avrdude.conf.

    En ce qui concerne le ATmega8u2 j’ai repris quasiment à l’identique le schéma que l’on trouve pour un arduino Uno ou Mega, j’aurais bien aimé vous le montrer quand même car je suis peut-être passé à coté de quelque chose d’important. Il est arrivé vierge également et je l’ai bootloadé via le mode DFU avec le logiciel Flip.

    Je relis ensuite les deux bebetes via le port série avec une résistance de 1KOhms en série sur chacune des lignes.

    Une dernière question pour savoir si je vous suis bien, si je souhaite réécrire le firmware par exemple, je dois modifier les fichier Arduino-usbserial.h et Arduino-usbserial.c qui se trouvent dans les fichiers arduino? Quel logiciel me conseilleriez-vous pour faire cela?

    Encore merci de votre aide,
    Cordialement

    1. Bonjour,

      L’ATmega328 est une abréviation, je ne crois pas qu’il existe une différence. En réalité lorsqu’on dit ATmega328, il s’agit bien du microcontrôleur ATmega328P-PU.
      Pour ce qui est du bootloader, comme vous avez du le voir, je propose le même genre de schéma que sur l’adresse indiquée et cela fonctionne bien. Donc logiquement ici aucune modification des fichiers de configuration. Avant même de penser à réécrire le firmware, peut être devriez vous reprendre la partie ‘bootloader’ du tutoriel pour votre ATmega328P-PU afin d’être certain que le problème ne vient pas de là.

      Pour le ATmega8U2, je ne suis pas certain de comprendre, vous possédez le même composant qui sert de contrôleur USB sur la carte Arduino-Uno ?
      Afin que vous puissiez me transmettre un schéma de votre montage actuel je vous envoi de suite un mail depuis ma boîte perso sur votre compte Gmail.

      Cordialement

      1. Bonjour,

        oui j’utilise le ATmega8U2, le même composant qui se trouve sur les arduino UNO et MEGA (les dernières versions possèdent un ATmega16U2). En utilisant ces composants je pensais avoir moins de problèmes mais ce n’est pas vraiment le cas ^^
        Je vous envoie les schémas de suite.

        Merci,
        Cordialement.

      2. Bonjour,

        J’ai bien reçu votre schéma et vous en remercie.
        J’aimerais comprendre, l’ATmega8U2 est un mini composant, habituellement assemblé par des machines, comment avez-vous contourné ce problème afin de relier les GPIO aux pattes du microcontrôleur ?
        Pour ce qui est du schéma cela ne m’aide pas beaucoup, n’avez-vous pas réalisé votre propre schéma, même à la main ?
        Envoyez-moi si possible quelques photos du montage en plus de votre schéma cela sera certainement plus claire. Merci.
        Sinon avez-vous tentez de réinscrire le bootloader de votre ATmega328 comme suggéré lors de mon dernier message ?

        Cordialement

  6. Bonjour,
    J’ai réalisé un standalone, et voiçi mon problème à la lecture de données depuis un capteur ou vers le moniteur serie il m’envoi des caractères illisibles.

    1. Bonjour,
      Avez-vous inscrit dans le setup(), l’instruction, ‘Serial.begin(9600);’ ? Cette instruction permet d’indiquer la vitesse de transmission des données en bauds.
      En second point est-ce que vous avez sélectionné la bonne carte, le bon processeur … lors du téléversement du script ?
      Sinon il peut s’agir d’un problème d’encodage, pouvez-vous me montrer votre script ?
      Quel sont les composants avez-vous utilisés pour votre carte standalone ?

      Cordialement,

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s