Vous êtes sur la page 1sur 62

mémoire de fin d'études:

MouseTick

mémoire de fin d'études: MouseTick u le métronome visuel MIDI SA E; i ns ti tute

u le métronome visuel MIDI

mémoire de fin d'études: MouseTick u le métronome visuel MIDI SA E; i ns ti tute

SA E; i ns ti tute , b r ussels - formation audio engineer - nicolas masson -j u i llet 2009

Table des matières

  • 1. Introduction

 

4

  • a. Motivation personnelle pour ce projet

 

4

  • b. Objectif du travail

 

5

  • 2. Le protocole MIDI

6

  • a. Un peu d'histoire

 

6

  • b. .. ...... .............. ........ .............. .. ........ .. .................................... ... .. . .. .. ...... . ..

Avantages

8

  • c. Description du MIDI

...............................................................................................

9

  • d. 1

Hardware

Transport

1 lnterface

10

  • e. Hardware 1 Transport 1 Le protocole physique de communication

 

12

  • f. base

Le protocole de

 

13

Messages Midi

  • g. .....................................................................................................

15

  • h. Synchronistaion en MIDI

 

15

Master 1 Slave

  • i. .......................................................................................................

16

  • j. MIDI clock message

 

17

  • k. Midi Machine Control: distinctions

 

...

18

3.

PIC16f84a

19

M i ssion

  • a. ................................................................................

.................................

19

Présentation

  • b. . .. .. .. ....... ..... .... .. ............................................... . .................. ... .. . ......

..

19

c . Fonctionnement

 

21

  • c 1. Foncionnement

1 Hardware

  • c Foncionnement

2.

1 Hardware

  • c Program Memory

3.

  • c Data Memory

4.

:

Boîtier et pins

22

:

Mémoires

23

........................................................

23

 

24

  • d. Hardware :

Registres

..........................................

25

d1. GPR (General Purpose Register]

25

d2 . SFR (Special Function Register]

26

  • e. Hardware : Clock 1 Timing

 

32

e1.

Principes

32

e2.

Configuration

..

32

f.

Hardware :ti merD

 

33

  • g. Hardware : Watchdog

 

34

. Software : Instructions

35

i.

Software

:Sous-routines

35

. Software

: lnterruptions

36

4.

Le programme

37

a . fi nition du processeur

 

37

b.

Di r ectives de configuration

 

...

.......

 

........

38

. Déclarations

  • c . .. .

..

..

.....

38

. Start on reset

  • d . .. . .. .. .. . .. .. .. .. . ....... . . ...... .. . .. .. .. . .. . . .. .. . .. .... . .... .. ..... .

......

..

42

e

. In i tialisation Hardware

 

..

....

..

42

f . In i t i al i sation Software

..

..

..

43

g . Programme principal

 

43

  • 5. Montage 1 Coût 1 Disponibilité

 

46

  • 6. le programmateur de PIC Velleman VM 111 et MPLAB

 

46

  • 7. Perspectives, Améliorations & Conclusions

 

47

  • 8. Produits similaires dans le commerce

 

49

  • 9. Annexes

51

  • a. Le schéma électrique de notre montage

 

...

51

  • b. Le code source de notre application

 

52

1O. Références

61

11. Contact

62

1. Introduction

a. Motivation personnelle pour ce projet

Lors de conversations avec des musiciens, l'idée a plusieurs fois été émise d'avoir un métronome sur scène, indiquant le tempo de manière visuelle.

De fait, très souvent de nos jours, l'utilisation d ' un ordinateur/séquenceur qui dirige une performance et donc, en détermine le tempo, est de plus en plus

fréquente.

Les musiciens intervenants ont donc besoin d ' une aide visuelle pour pouvoir se synchroniser plus facilement sur scène.

Prenons un exemple concret :

Un guitariste doit jouer sur le même tempo, lors de l'intro d'un morceau, que la nappe d ' ambiance sortant d'un synthétiseur dirigé par un séquenceur via MIDI. Dans de telles circonstances, il peut être difficile pour le guitariste de trouver les repères rythmiques ind i quant le tempo du morceau de manière évidente. Dans ce genre de cas, un flash de lumière synchronisé avec le tempo envoyé via MIDI, indiqué par une LED, peut être un excellent moyen pour le guitariste de pouvoir suivre le tempo de manière plus facile et donc plus précise. Cela peut sensible- ment améliorer une performance avec un peu d'entraînement.

Suite à ce constat, j'ai fait quelques recherches sur le sujet sur internet et ai vite trouvé le s i te web de Paul Messick, dont je possédais déjà un bouquin, sur lequel un projet de réalisation d'un métronome MIDI était disponible. Code source, liste des composants, schéma électrique, ainsi qu'une bref explication sur les messag- es du protocole MIDI utilisés pour réaliser un métronome. «Cool!» Me suis-je dit! Je vais essayer d'en faire un !

Je me renseigne sur le puce qu'a utilisé Mr Messick lune PIC16c54] et me rend compte que le magasin d'électronique le plus proche n'a pas de programma- teur pour la bestiole, mais qu'il vend un autre, le programmateur de PIC Velle- man VM 111, qui peut programmer une puce très similaire à celle recherchée. Je l'achète donc en me disant qu'il serait simple d'adapter le code fait pour la 16c54, ayant des caractéristiques et des broches à fonction quasi similaires.

La puce alternative fut la PIC 16f84a, achetée sous les conseils du type du maga-

s in !qui était vraiment malsain, on retrouvait dans sa boutique, parmi les articles

d ' électronique, des DVDs de cul d'une période et d'un style assez douteux

..

.]. Soit ...

Je me retrouvais avec une bonne partie du matériel nécessaire à la réalisation d'un métronome MIDI. Il ne me restait plus qu'à apprendre à contrôler la PIC16- f84a, étudier en détail certains aspects du protocole MIDI, apprendre à déchiffrer un protocole série avec un microcontôleur, souder une pin de manière décente sur un circuit, aborder les divers composants utilisés, adapter le code source trouvé,

etc

...

Le tout, «guidé» par l'exemple cité plus haut.

mémoire

de fin d'études: " MouseTik ou métronome visuel MIDI"I

4

SAE institute, brussels - formation audio engineer- nicolas masson - juillet 2009

Il y avait du boulot, comme on dit!

Réaliser une première application MIDI hardawre correspond aussi à une souhait personnel de développer des interfaces adaptées à mes besoins, mes envies. Développer des librairies pour la réception et l'envoi de messages MIDI à l'aide de la PIC 16f84a, afin de contrôler des périphériques hardware ou software.

Les technologies open source, les projets DIY !Do lt Yourself]. les interfaces MIDI «custom», des projets comme Arduino, Miduino sont des sources d'inspiration très stimulantes et donnent envie de mettre la main à la pâte.

b. Objectif du travail

Il s'agit de réaliser un métronome visuel utilisant des leds qui flasheront sur chaque noire d'une mesure. Les messages MIDI CLOCK seront utilisés comme référence temporelle. Le nombre de noires par mesure sera définissable par l'utilisateur au moyen d'un dipswitch à 4 switch. Cela nous donnera la possibilité d'avoir de 1 à 16 noires par mesure.

mémoire de fin d ' études

: " MouseTik ou métronome visuel MIDI" 1

5

SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009

2. Le protocole MIDI

a. Un peu d'histoire

Le MIDI[Musicallnstrument Digital Interface] est apparu au début des années 80 . Jusqu ' à cette époque, les musiciens utilisant différents synthét i seurs possédaient un séquenceur pour chacun de leurs synthétiseurs . Le séquenceur de l'un ne

pouvait commander l ' autre . Les musiciens, qui achetaient alors de plus en plus de synthétiseurs, fabriqués par différents constructeurs, ont rapidement exprimé

l ' env i e de pouvo i r

les contrôler de manière centralisée, à l ' aide d'un ordinateur

!cette pér i ode est liée directement à celle de l'émergence des ordinateurs person- nels comme le premier IBM PC ou le Commodore 64].

Deux des plus gros fabricants de l'époque étaient la compagnie californienne Sequential Circuits, qui a connu beaucoup de succès avec le Prophet 5, et Roland,

compagnie Japonaise , qui fabriquait alors des synthétiseurs [eux aussi

très popu-

laires] et qui était à la pointe de la recherche en ce qui concerne les interfaces musicales pour ordinateurs. Roland commençait donc à travailler sur une inter- face musicale pour l'IBM PC et pensa, lors de cette démarche, à la création d'un séquenceur digital software. Ils décidèrent donc de construire tout cela autour de l'IBM PC, sous la forme d'une carte ISA, que l ' on connectait à la carte mère du PC. Roland voulait que son interface fonctionne avec toute leur gamme de claviers à ven i r et a donc créé un langage digital que tous ses prochains claviers pour-

ra i ent comprendre et interpréter.

Ce langage permettrait à différents appareils

d'échanger des données de contrôle entre elles. linterface utilisant ce langage fut connue sous le nom de Musical Instrument Digital Interface ou plus communé- ment, MID I. La carte ISA de Roland fut appelée la MPU 401, pour Musical Process- ing Unit- Model401.

Ce fut la première interface MIDI pour ordinateur et on en retrouve d'ailleurs tou- jours la trace sur de nombreuses cartes mères d'ordinateurs presonnels, qui im- plémente très régulièrement une émulation de cette carte, sous le nom MPU-401.

Lors d ' une rencontre au NAMM [National Association of Music Merchants Show], Roland parla à Sequential Circuits du protocole qu'ils étaient en train de dével - opper pour l'IBM PC, afin de le transformer en un séquenceur digital et leur de- manda s'ils étaient intéressés par le fait de supporter ce protocole sur leur propre gamme .

Sequential Circuit, représenté par Dave Smith [qui a sa propre marque de synthé- tiseurs maintenant], qui avait déjà ses propres idées à ce sujet, proposa alors de prendre la spécification de Roland, de la travailler et de faire des suggestions de mod if i cation ou d'addition, de renvoyer le tout à Roland et de créer un standard que leurs futurs claviers respecti.fs supporteraient.

m é moire de f in d ' études : ""MouseTik ou métronom e visuel MIDI""I

SAE institute, brussels - formation audio

engineer - ni colas masson -juillet 2009

6

Les deux sociétés n'ont pas tardé à proposer à d'autres grandes firmes [comme Yamaha et Oberheim] d'adopter ce standard, qui allait révolutionner l'informatique musicale. Le MIDI fut un effort collectif remarquable au sein des fabricants de matériel musical.

Le premier synthétiseur commercialisé muni d'une interface MIDI fut le Prophet 600 de Sequential Circuits, en 1983.

Les deux sociétés n'ont pas tardé à proposer à d'autres grandes firmes [comme Yamaha et Oberheim]

Le Midi fut néanmoins présenté pour la première fois au public lors du NAMM de 1982, entre un Jupiter 6 de Roland et un Prophet 600. La MPU 401 ne tarda pas à être commercialisée. Elle était accompagnée d'un logiciel de Roland, appelé MESA, qui transformait le PC en un séquenceur musical. Il y avait aussi d'autres programmes que celui de Roland qui étaient compatibles avec l'interface de la MPU 401. Ces programmes, dont Cakewalk de la société 12 Tones System (qui se renommera Cakewalk tout court tellement ce logiciel fit leur renommée] étaient même plus populaires que celui de Roland. Tous les synthétiseurs de Roland qui ont suivi possédaient une interface MIDI, puis arriva le DX7 de Yamaha, qui fut un énorme succès et supportait, lui aussi, le MIDI.

Enfin, Apple Computers sortit une interface MIDI pour le Macintosh et commença à faire de la publicité autour de cet aspect. Étant un marché complètement ignoré par IBM à l'époque et ayant un potentiel commercial autour des artistes et mu- siciens !un segment commercial toujours chouchouté par Apple]. le MIDI décolla alors réellement et fut rencontré de manière systématique sur les synthétiseurs et logiciels musicaux sortis à partir de 1985.

Roland et Sequential Circuits, qui ne voulaient pas être responsables du fait de devoir maintenir le protocole et y faire de nouveaux ajouts, proposèrent à tous les fabricants utilisant le MIDI de créer une association, appelée la Midi Manufacturer Association !MMA]. Tout le monde commença alors à créer des logiciels pouvant lire et écrire des données MIDI et à pouvoir se les échanger sans aucun problème. La société Opcode offrit alors le Midi File Format à l'association, suivi de Digide- sign qui offrit à son tour le Midi Time Code !MTC]. Un standard complet était dès lors créé et les différents logiciels pouvaient se commander l'un l'autre, ce qui n'était jusque là pas possible car la plupart des séquenceurs fonctionnaient avec un système propriétaire.

mémoire de fin d ' études: " MouseT i k ou métronome visuel MIDI" 1 SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009

7

De nos jours, la MMA ne fait plus grand-chose à part vendre leurs spécifications

à qui veut bien les acheter

...

Il y a eu très peu de modifications ou ajouts dans les

spécifications depuis une bonne dizaine d'années.

Il est vrai que, par exemple, une vitesse de transfert 32.5 Kilo bits par seconde peut paraître un peu faible de nos jours. Celle-ci est pourtant largement suffisante dans de très nombreuses applications. Notons tout de même certains travaux récents comme la spécification MIDI ringtones, qui est utilisée par les téléphones portables, ainsi que la norme MIDI HO, toujours en cours de développement, qui devrait offrir plus de canaux, des vitesses de transmission plus élevées, etc ...

Le M 101 est toujours employé en permanence de nos jours lorsque l'on parle de musique (électronique ou autre]. de performances, d'installations. Que ce soit du côté software ou celui du hardware, c'est un standard incontournable, tout simple- ment.

b. Avantages

Il y a deux avantages principaux dans le format de données MIDI :

> C'est un format de données qui est facile à éditer ou lire. On peut donc consult- er son contenu via un éditeur, en ayant des connaissances rudimentaires. Cela en fait un moyen de communication très abordable, que chacun peut prétendre mettre à profit.

>

C'est un format de données qui est compact, dans le sens où il ne produit pas un volume de données très important.

Il est donc très pratique de l'utiliser comme moyen de communication entre dif- férents systèmes. C'est, de ce fait, un moyen d'échange d'informations puissant et performant.

Hormis ces deux avantages techniques, le MIDI a surtout permis à des généra- tions entières d'artistes venant de nombreuses disciplines différentes, de pouvoir trouver des moyens de communication avec la musique. En regardant l'activité

que génère le MIDI de nos jours, on constate qu'il y a là un foisonnement impres- sionnant de projets et de manières de manipuler le MIDI. Parmis ce foisonnement, nous pouvons par exemple retrouver des produits commerciaux divers (samplers,

interfaces MIDI, etc

...

] ou, dans un

tout autre registre, sous la forme de projets

amateurs !comme c'est un peu le cas ici]. servant à interfacer le corps humain à

de

la musique lors d'un spectacle de théâtre, etc ...

Le MIDI a permis à des compositeurs de pouvoir travailler sur des performances sans devoir passer par une session d'enregistrement en studio. Ils pouvaient (en- fin !l tester des mélodies, faire des arrangements et les entendre directement. Cet avantage est discutable, car le fait de remplacer des musiciens par des synthét-

.. SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009

mémoire de fin d ' études :

MouseTik ou métronome visuel MIDI"" I

8

> La partie software :

  • - Le protocole Logique de communication est La norme qui définit Les différents paramètres du protocole physique de communication, définit la structure des signaux, ainsi que la manière de les traiter et permet donc l'extraction de don- nées utiles à partir du signal. C'est le dernier élément de la couche Transport et le premier de la couche Software. Toutes les normes suivantes font contraire- ment partie de la couche Application.

  • - Les spécifications de message, qui sont le coeur du protocole, lui donne son sens et attribue une signification à la valeur des données extraites. Il définit les valeurs des différents messages MIDI, il catégorise ces messages, leur donne une signification et précise comment les interpréter lorsqu'ils sont reçus. Ces messages sont fournis par le protocole logique de communication.

  • - Les spécifications des sous-protocoles, dont font partie le MTC et MMC et qui utilisent certains messages MIDI pour ajouter des fonctionnalités au protocole [en utilisant le système de communication offert par les messages SYS EX). A noter que, concernant le MTC, le message MTC Quarter Frame, fait bien partie des messages de base . C'est la seule exception au fait que ces deux sous proto- coles utilisent uniquement les fonctionnalités des messages de base.

  • - Les formats d'échange de données, qui sont des structures d'échange d'informations: les fichiers SMF [Standard MIDI File] et le protocole SOS [Sample Dump standard].

    • d. Hardware 1 Transport /Interface

lembase standard utilisée pour le MIDI est une DIN 5 broches femelles. Elle est souvent appelée «un port MIDI».

Il y a trois

types de ports MIDI :

  • - Le MIDI in et le MIDI out, qui servent respectivement d'entrée et de sortie.

  • - Le MIDI thru, qui est une recopie des signaux reçus sur l'entrée MIDI in vers la sortie MIDI thru.

Il faut noter que, dû au délai provoqué par l'opta-isolation de l'entrée MIDI in [cfr plus bas]. le signal envoyé vers le MIDI thru est légèrement retardé, ce qui peut provoquer des problèmes de synchronisation si plusieurs machines sont connec- tées en série [daisy chaining] via plusieurs MIDI thru.

Des câbles DIN 5 PIN mâles sont utilisés pour relier les entrées [MIDI in] et les sorties [MIDI out]. Une sortie ne peut contrôler qu'une et une seule entrée à la fois.

mémoire de fin d ' études: "MouseTik ou métronome visuel MIDI"I SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009

1Q

Mâle F e m e ll e Une longueur maximale de 15 mètres de câble est

Mâle

Mâle F e m e ll e Une longueur maximale de 15 mètres de câble est

Fe me ll e

Une longueur maximale de 15 mètres de câble est conseillée.

Le câble est une paire torsadée et blindée, dont le blindage est connecté à la pin 2 des deux côtés du câble. Les pins 4 et 5 sont respectivement le +5 volts et le signal MIDI lui-même. Noter que, à l'inverse du sens conventionnel, dans le protocole sé-

r i e MIDI, un signal ayant comme valeur logique 1

équivaut à 0 volts et inversement,

un signal de valeur logique 0 équiv a ut +5 volts. Les pins 1 et 3 ne sont pas utilisées et ne doivent être connectées à rien du tout.

Le courant délivré, selon la norme, doit être de 5mA.

Un des buts majeur de la spécification MIDI est de prévenir les «ground loops». Ces «grou nd loops» causeront toutes sortes de bruits, dû à la différence de poten- tiel qu'il y a entre les deux extrémités du câble, surtout si ils sont connectés à un élément informatisé

Pour éviter un «ground loop» éventuel entre les différents périphériques intercon- nectés, le protocole MIDI spécifie qu'une entrée [MIDI in) doit étre directement connectée à un opta-isolateur. Celui-ci permet, via une courte transmission op- tique, de transférer un signal entre différents éléments [typiquement un émetteur et un récepteur]. tout en les gardant électriquement isolés l'un de l'autre.

Vu que le signal électrique est converti un bref instant en lumière infra rouge, transféré sur un capteur de lumière infra rouge et reconverti en signal électrique, il n 'y a pas besoin de connexion électrique physique entre l'émetteur et le récep- teur.

0

. -l.sola.tor

+ f5V

1' fl.iliDIIN
1'
fl.iliDIIN
Vo 4 TO 1-'--------o~~~ LIART
Vo 4
TO
1-'--------o~~~ LIART

mémoire de fin d'études: "MouseTik ou métronome visuel MIDI"I SAE institute, brussels - formation audio engineer- nicolas masson- juillet 2009

11

Les opte-isolateurs Sharp PC-900 et le HP 6N 138 sont des composants qui peu- vent servir à cet effet. Les temps de montée et de descente Irise and fall] doivent être inférieurs à 2 micro secondes [et retardent le MIDI thru comme annoncé plus haut!. Nous examinerons leur montage plus tard.

  • e. Hardware 1 Transport 1 Le protocole physique de communication

Il spécifie la façon dont les signaux électriques vont être transmis entre deux périphériques. Il va aussi préciser comment interpréter les parties du signal utile, c'est-à-dire les parties du signal qui contiennent des informations qui devront être explo i tées.

Le MIDI utilise une communication série asynchrone. Ce type de communication d i t que, lors de la transmission de données, un signal START est envoyé avant chaque byte [1 byte= 8 bits] qui sont eux-mêmes suivis par un signal STOP. Le signal START sert à ce que le récepteur se prépare à recevoir un byte et le sig- nal STOP sert de période allouée au récepteur pour faire ce qu'il veut du byte de données utiles qu'il vient de recevoir. Le MIDI utilise le codage électrique NRZ ou Non Return to Zero. Ce codage a une forte composante continue et n'est donc pas «se lf-cloc king».

Enfin, pour qu'une communication série asynchrone soit utilisable pratiquement, il faut prendre le soin de déterminer un ensemble de variables que tout périphérique voulant comprendre cette communication devra respecter.

Les variables à spécifier sont :

  • - L'ordre d'arrivée des data bits [LSB d'abord dans le cas du MIDI].

  • - La vitesse de transmission [31.25 Kbauds/sec dans le cas du MIDI].

  • - Le nombre de bits de données [8 dans le cas du MIDI].

  • - La longueur du bit start et stop [1

bit chacun dans le cas du MIDI].

-

La valeur en tension du 1 logique 1 !!!! 0 Volts!!!! dans le cas du MIDI]

Il faut aussi savoir comment le signal START est détecté par les récepteurs, car de cette détection dépend toute les transmissions. Dans le cas du MIDI, toute transi- tion d'un 0 vers un 1 logique [de +5V vers 0 V en pratique] indique un signal START. Cette règle n'est valable que si le récepteur est en attente [id le mode] d'un signal [et qu'il n'est donc pas en train d'en recevoir uni.

Lorsque le récepteur a terminé sa lecture, le stop bit, qui a toujours une valeur logique de 0, remet le signal en état d'attente, c· est à dire que le système est de nouveau près à détecter la réception du prochain start bit.

mark--

...

spa ce

id le

, id le start stop start stop
,
id le
start
stop start
stop

mémoire de f i n d' études : " MouseT i k ou métronom e vi su el MIDI " SAE institute, brussels - format i on audio engineer - nicola s masson - juillet 2009

I

12

Le protocole MIDI a donc une rapidité de modulation de 31.25 Kilo bauds par sec- onde [un bauds équivaut à une pulsation du signal électrique]. Comme c'est un protocole utilisant le NRZ comme codage électrique, la tension du signal est inver- sée à chaque fois qu'il y a une transition entre un bit 1 et un bit O. Et, durant toute suite de 1 ou de 0, le signal garde une tension constante. Le NRZ est donc capable de coder un bit sur une pulsation. On peut dès lors dire que le MIDI a une vitesse de transmission de données de 31.25 Kilo bits par seconde également, ce qui im- plique qu'un bit aura une longueur fixe de 32 micro secondes.

On peut aussi bien sûr calculer cela en prenant le problème dans un autre sens. Vu que, dans le protocole Ml Dl, on sait que un bit prend 32 micro secondes pour être transmis complètement, on peut dire que comme un 1 bit dure 32 micro sec- ondes, on pourra mettre 31250 bits dans une seconde. On revient à notre débit de 31.25 Kilo Bits par seconde et la boucle est bouclée.

Les 32 micro secondes que nous venons d'évoquer ont une importance capitale dans le cadre de la réalisation d'un métronome MIDI via un microcontrôleur. Ces 32 micro secondes représentent en effet le temps maximal que pourra pren- dre notre microcontrôleur pour traiter un bit d'un message et en faire quelque chose, avant qu'un autre bit n'arrive. Si il venait à prendre plus de 32 micro sec- ondes pour lire un bit, il pourrait se désynchroniser du flux MIDI et menacer un récepteur de décoder incorrectement les messages qui lui sont transmis.

Maintenant que nous savons comment lire des bytes MIDI à l'aide d'une interface synchrone, nous pouvons nous intéresser à un autre aspect du protocole MIDI, qui est ce que nous avons appelé plus haut : le protocole de base et qui décrit la struc- ture des messages et la manière de les traiter.

f. Le protocole de base

Le protocole MIDI est construit sur base de messages. Un message est composé d'une série variable de blocs de données de 1 byte. Le MIDI comporte de nombreux type de messages et de catégories différents. Certains d'entre eux ont une lon-

gueur de 1 byte, d ' autres, de deux,

trois et certains ont même une longueur illimi-

tée. Ce qu'ils ont tous en commun, c'est que le premier byte de chaque message est le byte de STATUS. C'est le seul byte à avoir son bit de poids le plus fort à 1. Tous les blocs de messages suivant ce byte de STATUS auront leur bit de poids le plus fort à O. On peut considérer que chaque fois que l'on reçoit un byte de STATUS, cela marque le commencement d'un nouveau message et, par la même occasion,

la fin du message précédent.

Tout byte de STATUS, vu qu'il est le seul avoir son bit de poids fort à 1, est com- pris dans un intervalle allant de Ox80 à OxFF en hexadécimal ou de 10000000

à 11111111 en binaire.

Note :je ne vais pas faire ici de rappel sur les notations

binaires et hexadécimales, il y a de nombreuses sources à ce sujet qui sont di- sponibles très facilement.

mémoire de fin d "études : ""MouseTik ou métronome vi suel MIDI"" I SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009

13

Tout byte de données reçu après un byte de STATUS sera toujours compris dans l'intervalle OxOO à Ox7F, excepté bien sûr dans le cas où ce byte serait lui-même un byte de STATUS.

Le byte de STATUS est la clé de voûte du protocole MIDI. Il va nous permettre de grouper les messages en différentes categories et de traiter ces différentes caté- gories de manière différente :

La Voice Category, qui regroupe tous les messages pouvant être envoyés sur n'importe quel canal (le MIDI comporte 16 canaux, qui peuvent être vus com- me des pistes indépendantes les unes des autres]. Cette première catégorie représente donc tous les bytes de STATUS couvrant la plage de valeur de Ox80 à OxEF. Pour interpréter cette catégorie de message, il faut «casser» le byte de STA- TUS en deux parties . Lorsqu'on coupe un byte composé de 8 bits en deux parties égales de 4 bits, et ce de gauche à droite, nous obtenons deux nibbles.Le higher nibble pour la partie gauche et le lower nibble pour la partie droite.

Exemple : On a un byte de STATUS de Ox97. Cette valeur hexadécimale équivaut à la valeur binaire 1001 0111.

Si on coupe cette valeur en 2 partie égales en commençant par la gauche, notre higher nib ble sera 1001 (Ox9) et notre lower nibble sera 0111 (Ox7l.

Le higher détermine le type de message qui est reçu. Le lower détermine à quel canal Ml Dl le message est destiné.

Dans notre cas, une valeur de 9 du higher nibble nous indique que nous sommes en présence d'un message NOTE ON et qu'il est destiné au canal 7.

Voici la liste de la signif i cation des différentes valeurs pour le higher

nibble :

  • 8 =NOTE OFF

  • 9 =NOTE ON

A= AFTERTOUCH (ie, key pressure)

B =CONTROL CHANGE

  • C = PROGRAM (patch) CHANGE

  • D =CHANNEL PRESSURE

E = PITCH WHEEL

mémoire de fin d tudes: " MouseTik ou métronome

visuel M I DI" 1

14

SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009

La deuxième catégorie regroupe les system messages !Les bytes de statut allant de OxFO à OxFF] Ces messages ne se retrouvent sur aucun canal en particulier. Ils transportent des informations potentiellement intéressantes pour tout périphérique MIDI et sont subdivisés en 2 catégories distinctes:

> Les messages System Common !Les bytes de statut allant de OxFO à OxF7] > Les messages System Real Time !Les bytes de statut allant de OxFB à OxFF] Pour la réalisation de notre métronome, nous n'utiliserons que des bytes de STAT- UT de la catégorie System Real Time. Plus particulièrement les messages MIDI CLOCK !DxFB]. MIDI START !DxFA]. MIDI CONTINUE !OxFB] et MIDI STOP!OxFC].

Noter encore que les valeurs OxF4, OxF5 , OxF9 ainsi que OxFD ne sont pas utilisées du tout en MIDI et sont «réservées» pour une utilisation future. Tout périphérique recevant un tel STATUT byte est supposé l'ignorer.

  • g. Messages Midi

  • h. Synchronistaion en MIDI

Il existe plusieurs types de synchronisation identifiables en MIDI:

> La synchronisation d'horloge, à l'aide des messages MIDI CLOCK et MIDI Tick.

> La synchronisation temporelle, à l'aide du MIDI Time Code ou du MMC !Midi Machine Control].

La synchronisation exploitée par notre métronome est la synchronisation d'horloge. Le métronome va plus particulièrement utiliser le message MIDI CLOCK.

Un séquenceur supportant le MIDI est un logiciel ou un appareil hardware qui est capable de reproduire une performance musicale complète. Il doit donc être capa- ble de connaître de manière précise la vitesse à laquelle il doit interpréter sa per- formance et pouvoir déterminer à quel moment déclencher ses messages MIDI.

Un des moyens utilisé en MIDI pour pouvoir réaliser une performance à une vi- tesse contrôlée est d'utiliser l'information que nous donne le message MIDI CLOCK.

mémoire de fin d ' études : " MouseTik ou métronome vi suel MIDI " I SAE institute , brussels- formation audio engineer - nicolas ma sson- juillet 2009

15

Le message MIDI CLOCK est envoyé à intervalle de temps régulier. Cet intervalle de temps est inversement proportionnel au tempo du master. Plus le tempo du master est rapide, plus l'intervalle de temps entre les messages MIDI CLOCK est pet ite.

  • i. Master 1 Slave

Un master est un périphérique qui sait diriger des esclaves. Les esclaves peuvent le suivre au tempo qu'il indique, répondre à différents ordres à un moment imposé par le master.

Pour synchroniser ses esclaves, le master doit être capable de les démarrer au moment précis qu'il aura déterminé. Le master peut réaliser cela grâce au mes- sage MIDI START. Ce message avertit l'esclave qu'il devra commencer à jouer sa séquence lorsqu'il recevra le prochain message MIDI CLOCK. En d'autres mots, le message MIDI START met l'esclave en «mode play» et le prochain message MIDI CLOCK reçu marquera le BEAT 0 de la séquence à jouer. Pratiquement, le master envoie ce message directement après le message MIDI START et le mas- ter respecte généralement une période d'une milli seconde avant l'envoi du MIDI CLOCK. Cela permet de laisser le temps à l'esclave d'éventuellement se préparer avant de jouer sa séquence. À partir de ce moment, l'esclave n'a plus qu'à compter le nombre de messages MIDI CLOCK qu'il reçoit et à interpréter cette information pour gérer son tempo.

Le master peut stopper un esclave en envoyant un message MIDI STOP. Le master peut continuer à envoyer des messages MIDI CLOCK après ce moment, mais un

es c lave devra cesser de jouer. Lesclave

peut néanmoins continuer à compter les

messages MIDI CLOCK et ainsi être toujours prêt à jouer si on le lui demande.

Le master doit être capable de dire à ses esclaves à quel endroit [à quel BEAT) ils doivent commencer la séquence. Le master peut le faire en envoyant un message spécial appelé le SPP pour Song Position Pointer. Ce message d'une longueur de 14 bits représente un nombre de MIDI BEATS. Un MIDI BEAT est défini comme suit: un MIDI BEAT est égal à la durée de 6 messages MIDI CLOCK. En d'autres mots, chaque MIDI BEAT représente un quart de noire, soit une double croche.

Si, par exemple, un esclave reçoit un SPP de valeur 4, il devra commencer à jouer

à 4 X 6 MIDI CLOCKS du BEAT 0, c· est-à-dire au

deuxième temps de la première

mesure. Étant donné que ce message est limité à 14 bits, le SPP ne peut aller

au delà de 16384 double croches plus loin que le BEAT O. Par exemple, pour un morceau dont le tempo serait de 120 noires par minutes [ou 120 BPM). un SPP

.. SAE inst i tute, brussels- formation audio engineer- nicolas masson - juillet 2009

..

mémoire de f i n d ' études:

MouseTik ou métronome visuel MIDI

I

16

représentant un maximum de 4096 croches pourrait nous amener à 4096 Beats/ 120 Beats Per Minute= 34.13333 minutes. On peut aussi conclure que le master positionne le point de lecture de ses esclaves avec une précision allant au maxi- mum jusqu'à la double croche, dans le cas où les esclaves se réfèrent au SPP pour accomplir cette tâche.

La réception du message MIDI START ordonne aux esclaves de commencer à jouer à partir du BEAT 0 (le commencement de la séquence]. Lorsqu'un esclave reçoit un message MIDI START, il doit remettre son SPP à O. Bizarrement, et comme montré plus loin, en MIDI, le message MIDI START peut être vu comme correspon- dant au fait d'appuyer d ' abord sur la touche STOP et immédiatement après sur la touche PLAY d'un lecteur de Compact Dise par exemple. Toujours dans la même veine, le message MIDI STOP équivaut plus à l'idée que l'on se fait du bouton PAUSE d ' un lecteur de Compact Dise.

Le troisième message à considérer en ce qui concerne le MIDI Machine Control que nous venons d ' aborder est le message MIDI CONTINUE. Ce message est envoyé par le master lorsqu'il veut que les esclaves commencent à jouer à partir du moment auquel ils avaient reçu un message MIDI STOP valide ou à partir de la dernière valeur SPP reçue. Il est important de noter pour la suite que l'esclave !un métronome, peut être?] est responsable de la mémorisation de sa position rela- tive dans la mesure courante, ainsi que de sa position absolue dans la séquence jouée.

En règle générale, si un esclave reçoit un message MIDI START ou MIDI CONTINUE pendant qu'il joue, il devra ignorer ces messages. Réciproquement, lorsqu'il reçoit un message MIDI STOP alors qu'il est stoppé, celui-ci doit aussi être ignoré .

Pour réaliser le métronome, le microcontrôleur devra être capable de suivre et d 'in terpréter, sans erreur, un total de 4 messages MIDI différents: le START, le STOP, le CONTINUE et, last but not least, le CLOCK.

j. MIDI CLOCK message

Le message MIDI CLOCK est envoyé 24 fois par noire et a donc une fréquence pro- portionnelle au tempo qu'il indique.

Il Rermet donc à un esclave d'estimer le tempo que le master lui envoie avec une

précision

d'un 24 éme de noire.

Si e master envoie un tempo de 120 BPM !Beat Per Minute, un Beat= une noire] et qu'il y a donc 120 noires par minute, le master va envoyer un message Ml Dl CLOCK toutes les 20,8333 milli secondes, ce qui nous donne une féquence 48 Hertz.

mémoire de fin d tudes : " MouseTik ou métronome visuel MIDI" 1

17

SAE inst i tute, brussels- formation audio engineer- nicolas masson - juillet 2009

Explicat i on :

On a 60 secondes dans 1 minute.

A un

tempo de 120 BPM, il y a 120 noires par minute. On a donc 2 noires par

seconde et une noire dure une demi seconde [60 1 120].

Il y a 24 messages MIDI CLOCK par noire, donc 24 messages toutes les demi seconde et 48 messages par seconde.

Chaque MIDI clock est donc envoyé à une intervalle de 1 secondes /48 messages= 20 .8333 ms par message ou une fréquence de 48 Hertz précisément.

Mis à part la MIDI CLOCK, il faut mentionner quïl y a un autre message MIDI don- nant une information de temps, c'est le message MIDI TICK, qui est envoyé à inter- va Ue fixe de 10 milli secondes et donc à une fréquence de 1DO Hertz.

Il sert aussi à ce qu'un appareil esclave soit synchronisé avec un appareil master. Da rns ce cas, l'esclave est responsable du fait de déterminer de combien de milli- se ondes est composée une noire.

Ce t te approche est plus complexe et peu avantageuse par rapport au message MIDI CLOCK, mais rend tout de même possible le fait que l'esclave puisse avoir son propre tempo, indépendant de celui du master.

k. Midi Machine Control : distinctions.

Le Midi Machine Control [M MC] est un protocole spécifiquement étudié pour pou-

voi

contrôler des périphériques tels que des enregistreurs, le tout, en utilisant

le protocole MIDI. La seule manière de réaliser cela est d'utiliser les messages SYSTEM EXCLUSIVE ou SYS EX, dont certains ont été spécialement désignés pour implémenter le MMC. De nombreux appareils supportent le MMC de nos jours, les séquenceurs logiciels, par exemple, sont tous capables de le comprendre. Il faut bien faire attention de ne pas confondre les messages MIDI START, STOP [qui sont des messages SYSTEM REALTIME] avec les messages PLAY et STOP qui peuvent être envoyés grâce au protocole MMC, ils n'ont strictement aucun rapport l'un avec l ' a tre . Peu de documentation circule sur le format exact du protocole MMC.

mémoire de fin d' études : "MouseTik ou métronome visuel MIDI"I SAE i nst i tute, brussels- format i on audio engineer- nicolas masson- juillet 2009

18

[Le MIDI en donne 5, c'est parfait).

La PIC16f84a consomme peu de courant. Typiquement, moins de 2 mA pour une tension de 5 V et une vitesse d'horloge de 4 Mhz [qui est la configuration que nous allons utiliser).

Les PICs sont très populaires chez les développeurs et les hobbyites à cause de leur relative simplicité, de leur prix très bas, du fait qu'on en trouve très facilement [dans le commerce ou via des sites), du nombre de ressources concernant le sujet et de la disponibilté d'outils de développement gratuits ou, le cas échéant, très peu coûteux.

c. Fonctionnement

Attardons-nous sur la manière dont fonctionnent et sont organisées les différentes parties de notre PIC.

Le lecteur intéressé trouvera ci-dessous le schéma black d'une PIC16f84a, tiré da la data sheet téléchargeable sur le site de Microship.

13 Data Bus 8 Program Counter EEPROM Data Memory j~ FLASH Program u Memory ~ EEPROM
13
Data Bus
8
Program Counter
EEPROM Data Memory
j~
FLASH
Program
u
Memory
~
EEPROM
RAM
8 Level
StacK
Data Memory
1Kx 14
File Registers
(13-bit)
64
x 8
1
1
68x8
H
Program Bus f 14
1j(
RAMAddr
EEADR
\
1
AddrMux
\
1 Instruction Register
1
Il
n
71
Indirect
TMRO
5
DlrectAddr
Addr
q
-
1
FSR<..
-
~
RA4fTOCKI
STATUS reg
1
8
lt
~~
-
\
MUX
1
Power-up
110 Ports
Trner
,.JL
8
~
/
Instruction
OScillator
Decode&
1
~
start-up limer
\
ALU
Control
Power-on
~
RA3:RAO
Reset
ü
J~~
Timing
Watchdog
RB7 :RB1
<:==::;>
Wreg
Trner
1
1
Generation
Il
~
RBOIINT
~
~
~
OSC2/CLKOUT
MCLR
Voo , Vss
OSC1 / CLKIN

mémoire de fin d'études: " MouseTik ou métronome visuel MIDI"I SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009

21

  • c 1. Foncionnement 1 Hardware: Boîtier et pins

La PIC16f84a est un circuit intégré. Elle existe sous 2 types de boîtier différents.

Le type DIP ou DIL 18 broches !Duallnline Package]. chaque broche étant une p in. Plus précisément, il s·agit d'un boîtier PDIP, le premier P signifiant plastique.

Le type SSOP, qui est un format propriétaire de Microship comptant 20 broches. Ces broches ont la particularité d'être montable en surface. C' est-à-dire qu ' elles ne traversent pas l'épaisseur du circuit , mais sont posées directement sur la sur- face du circuit.

Notre métronome utilise un boîtier de type PDIP.

Le type de boîtier est standardisé et précise les différentes dimensions de celui-ci , l ' espacement entre deux broches, la largeur d'une broche. Ces dimensions sont à respecter lors de la conception du circuit bien évidemment.

Sortant du boîtier, nous trouvons un ensemble de 18 broches, portant un nom par- ticulier et ayant une fonction bien définie. Examinons rapidement ces broches et intéressons nous à leur fonction.

RA2-

RA3-

RA41TOCKI-

MCLR -

Vss -

RBO/ INT-

RB1-

RB2-

RB3-

, () """" 0') "T1 00 ~ )>
,
()
""""
0')
"T1
00
~
)>

-RA1

-RAO

-

OSC1 / CLKIN

-

OSC2/CLKOUT

-v oo

-RB?

--RB6

-RB5

--RB4

OSC1 et OSC2 permettent de connetcer une horloge externe à la PIC .

MCLR permet de faire un RESET du microcontrôleur et accessoirement de repro- grammer sa mémoire dirtectement sur le circuit.

Le PORT A regroupe les pins RAO à RA4 et est un port bi-directionnel d'entrée/sor - tie .

Le PORT B regroupe les pins RBO à RB7 et est aussi un port bi-directionnel. Il a la particularité de posséder 5 pins permettant de provoquer une interruption.

mémoire de fin d' ét udes :

MouseTik ou métronome visuel MIDI" 1

.. SAE i nst itute. brussels - f or mation aud i o engineer- nicolas ma sson- juillet 2009

22

Le vecteur d'interruption est l'endroit utilisé pour configurer la manière dont les différentes interruptions doivent être gérées. Nous reviendrons brièvement sur les interruptions plus tard.

PC< 120 >

CALL, RETURN il' 13/ RET FIE RETLW <7 / Stack Level 1 . Stack Leve! 8
CALL,
RETURN
il'
13/
RET FIE
RETLW
<7
/
Stack Level 1
.
Stack Leve! 8
RE SET Vector
OOOOh
Penpheral lnterrupt Vector
0004h
IJ'--
3FFh

c 4. Data Memory

La mémoire de données est partitionnée en deux zones.

La première est celle du Registre de fonction spéciale, que nous nommerons SFR pour la suite. Il contrôle la configuration de la puce. Il faut bien se rendre compte que la plupart des opérations liées à ce registre vont être utilisées tout au long de notre programme pour, par exemple, ordonner à notre puce de lire la tension qu'il y a l'entrée de la pin sur laquelle est connecté le signal MIDI. Ce registre est donc utilisé tout au long de l'exécution d ' un programme . Cette zone de la mémoire uti- lise 2 banques, rappelons-le. Il faudra donc indiquer la banque correspondant aux d iff érents registres de fonction spéciale que nous voudrons lire .

La deuxième est celle du registre de fonction générale, que nous nommerons désormais GPR, qui est la partie réservée pour stocker les variables définies par notre programme .

Penchons nous brièvement sur ces fameux registres.

m émo ire de f in d'études: "" Mouse Tik ou métronome visuel MIOI""I SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009

24

d2. SFR (Special Function Regis t e r)

Ad dr

Na me

Bit 7

B it 6

Bit5

B it 4

Bit3

Bit2

Bit 1

Bit 0

Va l ue on Powe r-o n

Deta il s

 

RE SET

o n page

Ba nk O

OOh

INDF

Uses contents of FSR to oddress Data Memory (not a physical register)

 

---- ----

11

0 1h

TMRO

8-bit Real-lïme ClockiCounter

 

xxxx

xxxx

20

02h

PCL

low Order 8 bits of the Program Co unter (PC)

 

0000

0000

11

03h

STATUS!2l

IRP

RP1

RPO

TO

PD

z

oc

c

0001

lXXX

8

04h

FSR

Indirect Data Memory Address Pointer 0

 

xxxx

x.xxx

11

05h

PORTA1 4 1

-

-

-

RA4fTOCKI

RA3

RA2

RA1

RAO

---x

x

..

xxx

16

06h

PORTBPJ

RB7

RB6

RB5

RB4

RB3

R82

RB1

RBOiiNT

xxxx

xxxx

18

07h

-

Unimplemented location , read as ·o·

   

-

-

08h

EEDATA

EEPROM Data Register

 

xxxx

xxxx

13,14

09h

EEADR

EEPROM Address Register

 

xxxx

xxxx

13, 14

OAh

PCLATH

-

-

-

Write Buffer for upper 5 bits of the pcl1l

 

---0

0000

11

OBh

INTCON

GIE

EEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

0000

ooox

10

Ba nk 1

SOh

INDF

Uses Contents of FSR to address Data Memory (not a physical register )

   

-

-......

11

81h

OPTION_REG

RBPU

IN TE DG

TOCS

TOSE

PSA

PS2

PS1

PSO

lll.l

llll

9

82h

PCL

Low order 8 bits of Program Counter (PC)

 

0000

0000

11

83h

STATUS(l)

IRP

RP1

RPO

TO

PD

z

DC

c

OOOl

lXXX

8

84h

FSR

Indirect data marnory address pointer 0

 

XX

"CX

.xxxx

11

85h

TRI SA

-

-

-

PORTA Data Direclion Registar

 

---1

1111

16

86h

TRI SB

PORTS Data Direction Register

 

llll

llll

18

87h

-

Unimplemented location , rea d as '0'

   

-

-

88h

EECON1

-

-

-

EEIF

WRERR

WREN

WR

RD

---0

xooo

13

89h

EECON2

EEPROM Control Reg1ster 2 (not a physical register)

 

---- ----

14

OAh

PCLATH

-

-

-

Write buffer for upper 5 bits of the pc( 1 l

 

---0

0000

11

OBh

INTCON

GIE

EEIE

TOIE

INTE

RBIE

TOIF

INTF

RBIF

0000

ooox

10

Legend .

x - unknown , u =unchanged . - - ummplemented , read as 0 , q =value depends on condition

'.

..

 

Not e

1;

The upper byte of the program counter IS nol directly accessible . PCLATH is a slave register for PC < 12:8>. The contents of PCLATH can be tronsferred to the upper byte of the program counter, but the contents of PC <12 ·8> are never trans- ferred to PCLATH .

2 : The TO and PD status bits 1n the

STATUS registar are

not affected by a MC LR Reset

3: Other (non power-up) RESETS înclude : external RESET through MCLR and the Watchdog lïmer Reset.

4 :

On any deviee RESET, these pins are configured as inputs .

5:

This is the value that will be in the port output latch .

Les SFR sont utilisées par le CPU et les fonctions périphériques pour contrôle r la man i ère dont notre m i crocontrôleur se comportera. Ils peuvent être div i sées en de u x part i es. Une partie qui regroupe les fonctions de base et l'autre regroupant l es fonctions l i ées aux périphériques assoc i és à notre puce.

Prenons maintenant le temps d ' examiner de plus près certains de ces registres .

Les informations su r les registres sont extraites du document «La progrgamma - ti on des PICs» par Bigonoff (les liens internet vers cette source sont présents en

fi

n de ce documen t !.

m é m oir e d e fin d'ét ude s: " M ou se Ti k ou m ét r on o m e vis u el MI DI"

SAE in st itut e. br u sse l s- f o rmat

ion audi

o en gineer - n ic ola s m a sson -juillet 2009

1

26

> Les registres «PCL» et ~~PCLATH»

Un processeur, quel qu'il soit, est un composant qui exécute séquentiellement une série d'instructions organisées selon un ensemble appelé programme.

Il existe donc dans le processeur un séquenceur, c'est à dire un compteur qui per- met de pointer sur la prochaine instruction à exécuter. Ce séquenceur est appelé suivant les processeurs «compteur ordinal», «Pointeur de programme», etc. Dans

Le cas d'une PIC, il s' appelle PC, directement par l'utilisateur.

pour Pro gram Counter. Le PC n'est pas accessible

Le principe de base est toujours le même. Dans une PIC, les registres ne font que 8 bits, on ne peut donc stocker qu'une valeur maximale de 255. Il faudra donc 2 registres pour accéder à une adresse [qui fait 13 bits]. Une PIC a un fonction- nement un peu particulier à ce sujet.

Nous trouvons tout d'abord un registre qui contient l'adresse basse du PC, c'est à dire les 8 bits de poids faibles. Ce registre est accessible en lecture et en écriture. Il est appelé PCL [PC Lowl.

Il ex iste un autre registre de 5 bits qui participe au fonctionnement du séquenceur. Il s'appelle PCLATH [PC LAT ch counter Highl. Il est accessible en lecture et en écriture par l'utilisateur.

Le PC complet étant codé sur 13 bits, il faudra donc compléter PCL avec 5 bits supplémentaires . Il existe deux cas possibles :

Lors d'un saut, par exemple, le contenu du PC est chargé directement avec les 11 bits de destination contenus dans l'instruction en elle-même. Les 2 bits man- quants sont extraits du registre PCLATH. Les bits 3 et 4, qui doivent être position- nés par l'utilisateur, sont placés directement dans les bits 11 et 12 du PC afin de compléter l'adresse de destination. Comme notre 16F84a ne gère que 1024 mots de mémoire programme, nous n'aurons pas besoin de ce registre dans Le cas des sauts. Rappelons - nous que la 16F84a ne gère que 10 des 13 bits du PC.

En cas de modification du PCL directement par l'utilisateur, comme pour un reg- istre ordinaire, PCL est chargé dans PC et complété par les 5 bits du registre PCLATH. Comme la 16F84a ne traite que 1024 mots de mémoire programme [cod- able en utilisant 10 bits seulement), les bits b2, b3 et b4 de PCLATH seront inutili- sés ici.

Rappelons que la limite du PC est de 13 bits, ce qui implique qu'une PIC de la famille mid-range aura une capacité de mémoire programme de 8192 mots maxi- mum [soit 2 13 ].

mémoire de fin d ' études

: "MouseTik ou métronome visue l MIDI " I

27

SAE institute, brussels - formation audio engineer - nicolas masson - juillet 2009

1 est très important de savoir que le PC pointe toujours sur l'instruction suivante,

donc

l'instruction qui n'est pas encore

exécutée . C'est indispensable de bien com-

prendre ceci pour pouvoir analyser un programme lorsqu'on teste celui-ci.

> Le registre« W »

Ce registre est un registre utilisé par la PIC pour réaliser toutes sortes de calculs. C'est donc un registre fondamental, que nous utiliserons en permanence dans notre programme.

> Le registre «STATUS»

C'est un registre dont chaque bit a une signification particulière. Il est principale- ment utilisé pour tout ce qui concerne les tests. Il est donc également d'une im- portance fondamentale.

Voici les différents bits qui le composent, en commençant par le bitO (bOl, donc le bit le plus à droite, ou encore le moins significatif.

Remarquez

qu ' on utilise parfois le terme LSB, comme "byte le moins significatif ".

C'est également un abus de langage, mais le contexte permet très bien de les

dist i nguer. bD : C Carry (report]

Ce bit est en fait le 9ème bit d'une opération.

Par exemple, si une addition de 2 oc-

tets donne une valeur supérieure à 255 (OxFFl. ce bit sera positionné à 1.

b1 : OC Digit Carry

Ce bit est utilisé principalement lorsque l'on travaille avec des nombres BCD (pour Binary Coded Decimal] : il indique un report du bit 3 vers le bit 4 .

b2: Z Zéro

Ce bit est positionné à 1 si le résultat de la dernière opération vaut O. Rappelez- vous cependant que ces flags ne sont positionnés que pour les instructions qui le précisent (Status bit affected dans le manuel].

b3: PD Power down

I ndique quel événement a entraîné le dernier arrêt de la PIC (instruction sleep ou dépassement du temps du watchdog].

b4 : TO Time-Out bit

Ce bit i ndique (si il vaut Dl. que la mise en service suit un arrêt provoqué par un dé- passement de temps ou une mise en sommeil. Dans ce cas, PD effectue la distinc- tion.

mémoi re de fin d'études: "MouseTik ou métronome visuel MIDI" 1 SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009

28

Pour avoir un prédiviseur de 1/8, les bits PS2 à PSO devront former la valeur 2, qui indique, selon un tableau fournis dans la datasheet, la valeur de prédiviseur sou- haitée.

Calculons lïnfluence de notre prédiviseur sur le timeO: nous savons que nous avons une instruction par micro seconde. Comme notre timerO a été configuré pour être incrémenté en même temps que le PC, il faudra 8 instructions cause du prescaler] pour que le timerO soit incrémenté de 1.

Si nous savons que le timerO est à 0 à un moment donné, si nous attendons quïl soit incrémenté 4 fois et quïl ait donc une valeur de 4, nous aurons en fait attendu 32 micro secondes. C'est plutôt intéressant dans le cadre de notre application.

Récapitulons la valeur de nos 8 bits du registre option pour notre application .

RBPU

INTEDG

TOCS

TOSE

PSA

PS2

PS1

PSO

1

0

0

0

0

0

1

0

-> ce qui donne Ox82 en hexadécimal.

Nous devrons donc initialiser notre registre OPTION avec la valeur Ox82.

> Les registres« PORT A et TRISA»

Le registre PORT A est directement lié au registre TRIS A. Ce dernier déterm i ne si les pins du registre PORT A sont en mode entrée ou sortie . Chaque bit positionné à 1 configure la pin correspondante en entrée. Chaque bit à 0 configure la pin en sortie .

Le registre PORT A est un peu particulier, puisquïl donne directement accès au monde extérieur. Ce registre représente en fait les pins RAO à RA4, soit 5 au total. C' est ce registre qui va servir à allumer nos LEDs. Ce registre se situe à l'adresse 05H, dans la banque O. Chaque bit de ce registre représente une pin . Donc, seuls 5 bits sont utilisés. Pour écrire sur une pin en sor- tie , on place le bit correspondant à 1 ou à 0, selon le niveau souhaité. Par exemple, si on assigne une valeur 1 au bit RA 1, on placera +5 V sur cette pin. Dans notre montage, nous utilisons la pin RA2 pour allumer nos leds en vert, nous uti l isons la pin RA1 pour allumer nos leds en rouge et nous utilisons enfin la pin RAO pour lire le signal MIDI qui y est connecté. La consommation de notre LED sur RA2 répond à la formule suivante :

Intensité: (5V- Tension Led] 1330 ohms, soit (5V- 1,75VI 1330 ohms= 9,85mA.

mémoire de f i n d' études SAE insti t ute, brussels- formation audio

: " MouseTik ou m étronom e visue l MIDI" 1 engineer- nicolas masson - j u ill et 2009

31

Le registre TRIS A est situé à la même adresse que le registre PORT A, sauf qu'il se situe dans la banque 1. Son adresse est donc Ox85.

Lors d'un RESET de notre PIC, toutes les pins sont mises en entrée, afin de ne pas envoyer des signaux non désirés sur les pins. Les bits TRIS A seront donc mis à 1 lors chaque RESET.

Si on regarde les caractéritiques maximales de focntionnement de la PIC dans le data sheet, on peut voir qu'il est conseillé de limiter l'utilisation du courant de sortie à 20mA maximum par pin de sortie, avec un maximum total de SOmA pour le PORTA. et 150mA pour le PORTB.

> Les registres «PORTB et TRISB»

Ces registres fonctionnent exactement de la même manière que PORTA et TRISA, mais concernent les 8 pins RB présentes sur notre 16f84a. les pins RBO et RB4 à RB7 peuvent être utilisés comme source d'interruption.

Notre dispswitch sera connecté aux pins RB4 à RB7

  • e. Hardware : Clock 1 Timing

e1. Principes

Comme nous venons de le dire, deux pins de notre PIC, les pins OSC1 [entrée] et OSC2 [sortie]. sont reliées à une horloge à quartz de 4 Mhz [d'autres vitesses d'horloge sont possibles, mais varient selon le modèle de PIC utilisé. Le boîtier de notre PIC indique qu'elle supporte une vitesse maximale de 20 MHz car il y est inscrit · - 20'].

Notons que les PIC sont des composants statiques, ce qui veut dire que leur fréquence d'horloge peut être abaissée jusqu'à l'arrêt complet du microcontrôleur, sans perte de données et sans aucun dysfonctionnement. Notre PIC devrait donc

pouvoir exécuter 4 millions d'instructions par secondes

Et bien non, la PIC

... considère que 4 cycles de l'horloge à quartz équivalent à 1 cycle ou une instruc- tion exécutée. Nous savons maintenant que, dans notre configuration, notre PIC exécutera 1 instruction par micro seconde.

e2. Configuration.

Dans la data sheet de la PIC, nous pouvons trouver les informations qu'il nous faut pour configurer les paramètres de notre horloge. Il faut utiliser les directives de configuration, précisée lors de la programmation de notre LED. Nous ne pouvons pas modifier cette directive lorsque la PIC est fonctionnement.

mémoire de fin d'études: " MouseTik ou métronome visuel MIDI" 1 SAE institute, brussels - formation audio engineer- nicolas masson - juillet 2009

32

La vitesse, ainsi que le type d'horloge utilisé doivent être configurés. Voyons com-

ment.

Dans les directives de configuration, nous voyons qu'il y en a 4 qui ont un rapport avec l'horloge.

_LP _OSC : Oscillateur quartz basse

consommation.

_XT _OSC : Oscillateur quartz moyenne vitesse ou externe.

HS OSC : Oscillateur quartz grande vitesse. RC_OSC : Oscillateur à réseau RC.

Notre quartz est de type _XT _OSC. Nous devrons donc ajouter _XT _OSC à nos di- rectives de configuration.

f. Hardware: timerO

Le ti merD va nous servir à réaliser des temporisations et à compter. Il a une taille de 8 bits et peut donc compter jusque 255 au maximum. On dit qu'il déborde lorsqu'il dépasse la valeur 255. Après avoir débordé, le ti merD revient à la valeur 0 et continue à compter à partir de là. Tout débordement du ti mer [passage de 255 à Dl provoque le positionnement du flag TOIF du registre gérant les interruptions:

INTCON]. Nous pouvons donc utiliser ce flag pour savoir si le timer a débordé. Nous n'aborderons pas ce problème ici car nous n'utilisons pas les interruptions dans notre métronome.

Il est accompagné d'un registre, situé à l'adresse Ox01 de la banque O. Ce registre contient simplement la valeur actuelle du TimerO. On peut écrire ou lire dans ce registre.

Rappelons que nous avons configuré le bit TOCS à 0 dans le registre OPTION pour que notre TimerO compte les cycles d'horloge du PIC lui-même. Dans ce cas, comme l ' horloge esf fixe, nous compterons donc en réalité du temps. Nous serons donc en mode 'Ti mer'.

Nous avons déjà dit que la PIC était munie d'un prédiviseur au niveau du TMRO .

Nous l'avons réglé, grâce au registre OPTION, à une valeur de 1/8 ce qui implique qu'il sera incrémenté de 1 toutes les 8 micro secondes.

Il est extrêmement important de noter que toute modification du timerO provoque un arrêt de comptage de celui-ci qui correspond à 2 cycles d'instruction, soit 2 mi- cro secondes. Il faudra prendre ce paramètre en compte lorsque nous utilliserons le ti merD.

Dans notre programme, nous scrutons la valeur du registre timerO et attendons qu'il atteigne une valeur donnée pour savoir combien de temps s'est écoulé. Pour ce faire, nous devons remettre le compteur à 0 à un moment déterminé.

mémoire de fin d tudes : "MouseTik ou métronome visuel MIDI " 1 SAE institute. brussels- formation audio engineer- nicolas masson - juillet 2009

33

Puisque nous allons devoir écrire dans le registre pour y mettre la valeur 0, nous savons d'avance que l'opération d'écriture provoquera la perte de comptage de 2 cycles. Il nous suffit en fait d'initialiser à 2 le timerO plutôt qu'à 0 pour tenir compte de cette donnée et avoir un compteur parfaitement juste.

g. Hardware : Watchdog

Le watchdog, ou chien de garde, sert à forcer la puce à faire un reset à un inter- valle de temps précis . Cela permet d'éviter qu'une erreur quelconque ne laisse la puce dans un état incohérent et qu· elle ne puisse plus remplir sa mission.

Quand on utilise le watchdog, un programme doit donc lui signaler de manière régulière qu'il fonctionne de manière correcte. Il doit pour cela utiliser l'instruction 'clrwdt', pour clear watchdog. Cette instruction dit simplement au watchdog de se remettre à zéro et donc empêche le watchdog de faire un reset de notre puce. Il faut donc s'assurer que notre programme pourra le faire. Dans notre application, vu qu ' un message MIDI complet ne dure que 320 micro secondes et que le watch- dog déclenchera un RESET automatiquement toutes les 7000 micro secondes, nous n'aurons aucune difficulté à tenir la bête en laisse.

La mise en service ou l'arrêt du watchdog se décide au moment de la programma- tion de notre PIC, à l'aide des directives de configuration. Si _WDT_OFF est précisé comme directive, le watchdog ne sera pas en service, et inversément, si on précise WDT ON.

Le fonctionnement du watchdog est lié à un timer interne spéc i fique, qui n'est pas synchronisé au programme, ni à un événement extérieur.

Une valeur minimale de 7 ms est à prendre en considération en pratique. Comme nous utilisons le watchdog dans notre application, la directive _WDT _ON devra donc faire partie de nos directives de configuration .

Cet aperçu du watchdog termine l'étude de la partie hardware de notre PIC. Nous allons maintenant nous pencher sur sa partie software, qui va nous permettre de contrôler les événements survenant sur ses périphériques internes [pins, timer, etc . ] et de nous donner toutes les informations nous permettant d'écrire notre pro- gramme.

mémoire de fin d tudes : " MouseTik ou métronome visuel MIDI"I SAE institute, brussels- formation audio engineer - nicolas masson - juillet 2009

34

h. Software: Instructions

Dans la PIC16f84a, chaque instruction est un mot de 14 bit. Ce mot est divisé en une partie OPCODE, qui précise le type d'instruction et une partie contenant les opérandes, qui précise l'opération à effectuer par l'instruction.

Chaque instruction s'exécute en un seul cycle d'instruction, sauf si un test condi- tionnel est vrai ou si le PC est modifié [typiquement lors d'un saut]. Dans ce cas, l'exécution prend deux cycles d'instruction.

Nous n'allons pas ici détailler la trentaine d'instructions de la PIC16f84a . Le data sheet détaille de manière extensive ce sujet. Il ne pourrait être mieux couvert ici .

i. Software : Sous-routines

Une sous-routine est un ensemble d'instructions qui peut être appelé [via l 'i nstruction «Call»] à n'importe quel endroit du programme . Une sous-routine per- met de stocker un ensemble d'instruction qui est fréquemment utilisé. L'ut i l i sation de sous-routines permet aussi de rendre un programme plus lisible en central- isant différentes actions.

Par exemple, dans notre application, nous devrons lire la valeur encodée sur le d i pswitch à des endroits différents de notre programme. Une sous-routine de lec- ture du dipswitch a donc été créée.

L'appel d'une sous-routine implique une modification du PC et donc 2 cycles d'instruction pour démarrer réellement.

Une sous-routine a une adresse fixe dans la mémoire de programme.

Une sous-routine

se termine lorsque l'instruction de type «return» est rencontrée .

Lorsqu'un tel type d'instruction est rencontré, le programme doit retourner à l 'i nstruct i on suivant directement l'instruction «call» qui est à l'origine de l'appel. On a donc encore une modification du PC et donc 2 cycles d'instruction nécessaire pour revenir à l'instruction voulue.

m é moire de f i n d tudes

: ""Mous eTi k ou métronom e vis u el MID I"" 1

35

SAE institute, brussels - formation audio engineer - nicolas masson - juillet 2009

4. Le programme

Le logiciel utilisé pour programmer notre puce s'appelle MPLAB. est un logiciel gratuit développé par Microship et servant d'environnement de développement et de test pour leur différentes gammes de microcontrôleurs. Il est fait pour commu- niquer avec différents programmateurs de microcontrôleurs.

Il se présente comme un traitement de texte dans lequel nous allons écrire séquentiellement les différentes instructions de notre programme. Chaque ligne de code représenra une seule instruction.

Il est capable de compiler le code source en langage machine. Ce dernier sera in- jecté dans la puce via un programmateur [nous parlerons brièvement du program- mateur utilisé à la fin de cet ouvrage].

Le langage utilisé pour programmer notre puce est appelé un langage d'assemblage. Il se présente sous la forme d'un fichier ayant l'extension .asm .

Nous pouvons écrire des commentaires dans notre programme. Pour cela, nous utiliserons le symbole«;» que le compilateur interprétera comme le début d'un commentaire. Pour le compilateur, la rencontre de ce symbole voudra dire que tout texte se trouvant à sa droite sera ignoré et donc non traduit en langage machine . En pratique, cela nous permet de documenter notre programme et de pouvoir nous replonger dedans plus facilement.

Examinons la première ligne de code se trouvant dans notre fichier source.

a. Définition du processeur

La première ligne de code rencontrée est à la ligne 61. Nous y trouvons l 'i nstruction suivante.

Lis t

p= l 6 f 84 a

Cette instruction est util i sée uniquement par le compilateur de MPLAB pour qu'il puisse connaître le type de processeur que l'on utilise dans notre programme.

A la ligne 62, nous pouvons trouver l'instruction spéciale suivante :

#inc l ude

<p i c 1 6 F 8 4 a .i nc>

Cette ligne va permettre au compilateur de trouver la définition de toutes les constantes de la PIC16f84a, c'est-à-dire: les différentes instructions supportées, le nom de ses registres ainsi que l'adresse de chacun d'entre eux . Cela permettra au compilateur de traduire notre code source en langage machine. En effet, dans notre code source, nous utilisons par exemple la constante PORTA . C'est un nom réservé à la désignation du registre PORTA . Notre puce ne peut comprendre cette constante directement, elle a plutôt besoin de l'adresse du PORTA pour pouvoir lire cet endroit précis. L'étape de compilation effectuée ici remplacera le mot PORTA

mémoire de fin d ' études: "MouseTik ou métronome visuel MIDI" 1 SAE institute, brussels - formation audio engineer- nicolas masson -juille t 2009

37

par son adresse physique dans la puce. Celle-ci pourra alors se rendre à cette adresse et effectuer une action quelconque.

  • b. Directives de configuration

Nous avons déjà abordé ce sujet au cours de notre description de notre PIC.

Examinons à quoi ressemble concrètement notre directive complète :

CONFIG

CP

OFF

&

WDT

ON

&

PWRTE

OFF

&

XT

OSC

Le mot conf i g sert au compilateur à détecter que ce qui suit

ce mot correspond à

nos d i rectives de configuration. Rendons leur signification à chaque directive .

_CP _OFF: il i ndique que notre code machine n'est pas protégé

[CP voulant dire

Code Protection ici]. Ce l a i mplique que quiconque veut relire le code inscrit dans la

PIC pourra le faire avec le matériel adéquat. Open Source Ru les !

_WDT _ON : il indique que nous voulons que notre watchdog soit mis en service lors de l'exécution de notre programme.

_ PWRTE_ON : il indique nous ne voulons pas que notre ti mer soit rem i s automa- tiquement à 0 à la mise sous tension notre puce. Nous nous occuperons de gérer l e ti mer nous-même dans notre programme.

_XT_ OSC: il

permet au compilateur d'ind i quer à la PIC le type d'oscillateur [ou

horloge] sur lequel elle sera connectée.

  • c. Déclarations

>

Les Macros

A partir de la ligne 90, nous trouvons les lignes suivantes:

BANKO

macro bef STATUS , RPO

en dm

BANKl

macro bsf STATUS , RPO

en dm

mémoire de fin d'étu d es

: ""MouseTik ou métronome visuel MIDI"''

38

SAE institute, brussels- formation audio engineer- nicolas ma sson- juillet 200 9

Détaillons ce que fait le premier groupe de trois lignes. Lorsque le compilateur rencontrera le mot BANKO, il exécutera lïnstruction :

Bef

STATUS,

RP O

Cette instruction permet de choisir quelle banque sera utilisée lors de l'accès à tout registre spécial, comme cela a déjà été expliqué précédemment. Cette instruction donne l'ordre a la PIC de mettre le bit RPO du registre STATUS

à O.

Il ne faut pas confondre une macro avec la notion de sous-routine que nous avons évoqué. En fait, lors de la compilation, le compilateur va d'abord inspecter le code source, et chaque fois quïl rencontrera le mot BANKO, il remplacera ce mot par l'ensemble des instructions définies pour cette Macro. Ensuite seulement, il traduira le code source en code machine. Cela n'a donc rien avoir avec un appel de sous-routine lors de l'exécution du programme. Suivant directement la déclaration de nos macros, nous trouvons nos déclarations de variables.

> Les variables Chaque variable est un mot de 8 bits. A la ligne 101 de notre code source, nous trouvons le mot réservé CBL OC K.

Ce mot réservé indique au compilateur l'adresse de la mémoire FLASH de notre microcontrôleur à laquelle les différentes variables que nous allons déclarer devront se trouver. Elle permettra au compilateur de traduire l"adresse de chaque variable en une adresse physique compréhensible par le processeur de notre PIC.

Nous constatons que l'adresse indiquée commence à Ox20. Cette adresse est la première disponible après la zone mémoire occupée par les registres.

La déclaration d'une variable consiste à lui donner un nom [en faisant bien at- tention de ne pas utiliser de mot réservé par les définitions de constantes] ainsi qu'une taille.

La déclaration me ter

:

1 indique que nous réservons une variable du nom de

' meter· et que cette variable a une taille de 1, c· est-à-dire 1 x 8 bits.

mémoire de f i n d'études

: " MouseTik ou métronome visuel MIDI " I

39

SAE institute , brussels- formation audio engineer- nicolas masson- juillet 2009

Voyons à quoi serv i rons nos différentes variables.

CBLOCK

Ox20

->

adresse

placer

notre premiè r e

variable

meter

·

1

->

servira

à

stocker

la

vale ur

décrite

par

le

 

dipswi teh

pulse