Platines ARDUINO Uno, Nano et Shield ATtiny85

 

 

     Nous ne présenterons pas ici le concept ARDUINO qui fait l'objet de nombreuses descriptions (ce qui fait aussi son intérêt) sur le Web.

     Disons simplement que l'on peut, à peu de frais et d'une façon très simple, réaliser des montages à base d'un microcontrôleur. Ce système permettant de tester le montage sur plaque d'essai (Breadboard) avant d'en faire éventuellement une version définitive. Tout se joue autour d'un ATMéga328P d'ATMEL programmé à l'aide d'un interpréteur très similaire au langage C++.

     L'idée développée par le staff ARDUINO est d'avoir une petite platine centrée autour d'un microcontrôleur dont toutes les entrées-sorties sont accessibles sur connecteurs.

     Deux solutions s'offrent à nous, acheter une platine prête à l'emploi, l'ARDUINO UNO R3, ou bien la réaliser avec des composants facilement disponibles dans le commerce. C'est cette deuxième solution que nous avons choisie, pas tant pour l'économie réalisée que pour le plaisir de dessiner et graver un circuit.

     Par rapport à la platine officielle, la différence est qu'elle ne comporte pas d'entrée USB, il faudra donc prévoir un petit montage additionnel pour effectuer une conversion USB-TTL. Ceci n'est pas un inconvénient, bien au contraire car il permet de programmer ou reprogrammer in-situ des montages dédiés par un connecteur ICSP.
     Nous avons bien évidemment conservé la disposition et l'écartement des connecteurs d'origine de manière à pouvoir y adapter des "shields" standards et utiliser un quartz à la place du résonateur céramique.

     Si cette solution permet de programmer un Arduino à partir d'un fichier .ino, si l'on se trouve avec un fichier en .hex la programmation ne pourra se faire que par une autre méthode dont nous décrivons le principe un peu plus loin sur cette page et qui utilise un Arduino Nano comme programmateur.

     SCHÉMA

 

CIRCUIT IMPRIMÉ
(Côté composants, cuivre en transparence)

 

 

INTERFACE USB-UART

 


 

     Ce convertisseur transformant les signaux USB en TTL va permettre de programmer l'ATMega. C'est un module du commerce (avec chip FTDI) que nous allons fixer sur un petit circuit imprimé. Il faudra juste remplacer le connecteur droit par un coudé. Le condensateur de 100 nF entre DTR et RST est indispensable pour le reset du microcontrôleur lors de la programmation.

 

SCHÉMA

 

CIRCUIT IMPRIMÉ

 

APPROVISIONNEMENT DES COMPOSANTS

     Par l'incontournable eBay, nous trouvons pour l'essentiel :

     - ATMega328P avec le boot Arduino (8 € les 5 pièces)
     - L'interface USB-UART (8 €) 
     - Platine d'essai (Breadboard) avec ses fils de liaison (5 €)

 


Cette platine est destinée à la progammation en série d'ATMega328P

 

ARDUINO Nano

 

     Dans la même veine que la platine ci-dessus, nous avons réalisé ce montage qui va permettre, dans des dimensions plus réduites, d'apporter les mêmes services que le "Uno". En effet ces modules sont dotés du même AT328 mais en boîtier CMS.
    Suivant l'approvisionnement, l'interface USB est différente. Les chinois voulant probablement ne pas payer des royalties à la société FTDI, ont développé leur propre circuit, le CH340G. Le driver est différent et librement téléchargeable sur le Net.
    L'adaptation du module sur la platine se fait par l'intermédiaire de deux connecteurs à 15 broches. L'utilité d'un tel système est qu'il est possible de tester un montage complet avec un breadboard avant de placer le module sur le circuit imprimé de la réalisation finale en prévoyant ces deux mêmes connecteurs. A moins de 3 euros le module, cela en vaut la peine.
    Pas de schéma décrit ici, le dessin du circuit imprimé est suffisamment explicite. L'alimentation extérieure n'est pas nécessaire mais ça ne coûte rien de l'ajouter.
    Signalons quand même une petite différence avec le "Uno", on dispose de deux ports analogiques supplémentaires A6 et A7 mais ils ne sont qu'analogiques contrairement aux autres. Sinon tout le reste est identique.

 

 

 

Arduino en programmateur

     Lorsque l'on se trouve avec un fichier en .hex, il n'est plus possible de programmer les micro-contrôleurs ATMEL directement, comme précedemment, par les ports TX - RX et RST avec une interface USB - TTL.
    Il faut utiliser un programmateur spécifique qui se branche sur d'autres ports et qui est proposé par ATMEL dans son catalogue. Heureusement il existe une solution gratuite, toujours à base d'Arduino et qui sera prétexte à graver du cuivre!

     Nous allons utiliser un Arduino Nano et un logiciel spécifique et en freeware : AVRDUDESS. Notons que la description qui va suivre implique un Nano alors qu'un Uno peut parfaitement faire l'affaire mais à condition d'utiliser des fils volants.

     Trois ports sont utilisés: MOSI, MISO, SCK et RST et les trois LEDs ont la même fonction que celle du programmateur ATtiny85. Le strap sur le VCC permet d'alimenter ou non en 5 V le montage à programmer.

1ère étape:

     Configurer l'Arduino en programmateur après avoir sélectionné le port utilisé:

2ème étape

     Après lancement de AVRDUDESS il faut renseigner les cases en jaune et éventuellement les cases en vert (fusibles) si le programme le nécessite.

     La programmation est lancée par un clic sur Program! et le déroulement de la programmation est affiché dans la fenêtre en noir.

 

Shield ATtiny85

     Certains petits montages, tel qu'un Iambic keyer ou une minuterie, ne nécessitent pas un circuit avec autant d'entrées et de sorties et plus gourmand en énergie et en place.
     C'est pour cela que l'ATtiny85 avec ses 8 broches est un composant intéressant d'autant, qu'à quelques exceptions près, il utilise le même le langage et bibliothèques que pour la programmation de l'Arduino Uno.
     Par contre, il va nous falloir réaliser une platine de programmation spécifique que l'on va matérialiser par un circuit enfichable. Pour la rendre pratique d'utilisation, elle est munie d'un support à force d'insertion nulle de 14 broches dont on n'utilise que 8 et que l'on trouve sur eBay à moins de 1 euro.

   Quatre LEDs permettent de surveiller la bonne marche du système :

     - La verte indique par son clignotement lent ("hearth beat") que le programmateur est prêt.
     - La rouge indique une erreur et ne devrait en principe jamais s'allumer !
     - La jaune clignote au rythme de la programmation.
     - L'orange sert éventuellement à tester l'ATtiny avec un programme spécifique dans l'IDE Arduino (blink) dont on modifiera le N° de la sortie. Un strap permet de la mettre hors circuit.

     Un autre strap permet de relier la broche RESET à un condensateur de 10 µF lors de la programmation.

 

SCHÉMA

 

 

CIRCUIT IMPRIMÉ

 

 

UTILISATION

     Cette opération demande une certaine préparation, à suivre pas à pas, que nous allons détailler ici :

     - Télécharger le fichier ide-1.6.x.zip à l'adresse suivante : https://github.com/damellis/attiny/archive/ide-1.6.x.zip
     - Dézipper ce fichier qui contient un répertoire "attiny".
     - Déterminer l'emplacement du répertoire contenant les projets (sketch) dans votre ordinateur. En cas de doute, celui-ci est         indiqué dans le menu "Fichiers > Préférences : Emplacement du carnet de croquis" dans l'IDE Arduino.
     - Dans ce répertoire des projets, créer un répertoire "hardware" (s'il n'existe pas déjà).
     - Copier dans ce répertoire le répertoire "attiny" dézippé dans l'opération précédente.

        Vous obtenez une structure de ce type : C:\Users\...MyName...\Documents\Arduino\hardware\attiny\avr.
        "avr" contient des fichiers texte et un répertoire "variants".

    - Brancher la platine AT328 (sans le shield) dans la prise USB du PC.

     Après s'être assuré de la bonne configuration du port USB (au besoin le déterminer dans le panneau de configuration de      Windows à la rubrique "Système / Gestionnaire de périphériques / Ports (COM et LPT)) :

    - Démarrer ou redémarrer l'IDE d'Aduino. On doit voir apparaître dans le gestionnaire de cartes ( "Outils / Type de carte") la       mention "ATtiny", en principe au bas du menu déroulant.
    - Toujours dans ces mêmes menus choisir, si ce n'est déjà fait, "Arduino/Genuino Uno". Le port série apparaît également et le       modifier si nécessaire pour qu'il corresponde à celui vu précédemment.
    - Charger le sketch ArduinoISP (il est dans "Fichiers/Exemples") et procéder au téléversement.
    - Dans le menu "Outils/Type de carte" cliquer sur "ATtiny25/45/85"
    - En rouvrant "Outils" on constate que le menu a changé et on voit une ligne "Chip" et une ligne "Clock".
    - Dans "Chip", cliquer sur ATtiny85.
    - Dans "Clock", cliquer sur "8 MHz (internal)".
    - Débrancher la prise USB et mettre le shield en place.
     - Rebrancher l'USB, les diodes jaune et rouge s'allument brièvement et la diode verte (hearthbeat) clignote lentement.

     On est prêt maintenant à s'occuper de l'ATtiny placé sur son support :

     - S'assurer que le strap PGR est en place et que celui de la diode TEST est retiré.
     - Dans "Outils", cliquer sur "Programmateur" et choisir "Arduino as ISP".
     - Dans "Outils", cliquer sur "Graver la séquence d'initialisation". Les diodes PG et ER vont émettre quelques clignotements.

     L'ATtiny est en principe prêt à recevoir un programme, mais on va d'abord s'assurer que tout fonctionne :

    - Mettre en place le strap "TEST" (et ne pas oublier de le retirer après les essais).
    - Charger le sketch "Fichiers/Exemples/01.Basics/Blink" pour faire clignoter la LED orange "TEST".
    - Auparavant, il faut modifier le sketch car il correspond au port de l'Uno.
    - Modifier les instructions pinMode et digitalWrite en remplaçant 13 (ou LED_BUILTIN) par 0.
    - Téléverser le sketch et...

     ... Si tout se passe bien et tout devrait bien se passer, la LED orange clignote ! 

    Notre ATtiny est prêt à recevoir de petits programmes (vu sa taille mémoire) en prenant en compte que la gamme des     instructions disponibles est réduite mais suffisante dans la plupart des cas :

     pinMode()    digitalWrite()     digitalRead()     analogWrite()     analogRead()     delay()     delayMicroseconds()
    millis()     micros()     pulseIn()     ShiftOut()     SoftwareSerial()

    RETOUR ACCUEIL