mardi 17 mai 2016

ARDUINO, ATmega328pb et FTDI FT230X.

Cela fait quelque temps que je n'ai rien publié sur des réalisations personnelles. Le dernier 'article' sur le sujet doit dater du 20 janvier 2016 et traitait de la mise en œuvre du Micromite MkII.

Il est donc temps d'évoquer ici la réalisation d'une carte compatible Arduino.

A l'origine je n'avais pas l'intention de créer à proprement dit un système compatible Arduino. L'objectif initial était de réaliser une interface capable d'interconnecter un automate et un écran graphique tactile. Bien que la connexion entre l'automate en question et l'écran soit possible en TTL, dès qu'il s'agit d'éloigner ces deux éléments, une autre interface électrique s'impose : le standard RS485.

L'écran et l'automate connectés en signaux TTL.
L'écran n'est pas en mesure de piloter nativement une interface RS485, il ne fournit pas le signal permettant de commuter les circuits d'interface entre émission et réception. La solution la plus simple consiste donc à utiliser un micro-contrôleur possédant DEUX ports séries permettant de recevoir les signaux RS485 depuis l'automate tout en les communiquant à l'écran au standard TTL.

Reste donc à choisir un micro-contrôleur. Plusieurs solutions sont possibles chez différents fabricants de circuits. Pour cette réalisation, un simple cœur de processeur 8 bits suffit. Le critère suivant a été tout simplement le prix. Et à ce 'petit jeux', le processeur ATmega328pb d'Atmel est très bien placé.

Le processeur en question.
Dans un premier temps j'ai opté pour la création d'une carte comprenant une interface RS485, l'interface pour l'écran graphique, une alimentation à découpage capable d'accepter une large gamme de blocs d'alimentations et une interface pour une horloge temps réel. J'y ai aussi rajouté un connecteur généraliste sur lequel il sera possible de connecter différents capteurs ou actionneurs. Pour programmer le tout, j'ai aussi implémenté une interface USB, ce qui rendra possible l'accès au processeur et à l'écran par un ordinateur externe grâce à une petite logique de sélection. Le résultat est une carte relativement petite :


Une fois le circuit imprimé réalisé et une carte montée, il ne restait plus qu'à passer à la programmation du micro-contrôleur. Ce ne fût pas la partie la plus simple.

En effet, il faut impérativement prendre en compte le fait que les drivers Jungo dont se sert Atmel pour établir la communication entre son logiciel de développement et les différentes cartes de programmation ne seront réellement installables QUE sur un Windows dont le système de signature des drivers aura été mis à jour.

Tant que cela ne sera pas fait, les drivers ne s'installeront pas correctement, ou en tout cas ne démarreront pas, rendant impossible toute communication entre le logiciel Atmel Studio 7 (celui en cours en mai 2016) et quelque carte de programmation que ce soit. Inutile de préciser que la mise à jour de Windows avec ce système de prise en compte des signatures de drivers pourra (comprendre que chez Microsoft s'il le peut, il le fera!) générer quelques soucis avec d'anciens drivers. Dans mon cas la clef W.I.F.I. USB  a définitivement cessé de fonctionner.

Les tentatives de mise à jour de ce driver de clef W.I.F.I. ont irrémédiablement rendu le système inopérant. A titre indicatif, le Windows 7 64 bits sur lequel je faisais l'intervention est parti en auto-destruction classique. La résolution d'un problème demandant la résolution d'un autre problème, lui-même dépendant du premier problème. Bref, un 'partage en vrille' comme sait si bien le faire Microsoft avec son système (je ne sais pas si cela est toujours d'actualité sous 8 ou 10). A remarquer aussi que si le système sur lequel l'installation du logiciel Atmel est tentée est trop ancien (version de Windows 7 non mise à jour depuis longtemps), une fenêtre indiquant l'impossibilité pour la procédure d'effectuer l'installation sur un système non pris en charge apparaîtra de façon impromptue!!!

Le mieux consiste donc à installer un système tout neuf et à jour sur un PC assez rapide parce que le logiciel de développement est énorme, en grande partir du fait de l'utilisation des ressources de Microsoft Studio. J'ai perdu pratiquement une semaine en essayant 'de bien faire' pour réussir à obtenir un système apte à travailler avec le logiciel Atmel. Non, le plus simple, vraiment : Un PC core I5 rapide, et disque SSD. Le tout sous un Windows tout neuf et à jour. Question faible coût des outils de développement, évidemment, on fera l'impasse sur 'ces effets de bord'!

Le tout, pour travailler justement avec la carte de programmation 'bas coût' d'Atmel, l'AVR Dragon :


Une fois l'installation correctement effectuée de tous les systèmes, la suite de développement Studio d'Atmel fonctionne très bien. Rien à signaler avec le programmateur Dragon, même si à une ou deux reprises, j'ai eu quelques pertes de connexion entre le logiciel et ce Dragon, mais rien de bien gênant.

Après quelques lignes de code en C natif, j'ai réussi sans problème à créer et faire exécuter le 'Hello world' de l'embarqué, à savoir le clignotement de quelques LEDs :

Et un processeur perdu à cause d'une mauvaise programmation de fusibles :-(
Relativement satisfait du travail accompli, c'est alors que je me suis dit que, ma carte possédant tout le nécessaire, il pourrait être intéressant de la rendre compatible Arduino. L'intérêt est assez évident. De la sorte, il ne serait plus nécessaire d'avoir recours à la suite de développement Atmel, ainsi qu'à un programmateur externe. De plus, cela permettrait de 'modifier' le code de cette carte à la demande, sur site par exemple, en utilisant les mêmes outils que ceux utilisés pour la programmation de l'automate, lui aussi compatible Arduino. Une belle cohésion d'ensemble en somme.

C'est alors qu'un autre travail de configuration assez important à démarré. Parce qu'au moment de l'écriture de ces lignes, il n'existe pas de version Arduino compatible avec ce nouveau processeur 328pb. Seuls pour l'instant (mai 2016) son gérées les versions 328 et 328p. Est-ce à dire que la 'chose' était impossible à réaliser? Non, évidemment. Internet et la communauté du libre aidant...

Sans rentrer dans les détails, les étapes se résument à :

  • Installer dans le processeur un bootloader renvoyant la bonne signature du processeur au logiciel de programmation utilisé par le logiciel Arduino : Avrdude. Ecriture de ce bootloader grâce au programmateur AvrDragon et la suite Atmel Studio 7.
  • Modifier certains fichiers de configuration du logiciel Avrdude pour la prise en compte de la signature du 328pb.
  • A partir de la dernière version du logiciel Arduino (1.6.9 non officielle en mai 2016), remplacer les outils GCC par la version comprenant le 328pb directement récupérée du site d'Atmel.
  • Modifier certains fichiers de configuration de la suite Arduino pour lui faire prendre en compte la nouvelle carte.
  • Enfin, modifier certains fichiers de déclaration pour pallier les erreurs de compilations dues à des changements de noms de registres et autres incompatibilités ponctuelles de ce genre.  

Une fois ce travail réalisé, j'ai pu connecter l'écran graphique couleur comme prévu sur ma nouvelle carte, et lui faire exécuter pratiquement le même code que celui ayant préalablement été testé sur l'automate programmable. A ceci près que le code gérant l'heure temps réelle est différent puis que je n'utilise pas ici les bibliothèques fournies par le fabricant de l'automate, mais directement la bibliothèque wire de la librairie Arduino. A noter que les informations envoyées à l'afficheur passent par le nouveau deuxième port série du processeur :


La carte Atmel AVR Dragon en haut, qui a permis d'écrire le bootloader dans le processeur de la carte d'interface, en bas, avec l'écran couleur.

Et voilà une carte de conception personnelle répondant à des besoins particuliers, basée sur un système de développement gratuit et disponible a souhait sur le Web. Toute personne possédant un minimum de connaissances en programmation et ayant déjà 'touché' un tant soit à peu l'environnement Arduino, sera à même de se servir de cette carte pour l'adapter à des besoins spécifiques.

Il ne me reste plus qu'à tester la liaison RS485 avec l'automate programmable et l'ensemble des fonctions de cette carte sera validé :

Prêt pour les tests!

A comparer à ce que cela peut donner avec du matériel professionnel 'pas trop compliqué' à utiliser :


J'aurais quand même tendance à préfére ma solution...

Remarques de dernière minute pour ceux que cela intéresse :

Cette carte utilise un circuit FTDI FT230X en guise d'interface USB/série et non pas le classique FT232R.

Avec ce processeur, Atmel inaugure un nouveau design de son système d'oscillateur. Pour faire simple, il ne subsiste plus que la version basse consommation du circuit interne permettant de 'driver' un quartz externe. Atmel indique d'ailleurs qu'un quartz de 16MHz maximum doit être installé si cette option est choisie. Pour passer à 20MHz, il sera nécessaire d'utiliser un circuit oscillateur externe. Sur cette carte, le quartz de 16MHz utilisé permet un fonctionnement correct de l'oscillateur du 328pb. Attention quand même à l'élaboration du circuit imprimé à proximité des deux pattes concernées du processeur....

24 mai 2016 : j'ai effectué des tests de programmation de cette carte à l'aide de la version 1.6.9 de l'IDE Arduino, agrémenté du 'plugin' proposé par Elektor avec sa carte Arduino R4. Cela fonctionne à merveille!
Et voilà, une carte encore plus facile à utiliser!

06 juin 2016 : petit commentaire sur la 'perte' de processeurs ATMega328pb suite à une mauvaise programmation des fusibles.

Ayant travaillé depuis quelques semaines avec ce processeur, il m'est arrivé à plusieurs reprises au début, d'en rendre certains exemplaires irrécupérable par le programmateur Dragon du fait d'une mauvaise programmation des fusibles. En fait la plupart du temps, il s'agit d'une erreur de sélection du type d'oscillateur.

Il faut bien avouer que la façon de présenter les options en menu déroulant des différentes possibilités d'horloge dans l'interface de programmation du logiciel Atmel Studio ne facilite pas vraiment la discrimination.

Donc à un moment ou à un autre, le processeur sera configuré SANS la mise en fonction de son système d'amplificateur pour quartz externe. Le processeur n'aura donc plus aucune source d'horloge et ne répondra plus aux sollicitations du programmateur. La solution pour y remédier est simple et fonctionne bien. Il suffit de raccorder à la patte PB6 (pin 7 boitier TQFP32) du processeur la sortie d'un oscillateur de ce type :
J'en possède une version 16MHz que je conserve pour cet usage.
Dès lors, le processeur est à même de dialoguer de nouveau avec le programmateur Dragon, permettant ainsi le re-programmation des amplificateurs pour quartz externe.

J'ai soudé un fil de faible longueur de cet oscillateur directement sur le 'pad' cms du quartz du montage électronique correspondant à la patte PB6. La présence du quartz d'origine n'a pas perturbé outre mesure le fonctionnement du processeur.

En complément : 

Je développe en ce moment une petite interface M.I.D.I. un peu particulière ainsi qu'un système de diagnostic/débogage (un peu osé/trash/geek/oujenesaisquoidautre) pour anciennes machines équipées d'un processeur Z80 pour l'instant. Je compte exposer ces développements ainsi qu'une thématique Arduino au 'petit' Maker Faire de Nantes début juillet, si tout va bien... Si vous êtes intéressés par ce type de développement et n'êtes pas trop loin de Nantes, n'hésitez pas!

Enjoy!!!

vendredi 6 mai 2016

Maker Faire, EMU Drumulator, le nouvel Atmel ATmega328pb sous Arduino ... OUTATIME!

Hou là, pratiquement un mois sans publication!
Le temps passe vraiment vite....

La foire de Paris bat son plein en ce moment. Le Maker Faire y a élu domicile depuis l'année dernière, ce qui impose l'achat du billet d'entrée à la foire pour pouvoir y assister. En même temps, il faut bien louer les infra-structures et payer les 3000€ (ou dollars je ne sais plus bien) réclamés par la boîte américaine qui coordonne les Maker Faire de la planète!


Personnellement je n'y ai pas retrouvé l'ambiance de l'édition 2014 au 104. Le 'milieu' se 'professionnalise' comme cela était prévisible et devient petit à petit un salon 'avant vente' d'entreprises plus ou moins établies. Même si j'ai réussi à dénicher quelques 'amateurs', mais rien de fantastique. L'esprit n'y est plus.

Pour cela, je vous conseille de vous tourner vers les OBC, les Open Bidouilles Camp, qui eux, conservent plus l'esprit débrouillardise et entraide et ou ni les grandes entreprises, ni la puissance publique n'a pour l'instant imposé sa doctrine : pour votre bien et votre sécurité.

Pour imager la chose :


Intel, à la mode Microsoft : ambiance jeune et dynamique, avec beaucoup de bruit.

L'important est de se montrer et de marquer les esprits. Intel en pleine recherche de débouchés aujourd'hui, s'étant fait voler le marché des 'smart'-bidules ou l'architecture ARM et les fondeurs chinois ont raflé la mise (voilà ce que c'est quand on s'endort sur ses lauriers et que l'on se contente de faire des acquisitions/développements à seuls but destructeur de concurence à la mode Microsoft!), après avoir officiellement laissé tomber le marché des PC de bureau (si si, je vous assure. Fallait prendre des actions AMD, maintenant c'est déjà trop tard!) essaie d'investir le monde de l'IOT (l'Internet des trucs!) :


Hum, plein de bidules amusants, programmables à la mode Arduino. En fait un assemblage d'éléments disparates de techno. Intel, pas prévu pour ça à la base, mais mis ensembles pour faire croire que... Évidemment, le bidouilleur en herbe sera tenu bien à l'écart de la technologie propriétaire utilisée pour arriver au résultat apparent.

Mais bon, le but n'est pas de faire plaisir au Vulgum, mais de pénétrer les nouveaux marchés. Rien de tels que du bon vieil entrisme au sein de l’Éducation National, toujours à la mode Crosoft :


Vous voyez ce que je veux dire?

Et d'ailleurs, un de nos grands bâtisseur national était aussi présent avec ce slogan :



Hum : du béton, des tours, des grues... et encode du béton. En pleine crise et séquence économique planifiée associée sur le développement durable, les bâtisseurs écrivaient : "on ne pourra plus construire comme avant" (le moniteur). Non, c'est sur! Finissons-en avec l'artisanat, il faut voire les choses en grand maintenant!

Séquence publicitaire pour la ville de... :


Vous avez reconnu? Non? Mais si, les machines de l'île. Comment ça, vous n'êtes pas allé à Nantes? Hum.....

Bref : quelques 'amateurs' quand même :


Sur le thème instrument de musique : un clavier portable de faible poids mais largement jouable (j'ai essayé) fabriqué en imprimante 3D.

Et puis un amateur pur et dur :


En fait, une machine analogique utilisant une RaspBerry PI en guise d'interface numérique associée à quelques potentiomètres électroniques pour réagir aux commandes M.I.D.I. Le type fait ça pour son plaisir, avec même pas une intension de commercialisation!

Et sinon? A l'atelier est arrivée récemment une Drumulator :


Je me suis dit que cela pourrait être une bonne compagne pour l'Emulator 1.
La machine plante mais au moins elle démarre. Un petit coup d’œil à l'intérieur m'indique que cette boîte à rythme a été ouverte et 'bidouillée' 'un certain nombre' de fois. C'est sur, il y aura un peu de travail pour la refaire partir normalement!

Et puis question développement, j'en suis à la phase des premiers tests d'une interface intelligente destinée à s'intercaler entre un automate de type Controllino et un écran LCD couleur graphique tactile  :

Avec au premier plan, un processeur mort au champ de bataille!
J'ai choisi un processeur Atmel de type ATmega328. Et, pour satisfaire mon objectif, j'ai opté pour la toute nouvelle version de ce processeur, à savoir la version 'pb', équipée d'un double port série.

Je souhaiterais que ce montage soit programmable avec l'interface Arduino, comme l'est l'automate Controllino. Histoire de proposer un ensemble cohérent.

La chaîne de développement est classique : Atmel Studio 7.0 et carte de programmation AvrDragon.

Écrit comme ça, cela paraît simple! ERREUR!!! L'installation du logiciel Atmel peut ne pas être simple du tout et causer bien des problèmes, notamment si le Windows utilisé ne possède pas les bonnes mise à jour.

Le processeur 328pb inaugure aussi une nouvelle implémentation de la circuiterie d'oscillation, et plus particulièrement celle dédiée à l'oscillateur externe. De nouvelles limitations et de nouvelles précautions de design doivent être prises en compte!

Mais bon, au bout d'un certain temps, le 'Hello World' embarqué fonctionne avec un quartz externe de 16MHz:



Ca ne se voit pas comme ça, mais la LED verte en bas à gauche clignote bien ;-) Et en bonus celle d'en bas à droite aussi, mais cette LED est l'indication d'émission série. Parce qu'en plus mon montage émet quelques caractères à 9600 bauds. Méthode fiable pour vérifier que le processeur fonctionne bien à 16MHz!

Update 13/05/2016 : Après quelques tests et modifications, j'ai réussi à faire fonctionner cette carte sous l'environnement de développement Arduino. Pour l'instant il n'y a rien d'officiel à ce sujet sur le site Arduino, mais après avoir effectué quelques recherches sur Internet, j'ai pu trouver le bootloader adapté à ce processeur ATmega328pb.

Après quelques adaptations de fichiers pour faire reconnaitre cette carte dans l'environnement Arduino, et le remplacement du compilateur GCC par une version plus récente supportant ce processeur, le système fonctionne normalement et se programme comme d'habitude sous l'environnement Arduino (uniquement Windows pour l'instant), de la même façon que l'automate Controllino : cool!

Bon, ça n'est pas tout ça, mais il faut s'y remettre :

N'est-ce pas Dave?