Ca faisait longtemps que l'idée me trottait dans la tête et puis il faut
le dire aussi, que certaines
personnes me le demandaient.
Le système à cartes à puces a de nombreux atouts et en particulier sa
convivialité proche de celle du carton, mais certains utilisateurs aimeraient
bien simplifier l'approvisionnement et éventuellement diminuer le coût des cartes. Voici donc un petit appareil qui à lui
seul peut remplacer des milliers de cartes, tout en offrant la même facilité
d'utilisation.
L'exercice est le suivant : Notre carte à puce est simplement une
mémoire interfacée selon le protocole I2C. Du coup, on se dit qu'il doit bien
être possible de remplacer la petite mémoire de chaque carte par une "portion"
d'une plus grosse mémoire et d'y accéder en émulant ce même protocole, au moyen
du microcontroleur d'une arduino, par exemple. Le lecteur PPCaP n'y verrait rien
et pour changer de carte il suffirait de changer de zône mémoire.
Alors j'ai parcouru quelques forums à la recherche de pistes allant dans ce
sens ou pourquoi pas, d'une solution existante. Et là, je suis tombé sur des "savants" qui m'ont expliqué que c'était une
mauvaise idée parce que dans le monde arduino il était impossible de faire
cohabiter les protocoles I2C et SPI (gestion d'une carte SD), à cause d'un timer
qu'il faudrait partager. Soit.
Mais bon, il n'y a rien de plus vain que de m'expliquer qu'une chose est
impossible, puisque de toutes façons j'essaye
quand-même. Et au final... Ben ça marche ! ;o). Non pas que ces personnes
avaient complètement tort (quoique...), mais en se débrouillant bien pour écrire le code et
en faisant en sorte que les 2 protocoles ne soient jamais actifs en même temps,
tout baigne. Non mais.
Le principe
Les fichiers de données sont exactement les mêmes que ceux
qui sont habituellement sur les cartes à puces. Cette fois-ci ils sont stockés sur une carte micro-SD et sont
identifiés par un numéro. L'émulateur devra donc permettre de choisir ce numéro.
Le fichier sélectionné est ensuite lu séquentiellement au rythme des requètes
reçues sur le bus I2C et en réponse les données sont transmises sur ce même bus, exactement
comme le fait une carte mémoire.
Plusieurs prototypes ont été réalisés, dont un premier où la sélection des
morceaux se faisait avec des roues codeuses. A l'ancienne quoi. C'est efficace,
peu gourmand en ressources et cela a permis de valider le mécanisme de cohabitation entre SPI
et I2C. C'était déjà un grand pas dans la bonne direction.
Les fonctions principales sont validées
Mais les roues codeuses c'est un peu vieillot et finalement assez encombrant.
Alors, pourquoi pas un petit écran du genre de ces Oled fort
sympathiques et peu onéreux que l'on trouve sur le commerce chinois. Seulement
voilà... ils sont pour la plupart interfacés eux aussi en I2C. Et là il a fallut
se gratter la tête une fois de plus, puisque l'émulateur va devoir tantôt être
maitre vis à vis de son écran, tantôt esclave vis à vis de l'instrument PPCaP.
En sachant qu'il est hors de question de toucher au programme PPCaP qui est
toujours maitre vis à vis de ce qu'il considère commme une simple carte à
mémoire.
Mais bon, tout ça est résolu ;o)
Le proto avec écran et un seul bouton de
sélection. Reste à mettre au propre
Version de base
Voici ce premier croquis d'assemblage où l'on ne trouve que des
éléments commerciaux :
- En premier une sorte d'adaptateur/connecteur de cartes à puces. Il reçoit des
cartes au format SIM d'un côté et les connecte à un terminal selon
le format ISO7816. Ne me demandez pas à quoi ça peut servir "en vrai", mais dans
le domaine des terminaux de paiement électroniques on appelle ça une carte
biberon... Ici on ne va utiliser que la fonction connecteur qui a la
particularité de fonctionner quelque soit le sens d'insertion de la carte. Cool.
- Un adaptateur pour cartes micro-SD qui est nécessaire pour faire la conversion en 3.3V.
J'ai préféré ce format, qui est plus répandu aujourd'hui que le SD.
- Un petit écran Oled 128x64 pixels de 0.91".
- Un bouton à 5 contacts façon joystick pour la sélection. C'est un dispositif compact et d'utilisation assez intuitive.
- Et bien sûr une arduino Nano.
Montage
La carte connecteur ISO7816 a été débarrassée de ses connecteurs
de cartes SIM inutiles ici. Elle a ensuite été sciée de manière à ne conserver
que les 85 mm de longueur d'une carte à puce. On repique les 4 contacts vers la
puce sur les multiples pistes qui arrivent en haut.
La carte arduino est fixé sur une face à l'aide de ruban adhésif double-face et
l'adaptateur de carte micro-SD sur l'autre face.
Une petite carte collée perpendiculairement à l'Araldite contre l'extrémité
supérieure supporte l'écran et les boutons. Je n'avais pas encore reçu les
joysticks et pour ce proto ce sont 3 boutons
"reset" récupérés sur des cartes arduino Nano hors service. L'écran détermine la
hauteur de cette carte : 12.7 mm.
C'est serré hein, mais pas impossible.
Et finalement, un boitier réalisé à l'imprimante 3D (résine ici)
vient coiffer le tout selon la photo en tête de cette page. Si le modèle FreeCad
ou les stl de cette version de base vous intéressent, contactez-moi.
Affichage
Voici des exemples d'affichage sur l'écran. Les boutons
permettent de sélectionner un numéro de morceau. Ici le bouton gauche
sélectionne un digit et les 2 autres boutons font progresser le digit
sélectionné.
Le titre comporte les 10 caractères habituellement enregistrés par ProCaP sur
les cartes. Et bien que ce ne soit pas utile mais il y avait la place, on
indique si le morceau est en Pmidi ou non.
Morceau normal et morceau Pmidi
Morceau Pmidi en mode AA (lecture automatique
sans manivelle)
Utilisation
Une fois qu'un morceau est sélectionné, on "bascule" dessus
par une pression longue sur le bouton PPCaP, comme on le fait habituellement pour passer de A à B sur une carte à puce
normale.
Pour sélectionner un nouveau morceau il n'est donc pas nécessaire d'extraire
l'émulateur. On arrête de tourner, on sélectionne un numéro de fichier, on appuie sur le bouton PPCaP
pour basculer et on tourne. Simple non ?
Et dès le basculement, les tags habituels sont aussitôt pris en compte :
- AA : Le morceau part tout seul en lecture automatique sans actionner la
manivelle.
- MM : Tempo original du morceau.
- RF : Si on est récepteur, basculement rouge/vert et attente de synchro. Si
émetteur, double clignotement rouge et départ immédiat.
- Etc...
Condition
Ce système fonctionne parfaitement à condition côté instrument
de retarder le démarrage du programme PPCaP de quelques centaines de
millisecondes. En effet, dès l'insertion de la carte, ce dernier entamme un dialogue
avec elle de manière à vérifier sa taille, le type de morceau, la présence
de tags etc. Il faut donc donner un peu de temps à l'émulateur pour
qu'il s'initialise, qu'il "devienne" une carte à mémoire et soit en mesure de
répondre à ce dialogue.
Cette ajout d'une tempo au démarrage de PPCaP est quasiment imperceptible en
utilisation normale et n'a bien sûr aucune conséquence sur la synchro radio. Mais il faut
faire tout de même intervenir sur l'existant et c'est un peu dommage. La version suivante de
l'émulateur va permettre de s'en dispenser.
Version évoluée
Le montage précédent a été complètement mis à plat afin de ne conserver que
ce qui est nécessaire, en particulier côté arduino. Une carte spécifique a été
développée et la plupart des composants sont montés en surface. On récupère
ainsi de la place pour un petit accu Lipo qui va permettre de mettre l'émulateur
sous tension avant de l'insérer, résolvant ainsi le petit inconvénient de la
version de base. Cet accu se recharge sur le 5V du connecteur de cartes à puce
dès l'insertion de l'émulateur. Il n'y a donc pas besoin d'un chargeur
spécifique et il est toujours chargé. L'émulateur est alors directement
compatible avec toutes les versions de PPCaP.
La batterie est fixée avec de l'adhésif double
face
Le schéma Tout s'articule autour d'un Atmega328-AU en boitier TQFP. La possibilité d'insérer le
connecteur de carte à puce dans n'importe quel sens a été conservée. Donc on
retrouve les contacts au bon emplacement sur chacune des faces du circuit
imprimé.
L'adaptateur de niveau vers la carte micro-SD a été conçu "à ma sauce" autour d'un
74HC4050. Je dis à ma sauce car la plupart des schémas que l'on trouve sur le
net avec ce 4050 ne fonctionnent pas dans ce contexte.
Cas particulier de la batterie
Un interrupteur de mise en circuit a été ajouté. Le modèle de batterie
retenu comporte son propre module de charge et se recharge sur le 5V
du connecteur ISO. Une diode a été ajoutée en série afin d'abaisser la tension à un niveau
plus proche des 4.2V habituels pour un seul élément de batterie. A noter que cette diode n'est pas obligatoire si le
module de charge coupe vraiment à 4.2V. Mais bon... Je préfère prendre
"ceinture et bretelles" et ne pas appliquer 5 V directement sur la batterie. Et
comme le reste du montage se contente très bien d'une tension aux alentours de
4.3 V, la présence de la diode est rassurante ;o)
Mais qui dit batterie dit surveillance de son état de charge.
Cette opération
s'effectue via l'entrée ADC2 broche 25 de l'Atmega, sur le pont R5/R6 (4.7K/1K).
Comme il s'agit de surveiller la tension sur laquelle le processeur
lui-même fonctionne, on ne peut utiliser le fonctionnement par défaut du
convertisseur CAN qui prend cette même tension comme référence, sinon on obtient toujours le maximum
et on ne surveille rien du tout ;o). On va donc
activer la référence interne de 1.1 V pour la fonction analogRead. Ce qui
veut dire que la tension maximale qui donnera la valeur 1023 est de 1.1 V. En
conséquence, le rôle de ce pont est de ramener la tension à mesurer dans un
plage compatible.
Vu de la batterie, on considère 4 paliers qui sont ensuite reportés sur une icone en haut à droite
de l'écran : Moins de 3.1V = batterie vide, entre 3.1V et 3.55 V une barre, deux
barres entre 3.55V et 4V et batterie chargée avec 3 barres au-dessus de 4 V. Remarque : Cette information est purement indicative et n'agit en
rien sur le module électronique de la batterie qui est complètement autonome.
Celui-ci fait son boulot dans tous les cas et stoppe automatiquement la décharge à 3V
tandis qu'il arrête la
charge à 4.2V.
Le circuit imprimé
L'électronique tient dans la même hauteur de 30 mm que le proto ci-dessus. La
cartelette qui supporte l'écran et l'interrupteur-joystick fait partie du même
circuit imprimé bien qu'elle ne comporte pas à ce stade de liaison électrique avec le
reste. Elle sera donc fabriquée en même temps. Il suffira ensuite de scier le pcb en 2 parties et lorsque les composants CMS seront en place, de
souder la carte écran perpendiculairement à la carte principale au niveau des
contacts prévus à cet effet et établir ainsi toutes les liaisons requises.
Montage des CMS
Je ne vais pas décrire les détails de cette opération ici car cela dépend beaucoup des
habitudes, de l'équipement et de la dextérité de chacun. Voir les nombreuses
vidéos à ce sujet, sur Youtube par exemple.
En quelques mots voici comment je procède :
- Ca commence par la fabrication d'un masque pour la soudure (un "stencil" comme ils
disent de l'autre côté de la mer). Pour ce qui me concerne, je l'ai gravé à la CNC
en une seule passe, avec
une fraise à PCB dans de la tôle alu de boite de soda. Ca fait pile la bonne
épaisseur. Pour la gravure, la tôle
est collée temporairement à la néoprène sur une chute d'époxy et on grave avec
une vitesse d'avance assez basse : 80 mm/mn contre 400 mm/mn pour le cuive. Et
puis pour faciliter l'évacuation des copeaux c'est mieux de faire travailler la fraise dans de l'huile en déposant quelques gouttes
sur la tôle. Une fois que c'est gravé on décolle tranquillement en chauffant au
décapeur thermique et en faisant attention à ce que le stencil reste
plat.
Sous Eagle et en cochant les
bonnes options, le script "PCB-Gcode" génère directement le fichier
gcode pour
fabriquer ce masque.
- En alignant bien le masque sur le circuit imprimé, une soudure en pâte spécifique (fusion à 181°C) est ensuite étalée uniquement
sur les contacts au travers de ce masque.
- On retire délicatement le masque puis on positionne tous les composants le plus précisément possible sur les
pavés de pâte à souder.
- Et enfin le circuit imprimé muni de tous ses composants est déposé sur une
plaque chauffante afin de refondre la soudure. Dès que l'on atteint la bonne
température (environ 200°C), c'est presque magique, on voit les composant
littéralement flotter sur la soudure fondue et se centrer sur les pads.
Si tout est correctement effectué, pas trop de soudure pouvant entrainer des
court-circuits et composants bien positionnés, en quelques minutes seulement on
obtient une carte du plus bel aspect, totalement équipée et prête à l'emploi.
Le fameux stencil et le pcb terminé. Le pont de
mesure de la tension batterie a été ajouté après-coup
Programmation
Ici il n'y a pas de port USB et l'Atmega est programmé via un connecteur ISP à
partir de l'IDE arduino, en utilisant une carte Uno (ou Nano) comme programmateur. J'ai
bricolé un connecteur mâle qui s'insère directement dans les trous métallisés du
circuit imprimé. Comme ça il n'y a pas besoin de souder un connecteur qui
prendrait de la place pour ne
servir que quelques fois et ça fonctionne très
bien. Les pins sont constituées de broches Dupont mâles doublées d'un morceau
de fil de laiton de 8/10 qui procure un peu d'élasticité.
Une fois que la programmation est réalisée, il n'y a aucun paramétrage à
effectuer et ça fonctionne tout de suite.
Enregistrement des morceaux
Il y a 2 manières de procéder: 1. Morceau par morceau
Cela se passe comme pour une carte classique.
- Positionner le commutateur Enregistrement/lecture (R/W) sur Enregistrement
(W), mettre l'émulateur en marche et l'insérer dans un lecteur PPCaP connecté à
un port USB, puis lancer ProCaP.
- Avec le joystick de l'émulateur sélectionner un numéro libre ("FICHIER INEXISTANT") ou le
numéro que l'on veut remplacer.
- Ouvrir le fichier midi, cocher Morceau A et cliquer Programmer lorsque
la touche est valide.
- Et c'est tout.
2. Un ensemble de morceaux
Dans ce cas le traitement des fichiers midi s'effectue "en lot" sur ProCaP. On
recopie ensuite en une seule fois tous les fichiers générés sur
la carte SD.
- Lancer la version de ProCaP qui a été modifié pour traiter de multiples
fichiers.
- Faire Fichier/Ouvrir fichier midi...
- Sélectionner plusieurs fichiers par les méthodes usuelles sous Windows (Ctrl
A, Ctrl, Maj...) puis cliquer Ouvrir
Les traitements ProCaP vont alors s'enchainer de manière récursive.
Lorsque tous les fichiers sélectionnés auront été traités, on retrouvera les
.dat correspondants sous Documents/ProCaPII/Fichiers_emulateur. Ce sont ces
fichiers qu'il suffit de recopier sur la carte SD de l'émulateur.
Dans ce même répertoire on trouve également un fichier texte nommé
"Table_titres.txt" qui est généré à des fins de documentation. Il contient
la liste des noms de tous les fichiers qui viennent d'être traités
rangés par ordre alphabétique, ainsi que les .dat associés.
Bien sûr c'est la méthode la plus efficace, mais elle nécessite de posséder
un adaptateur et d'un connecteur pour rendre la carte micro-SD visible de son
PC. Il est possible de traiter un nombre illimité de fichiers. Donc en une seule
fois on peut transférer la totalité de ses fichiers midi sur l'émulateur ;o)
Lecture des morceaux
Avec le commutateur en position "Lecture" (R), on met l'émulateur en
marche et on l'insère en lieu et place d'une carte.
- Immédiatement on peut tourner la manivelle et jouer le morceau qui est affiché à l'écran.
- Pour changer de morceau, arrêter de tourner, naviguer avec le joystick pour
sélectionner un nouveau morceau.
- Presser le bouton de PPCaP pour "basculer sur le morceau affiché.
- Et tourner.
Et maintenant...
Vous savez tout ou presque, concernant la conception de ce petit système fort pratique et qui à mon
sens fonctionne plutôt bien. Contrairement à mes habitudes je n'ai pas publié
les fichiers de CAO ni le programme du microcontroleur et c'est volontaire. Non
pas que j'entends exceptionnellement en tirer quelque profit que ce soit, mais c'est juste pour me
faire une idée de l'intérêt porté à cette réalisation.
Alors... Si ça vous intéresse de vous lancer dans sa construction,
contactez-moi. Je me ferai un plaisir de vous faire parvenir gracieusement les
fichiers Eagle et les programmes arduino. Il me reste également 4 circuits
imprimés nus et puis si vous désirez acquérir un exemplaire
déjà assemblé, commme pour les orgues je n'ai pas vraiment vocation à construire
pour les autres (ni surtout le temps), mais en fonction du nombre de personnes
intéressées, nous devrions pouvoir trouver une solution ;o)