13
1 Boîte à musique électronique 9/05/2015 Rev.2 Rev2: ajout 4,7uF sur LM386. Correction erreur R7 = 8.2k et non 6.8k. Une longue histoire. J’étais enfant lorsqu’un parent de retour d’Italie m’avait offert une boite à musique, une gondole avec son gondolier bien sur et une jolie danseuse en robe rose qui tournait en sautillant au son d’une musique cristalline. On remontait un ressort et l’appareil diffusait une mélodie extraite d’une chanson d’une dizaine de seconde qui se répétait au début rapidement puis ralentissait jusqu’à épuisement de l’énergie du ressort. Pas très satisfaisant mais cela me plaisait beaucoup, mieux que le moulin a manivelle qui faisait DiGueDon, DiGueDon... Hélas plaisir éphémère, le ressort remonté trop souvent ou trop fort a fini par casser. Adolescent j’ai retrouvé la gondole et décidé de la démonter ; j’ai sorti le ressort et réussi en le faisant rougir sur le gaz pour le détremper, a le repercer et le raccrocher sur son picot. Toute la mécanique remise en place j’ai remonté le ressort et libéré le frein éolien, Catastrophe, le ressort s’est détendu en moins d’un quart de seconde le tambour à picots a tourné à toute vitesse et cassé les trois quarts des lames vibrantes. Définitivement irréparable ! Plusieurs décennies plus tard, eh oui ! le temps passe mais pas les souvenirs d’enfance. Un soir, la télévision nous a fait un beau cadeau, un opéra «La flûte enchantée » de Mozart, chef- d’œuvre incontournable dans lequel on entend une boite à musique, (des clochettes) l’un des deux instruments enchantés avec la flûte qui donnent à leurs possesseurs des pouvoirs leur permettant de vaincre les méchants qui veulent contrecarrer leurs projets. Voila donc un souvenir réactivé. On trouve encore de nos jours des mécaniques de boite à musique mais sans ressort, il faut tourner une manivelle, donc impropres à réparer ma gondole musicale. Bon ! Abrégeons la nostalgie ! Entre temps ma vie professionnelle s’est déroulée dans l’électronique et l’informatique. Partant du principe qu’en électronique et avec l’aide d’un microcontrôleur et d'un peu de jugeote on peut tout faire à condition de rester modeste, j’ai décidé de me lancer dans la fabrication d’une boite à musique électronique (pas de risque de casser le ressort) avec un cahier des charges un peu plus étoffé que celui de ces petites mécaniques suisses : La musique ne doit pas être répétitive en tout cas pas plus qu’une symphonie de Beethoven (ce n’est pas une critique), elle ne doit pas ralentir et finir en mourant de fatigue. L’étendue de la plage musicale sera non pas 19 notes mais 44. Du Do1 à une fréquence de 261,63 périodes par seconde au La4 à 3520pps. Voici le nom des notes : do, do#, re, re#, mi, fa, fa#, sol, sol#, la, sib, si. Ces notes doivent être suivies d'un indice (1 à 4) précisant à quelle gamme elles appartiennent. Par exemple : do1 (la note la plus grave), do#2, la4 (la note la plus aiguë) Toutes les notes ont leur note diésée sauf le mi et le si, bien sur, et puisqu'il faut toujours une exception à la règle il n'y a pas de la# mais un sib. Ne pas écrire un reb (ré bémol) qui n'existe pas; écrire do# qui à la même fréquence dans la gamme tempérée (on dit que do# et réb sont enharmoniques). Les airs présentés doivent être complets. Ma boite à musique sera capable de nuances (piano, mezzo-forte, forte) le tempo pourra être modifié (accelerando deccelerando) ; elle diffusera plusieurs airs le tout devant durer plusieurs minutes. Surtout l’utilisateur pourra y introduire les airs de s on choix. A condition cependant d’avoir quelques notions de solfège et d’avoir la possibilité de modifier ré assembler (MPASMWIN) et ré enregistrer le programme du microcontrôleur PIC. Je sais que les électroniciens connaissant la musique ne sont pas un genre très répandu mais je suis sûr qu'il-y-en a. Le programme n’a pas à être modifié il suffit d’écrire les notes à l’endroit prévu à la suite des airs préenregistrés qu’on peut d'ailleurs effacer et remplacer par d’autres. Les morceaux préenregistrés ont é té transposés et simplifiés pour

Boite à musique

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Boite à musique

1

Boîte à musique électronique 9/05/2015 Rev.2

Rev2: ajout 4,7uF sur LM386. Correction erreur R7 = 8.2k et non 6.8k.

Une longue histoire.

J’étais enfant lorsqu’un parent de retour d’Italie m’avait offert une boite à musique, une

gondole avec son gondolier bien sur et une jolie danseuse en robe rose qui tournait en sautillant

au son d’une musique cristalline. On remontait un ressort et l’appareil diffusait une mélodie

extraite d’une chanson d’une dizaine de seconde qui se répétait au début rapidement puis

ralentissait jusqu’à épuisement de l’énergie du ressort. Pas très satisfaisant mais cela me plaisait

beaucoup, mieux que le moulin a manivelle qui faisait DiGueDon, DiGueDon... Hélas plaisir

éphémère, le ressort remonté trop souvent ou trop fort a fini par casser.

Adolescent j’ai retrouvé la gondole et décidé de la démonter ; j’ai sorti le ressort et réussi en le

faisant rougir sur le gaz pour le détremper, a le repercer et le raccrocher sur son picot. Toute la

mécanique remise en place j’ai remonté le ressort et libéré le frein éolien, Catastrophe, le ressort

s’est détendu en moins d’un quart de seconde le tambour à picots a tourné à toute vitesse et cassé les trois quarts des lames vibrantes. Définitivement irréparable !

Plusieurs décennies plus tard, eh oui ! le temps passe mais pas les souvenirs d’enfance. Un

soir, la télévision nous a fait un beau cadeau, un opéra «La flûte enchantée » de Mozart, chef-

d’œuvre incontournable dans lequel on entend une boite à musique, (des clochettes) l’un des deux

instruments enchantés avec la flûte qui donnent à leurs possesseurs des pouvoirs leur permettant

de vaincre les méchants qui veulent contrecarrer leurs projets. Voila donc un souvenir réactivé.

On trouve encore de nos jours des mécaniques de boite à musique mais sans ressort, il faut

tourner une manivelle, donc impropres à réparer ma gondole musicale.

Bon ! Abrégeons la nostalgie !

Entre temps ma vie professionnelle s’est déroulée dans l’électronique et l’informatique.

Partant du principe qu’en électronique et avec l’aide d’un microcontrôleur et d'un peu de jugeote

on peut tout faire à condition de rester modeste, j’ai décidé de me lancer dans la fabrication d’une

boite à musique électronique (pas de risque de casser le ressort) avec un cahier des charges un

peu plus étoffé que celui de ces petites mécaniques suisses :

La musique ne doit pas être répétitive en tout cas pas plus qu’une symphonie de Beethoven (ce

n’est pas une critique), elle ne doit pas ralentir et finir en mourant de fatigue.

L’étendue de la plage musicale sera non pas 19 notes mais 44.

Du Do1 à une fréquence de 261,63 périodes par

seconde au La4 à 3520pps.

Voici le nom des notes :

do, do#, re, re#, mi, fa, fa#, sol, sol#, la, sib, si.

Ces notes doivent être suivies d'un indice (1 à 4)

précisant à quelle gamme elles appartiennent.

Par exemple : do1 (la note la plus grave), do#2, la4 (la note la plus aiguë)

Toutes les notes ont leur note diésée sauf le mi et le si, bien sur, et puisqu'il faut toujours une

exception à la règle il n'y a pas de la# mais un sib. Ne pas écrire un reb (ré bémol) qui n'existe pas;

écrire do# qui à la même fréquence dans la gamme tempérée (on dit que do# et réb sont

enharmoniques). Les airs présentés doivent être complets. Ma boite à musique sera capable de

nuances (piano, mezzo-forte, forte) le tempo pourra être modifié (accelerando deccelerando) ;

elle diffusera plusieurs airs le tout devant durer plusieurs minutes. Surtout l’utilisateur pourra y

introduire les airs de son choix. A condition cependant d’avoir quelques notions de solfège et

d’avoir la possibilité de modifier ré assembler (MPASMWIN) et ré enregistrer le programme du

microcontrôleur PIC. Je sais que les électroniciens connaissant la musique ne sont pas un genre

très répandu mais je suis sûr qu'il-y-en a. Le programme n’a pas à être modifié il suffit d’écrire

les notes à l’endroit prévu à la suite des airs préenregistrés qu’on peut d'ailleurs effacer et remplacer par d’autres. Les morceaux préenregistrés ont été transposés et simplifiés pour

Page 2: Boite à musique

2

satisfaire au fonctionnement de cette Boite à musique. Une restriction : ma Boite à musique ne

comportera pas de danseuse. Bien que ce soit tout à fait possible : Imaginons un électro-aimant

genre relais de moyenne puissance dont la palette donnerait l’impulsion verticale pour faire

sautiller la danseuse, la rotation se fait naturellement. Ce relais serait commandé dans la

séquence « Bip1t » par le port A3 systématiquement comme sont commandées les charges des

condensateurs. Cela exigerait une alimentation plus conséquente incompatible avec l’usage d’une

pile 9 volts.

Techniquement la partie élecronique doit être simple : Le moins possible de composants,

faciles à se procurer, peu onéreux et facile à fabriquer par un amateur avec un outillage restreint.

Tous les composants sont traversant; pas de cms; circuit imprimé monoface.

Les premiers essais (en 2010) réalisés avec un PIC 16F84 ont vite été abandonnés (pas assez

rapide, pas assez de mémoire set d’instructions trop restreint) autre échec avec un PIC 16F876.

Finalement j’ai opté pour un PIC 18F2520 Microchip voici pourquoi : Les 16F ont un mot

instruction de 14 bits qui permet un set de 36 instructions. L’architecture RISC (Reduced

Instruction Set Computer) c’est bien, facile à retenir, mais c’est quand même mieux avec un set

un peu moins reduced. Les 18F ont un mot instruction de 16 bits qui permet quelque 80

instructions. Ne me demandez pas pourquoi les 14 bits sont appelés 16F, le F signifie « mémoire

flash donc effaçable et réinscriptible au moins 100000 fois», et les 16 bits sont appelés 18F...

Donc des nouvelles instructions très utiles qui simplifient la programmation : Ex. BTG ‘bit

toggle’ qui inverse un bit d’un port ou d’un octet en mémoire par une seule instruction ; je l’utilise beaucoup. De nouveaux branchements conditionnels (positif, négatif, zéro...) qui évitent

d’aller tester le mot Status ; La ‘Movff’ qui transfert un octet dans un autre sans passer par le

working register Wreg ; on peut manipuler le stack (Pop, Push) je l’utilise pour abréger un air.

Lors d’une interruption les registres : Status, Wreg, Bsr sont sauvés sans perte de temps

systématiquement et la " fast retfie 1" (Return from interrupt enable,1) restore le tout sans

augmenter le nombre de cycles (2). En outre le 18F2520 a une mémoire flash de 32 Kilo-octets,

(Les chants sont enregistrés dans la mémoire du programme). Autre atout, ce chip peut être piloté

par un oscillateur interne jusqu’à 8Mhz et un PLL multiplie cette fréquence par 4. Je le fais donc

pédaler à 32Mhz en interne économisant ainsi un quartz, 2 condensateurs céramique, une

résistance et de la place sur le PCB. Ce chip coûte moins de 7 euros. On peut télécharger

gratuitement chez Microchip la notice DS39631E un Pdf de 410 pages en anglais. Tout ceci

satisfait pleinement à mon cahier des charges.

Entrons dans le vif du sujet

1er

problème : Imiter autant que possible le son d’une boite à musique mécanique à lames

vibrantes. En avril 2010 Elektor a publié ma réalisation présentant une serrure à code qui

permettait en bonus l’exécution de la « Marche de la Légion étrangère » (Il n’y avait que 4 notes

possibles et seulement une à la fois), le principe et le suivant : Charger un condensateur par un

port A du microcontrôleur. Ce condensateur alimente un collecteur de transistor qui reçoit sur sa

base un créneau calculé par le micro et émis par une autre sortie de port.

Il en résulte sur le collecteur une onde amortie (forte attaque et diminution progressive du son

selon la courbe bien connue de décharge d’un condensateur dans une résistance). Ce 1er essai

assez satisfaisant a été amélioré.

2ème

problème : Ma boite à musique est capable aujourd’hui de diffuser 3 notes simultanées. Ces

3 notes peuvent être 1 noire, 1 croche, 1 double croche, chacune émise par un port et un

transistor différents. On peut donc jouer dans un temps 1 noire + 2 croches + 4 doubles croches.

Le gros problème est le calcul de tout cela, le programme du PIC s’en charge. il n’y a pas de

générateur de notes ce serait trop facile!, trop onéreux et trop encombrant (un quartz un chip

générateur de 12 notes et une multitude de diviseurs par 2 sans compter les composants passifs).

Heureusement le Logiciel permet de réduire considérablement le Matériel !

Page 3: Boite à musique

3

Le temps est la base d'écriture. Un air musical est composé de mesures ; une mesure simple

contient 2, 3, 4, temps, une mesure composée (ternaire) 6, 9, 12 temps. (L’unité de base est la

ronde, la noire est le quart d’une ronde, la croche est le huitième d'une ronde). Dans une mesure

3/4 (3 quarts de ronde) par exemple la mesure contient 3 noires. Dans une mesure 6/8 (à 2 temps)

la mesure contient 2 noires pointées (noire et demi) ou 6 croches (2 triolets). Dans une mesure

simple une noire peut être divisée en 2 croches ou 4 doubles-croches dans toutes les

combinaisons possibles. Ainsi un temps peut contenir au maximum 7 notes : 1 noire, 2 croches et

4 doubles croches. Les silences n’ont pas à être codifiés, il suffit de laisser la place vide. Dans

mon système la musique s’écrit et s’exécute temps par temps. L’étendue des sons est près de 4

octaves du Do1 au La4. La gamme la plus grave (de Do1 à Si1) est celle qui contient le ‘La 440’

(Référence internationale 440 périodes par seconde ). C’est la note que l’on entend lorsqu’on

décroche un téléphone ; c’est également la 1ère note du ‘Pimpon’ des pompiers ou de la police.

Dans un orchestre c’est le hautbois qui donne le La car c’est le seul instrument qui est non

ajustable. Toutes les notes sont calculées à partir de ce La440 pour une gamme tempérée. La

longueur et la fréquence des notes sont calculées à partir de l’oscillateur 32 Mhz c’est à dire 8

millions d’instructions par seconde puisqu’une instruction simple prend 4 périodes (certaines

instructions durent 2 cycles de 4 périodes). La principale difficulté du programme est de tenir

compte de cela pour faire évoluer les compteurs à la bonne vitesse quel que soit le tempo, le

nombre, la hauteur et la longueur des notes émises simultanément. Quelques notes de la gamme 4

très aiguës, sont un peu hors tolérance du à l’arrondi du nombre de boucles à l’unité la plus

proche; seule une oreille très exercée peut déceler ce petit décalage; ces notes sont très peu utilisées. L’oscillateur interne RC 8Mhz est susceptible de glisser légèrement en fonction de la

tension et de la température. La tension 5 volts régulée varie très peu et la température bouge très

lentement. Une boite à musique n’a pas vocation (comme on dit maintenant) à jouer en

compagnie d’autres instruments qui varient également avec la température ! Je n’ai jamais

constaté d’effet gênant. Les puristes pourront toutefois ajouter un quartz de 8Mhz (le PLL n’est

qu’un multiplicateur et ne peut faire glisser la fréquence). On peut alors monter jusqu’à 40Mhz,

avec un quartz de 10 Mhz. Je pense que c’est une dépense et un travail inutiles. Il faudrait alors

modifier la config du chip ainsi que les valeurs des frequences des notes ; modifier la platine...

L’oscillateur RC interne peut être réglé précisément en modifiant des bits dans le registre

OSCTUNE (Par défaut la fréquence est centrée à 32Mhz) je n’en ai pas éprouvé le besoin.

Passons au schéma électronique.

D’une extrême simplicité, la platine contient 1 Pic Microchip 18F2520 DIL 28 pattes, 4

transistors BC548, 1chip 8 pattes LM386 ampli BF, pourquoi s'ennuyer avec des transistors alors

qu’existe un chip coûtant <1 euro ? Un petit HP 70mm 16 ohms, un potentiomètre 10k, 1 bouton

poussoir, 16 résistances, 11 condensateurs, un microswitch.

Le type de transistor (BC548b) a peu d’importance (c’est un ‘TUN’ transistor universel NPN

comme le rappelle Mr.Clemens Valens dans un article ‘ELPP’ Elektor Labs Preffered Parts de

septembre 2014) car il fonctionne toujours soit bloqué soit saturé (tout ou rien). Ce doit être un

NPN. Excepté pour le T4 qui règle l’intensité du son un BC548b ou autre TUN d’un Beta vers

250 (hfe). Si ce n’est pas satisfaisant agir sur sa Res. de collecteur (4.7k) ; l’augmenter réduira les

modifications de la puissance du son (moins de nuance). Le 9v. de la pile (ou 2 piles de 4.5v. en

série) alimente un régulateur 5v pour l'alimentation du Pic. Le 9v. de la pile alimente directement

l’ampli BF. La consommation en 9 v. est au maximum de 35 mA. dans les fortissimi. Le tout

s’installe dans un coffret en bois ; l’ouverture du couvercle met l’appareil sous tension par un

microswitch fixé à une paroi de la boîte. Le micro PIC s'initialise puis, recru de fatigue, il tombe

en SLEEP. La consommation est alors très faible, depuis un an de mise au point j’utilise la même

pile sans constater le moindre affaiblissement. En dehors de la musique, coffret ouvert, le micro

est toujours en sleep ( en sommeil oscillateur stoppé).

Page 4: Boite à musique

4

On voit à gauche du schéma 3 circuits très simples, identiques sauf les valeurs des composants.

Un circuit pour la noire, un pour la croche et un pour la double croche.

Je dois préciser ici que le temps est divisé en 16 parties (4 parties correspondant à une double

croche ; 8 parties pour une croche et 16 parties pour la noire). Un compteur appelé Cint compte

les interruptions produites par le timer zéro débordant.

Cint compte de 0 à 16 et est remis à 0 dès qu’il atteint 16. C’est le tempo de la musique.

Les condensateurs sont chargés entre cint 0 et 1 ou entre 4 et5 etc... Le temps de charge est

identique pour toutes les notes, voir plus loin le CintGraf. C’est pourquoi les condensateurs

et leurs résistances de charge sont différents. La noire est émise de 0 à 16, les croches sont émises

de 0 à 8 et/ou de 8 à 16, les doubles croches sont émises de 0 à 4 et/ou de 4 à 8, 8 à 12, 12 à 16.

Le programme charge seulement les condensateurs des notes présentes dans un temps.

Etudions par exemple le circuit croche.

A cint0 ou cint8 débute la charge du condensateur C2 ; la charge s’arrête à cint1 ou cint9. la

charge est produite par le port A1 patte 3 du Pic. Une diode empêche que le condensateur

se décharge dans le port lorsque la tension de sortie du port A1 redescend à 0v. La chute de

tension dans la diode est environ 0.7v. En même temps que la charge le port B2 patte 23 envoie

le créneau à la base du transistor par la résistance R9 le transistor devient passant pendant les

phases positives du créneau ( 5v.). La résistance qui charge le condensateur et de 1k ; la

résistance de collecteur R6 est 8.2K mais le courant n’y circule que la moitié du temps pendant

les périodes positives des créneaux émis par le port. Ces composants sont calculés pour que le

transistor produise une onde amortie pendant 8 parties sur 16 du temps. La charge du

condensateur est d’environ 95% de 4.3v. soit 4v. Le créneau s’arrete à cint 8 ou 16.

Nota : Le calcul du temps de charge par la formule Thêta = R x C donne 10 millisec. mais à ce

moment la charge n’est que de 66% et compte tenu que le créneau apparaît dès le début de la

charge il faut au moins 6 Thêta’s pour charger à 95%. Le temps de charge est fixé par Cint dont

un pas vaut en moyenne (selon le tempo) 60 millisec. V = 4*(e (̂-T/CR). V en volt T en sec.;C en

microFarad R en MegOhm : Pour la noire on a 0,28v. après 1 seconde et 0,01v après 2 sec.

Page 5: Boite à musique

5

Pour la croche 0,2v. après 0,5 sec. et 0,01v.après 1 sec. Pour la double croche 0,17v. après 0,25

sec. et 0,01 après 0,5 sec.

Les 3 notes ou peut-être 7 sont mélangées par 3 résistances de 100k R11, 12, 13 qui aboutissent

sur le potentiomètre P1 de 10k. de réglage du son, réglé une seule fois en fonction du haut-parleur

utilisé. Avant la 1ère mise sous tension régler ce pot. à environ 1 Kilo Ohm entre le curseur et le

point masse afin de ne pas saturer le HP; Plus tard affiner le réglage en écoutant la musique. En

haut de ce potentiomètre la hauteur de la somme des 3 notes est au maximum de 1v. C’est trop

pour entrer dans le LM386 ; Le Pot.1 abaisse cette tension à une valeur convenant à une bonne

écoute selon la qualité du HP 8 ou 16 ohms. Un condensateur de 10 nanoF. arrondi les angles des

créneaux. Un transistor T4 en série avec une résistance de 4.7k court-circuite partiellement P1 en

fonction de ce qu’il reçoit sur sa base, un ensemble de 2 résistances donnant une échelle de 4

valeurs de courant. Ces résistances sont à 5v. ou 0v. par les ports B4 patte 25 et/ou B5 patte 26 ce

qui permet au programme de nuancer la puissance du son. La tension résultante est étalée dans le

temps par C8 de 10uF 6.3v.

Le petit LM386 dans son extrême dépouillement donne une amplification de 20 DB donc une

puissance en sortie 100 fois la puissance d’entrée ( 2 est le log dec. de 100 et 2 Bell’s = 20

decibells). Un condensateur entre les pattes 1 et 8 peut le monter jusqu’à 26DB (400fois) mais

c’est beaucoup trop pour une boite à musique et un HP d’1/4 de watt.

Révision2: J'ai d'abort utilisé cet ampli sans condensateur; mais la dynamique de cette Boîte à

musique est très grande entre les Pianissimi et les Forte. A l'usage je me suis rendu compte que 3

notes émises simultanément Forte saturaient l'entrée de l'ampli ce qui résultait en des sons désagréables en sortie. Il a donc fallu baisser le niveau d'entrée par le Potentiomètre 10Kohm Et

dans ce cas les notes Pianissimo devenaient presque inaudibles. J'ai donc monté l'ampli à 26 DB

par un condensateur 4.7misroF entre les pattes 1 et 8.

Nota: Il est impératif de conserver le potentiomètre 10 KiloOhm sinon les nuances seraient

perturbées.

Avez-vous remarqué que l’on n’a rencontré aucun condensateur en série entre le micro et l’ampli

BF ? Liaison continue.

Dernière pièce, un bouton poussoir miniature

entouré de 2 Res. R4 - R11 et C4 formant anti

rebond. Un appui bref sur ce bouton produit

une interruption par le port B0 configuré pour

une interruption externe INT0 gérée par le

programme ( introut) qui démarre le 1er chant.

Page 6: Boite à musique

6

Le programme du PIC. Simplified diagram.

Les chants se suivent après un silence de 3 secondes. Un appui sur le bouton pendant l’exécution

d’un morceau avorte celui-ci et lance le suivant. Un appui pendant le dernier chant branche le

programme à « départ » et le micro en sleep attend un nouvel appui pour relancer le chant1.

On peut arreter la diffusion de la musique à tout moment simplement en fermant le coffret.

Page 7: Boite à musique

7

Après utilisation refermer le couvercle ce qui coupe l’alimentation et économise la pile.

Le programme est écrit en langage assembleur indispensable pour savoir exactement combien de

cycles sont déroulés dans une séquence. (Pour générer une note le temps du créneau doit être très

précis). Le rapport du créneau est toujours de 50%. Pour programmer j'utilise MPLAB IDE

version 8.91 téléchargeable gratuitement chez Microchip. Pour écrire le fichier 'BoiteAmus.hex'

dans le micro j'utilise PICPgm programmer et un très ancien programmateur: POK508 qui se

branche sur le port série du PC.

Le programme est d’un seul tenant, il n’y a pas « d’include ». Les bits de configuration sont écrits

sous le cadre ‘En tête’ (directives CONFIG) ils sont dans le fichier HEX (Tout en bas du

fichier .HEX la ligne commençant par 03) il n’y a rien à ajouter; cependant le code en mémoire

flash n’est pas verrouillé. Système ouvert.

Les notes possibles sont listées sous forme de constantes : Nom de la note et sa fréquence

affectée. Exemple : (La4 equ 0xED) ED est un nombre hexadécimal = 237 décimal.

Le complément de ce nombre à 256 est 19. 19 est le nombre de boucles qu’il faudra exécuter

pour un demi créneau ; Le bit est alors inversé et le compteur restauré pour le demi créneau

suivant et ainsi de suite jusqu’a la fin du temps que doit durer la note. La boucle en question sera

vue plus loin. Voir en annexe la feuille EXCEL qui donne la fréquence des notes, le temps d’un

demi créneau en microsecondes et le nombre de boucles (itérations) seulement pour information

detaillée car ces valeurs figurent en tête du programme. Pour jouer une note il faut écrire son nom

et l’indice de sa gamme, sa longueur sera définie par la case de la macro ‘temps’ dans laquelle la

note est écrite. ;<<<< Aperçu pour 1 temps...a glimpse to execute one step >>>>

cint = 0 cint is incremented by interrupt due to timer0 over run

dc1 bra $+2 ;To complete time

bra $+2 ;bra $+2 = 2 cycles .25 microsec.to jump

bra $+2 ;to the next line

bra $+2

bra $+2

btfss bitest,1 ;Is there a double croche 1

bra $+8 ;No note absente

infsnz countdc,f ;Yes increment counter

bra $+d'10' ;count = 0 go to movff then toggle port B3

bra $+6 ;not zero out whit time compensation

nop ;Complete time...nop = 1cycle(0.125 uSec.)

bra $+2

bra c1 ;Continue with croche.

movff frdc1,countdc ;refresh counter DC

btg portb,3 ;toggle B3 doublecroche 1 (invert polarity)

;18cycles = 2.25 microsecondes)

c1 bra $+2

The same for C1 and Noire (some differences for noire

Due to the pedal)

...

cint=1 nop

btfsc cint,0 ;cint bit 0 présent? (cint=1 ?)

clrf porta ;yes clear port A stop load capa's

btfss cint,2 ;cint = 4 ? 1/4 of time

bra dc1 ;no continue iteration until cint = 4

<<This sequence from ‘dc1’to ‘bra dc1’always 60 cycles = 7.5 micro sec.>>

cint=4 ;Yes

btfss bitest,4 ;is there a double croche 2

bra $+4 ;no skip loading capa for DC

bsf porta,2 ;yes start loading capa DC

;only a DC note is possible at this time

dc2 Same sequence for a quarter of time (cint 4 to 8)

dc3 ..." " " "(cint 8 to 12)

dc4 ..." " " "(cint 12 to 16)

cint=0 next step...

Page 8: Boite à musique

8

pour plus de details lire le programme du Pic "boite à musique.asm" dans notepad ou mieux dans

MPLAB IDE de Microchip (en couleurs plus facile à lire).

Une macro appelée justement « temps » constitue une suite de 8 octets dont voici

l’arrangement :

Octet 0 : reçoit le tempo (un nombre de 1 à 255) qui donne la vitesse de déroulement de ce

Temps et des suivants tant qu’il n’est pas modifié. Ecrire par ex. d’150’ (150 décimal) à la place

du n qui signifie Nul (même tempo que precedement ou pas de note à cet endroit.)

Octet 1 : case pour la 1ère double croche (DC1).

Octet 2 : case pour la 1ère croche (C1)

Octet 3 : case pour la noire (N)

Octet 4 : case pour la DC2

Octet 5 : case pour la DC3

Octet 6 : case pour la C2

Octet 7 : case pour la DC4

Les cases sont séparées par une virgule. Une case sans note doit contenir un n minuscule

Exemple : Ecriture d’un temps qui contient 6 notes, il n’y a pas

de noire, et un deuxième temps qui contient seulement une noire.

2 temps à écrire. En clé de sol.

Mf ; (Cette macro met le port B5 à 1 et B4 à 0 ) = Mezzo-forte

repère : ;tempo dc1 c1 noire dc2 dc3 c2 dc4 cette ligne en commentaire

label1 temps d’105’,do1 ,do2 ,n ,mi1 ,sol1 ,sol2 ,re2 ;1er temps

label2 temps n ,n ,n ,do2 ,n ,n ,n ,n ;2ème temps Même tempo ce temps contient juste une noire do2.

label3 temps n ,n ,n ,n ,n ,n ,n ,n ;...suite

Le tempo à 105 donne pour une noire 0,43 seconde soit 138 Noires à la minute.

« « 1 « « 0.004. « 15000 « « Inutilisable!

60 0,25 sec. 240

100 0, 41 sec 150

200 0,82 sec 73

255 1 sec. 60

Sur une partition on donne plutôt le nombre de noires à la minute, ce qui ne peut être apprécié

qu'à l'aide d'un métronome.

Le tempo désiré pour une noire s'obtient en divisant le temps par 0.004096. Par exemple :

Tempo pour une noire de 0.8seconde... 0.8/0.004096 = 195 ( on n'utilise guère que 100 à 255)

Les nuances s’écrivent entre les temps. (4 nuances : Pp, Piano, Mf, Forte) et sont activées sur les

temps suivants. Attention aux majuscules l’assembleur les distingue des minuscules.

Voir tout à la fin du programme comment on écrit un air. Tout d'abord avoir la partition ; sans

doute la transposer plus haut pour qu’elle tienne dans l’étendue des notes possibles ; simplifier

les accords à 3 notes ; supprimer ou les monter d’une octave, les notes très graves qui n’ont rien à

faire dans une boite à musique. La plus grave note possible est le do1 sur la ligne juste au dessous

de la portée en clé de sol; il-y-a donc intérêt a convertir la clé de Fa en clé de Sol. Repérer les

temps et les écrire un par un sous forme de lignes « temps » comme l’exemple ci-dessus. Mettre

un label à chaque ligne (ça ne coûte rien en mémoire) exemple : c4m2.3 : chant 4, mesure 2, 3ème

temps. Pas obligatoire mais pratique pour s’y retrouver, il faut pour cela numéroter aussi les

mesures sur la partition. On peut dans un morceau faire des reprises. Pour cela 2 macros :

« sectim étiquette de la ou des mesures de 2ème fois ». A placer juste devant les mesures de 1ère

fois. Macro « repris étiquette du début de la reprise ». A placer entre les mesures de 1ère et 2ème

fois. Voir exemple dans song7 dans le programme ASM. (Les reprises économisent des octets de

mémoire).

Pour des reprises imbriquées un autre couple de macros sectim2 et repris2 sont disponibles.

Page 9: Boite à musique

9

Voir exemple dans song4 : une reprises et a la fin un Da capo (sectim2 et repris2), au cours de ce

Da capo on ne fait pas la reprise.

Attention : seuls les labels (étiquettes) s’écrivent en colonne1.Les instructions ou macros

s’écrivent après le label et au moins un espace ou une tabulation. Si pas de label faire une Tab.

Ex. : c7m7.2 temps ...

sectim c7m9.1

c7m8.1 temps ... 1ère fois

c7m8.2 temps ... 1ère fois

repris c7m1.1 reprise au début du chant

c7m9.1 temps ... 2ème fois ...suite.

Résultat : Les mesures 1 à 8 seront exécutées, puis les mesures 1 à 7 la mesure 8 est sautée, puis

exécution de la mesure 9 et la suite.

Voir cet exemple dans le programme PIC au début du chant7 et en annexe la 1ère page du chant7.

Pour ces reprises un label est obligatoire bien sur, par exemple : couplet1, refrain, ou :

c7m9.1...(c7 = chant 7 car on ne peut donner 2 labels semblables dans un programme).

Le mot « temps » est obligatoire c’est le nom de la macro, (voir les macro’s juste avant le début

du programme) c’est elle qui recueille les notes et écrit leurs valeurs numériques dans 7 variables

n1 à n7. Egalement la valeur du tempo dans n0.

Nota : Il faut éviter de jouer 2 notes de même fréquence en même temps par ex. 'Noire do2' et

une 'croche do2' ayant toutes deux exactement la même fréquence, en opposition de phase elles

s'étouffent le temps de la plus courte. Sur un piano c’est impossible de jouer 2 fois la même note en même temps.

Il n’y a pas de limite à la taille d’un chant à part la mémoire restante. Un chant doit se terminer

par une instruction "Return" laquelle renvoie le programme vers la séquence Départ.

Pédale de résonance : Une noire peut continuer à résonner dans le temps suivant à condition que

ce temps ne comporte pas de noire. Pour cela écrire juste avant le temps où une noire doit

continuer : pedon. C'est une macro qui s'écrit comme une instruction. Cette pédale est

automatiquement annulée à la fin du temps; elle agit uniquement sur une noire. Utiliser avec

précaution, la noire prolongée ne doit pas se frotter à des notes très proches ce qui produirait de

désagréables dissonances, sauf en fin de temps ‘dc4’ ou le son de la noire est trés atténué.

Revenons au programme. Après le nom des notes et leurs valeurs on trouve les adresses des

registres du micro et des variables utilisées par le programme. Puis les macros et enfin le début

du programme qui commence par l’initialisation habituelle dans tout programme.

A la suite de l’init2 le micro tombe en sommeil (Sleep; très basse consommation) puis on trouve

l’étiquette «Départ». Le micro en sleep attend qu’on appuie sur le bouton ce qui produit

l’interruption externe 0 qui réveille le micro et la routine d’interruption monte le bit 0 de la

variable « newsong », le programme continue après «départ» et en avant la musique !

A l’adresse 8 de la mémoire flash commence la routine de gestion des interruptions. "Introut" qui

gère les 2 sortes d’interruptions possibles dans ce programme : l’appui sur le bouton et le

débordement du timer 0. Le timer 0 de 16 bits donc 2 octets (0 à 65535) est utilisé pour compter

le tempo. Il reçoit la fréquence de 8Mhz qui est d’entrée divisée par 8 par le prescaler. L’octet

haut est pré chargé par le nombre donné dans la case 0 de la macro temps. Lorsque ce timer

déborde (passe par 0) il produit une interruption qui branche le programme à introut qui

incrémente Cint. A la fin de la macro temps il y a un call (appel) de la séquence « loadfr » qui

charge les compteurs avec les nombres représentant les notes : la valeur de la Noire dans frn, la

valeur de la C1 dans frc1 la valeur de la Dc1 dans frdc1. cette séquence également charge le

tempo s’il doit être changé et constitue un octet «bitest» dont chaque bit signale la présence d’une

note : bit 1 = 1 si présence d’une DC1 sinon le bit 1 = 0. Bit 2 pour C1 etc. dans le même ordre

que les octets de la macro temps. La fin de cette séquence appelle «bip1t» qui d’après le mot

"bitest" charge les condensateurs des notes présentes en début de temps (Noire, C1, DC1) en

montant le port A correspondant. (A ce moment Cint est à 0). Les condensateurs commencent à

se charger, la charge s’arrêtera par remise à zéro du port A à Cint1, Cint5, Cint9, Cint13.

Page 10: Boite à musique

10

Entrons enfin dans la grande boucle. « Exec ».

Cette boucle, pour exécuter un temps, comporte 4 parties correspondant à 4 doubles croches;

elles ont pour étiquette : dc1; dc2; dc3; dc4. Chacune de ces boucles dure 4 / 16 de temps. La

boucle dc1 de cint0 à cint4; boucle dc2 de cint4 à cint8 etc...A cint16 se trouve la l’instruction

«return» pour passer au temps suivant. Ces 4 boucles sont identiques excepté le nom des

compteurs. Une boucle de 4 / 16 de temps est, elle même divisée en trois parties qui s'enchaînent,

la 1ère (dc1) pour le comptage de la double croche, la 2ème (c1) pour la croche 1, la 3ème pour la

noire. (Les compteurs noire et croche doivent évoluer dans les 4 boucles)

Voyons la boucle dc1. Des «bra $+2» branchement à la ligne suivante, (1 instruction prend 2

octets) sont là pour compléter le temps de la boucle qui doit toujours durer 7.5 microsec. entre

l’étiquette dc1 et le retour a cette étiquette. Les «bra $+2» sont toujours réalisés et prennent donc

2 cycles on voit aussi des «nop» (no opération) qui ne durent que 1 cycle. Ce temps est calculé

pour obtenir le do1 avec le nombre maximum de boucles de 7.5usec soit 255. Voir la feuille

Excel. La valeur mini des compteurs est 1 car dans la macro « temps », 0 signifie pas de note. A

chaque itération les 3 compteurs pré chargés par les valeurs des notes à jouer : countdc ; countc,

et countn sont incrémentés (+1) si la note est présente jusqu’a ce qu’ils passent à 256 c.à d. 0 ce

qui est détecté par le programme qui alors inverse la tension de sortie du port de cette note

(Toggle) et restore le compteur à la valeur de la note en cours. Cette boucle dc1--- bra dc1 tourne

jusqu’à ce que cint arrive à 4, on passe à la boucle suivante dc2. Pendant le déroulement de la boucle à chaque tour le programme lit le cint pour stopper la charge des condensateurs lorsque le

bit1 est présent (1, 5, 9,13) et pour passer à la boucle suivante quand cint arrive à 4 ou 8 ou 12 ou

16.

Après cette quadruple boucle « Exec » se trouve le sous programme Delai appelé lui-même par la

macro delais (utilisée pour introduire des temps morts). «delais 1» = 50 millisec. Puis juste en

dessous commencent les chants dans l’ordre : chant1, chant2, Etc.

Après le dernier chant joué le programme remet le micro en 'SLEEP' en attente d’un appui sur le

bouton pour une nouvelle audition ou la fermeture de la boite à musique ce qui coupe

l’alimentation.

Les morceaux préenregistrés

Chant1: Adorable musique Mozart (La flûte enchantée) 1196 octets 44 secondes.

Chant2: A la claire fontaine 1028 "" 1 min. 2sec.

Chant3: La chanson du printemps F. Mendelssohn 6024 "" 2 m.15 sec.

Chant4: L'amour de moy... Auteur inconnu 15ème siècle 2330 "" 1 m. 45 sec.

Chant5: Valse N° 15 J. Brahms 4268 "" 1 m. 30 sec.

Chant6: Entertainment Scott Joplin 6780 "" 4 m. 40 sec.

Chant7: Etude en Fa en forme de sonatinette pour 8562 "" 3 m.

boite à musique seule.

De ma composition, on y entend dans le 2ème mouvement 2/4 'larghetto' des noires, des croches,

des doubles croches, mais aussi des blanches ou 2 noires liées, et des triples croches! Des

mesures syncopées! Le 3ème mouvement 'vivace' est une sicilienne, mesure ternaire en 6/8. Pour

montrer tout ce qu'on peut faire avec 3 notes. Il faut parfois jongler avec le tempo pour obtenir

l’impossible ! Le temps que dure un chant n’est pas proportionnel à son nombre d’octets à cause

des reprises et du tempo. Il reste 1535 octets pour enregistrer votre chant préféré ou votre propre

composition (85 temps, un temps prend 18 octets), si vous êtes satisfait de votre 1er essai Vous

pouvez effacer n'importe quel chant pré enregistré (en entier) pour libérer de l'espace mémoire.

L'assembleur retasse automatiquement et les octets libres sont toujours à la fin après le dernier

chant. Mais on peut aussi par exemple effacer le chant2 et écrire un autre à la place sans se

soucier de la quantité de mémoire utilisée. Il n'y aura pas de trou entre le chant2 et le chant3.

Page 11: Boite à musique

11

1/4 d'heure de musique pour vous endormir... Ou apprendre à aimer la musique et désirer mieux

entendre ou jouer vous-même ces morceaux simplifiés.

Circuit imprimé simple face vu côté cuivre 4 x 9 cm

Rev.2 : Pour ceux qui auraient déjà réalisé le Pcb ancienne version il suffit de percer 2trous

En bout lu LM386 pour y implanter le condensateur 4.7 micro entre les pattes 1 et 8.

Implantation des composants Vue côté composant

Deux straps st1 enjambe le circuit issu de la patte 1 du micro PIC18F2520 U1

St2 pour amener le +5v. à la résistance R17.

Le circuit imprimé est vu par transparence. Le dessin est agrandi pour plus de clarté.

Le bouton poussoir SW1 soudé dans 4 trous reliés deux à deux peut être déporté à un endroit plus

accessible du coffret. Souder un bifilaire à la place de sw1 dans 2 trous non reliés à droite de la

platine. Le switch amenant le 9v. n'est pas représenté, il n'est pas sur le PCB voir ci dessous.

Mon coffret

Page 12: Boite à musique

12

Le circuit est fixé par 3 vis sur une pièce

de bois triangulaire elle-même collée au

fond de la boite.

En haut à gauche de la boîte le micro-

switch est fixé par 2 vis de telle sorte que

le contact s’ouvre en fermant la boite.

En bas à gauche la pile 9 volts immobilisée

par une cloison collée et un morceau de

plastique à bulles.

A droite le bouton rouge pour lancer la

musique ou écourter un morceau.

Le haut-parleur prend place dans le

couvercle.

Une barre de bois au dos de la boite

maintient le couvercle vertical.

Attention : Le coffret ouvert, la platine est sous tension. Pour sortir le Pic et le remettre en place

il faut impérativement déconnecter la pile (enlever le connecteur en bas à droite).

Fil vert = 0 volt Fil jaune = + 9 volts après switch.

Liste des composants :

Résistances 1/8 watt

R1 470 ohm

R2 1 kohm

R3 1.5 k ohm

R4; R8; R9; R10 10 kohm

R5; R6;R7 8.2 kohm

R11; R12; R13; R14 100kohm

R15 47 kohm

R16 56 kohm

Pot.1 10 kohm vertical pas 2.54mm 20 tours

Condensateurs 16v. Pas 2.54mm

C1; C4 22 microfarads

C2; C5; C10 10uF

C3; C8; C11 4.7uF C6 10nF

C7 220uF

C9 100nF

Actifs

T1; T2; T3; T4 BC548b ou autres NPN. Pour T4 voir texte.

Microcontrôleur: PIC18F2520-I/SPDIP28 + support tulipe dil 28

Ampli BF LM386 N1 DIP8 + (support DIL8 pas obligatoire)

1 Régulateur 5v. 78L05 100mA

Divers

Page 13: Boite à musique

13

1 Haut-parleur 16 ou 8 ohms 70mm 1/4 watt de 200 à 3500 pps

1 microswitch avec levier 1 contact Ex : (Conrad 709450)

1 bouton poussoir miniature pour CI (Conrad 700479)

1 circuit imprimé selon dessin fourni 4 x 9 cm. Mono Face

1 strap ou résistance 0 ohm

Connecteurs : 2 barrettes mâles droites 2 picots au pas de 2.54 mm (barrette sécable)

2 fiches femelles avec câble au pas 2.54 mm

Attention à la polarité 9 volts. Pas de sens de branchement pour le HP.

Boîtier ad libitum (haut-parleur logé dans le couvercle;

profondeur du couvercle: prévoir 2.5cm. Sinon utiliser un HP

à moteur inversé.)

1 pile 9v. + 1 contact pression pour pile 9v. (Conrad 624691)

Internet

Bernard.chabbert.pagesperso-orange.fr

Elektor.fr

Microchip.com/mplab

Bernard Chabbert Villers-lès-Nancy. France