Cela fait un peu plus d'un an que je possède cette Drumulator. Je l'ai achetée en région parisienne pur un prix modique car elle présentait quelques défauts, notamment la présence du message 'bad' au démarrage. Ce message n'est pas bien grave puisqu'il indique juste que la batterie interne de sauvegarde des RAM statiques est arrivée en fin de vie. La réparation ne devait donc pas poser trop de problème.
J'ai déjà eu l'occasion de présenter cette boit à rythme. Il y a à peine plus d'un an, j'ai effectué quelques dépannages et expérimentations ici, et créé un outil de débogage basé sur l'émulation des bus d'un Z80 sous la forme d'un 'composant' compatible Arduino, avec la version définitive ici, en milieu d'article.
Version définitive à gauche, version de test à droite. |
Digression : Je n'ai pas participé au MakerFaire de Nantes 2017. Cela représente beaucoup de travail de préparation et des bénéfices quasiment nuls malgré un nombre incroyable de personnes passées me voir l'année dernière. En fait le principe est simple, il s'agit de travail offert aux organisateurs, seuls à tirer les bénéfices de votre présence. Et pour être plus clair, travail fourni pour la très grande cause du rayonnement de Nantes, dans le cas présent. Une fois ça va, pas deux! Fin de digression.
Le changement de pile a effectivement réglé le problème du message d'erreur au démarrage de cette Drumulator, après avoir toutefois effectué la procédure de RESET des mémoires. Tout s'est bien passé au remontage, sauf que le réel problème de cette machine est apparu lors des premières tentatives d'utilisation. Tout fonctionnait SAUF le potentiomètre de data. Les valeurs qu'il permettait d'obtenir allaient de 45 à 64 pour ce qui était du réglage du tempo, et ne permettaient pas de modifier les valeurs des volumes des différents sons!
Une petite étude du schéma de principe de la machine permet de cerner rapidement le problème :
Une façon possible de faire de la conversion analogique/numérique. |
Et oui, la réponse au problème est tout simplement écrite : 10K. Le potentiomètre utilisé certainement pour remplacer celui d'origine défaillant est un 10KOhms en lieu et place de ce qui devrait être un 100KOhms, comme indiqué sur le schéma de la machine. Et de suite il est possible de comprendre la façon dont la personne qui a (tenté d'effectuer) effectué la réparation s'y est prise.
Et pour commencer, tentons de trouver le même type de potentiomètre rectiligne en version 100KOhms. Si vous y arrivez, faites-moi signe. J'ai passé un temps suffisamment long sur Internet pour arriver à la conclusion que ce type de potentiomètre est introuvable aujourd'hui. Le temps passé à cette recherche, à lui seul, rend la réparation de cette Drumulator absolument pas rentable! En version 100KOhms, cela devait déjà être compliqué à trouver à l'époque, même si je ne sais pas quand à eu lieu cette réparation!
L'auteur de cette 'tentative' de réparation a du se dire que cela ne faisait rien et que ce 10KOhm fonctionnerait quand même. Après tout, ça n'est pas pour le courant consommé qui passe de 50µA à 500µA sous 5V. Certes, sauf que la méthode de mesure de la valeur de ce potentiomètre n'est pas effectuée par un convertisseur CAN 'habituel' qui relèverait la tension présente à son entrée, mais par le calcul du temps que met un condensateur à se charger. Et qui dit charge de condensateur dit quantité d'énergie, et donc courant de charge!
Pour faire simple, voici comme cela fonctionne : le circuit intégré 74ls221 est un monostable. C'est à dire qu'une impulsion sur une patte permet de changer l'état de sortie d'une autre patte pendant... un certain temps, puisque c'est un monostable et non pas un bistable. Le 'certain temps' est généré par
le condensateur chargé à travers une résistance. Il est possible de déterminer la durée de ce temps de basculement à partir du datasheet d'un des fabricants de ce type de circuit.
Le fonctionnement final se déduit donc très facilement : une impulsion négative sur la patte '1' du 74ls221 fait instantanément passer sa sortie Q (patte 13) à '1'. Cette sortie Q reste à '1' le temps de la prise en compte de la charge du condensateur, et revient toute seule à '0'.
Comme l'entrée de déclenchement /A du 74ls221 est générée par le programme de la Drumulator, le programme sait exactement le moment du début du déclenchement (remise à zéro du registre de comptage du CTC, voir plus bas). Pour trouver la fin du déclenchement, il suffit de surveiller le passage à '0' de la sortie Q du 74ls221. C'est le rôle dévolu au Z80 CTC qui est un timer/compteur. Ce composant est capable de compter des impulsions arrivant sur sa patte 21 et de tenir à jour un registre interne dont la valeur sera le reflet du nombre d'impulsions d'horloge comptées pendant tout le temps que le condensateur aura mis à se charger, et donc sera le reflet de la position du potentiomètre, qui conditionne le temps de chargement du condensateur. A noter que la sortie Q du 74ls221 ne fournit pas les signaux d'horloge à mème de faire compter le CTC, mais valide le passage de l'horloge système vers le CTC via la porte NON-ET 74ls00.
Voilà, ça n'est pas compliqué. Encore faut-il se donner la peine de comprendre un peu le fonctionnement avant de se lancer dans une modification hasardeuse!
Que m'a-t-il fallu faire pour 'rattraper' le coup? C'est assez simple en fait. Puisque je ne pouvais pas augmenter la résistance de potentiomètre de 10KOhms à 100KOhms, il suffisait de multiplier la valeur de condensateur C77 par 10. J'ai donc placé deux condensateurs de 3200pF en parallèle entre les pattes 14 et 15 du 74ls221, pour une valeur finale de 6400pF + les 680pF d'origine.
Je triche un peu, ça n'est pas si simple que cela parce qu'il faut vérifier que les valeurs des composants restent dans les possibilités du 74ls221. Chance, c'était le cas!
Pour compléter, j'ai aussi du changer la résistance en parallèle sur le potentiomètre. Elle est censée diviser la valeur finale du potentiomètre de façon non linéaire. De 500KOhms à l'origine, je l'ai fait passer à 50KOhms (valeur divisée par 10 par rapport à l'origine, comme celle du potentiomètre). Dans les faits, j'ai placé deux résistances en série pour un total de 55KOhms. Les 10% supplémentaires me permettent d'atteindre la pleine échelle à coup sûr. A noter que la progression résultante du potentiomètre avec cette résistance en parallèle n'est donc pas linéaire. L'idée étant de linéariser la progression "apparente" de la charge du condensateur, sachant que la courbe de charge d'un condensateur, justement, est exponentielle et non pas linéaire. J'ai aussi du rajouter une résistance ajustable en parallèle de celle de 2KOhms d'origine pour régler plus facilement le zéro du potentiomètre. Une fois ces opérations réalisés, j'obtiens des créneaux de charge de 2,5% à 18,5% par période me permettant d'atteindre la valeur 0 pour le réglage du volume, et la valeur maximale de 240 pour le tempo par exemple.
Potentiomètre en butée à gauche. |
Potentiomètre en butée à droite. |
J'ai passé l'OS de cette Drumulator à la version 3, avec la prise en charge de la liaison M.I.D.I. entrante. Il ne me reste plus qu'à mettre en place la petite interface M.I.D.I. standard d'entrée. A moins que j'en profite pour y implémenter un module de conversion de ma nouvelle interface M.I.D.I.
Mais pour l'heure, je remonte l'Emulator I que j'ai acquis il y a aussi un an. Fonctionnel, mais qui m'a généré une superbe fumée âcre de condensateurs quelques minutes après sa mise en marche. Je me dis que cet Emu 1 sera le parfait compagnon de cette Drumulator!