> Partie2- Réalisation montage standalone.
> Partie3- Montage de l’alimentation.
> Partie4- Intégration du contrôleur USB.
> Partie5- Assemblage de la carte.
Réalisation étape par étape d’un montage standalone avec ATmega 328 P, et méthode de téléversement ISP.
Approche et utilisation de l’ATtigny 13A
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 !
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.
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.
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…
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.
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.
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 !
> 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
>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
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.
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.
12/May/2016 - Quentin Broizat
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.
16/May/2016 - Benjamin Printemps
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
17/May/2016 - Quentin Broizat
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!
22/May/2016 - Benjamin Printemps
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
23/May/2016 - Quentin Broizat
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!
23/May/2016 - Benjamin Printemps
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
24/May/2016 - Quentin Broizat
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
24/May/2016 - Quentin Broizat
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.
24/May/2016 - Benjamin Printemps
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
25/May/2016 - Quentin Broizat
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 : itechnofrance.wordpress... (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
27/May/2016 - Benjamin Printemps
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
30/May/2016 - Quentin Broizat
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.
30/May/2016 - Benjamin Printemps
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
27/Jun/2016 - anonyme
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.
27/Jun/2016 - Benjamin Printemps
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,