Sie sind auf Seite 1von 62

mmoire de fin d'tudes:

MouseTick
u le mtronome visuel MIDI
SAE; insti tute, br ussels - formation audio engineer - nicolas masson -j uillet 2009
Table des matires
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. Hardware 1 Transport 1 lnterface ......................................................................... 1 0
e. Hardware 1 Transport 1 Le protocole physique de communication .................... 12
f. Le protocole de base ............................................................................................. 13
g. Messages Midi ..................................................................................................... 15
h. Synchronistaion en MIDI .............. .... .................. .... .............................................. 15
i. Master 1 Slave ....................................................................................................... 16
j. MIDI clock message ........................................................... ..... .............................. 17
k. Midi Machine Control: distinctions ........................................................ ....... ... ... 18
3. PIC16f84a 19
a. Mission ................................................................................................................. 19
b. Prsentation ... .. .. ....... ..... .... .................................................................... ... .. ....... .. 19
c. Fonctionnement ................................................................................................... 21
c 1. Foncionnement 1 Hardware : Botier et pins .. ..... ............... ... .. ............... . 22
c 2. Foncionnement 1 Hardware : Mmoires .................................................. 23
c 3. Program Memory ............................ ......................................................... 23
c 4. Data Memory ............................................................................................ 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. Dfi nition du processeur ....... ..... ... .... .... .... .... ............... ..... ... ..... ... ...... .. ... ... ....... ... 37
b. Di rectives de configuration ................ ............ .... .. .... ... .... ... ........ .. ..... .......... .... ... .. 38
c. Dclarations ...... .... ... ... .. .............. ........... .... ..... ....... ... .... .... .... ..... ... ............ .. .. ..... .. 38
d. Start on reset ... ..... .. ... .. .... ........ ........ .. ..... ..... ...... ... .... ..... .. ..... ....... .... .. ............ ...... 42
e. Initialisation Hardware ..... ..... ................. .. .. ........ .. .... ... .... ... ........ .. ...... .... ...... .... .. .. 42
f. Init ial isation Software .... .. ... .... ... .... ..... ... ... ..... .. .... .... ............... .. .. ....... ...... ... .. .. ... ... 43
g.Programme principal ... ....... ......... ... ... .... .. .... .............. ...... ..... .. ....... ... .. ... .. .. ... .. .. ... 43
5. Montage 1 Cot 1 Disponibilit 46
6. le programmateur de PIC Velleman VM 111 et MPLAB 46
7. Perspectives, Amliorations & Conclusions 47
8. Produits similaires dans le commerce 49
9. Annexes 51
a. Le schma lectrique de notre montage .. ..... ....... .. .. .... ............. .... .... .... ... .. ...... .. 51
b. Le code source de notre application ......... ..... .. ... .. .... ... ..... ... ...... ..... .... ... ............ .. 52
1 O. Rfrences 61
11. Contact 62
1. Introduction
a. Motivation personnelle pour ce projet
Lors de conversations avec des musiciens, l'ide a plusieurs fois t mise
d'avoir un mtronome sur scne, indiquant le tempo de manire visuelle.
De fait, trs souvent de nos jours, l'utilisation d' un ordinateur/squenceur qui
dirige une performance et donc, en dtermine le tempo, est de plus en plus
frquente.
Les musiciens intervenants ont donc besoin d' une aide visuelle pour pouvoir
se synchroniser plus facilement sur scne.
Prenons un exemple concret :
Un guitariste doit jouer sur le mme tempo, lors de l'intro d'un morceau, que la
nappe d'ambiance sortant d'un synthtiseur dirig par un squenceur via MIDI.
Dans de telles circonstances, il peut tre difficile pour le guitariste de trouver les
repres rythmiques indiquant le tempo du morceau de manire vidente. Dans
ce genre de cas, un flash de lumire 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 manire plus facile et donc plus prcise. Cela peut sensible-
ment amliorer une performance avec un peu d'entranement.
Suite ce constat, j'ai fait quelques recherches sur le sujet sur internet et ai vite
trouv le site web de Paul Messick, dont je possdais dj un bouquin, sur lequel
un projet de ralisation d'un mtronome MIDI tait disponible. Code source, liste
des composants, schma lectrique, ainsi qu'une bref explication sur les messag-
es du protocole MIDI utiliss pour raliser un mtronome. 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 trs similaire celle recherche. Je
l'achte donc en me disant qu'il serait simple d'adapter le code fait pour la 16c54,
ayant des caractristiques et des broches fonction quasi similaires.
La puce alternative fut la PIC 16f84a, achete sous les conseils du type du maga-
sin !qui tait vraiment malsain, on retrouvait dans sa boutique, parmi les articles
d' lectronique, des DVDs de cul d'une priode et d'un style assez douteux .. .]. Soit...
Je me retrouvais avec une bonne partie du matriel ncessaire la ralisation
d'un mtronome MIDI. Il ne me restait plus qu' apprendre contrler la PIC16-
f84a, tudier en dtail certains aspects du protocole MIDI, apprendre dchiffrer
un protocole srie avec un microcontleur, souder une pin de manire dcente sur
un circuit, aborder les divers composants utiliss, adapter le code source trouv,
etc ... Le tout, guid par l'exemple cit plus haut.
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI"I 4
SAE institute, brussels - formation audio engineer- nicolas masson - juillet 2009
Il y avait du boulot, comme on dit!
Raliser une premire application MIDI hardawre correspond aussi une souhait
personnel de dvelopper des interfaces adaptes mes besoins, mes envies.
Dvelopper des librairies pour la rception et l'envoi de messages MIDI l'aide de
la PIC 16f84a, afin de contrler des priphriques 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 trs
stimulantes et donnent envie de mettre la main la pte.
b. Objectif du travail
Il s'agit de raliser un mtronome visuel utilisant des leds qui flasheront sur
chaque noire d'une mesure. Les messages MIDI CLOCK seront utiliss comme
rfrence temporelle. Le nombre de noires par mesure sera dfinissable par
l'utilisateur au moyen d'un dipswitch 4 switch. Cela nous donnera la possibilit
d'avoir de 1 16 noires par mesure.
mmoire de fin d' tudes : "MouseTik ou mtronome 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 dbut des annes 80.
Jusqu' cette poque, les musiciens utilisant diffrents syntht iseurs possdaient
un squenceur pour chacun de leurs synthtiseurs. Le squenceur de l'un ne
pouvait commander l'autre. Les musiciens, qui achetaient alors de plus en plus
de synthtiseurs, fabriqus par diffrents constructeurs, ont rapidement exprim
l' envie de pouvoir les contrler de manire centralise, l' aide d'un ordinateur
!cette priode est lie 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 succs avec le Prophet 5, et Roland,
compagnie Japonaise, qui fabriquait alors des synthtiseurs [eux aussi trs popu-
laires] et qui tait la pointe de la recherche en ce qui concerne les interfaces
musicales pour ordinateurs. Roland commenait donc travailler sur une inter-
face musicale pour l'IBM PC et pensa, lors de cette dmarche, la cration d'un
squenceur digital software. Ils dcidrent donc de construire tout cela autour
de l'IBM PC, sous la forme d'une carte ISA, que l' on connectait la carte mre du
PC. Roland voulait que son interface fonctionne avec toute leur gamme de claviers
venir et a donc cr un langage digital que tous ses prochains claviers pour-
raient comprendre et interprter. Ce langage permettrait diffrents appareils
d'changer des donnes de contrle entre elles. linterface utilisant ce langage
fut connue sous le nom de Musical Instrument Digital Interface ou plus commun-
ment, MIDI. La carte ISA de Roland fut appele la MPU 401, pour Musical Process-
ing Unit- Model401.
Ce fut la premire interface MIDI pour ordinateur et on en retrouve d'ailleurs tou-
jours la trace sur de nombreuses cartes mres d'ordinateurs presonnels, qui im-
plmente trs rgulirement 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 dvel -
opper pour l'IBM PC, afin de le transformer en un squenceur digital et leur de-
manda s'ils taient intresss par le fait de supporter ce protocole sur leur propre
gamme.
Sequential Circuit, reprsent par Dave Smith [qui a sa propre marque de synth-
tiseurs maintenant], qui avait dj ses propres ides ce sujet, proposa alors de
prendre la spcification de Roland, de la travailler et de faire des suggestions de
modification ou d'addition, de renvoyer le tout Roland et de crer un standard
que leurs futurs claviers respecti.fs supporteraient.
mmoire de fin d' tudes : ""MouseTik ou mtronome visuel MIDI""I 6
SAE institute, brussels - formation audio engineer - ni colas masson -juillet 2009
Les deux socits n'ont pas tard proposer d'autres grandes firmes [comme
Yamaha et Oberheim] d'adopter ce standard, qui allait rvolutionner l'informatique
musicale. Le MIDI fut un effort collectif remarquable au sein des fabricants de
matriel musical.
Le premier synthtiseur commercialis muni d'une interface MIDI fut le
Prophet 600 de Sequential Circuits, en 1983.
Le Midi fut nanmoins prsent pour la premire 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 commercialise. Elle tait accompagne d'un logiciel de Roland, appel
MESA, qui transformait le PC en un squenceur 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 socit 12 Tones System (qui se
renommera Cakewalk tout court tellement ce logiciel fit leur renomme] taient
mme plus populaires que celui de Roland. Tous les synthtiseurs de Roland qui
ont suivi possdaient une interface MIDI, puis arriva le DX7 de Yamaha, qui fut un
norme succs et supportait, lui aussi, le MIDI.
Enfin, Apple Computers sortit une interface MIDI pour le Macintosh et commena
faire de la publicit autour de cet aspect. tant un march compltement 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 dcolla
alors rellement et fut rencontr de manire systmatique sur les synthtiseurs 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, proposrent tous les
fabricants utilisant le MIDI de crer une association, appele la Midi Manufacturer
Association !MMA]. Tout le monde commena alors crer des logiciels pouvant
lire et crire des donnes MIDI et pouvoir se les changer sans aucun problme.
La socit 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 ds
lors cr et les diffrents logiciels pouvaient se commander l'un l'autre, ce qui
n'tait jusque l pas possible car la plupart des squenceurs fonctionnaient avec
un systme propritaire.
mmoire de fin d' tudes: "MouseTik ou mtronome visuel MIDI" 1 7
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
De nos jours, la MMA ne fait plus grand-chose part vendre leurs spcifications
qui veut bien les acheter ... Il y a eu trs peu de modifications ou ajouts dans les
spcifications depuis une bonne dizaine d'annes.
Il est vrai que, par exemple, une vitesse de transfert 32.5 Kilo bits par seconde
peut paratre un peu faible de nos jours. Celle-ci est pourtant largement suffisante
dans de trs nombreuses applications. Notons tout de mme certains travaux
rcents comme la spcification MIDI ringtones, qui est utilise par les tlphones
portables, ainsi que la norme MIDI HO, toujours en cours de dveloppement, qui
devrait offrir plus de canaux, des vitesses de transmission plus leves, 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
ct 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 donnes MIDI :
> C'est un format de donnes 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 trs abordable, que chacun peut prtendre
mettre profit.
> C'est un format de donnes qui est compact, dans le sens o il ne produit pas
un volume de donnes trs important.
Il est donc trs pratique de l'utiliser comme moyen de communication entre dif-
frents systmes. 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 gnra-
tions entires d'artistes venant de nombreuses disciplines diffrentes, de pouvoir
trouver des moyens de communication avec la musique. En regardant l'activit
que gnre le MIDI de nos jours, on constate qu'il y a l un foisonnement impres-
sionnant de projets et de manires 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 thtre, 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 mlodies, faire des arrangements et les entendre directement. Cet
avantage est discutable, car le fait de remplacer des musiciens par des syntht-
mmoire de fin d' tudes : .. MouseTik ou mtronome visuel MIDI"" I 8
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
iseurs est une ide rductrice. En le voyant comme un simple outil et non comme
une fin en soi, le MIDI est un outil trs effi.cace.
Le MIDI permet au musicien sachant en profiter d'avoir un contrle trs pouss de
ses priphriques.
c. Description du MIDI
Sous l'appellation MIDI se cache un ensemble de normes, qui, mises ensemble,
permettent des interfaces de toutes sortes d'changer des informations
caractre musical. Cet ensemble de normes doit aborder divers problmes et
concerne donc de nombreux domaines. Il peut tre vu comme tant divis en une
couche de transport, qui concerne la manire dont est transmis l'information et
d' une couche application, qui est la partie qui va interprter et mettre en forme ces
informations pour leur donner un sens.
Cet ensemble de normes peut aussi tre subdivis en une partie hardware et une
partie software :
hardware
transport
bit rate
dop bit
etc ...
NRZ
.... ........
formats d'change
de donnes :

> La partie hardware :
software

?K - ,
: application
message
.. .. .. ............ .
format de donnes de base
(status) ( voice) system
ou byte
...-------..
system
li system
common Real
SYS EX Ti me
.
SYS EX
.............
+ OTHERS

- L'interface physique, autrement dit l'interface DIN 5 broches. Elle fait partie de
la couche transport. Notons que d'autres interfaces comme l'USB, le Firewire
ou le protocole Ethernet sont aussi utiliss de nos jours. Nous nous limiterons
l' tude de l'interface DIN dans cet ouvrage.
- Le protocole physique de communication en srie utilis pour la transmission
des bits de donnes fait partie de la couche transport.
mmoire de fin d' tudes : "MouseTik ou mtronome visuel MIDI"I 9
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
> La partie software :
- Le protocole Logique de communication est La norme qui dfinit Les diffrents
paramtres du protocole physique de communication, dfinit la structure des
signaux, ainsi que la manire de les traiter et permet donc l'extraction de don-
nes utiles partir du signal. C'est le dernier lment de la couche Transport et
le premier de la couche Software. Toutes les normes suivantes font contraire-
ment partie de la couche Application.
- Les spcifications de message, qui sont le coeur du protocole, lui donne son
sens et attribue une signification la valeur des donnes extraites. Il dfinit les
valeurs des diffrents messages MIDI, il catgorise ces messages, leur donne
une signification et prcise comment les interprter lorsqu'ils sont reus. Ces
messages sont fournis par le protocole logique de communication.
- Les spcifications des sous-protocoles, dont font partie le MTC et MMC et qui
utilisent certains messages MIDI pour ajouter des fonctionnalits au protocole
[en utilisant le systme 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 fonctionnalits des messages de base.
- Les formats d'change de donnes, 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 utilise pour le MIDI est une DIN 5 broches femelles. Elle est
souvent appele un port MIDI.
Il y a trois types de ports MIDI :
- Le MIDI in et le MIDI out, qui servent respectivement d'entre et de sortie.
- Le MIDI thru, qui est une recopie des signaux reus sur l'entre MIDI in vers la
sortie MIDI thru.
Il faut noter que, d au dlai provoqu par l'opta-isolation de l'entre MIDI in [cfr
plus bas]. le signal envoy vers le MIDI thru est lgrement retard, ce qui peut
provoquer des problmes de synchronisation si plusieurs machines sont connec-
tes en srie [daisy chaining] via plusieurs MIDI thru.
Des cbles DIN 5 PIN mles sont utiliss pour relier les entres [MIDI in] et les
sorties [MIDI out]. Une sortie ne peut contrler qu'une et une seule entre la fois.
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI"I 1 Q
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
Mle Femelle
Une longueur maximale de 15 mtres de cble est conseille.
Le cble est une paire torsade et blinde, dont le blindage est connect la pin 2
des deux cts du cble. Les pins 4 et 5 sont respectivement le +5 volts et le signal
MIDI lui-mme. Noter que, l'inverse du sens conventionnel, dans le protocole s-
r ie MIDI, un signal ayant comme valeur logique 1 quivaut 0 volts et inversement,
un signal de valeur logique 0 quivaut +5 volts.
Les pins 1 et 3 ne sont pas utilises et ne doivent tre connectes rien du tout.
Le courant dlivr, selon la norme, doit tre de 5mA.
Un des buts majeur de la spcification MIDI est de prvenir les ground loops.
Ces grou nd loops causeront toutes sortes de bruits, d la diffrence de poten-
tiel qu'il y a entre les deux extrmits du cble, surtout si ils sont connects un
lment informatis
Pour viter un ground loop ventuel entre les diffrents priphriques intercon-
nects, le protocole MIDI spcifie qu'une entre [MIDI in) doit tre directement
connecte un opta-isolateur. Celui-ci permet, via une courte transmission op-
tique, de transfrer un signal entre diffrents lments [typiquement un metteur
et un rcepteur]. tout en les gardant lectriquement isols l'un de l'autre.
Vu que le signal lectrique est converti un bref instant en lumire infra rouge,
transfr sur un capteur de lumire infra rouge et reconverti en signal lectrique,
il n'y a pas besoin de connexion lectrique physique entre l'metteur et le rcep-
teur.
0 . -l.sola.tor + f5V
1'
Vo 4 TO
1 - ' - - - - - - - - o ~ ~ ~ LIART
fl.iliDIIN
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI"I 11
SAE institute, brussels - formation audio engineer- nicolas masson- juillet 2009
Les opte-isolateurs Sharp PC-900 et le HP 6N 138 sont des composants qui peu-
vent servir cet effet. Les temps de monte et de descente Irise and fall] doivent
tre infrieurs 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 spcifie la faon dont les signaux lectriques vont tre transmis entre deux
priphriques. Il va aussi prciser comment interprter les parties du signal utile,
c'est--dire les parties du signal qui contiennent des informations qui devront tre
exploites.
Le MIDI utilise une communication srie asynchrone. Ce type de communication
dit que, lors de la transmission de donnes, un signal START est envoy avant
chaque byte [1 byte= 8 bits] qui sont eux-mmes suivis par un signal STOP. Le
signal START sert ce que le rcepteur se prpare recevoir un byte et le sig-
nal STOP sert de priode alloue au rcepteur pour faire ce qu'il veut du byte de
donnes 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 srie asynchrone soit utilisable pratiquement, il
faut prendre le soin de dterminer un ensemble de variables que tout priphrique
voulant comprendre cette communication devra respecter.
Les variables spcifier sont :
- L'ordre d'arrive 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 donnes [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 dtect par les rcepteurs, car de
cette dtection dpend 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 rgle n'est valable que si le rcepteur est en attente [id le mode] d'un signal
[et qu'il n'est donc pas en train d'en recevoir uni.
Lorsque le rcepteur 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 systme est de
nouveau prs dtecter la rception du prochain start bit.
mark--...,
spa ce
id le id le
start stop start stop
mmoire de fin d' tudes : "MouseTik ou mtronome visuel MIDI " I 12
SAE institute, brussels - format ion audio engineer - nicolas masson - juillet 2009
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-
se 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 ds lors dire que le MIDI a une vitesse
de transmission de donnes 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 sr calculer cela en prenant le problme dans un autre sens.
Vu que, dans le protocole Ml Dl, on sait que un bit prend 32 micro secondes pour
tre transmis compltement, on peut dire que comme un 1 bit dure 32 micro sec-
ondes, on pourra mettre 31250 bits dans une seconde. On revient notre dbit de
31.25 Kilo Bits par seconde et la boucle est boucle.
Les 32 micro secondes que nous venons d'voquer ont une importance capitale
dans le cadre de la ralisation d'un mtronome MIDI via un microcontrleur.
Ces 32 micro secondes reprsentent en effet le temps maximal que pourra pren-
dre notre microcontrleur 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 dsynchroniser du flux MIDI et menacer un
rcepteur de dcoder 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 intresser un autre aspect du protocole MIDI, qui
est ce que nous avons appel plus haut : le protocole de base et qui dcrit la struc-
ture des messages et la manire de les traiter.
f. Le protocole de base
Le protocole MIDI est construit sur base de messages. Un message est compos
d'une srie variable de blocs de donnes de 1 byte. Le MIDI comporte de nombreux
type de messages et de catgories diffrents. Certains d'entre eux ont une lon-
gueur de 1 byte, d'autres, de deux, trois et certains ont mme une longueur illimi-
te. 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 considrer que chaque fois que l'on reoit un byte de STATUS,
cela marque le commencement d'un nouveau message et, par la mme occasion,
la fin du message prcdent.
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 hexadcimal ou de 10000000
11111111 en binaire. Note :je ne vais pas faire ici de rappel sur les notations
binaires et hexadcimales, il y a de nombreuses sources ce sujet qui sont di-
sponibles trs facilement.
mmoire de fin d"tudes : ""MouseTik ou mtronome visuel MIDI"" I 13
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
Tout byte de donnes reu aprs un byte de STATUS sera toujours compris dans
l'intervalle OxOO Ox7F, except bien sr dans le cas o ce byte serait lui-mme un
byte de STATUS.
Le byte de STATUS est la cl de vote du protocole MIDI. Il va nous permettre de
grouper les messages en diffrentes categories et de traiter ces diffrentes cat-
gories de manire diffrente :
La Voice Category, qui regroupe tous les messages pouvant tre envoys sur
n'importe quel canal (le MIDI comporte 16 canaux, qui peuvent tre vus com-
me des pistes indpendantes les unes des autres]. Cette premire catgorie
reprsente donc tous les bytes de STATUS couvrant la plage de valeur de Ox80
OxEF. Pour interprter cette catgorie 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 hexadcimale quivaut
la valeur binaire 1001 0111.
Si on coupe cette valeur en 2 partie gales en commenant par la gauche, notre
higher nib ble sera 1001 (Ox9) et notre lower nibble sera 0111 (Ox7l.
Le higher dtermine le type de message qui est reu. Le lower dtermine quel
canal Ml Dl le message est destin.
Dans notre cas, une valeur de 9 du higher nibble nous indique que nous sommes
en prsence d'un message NOTE ON et qu'il est destin au canal 7.
Voici la liste de la signification des diffrentes 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
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI" 1 14
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
La deuxime catgorie 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 intressantes pour tout priphrique MIDI et sont
subdiviss en 2 catgories 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 ralisation de notre mtronome, nous n'utiliserons que des bytes de STAT-
UT de la catgorie System Real Time. Plus particulirement 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 utilises
du tout en MIDI et sont rserves pour une utilisation future. Tout priphrique
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 exploite par notre mtronome est la synchronisation
d'horloge. Le mtronome va plus particulirement utiliser le message MIDI
CLOCK.
Un squenceur supportant le MIDI est un logiciel ou un appareil hardware qui est
capable de reproduire une performance musicale complte. Il doit donc tre capa-
ble de connatre de manire prcise la vitesse laquelle il doit interprter sa per-
formance et pouvoir dterminer quel moment dclencher ses messages MIDI.
Un des moyens utilis en MIDI pour pouvoir raliser une performance une vi-
tesse contrle est d'utiliser l'information que nous donne le message MIDI
CLOCK.
mmoire de fin d' tudes : " MouseTik ou mtronome visuel MIDI " I 15
SAE institute, brussels- formation audio engineer - nicolas masson- juillet 2009
Le message MIDI CLOCK est envoy intervalle de temps rgulier. 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 priphrique qui sait diriger des esclaves. Les esclaves peuvent
le suivre au tempo qu'il indique, rpondre diffrents ordres un moment impos
par le master.
Pour synchroniser ses esclaves, le master doit tre capable de les dmarrer au
moment prcis qu'il aura dtermin. Le master peut raliser cela grce au mes-
sage MIDI START. Ce message avertit l'esclave qu'il devra commencer jouer sa
squence 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 reu marquera le BEAT 0 de la squence jouer. Pratiquement, le
master envoie ce message directement aprs le message MIDI START et le mas-
ter respecte gnralement une priode d'une milli seconde avant l'envoi du MIDI
CLOCK. Cela permet de laisser le temps l'esclave d'ventuellement se prparer
avant de jouer sa squence. partir de ce moment, l'esclave n'a plus qu' compter
le nombre de messages MIDI CLOCK qu'il reoit et interprter cette information
pour grer son tempo.
Le master peut stopper un esclave en envoyant un message MIDI STOP. Le master
peut continuer envoyer des messages MIDI CLOCK aprs ce moment, mais un
esclave devra cesser de jouer. Lesclave peut nanmoins continuer compter les
messages MIDI CLOCK et ainsi tre toujours prt jouer si on le lui demande.
Le master doit tre capable de dire ses esclaves quel endroit [ quel BEAT) ils
doivent commencer la squence. Le master peut le faire en envoyant un message
spcial appel le SPP pour Song Position Pointer. Ce message d'une longueur de
14 bits reprsente un nombre de MIDI BEATS. Un MIDI BEAT est dfini comme
suit: un MIDI BEAT est gal la dure de 6 messages MIDI CLOCK. En d'autres
mots, chaque MIDI BEAT reprsente un quart de noire, soit une double croche.
Si, par exemple, un esclave reoit un SPP de valeur 4, il devra commencer jouer
4 X 6 MIDI CLOCKS du BEAT 0, c est--dire au deuxime temps de la premire
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
mmoire de fin d' tudes: .. MouseTik ou mtronome visuel MIDI .. I 16
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
reprsentant 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 prcision allant au maxi-
mum jusqu' la double croche, dans le cas o les esclaves se rfrent au SPP pour
accomplir cette tche.
La rception du message MIDI START ordonne aux esclaves de commencer jouer
partir du BEAT 0 (le commencement de la squence]. Lorsqu'un esclave reoit
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 immdiatement aprs sur la
touche PLAY d'un lecteur de Compact Dise par exemple. Toujours dans la mme
veine, le message MIDI STOP quivaut plus l'ide que l'on se fait du bouton
PAUSE d' un lecteur de Compact Dise.
Le troisime message considrer 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 reu un message MIDI STOP valide ou partir de la
dernire valeur SPP reue. Il est important de noter pour la suite que l'esclave !un
mtronome, peut tre?] est responsable de la mmorisation de sa position rela-
tive dans la mesure courante, ainsi que de sa position absolue dans la squence
joue.
En rgle gnrale, si un esclave reoit un message MIDI START ou MIDI CONTINUE
pendant qu'il joue, il devra ignorer ces messages. Rciproquement, lorsqu'il reoit
un message MIDI STOP alors qu'il est stopp, celui-ci doit aussi tre ignor.
Pour raliser le mtronome, le microcontrleur devra tre capable de suivre et
d'interprter, sans erreur, un total de 4 messages MIDI diffrents: 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 frquence pro-
portionnelle au tempo qu'il indique.
Il Rermet donc un esclave d'estimer le tempo que le master lui envoie avec une
prcision d'un 24me 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 fquence 48 Hertz.
mmoire de fin d'tudes : " MouseTik ou mtronome visuel MIDI" 1 17
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
Explicat ion :
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 frquence de 48 Hertz prcisment.
Mis part la MIDI CLOCK, il faut mentionner qul 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 frquence de 1 DO Hertz.
Il sert aussi ce qu'un appareil esclave soit synchronis avec un appareil master.
Darn s ce cas, l'esclave est responsable du fait de dterminer de combien de milli-
se ondes est compose une noire.
Cette approche est plus complexe et peu avantageuse par rapport au message
MIDI CLOCK, mais rend tout de mme possible le fait que l'esclave puisse avoir
son propre tempo, indpendant de celui du master.
k. Midi Machine Control : distinctions.
Le Midi Machine Control [M MC] est un protocole spcifiquement tudi pour pou-
voi contrler des priphriques tels que des enregistreurs, le tout, en utilisant
le protocole MIDI. La seule manire de raliser cela est d'utiliser les messages
SYSTEM EXCLUSIVE ou SYS EX, dont certains ont t spcialement dsigns pour
implmenter le MMC. De nombreux appareils supportent le MMC de nos jours, les
squenceurs 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 envoys grce 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.
mmoire de fin d' tudes : "MouseTik ou mtronome visuel MIDI"I 18
SAE institute, brussels- format ion audio engineer- nicolas masson- juillet 2009
3. PIC16f84a
a. Mission
Pour vulgariser la mission de notre microcontrleur, nous pouvons dire qu'il va
devoir simplement :
Mettre en oeuvre un moyen de lecture et d'identification des messages MIDI suiv-
ants: CLOCK, START, STOP et CONTINUE.
Ad pter le nombre de noires par mesure au choix de l' utilisateur.
A partir de tout message MIDI START valide, recommencer au dbut de la mesure
et aommencer compter, sans exception, les messages MIDI CLOCK qu'il va rece-
voir.
A chaque fois qu'il aura reu une suite de 24 messages MIDI CLOCK, il devra d-
cider soit d'allumer ses leds en rouge [1 re noire de la mesure). ou en vert !toutes
autres noires de la mme mesure].
Lorsqu'il recevra un message MIDI STOP, il devra s'arrter, tout en mmorisant
l'endroit o il se trouve dans la mesure, avec une prcision d'une MIDI CLOCK.
Lor:-squl recevra un message MIDI CONTINUE, il devra reprendre l'endroit m-
moris lors de la dernire rception d'un message MIDI STOP valide.
Pour accomplir sa mission, notre microcontrleur PIC va devoir prendre en charge
pl sieurs aspects de la norme MIDI :
- savoir dcoder correctement le signal lectrique arrivant et en extraire des bytes
de donnes= la partie transport.
elon le byte de donnes reu, il va devoir dcider des actions entreprendre, en
onction de la mission qu'il doit accomplir= la partie application.
b. Prsentation
La PIC16f84a fait part ie de la gamme mid range de chez Microship, quipos-
sde des copyright sUr la dnomination PIC, et qui signifie Peripherallnterface
Controller. Le Mid Range quivaut une longueur de mot d'instruction de 14 bits
!contrairement 12 bits pour la gamme base-li ne et 16 bits pour la gamme High-
end]. C'est une unit de traitement, accompagne de certains priphriques, qui
sont intgrs dans un seul botier. Elle permet donc d'effectuer des montages sans
l'ajout de composants externes.
Les PICs sont des composants RISC !Reduced Instruction Set Computer]. Ce type
d'architecture impose que 1 instruction soit excute chaque cycle d'horloge.
mmoire de fin d'tudes: .. MouseTik ou mtronome visuel MIDI .. I 19
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
Ils possdent un jeu d'instruction rduit, pour permettre un dcodage simple des
instructions reues, ce qui permet de garantir qu'une instruction dure un seul
cyc e.
Not ez que les instructions de saut de code sont les seules prendre 2 cycles.
On parle bien sur ici de cycles d'horloge. Mais de quelle horloge?
L'horloge externe, qui est matrialise par un oscillateur quartz ayant une
de 4 MHz. Elle est branche sur deux pins prvues cet effet sur la PIC.
La PIC16f84a possde un jeu d'instructions de 35 mots uniques. IL suffit de conna-
tre ce petit ensemble pour avoir accs toutes les fonctionnalits de la PIC.
La taille de sa mmoire de programme est de 1024 mots de 14 bytes.
Elle possde :
- 68 bytes de DATA RAMet 64 bytes de DATA EEPROM.
- Des data bytes de 8 bits de longueur.
- 15 Registres spciaux hardware, pour raliser diffrentes oprations.
La taille de sa pile d'appel !call stack] est de 8 niveaux. Cela reprsente le nombre
de rcursions possibles lors de L'appel d'un sous programme.
Mode d'adressage direct, indirect et relatif.
4 sources d'interruptions.
Des priphriques :
13 pins d'entre 1 sorite avec control individuel de la direction [pas mal!].
Des pins ddies au pilotage direct de LEDS, qui supportent donc un courant de
sortie adapt une telle application [dont notre mtronome profitera bien vide-
menti.
Le Timer 0 [not TMRO]. qui est un compteur 8 bits muni d'un prdiviseur de
comptage programmable [qui se rvlera trs utile pour compter Le temps qui
s'coule].
Elle possde aussi une dizaine d'autres fonctionnalits dont nous retiendrons
pl us particulirement : Le Watchdog Timer, la possibilit de protger son code, un
mode SLEEP qui conomise L'nergie et enfin Le fait que l'on puisse choisir Le type
d oscillateur auquel il est branch. Nous allons revenir sur la plupart de ces car-
actristiques plus tard.
La tension minium d'opration est de 2,5 V. La tension maximale est de 5,5 V
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI " I 20
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
[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 trs populaires chez les dveloppeurs et les hobbyites cause de
leur relative simplicit, de leur prix trs bas, du fait qu'on en trouve trs facilement
[dans le commerce ou via des sites), du nombre de ressources concernant le sujet
et de la disponibilt d'outils de dveloppement gratuits ou, le cas chant, trs peu
coteux.
c. Fonctionnement
Attardons-nous sur la manire dont fonctionnent et sont organises les diffrentes
parties de notre PIC.
Le lecteur intress trouvera ci-dessous le schma black d'une PIC16f84a, tir da
la data sheet tlchargeable sur le site de Microship.
13
FLASH
Program
Memory
1Kx 14
Program f
14
Bus
\
1 Instruction Register
1
Il
Instruction
Decode&
Control
Timing
Generation
~
OSC2/CLKOUT
OSC1/ CLKIN
~
<:==::;>
Data Bus
8
Program Counter
j ~
EEPROM Data Memory
u
~
EEPROM
1 1
RAM
8 Level StacK
File Registers
Data Memory
(13-bit) 64 x 8
68x8
H
1j( RAMAddr
EEADR
1 AddrMux \
n
5 DlrectAddr
71
Indirect TMRO
Addr
-
1 FSR< .. q
~ RA4fTOCKI -
1
STATUS reg
8
lt ~ ~
-
\ 1
Power-up
MUX
Trner
~ ,.JL
8
110 Ports
/
OScillator
\
ALU 1
start-up limer
~
Power-on

RA3:RAO
Reset
J ~ ~
Watchdog
1
Wreg
1
RB7:RB1
Trner
Il
~ ~
~
RBOIINT
MCLR Voo, Vss
mmoire de fin d'tudes: " MouseTik ou mtronome visuel MIDI"I 21
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
c 1. Foncionnement 1 Hardware: Botier et pins
La PIC16f84a est un circuit intgr. Elle existe sous 2 types de botier diffrents.
Le type DIP ou DIL 18 broches !Duallnline Package]. chaque broche tant une pin.
Plus prcisment, il sagit d'un botier PDIP, le premier P signifiant plastique.
Le type SSOP, qui est un format propritaire 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 poses directement sur la sur-
face du circuit.
Notre mtronome utilise un botier de type PDIP.
Le type de botier est standardis et prcise les diffrentes 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 botier, nous trouvons un ensemble de 18 broches, portant un nom par-
ticulier et ayant une fonction bien dfinie. Examinons rapidement ces broches et
intressons nous leur fonction.
RA2- -RA1
RA3- -RAO
RA41TOCKI-
,
- OSC1/CLKIN
MCLR -
()
- OSC2/CLKOUT
""""
Vss -
0')
-voo
"T1
RBO/INT-
00
-RB?
~
RB1-
)>
--RB6
RB2- -RB5
RB3- --RB4
OSC1 et OSC2 permettent de connetcer une horloge externe la PIC.
MCLR permet de faire un RESET du microcontrleur et accessoirement de repro-
grammer sa mmoire dirtectement sur le circuit.
Le PORT A regroupe les pins RAO RA4 et est un port bi-directionnel d'entre/sor-
tie.
Le PORT B regroupe les pins RBO RB7 et est aussi un port bi-directionnel. Il a la
particularit de possder 5 pins permettant de provoquer une interruption.
mmoire de fin d' t udes : .. MouseTik ou mtronome visuel MIDI" 1 22
SAE institute. brussels - formation audio engineer- nicolas masson- juillet 2009
VSS est la rfrence de masse servant pour la logique et les entres/sorties. On y
connecte donc la masse fournie par notre cble DIN.
VDD est l'alimentation fournie par notre cble MIDI [+5 V].
c 2. Foncionnement 1 Hardware : Mmoires
Il y a 2 types de mmoire dans la PIC16f84a. La mmoire pour le programme (Pro-
gram memoryl et la mmoire pour les donnes [Data memory].
Chacune des 2 possde un Bus spar, ce qui permet d'accder aux 2 pendant le
mme cycle d'horloge.
La mmoire de donnes peut elle-mme tre divise en deux parties. La mmoire
RAM (Random Access Memoryl et la mmoire EEPROM (Electrically Eraseable
Programmable Read Only Memory].
La mmoire RAM, de type FLASH, sera utilise pour mmoriser des donnes
utiles lors de l'excution de notre programme.
Au sein de la mmoire RAM, on trouve les SFR [Special Function Registersl ou reg-
istres de fonction spciale. Les registres de fonction spciale contrlent le cur du
microcontrleur. Nous nous attarderons sur leur utilisation bientt.
La mmoire RAM contient aussi la mmoire EEPROM. Cette mmoire n'est pas
volatile, elles sera conserve lorsque le puce n'est pas alimente. Elle est dis-
tinguer de la mmoire FLASH de la PIC, qui au contraire, est volatile et est perdue
lorsque la puce n'est plus alimente.
La mmoire RAM FLASH est spare en 2 banques, qui sont utilises pour attein-
dre les diffrents SFR qu'elle contient.
c 3. Program Memory
La mmoire de programme possde un compteur d'instructions de 13 bits, per-
mettant d'adresser un espace mmoire total de 8192 X 14 bits. Pourquoi 8192?
Car nous disposons de 13 bits, donc de 2
13
adresses au maximum, ce qui nous
donne 8192 adresses diffrentes.
Deux plages rserves sont utilises dans cette mmoire. Le vecteur RESET et le
vecteur d'interruption.
Le vecteur RES ET est l'adresse dans la mmoire de programme laquelle la PIC
commencera TOUJOURS excuter ses instructions, ds qu'elle sera mise sous
tension. Nous devons donc crire cet endroit la premire chose que notre PIC
devra effectuer en dmarrant. Pratiquement, cette zone de la mmoire de pro-
gramme consiste simplement ordonner la PIC de sauter une adresse particu-
lire de la mmoire o se trouvera le commencement de notre programme princi-
pal.
mmoire de fin d' tudes : "MouseTik ou mtronome visuel MIDI " I 23
SAE institute, brussels - formation audio engineer- nicolas masson- juillet 2009
Le vecteur d'interruption est l'endroit utilis pour configurer la manire dont les
diffrentes interruptions doivent tre gres. Nous reviendrons brivement sur les
interruptions plus tard.
CALL,
RET FIE
PC<120>
RETURN il'
RETLW
<7
Stack Level 1
.
Stack Leve! 8
RE SET Vector
13/
/
Penpheral lnterrupt Vector
c 4. Data Memory
OOOOh
0004h
IJ'--
3FFh
La mmoire de donnes est partitionne en deux zones.
La premire est celle du Registre de fonction spciale, que nous nommerons SFR
pour la suite. Il contrle la configuration de la puce. Il faut bien se rendre compte
que la plupart des oprations lies ce registre vont tre utilises tout au long de
notre programme pour, par exemple, ordonner notre puce de lire la tension qu'il
y a l'entre de la pin sur laquelle est connect le signal MIDI. Ce registre est donc
utilis tout au long de l'excution d' un programme. Cette zone de la mmoire uti-
lise 2 banques, rappelons-le. Il faudra donc indiquer la banque correspondant aux
diffrents registres de fonction spciale que nous voudrons lire.
La deuxime est celle du registre de fonction gnrale, que nous nommerons
dsormais GPR, qui est la partie rserve pour stocker les variables dfinies par
notre programme.
Penchons nous brivement sur ces fameux registres.
mmoire de fin d'tudes: "" MouseTik ou mtronome visuel MIOI""I 24
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
File Address
OOh Indirect addr.l
1
l
01h
02h
03h
04h
OSh
06h
07h
08h
09h
OAh
OBh
OCh
4Fh
50h
TMRO
PCL
STATUS
FSR
PORTA
PORTB
-
EEDATA
EEADR
PCLATH
INTCON
68
General
Purpose
R e ~ r s
{S )
lndired addr.!
1
l
OPTION_ REG
PCL
STATUS
FSR
TRI SA
TRI SB
-
EECON1
EECON2(
1
l
PCLATH
INTCON
Mapped
(accesses)
in Bank 0
File Address
80h
81h
82h
83h
84h
85h
86h
87h
88h
89h
BAh
8Bh
8Ch
CFh
DOh
--......._
L i :Sm 7Fh
Bank 0 Bank 1
0 Unimplemented data memory location, raad as o.
Note 1: Not a physicel reg1ster.
d. Hardware : Registres
d1. GPR (General Purpose Register)
Chaque GPR a une taille de 8 bits et est accessi ble directement ou indirecte-
ment [nous n' abordons pas ici les explications sur l'adressage direct ou indirect.
Checkez Wikipedia pour plus d'infos, par exemple]. Pour un GPR, la slection
d'une banque n'a pas d'importance. Que l'on soit dans l'une ou l'autre, une adresse
mnera au mme endroit.
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI"I 25
SAE institute, brussels- formation audio engineer- nicolas masson -juillet 2009
d2. SFR (Special Function Register)
Value on
Details
Ad dr Na me Bit 7 Bit 6 Bit5 Bit 4 Bit3 Bit2 Bit 1 Bit 0 Power-on
RE SET
on page
Bank O
OOh INDF Uses contents of FSR to oddress Data Memory (not a physical register)
---- ---- 11
01h TMRO 8-bit Real-lme ClockiCounter xxxx xxxx 20
02h PCL low Order 8 bits of the Program Counter (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
Bank 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, read 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
Note 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<128> are never trans-
ferred to PCLATH.
2: The TO and PD status bits 1n the STATUS registar are not affected by a MCLR Reset
3: Other (non power-up) RESETS nclude: external RESET through MCLR and the Watchdog lmer 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 utilises par le CPU et les fonctions priphriques pour contrler la
manire dont notre microcontrleur se comportera. Ils peuvent tre divises en
deux part ies. Une partie qui regroupe les fonctions de base et l'autre regroupant
les fonctions l ies aux priphriques associs notre puce.
Prenons maintenant le temps d' examiner de plus prs certains de ces registres.
Les informations sur les registres sont extraites du document La progrgamma-
ti on des PICs par Bigonoff (les liens internet vers cette source sont prsents en
fi n de ce document !.
mmoire de fin d'tudes: " MouseTi k ou mt ronome visuel MI DI" 1 26
SAE institute. brussel s- format ion audi o engineer - nicolas masson -juillet 2009
> Les registres PCL et
Un processeur, quel qu'il soit, est un composant qui excute squentiellement une
srie d'instructions organises selon un ensemble appel programme.
Il existe donc dans le processeur un squenceur, c'est dire un compteur qui per-
met de pointer sur la prochaine instruction excuter. Ce squenceur est appel
suivant les processeurs compteur ordinal, Pointeur de programme, etc. Dans
Le cas d'une PIC, il s' appelle PC, pour Pro gram Counter. Le PC n'est pas accessible
directement par l'utilisateur.
Le principe de base est toujours le mme. 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 accder 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 existe un autre registre de 5 bits qui participe au fonctionnement du squenceur.
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 complter PCL avec 5 bits
supplmentaires. 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-mme. Les 2 bits man-
quants sont extraits du registre PCLATH. Les bits 3 et 4, qui doivent tre position-
ns par l'utilisateur, sont placs directement dans les bits 11 et 12 du PC afin de
complter l'adresse de destination. Comme notre 16F84a ne gre que 1024 mots
de mmoire programme, nous n'aurons pas besoin de ce registre dans Le cas des
sauts. Rappelons- nous que la 16F84a ne gre 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 complt par les 5 bits du registre
PCLATH. Comme la 16F84a ne traite que 1024 mots de mmoire programme [cod-
able en utilisant 10 bits seulement), les bits b2, b3 et b4 de PCLATH seront inutili-
ss 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 mmoire programme de 8192 mots maxi-
mum [soit 2
13
].
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI " I 27
SAE institute, brussels - formation audio engineer - nicolas masson - juillet 2009
1
1 est trs important de savoir que le PC pointe toujours sur l'instruction suivante,
donc l'instruction qui n'est pas encore excute. 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 raliser 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 particulire. Il est principale-
ment utilis pour tout ce qui concerne les tests. Il est donc galement d'une im-
portance fondamentale.
Voici les diffrents bits qui le composent, en commenant 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 trs bien de les
dist inguer.
bD : C Carry (report]
Ce bit est en fait le 9me bit d'une opration. Par exemple, si une addition de 2 oc-
tets donne une valeur suprieure 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 Zro
Ce bit est positionn 1 si le rsultat de la dernire opration vaut O. Rappelez-
vous cependant que ces flags ne sont positionns que pour les instructions qui le
prcisent (Status bit affected dans le manuel].
b3: PD Power down
Indique quel vnement a entran le dernier arrt de la PIC (instruction sleep ou
dpassement du temps du watchdog].
b4 : TO Time-Out bit
Ce bit indique (si il vaut Dl. que la mise en service suit un arrt provoqu par un d-
passement de temps ou une mise en sommeil. Dans ce cas, PD effectue la distinc-
tion.
mmoi re de fin d'tudes: "MouseTik ou mtronome visuel MIDI" 1 28
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
b5 : RPO Register Bank SelectO
Permet d'indiquer dans quelle banque de RAM on travaille. 0 =banque O.
b6: RP1 Register Bank Select1
Permet la slection des banques 2 et 3. Inutilis pour le 16F84a, doit tre laiss 0
pour garantir la compatibilit ascendante [portabilit du programme!.
b7: IRP Indirect RP
Permet de dcider quelle banque on adresse dans le cas de l"adressage indirect
(que nous n'aborderons pas ici].
> Le registre OPTION
Ce registre est un registre de bits, c'est dire que chaque bit a un rle particulier:
b7: RBPU
Quand ce bit est mis 0 [actif niveau bas dans le manuel], une rsistance de rappel
au +5 volts est place sur chaque pin du PORT B. Nous verrons le fonctionnement
du PORT B la fin de cette section.
En validant cette option, la rsistance interne force toutes les pins 1 mme si une
telle n'est pas prsente sur les pins en question.
Notez que cette option valide les rsistances sur toutes les pins du PORT B. Il n'est
donc pas possible de choisir certaines rsistances en particulier. De mme cette
fonction n'existe que pour le PORT B.
Dans notre cas, nous ne mettrons pas ces rsistances en service. Le bit 7 RBPU du
registre OPTION sera donc 1.
b6: INTEDG
Donne, dans le cas o on utilise les interruptions sur RBO, le sens de dclenche-
ment de l'interruption. Si b6 = 1, on a interruption si le niveau sur RBO passe de 0
vers 1. Si b6 = 0, l'interruption s'effectuera lors de la transition de 1 vers O.
Comme nous n'utilisons pas les interruptions dans notre montage lune version du
programme avec gestion d'interruption est en cours]. nous pouvons laisser b6 =O.
mmoire de fin d' tudes : .. MouseTik ou mtronome visuel MIDI .. I 29
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
b5:TOCS
Ce bit dtermine le fonctionnement du timerO, que nous verrons bientt. Retenez
que le timerO est incrment soit en fonction de l'horloge interne [synchronis au
programme]. dans ce cas b5 = 0, soit il compte les impulsions reues sur la pin
RA4, dans ce cas b5=1.
ous utiliserons pour le timerO l'horloge interne [cette horloge est elle-mme
ilote par notre horloge externe]. donc b5 =O.
b4: TOSE
Donne, pour le cas ou le bit 5 serait 1, le sens de la transition qui dtermine le
comptage de tmrO. Si b4 = 1. On a comptage si le signal passe de 5V OV sur RA4.
Si on a b4 = 0, ce sera le contraire.
Comme nous avons plac b5=0, b4 est alors inutilis. Nous laisserons donc b4 =O.
b3: PSA
Nous avons dans la PIC un prdiviseur. Qu'est-ce que c'est? Et bien tout simple-
ment, ceci indique le nombre d'impulsions qui devront tre reues pour provoquer
une incrmentation de la destination. Nous y reviendrons en dtail avec le fonc-
tionnement du tmrO.
ce niveau, notons simplement que ce prdiviseur peut servir une des deux
fonctions suivantes [et pas les deux] :soit il effectue une prdivision au niveau du
ti mer du watchdog [b3 = 1]. soit il effectue une prdivision au niveau du tmrO [tim-
erO] [b3=0l. Dans notre cas, nous utiliserons le prdiviseur sur le ti mer O. b3 =O.
b2, b1,b0: PS2,PS1,PSO
Ces trois bits dterminent la valeur de prdivision pour le registre dtermin ci-
dessus. Il y a donc 8 valeurs possibles.
Remarquez que les valeurs sont diffrentes pour le watchdog et pour tmrO. En ef-
fet, il n'y a pas de division par 1 pour ce dernier registre.
Si vous dsirez ne pas utiliser de prdiviseur du tout, la seule mthode est de
mettre b3=1 [prdiviseur sur watchdog] et PS2 PSO O. Dans ce cas : pas de
prdiviseur sur tmrO, et prdiviseur 1 sur watchdog, ce qui correspond pas de
prdiviseur non plus.
Pour notre mtronome, nous voulons un prescaler de 1/8 sur le ti mer O. Nous vou-
lons cela car nous l'utiliserons pour attendre un nombre prcis de micro secondes.
mmoire 'de fin d'tudes: "MouseTik ou mtronome visuel MIDI"I JO
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
Pour avoir un prdiviseur de 1/8, les bits PS2 PSO devront former la valeur 2, qui
indique, selon un tableau fournis dans la datasheet, la valeur de prdiviseur sou-
haite.
Calculons lnfluence de notre prdiviseur sur le timeO: nous savons que nous
avons une instruction par micro seconde. Comme notre timerO a t configur
pour tre incrment en mme temps que le PC, il faudra 8 instructions [ cause
du prescaler] pour que le timerO soit incrment de 1.
Si nous savons que le timerO est 0 un moment donn, si nous attendons qul
soit incrment 4 fois et qul ait donc une valeur de 4, nous aurons en fait attendu
32 micro secondes. C'est plutt intressant dans le cadre de notre application.
Rcapitulons 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 hexadcimal.
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 dtermine si
les pins du registre PORT A sont en mode entre ou sortie. Chaque bit positionn
1 configure la pin correspondante en entre. Chaque bit 0 configure la pin en
sortie.
Le registre PORT A est un peu particulier, puisqul donne directement accs au
monde extrieur. Ce registre reprsente 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
reprsente une pin. Donc, seuls 5 bits sont utiliss. 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 rpond la formule suivante :
Intensit: (5V- Tension Led] 1330 ohms, soit (5V- 1 ,75VI 1330 ohms= 9,85mA.
mmoire de fin d' tudes : " MouseTik ou mtronome visuel MIDI" 1 31
SAE insti t ute, brussels- formation audio engineer- nicolas masson - j uillet 2009
Le registre TRIS A est situ la mme 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 entre, afin de ne pas
envoyer des signaux non dsirs sur les pins. Les bits TRIS A seront donc mis 1
lors chaque RESET.
Si on regarde les caractritiques 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 mme manire que PORTA et TRISA,
mais concernent les 8 pins RB prsentes sur notre 16f84a. les pins RBO et RB4
RB7 peuvent tre utiliss 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 [entre]
et OSC2 [sortie]. sont relies une horloge quartz de 4 Mhz [d'autres vitesses
d'horloge sont possibles, mais varient selon le modle de PIC utilis. Le botier
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
frquence d'horloge peut tre abaisse jusqu' l'arrt complet du microcontrleur,
sans perte de donnes et sans aucun dysfonctionnement. Notre PIC devrait donc
pouvoir excuter 4 millions d'instructions par secondes ... Et bien non, la PIC
considre que 4 cycles de l'horloge quartz quivalent 1 cycle ou une instruc-
tion excute. Nous savons maintenant que, dans notre configuration, notre PIC
excutera 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 paramtres de notre horloge. Il faut utiliser les directives de
configuration, prcise lors de la programmation de notre LED. Nous ne pouvons
pas modifier cette directive lorsque la PIC est fonctionnement.
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI" 1 32
SAE institute, brussels - formation audio engineer- nicolas masson - juillet 2009
La vitesse, ainsi que le type d'horloge utilis doivent tre configurs. 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 rseau 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 raliser des temporisations et compter. Il a une taille
de 8 bits et peut donc compter jusque 255 au maximum. On dit qu'il dborde
lorsqu'il dpasse la valeur 255. Aprs avoir dbord, le ti merD revient la valeur 0
et continue compter partir de l. Tout dbordement du ti mer [passage de 255
Dl provoque le positionnement du flag TOIF du registre grant les interruptions:
INTCON]. Nous pouvons donc utiliser ce flag pour savoir si le timer a dbord.
Nous n'aborderons pas ce problme ici car nous n'utilisons pas les interruptions
dans notre mtronome.
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-mme. Dans ce cas,
comme l ' horloge esf fixe, nous compterons donc en ralit du temps. Nous serons
donc en mode 'Ti mer'.
Nous avons dj dit que la PIC tait munie d'un prdiviseur au niveau du TMRO.
Nous l'avons rgl, grce au registre OPTION, une valeur de 1/8 ce qui implique
qu'il sera incrment de 1 toutes les 8 micro secondes.
Il est extrmement important de noter que toute modification du timerO provoque
un arrt de comptage de celui-ci qui correspond 2 cycles d'instruction, soit 2 mi-
cro secondes. Il faudra prendre ce paramtre 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 donne pour savoir combien de temps s'est coul. Pour
ce faire, nous devons remettre le compteur 0 un moment dtermin.
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI " 1 33
SAE institute. brussels- formation audio engineer- nicolas masson - juillet 2009
Puisque nous allons devoir crire dans le registre pour y mettre la valeur 0, nous
savons d'avance que l'opration d'criture provoquera la perte de comptage de
2 cycles. Il nous suffit en fait d'initialiser 2 le timerO plutt qu' 0 pour tenir
compte de cette donne 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 prcis. Cela permet d'viter qu'une erreur quelconque ne laisse la
puce dans un tat incohrent et qu elle ne puisse plus remplir sa mission.
Quand on utilise le watchdog, un programme doit donc lui signaler de manire
rgulire qu'il fonctionne de manire correcte. Il doit pour cela utiliser l'instruction
'clrwdt', pour clear watchdog. Cette instruction dit simplement au watchdog de se
remettre zro et donc empche 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 dclenchera un RESET automatiquement toutes les 7000 micro secondes,
nous n'aurons aucune difficult tenir la bte en laisse.
La mise en service ou l'arrt du watchdog se dcide au moment de la programma-
tion de notre PIC, l'aide des directives de configuration. Si _WDT_OFF est prcis
comme directive, le watchdog ne sera pas en service, et inversment, si on prcise
WDT ON.
Le fonctionnement du watchdog est li un timer interne spcifique, qui n'est pas
synchronis au programme, ni un vnement extrieur.
Une valeur minimale de 7 ms est prendre en considration en pratique.
Comme nous utilisons le watchdog dans notre application, la directive _WDT _ON
devra donc faire partie de nos directives de configuration.
Cet aperu 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
contrler les vnements survenant sur ses priphriques internes [pins, timer,
etc.] et de nous donner toutes les informations nous permettant d'crire notre pro-
gramme.
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI"I 34
SAE institute, brussels- formation audio engineer - nicolas masson - juillet 2009
h. Software: Instructions
Dans la PIC16f84a, chaque instruction est un mot de 14 bit. Ce mot est divis en
une partie OPCODE, qui prcise le type d'instruction et une partie contenant les
oprandes, qui prcise l'opration effectuer par l'instruction.
Chaque instruction s'excute 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'excution prend deux cycles d'instruction.
Nous n'allons pas ici dtailler la trentaine d'instructions de la PIC16f84a. Le data
sheet dtaille de manire 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 frquemment utilis. L'ut i l isation
de sous-routines permet aussi de rendre un programme plus lisible en central-
isant diffrentes actions.
Par exemple, dans notre application, nous devrons lire la valeur encode sur le
dipswitch des endroits diffrents de notre programme. Une sous-routine de lec-
ture du dipswitch a donc t cre.
L'appel d'une sous-routine implique une modification du PC et donc 2 cycles
d'instruction pour dmarrer rellement.
Une sous-routine a une adresse fixe dans la mmoire de programme.
Une sous-routine se termine lorsque l'instruction de type return est rencontre.
Lorsqu'un tel type d'instruction est rencontr, le programme doit retourner
l'i nstruct ion 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 ncessaire
pour revenir l'instruction voulue.
mmoire de fi n d'tudes : ""MouseTi k ou mtronome visuel MIDI"" 1 35
SAE institute, brussels - formation audio engineer - nicolas masson - juillet 2009
j. Software : Interruptions
Les interruptions sont des appels de sous-routine dclenchs automatiquement
par des vnements particuliers. Les sous-routines sont dclenches automa-
tiquement par la puce lorsqu'un vnement est dtect. Lors d'une interruption,
comme dans le cas de l'appel d'une sous-routine, le programme principal va tre
interrompu dans son droulement squentiel et le PC va tre positionn sur la
premire instruction de traitement de l'vnement.
Ceci conclut notre survol de la PIC16f84a. Sachant que le data sheet fait lui-mme
une petite centaine de pages et que la documentation complte sur la famille
mid-range en compte pas moins de 600, on comprend mieux le terme employ
de survol. Le lecteur intress pourra se plonger dans la documentation afin de
trouver l'information qui l'intresse. De nombreuses introductions aux PIC sont di-
sponibles sur le net. J'ai principalement utilis le cours d'introduction de Bigonoff
sur la PIC16f84a pour la comprendre. Je le conseille vivement toute personne
dsirant s'y intresser.
Passons maintenant au programme que notre PIC va excuter. Nous en examiner-
ons chaque ligne et en expliquerons chaque instruction ou bloc d'instruction.
mmoire de fin d'tudes : " MouseTik ou mtronome visuel MIDI" 1 36
SAE institute, brussels - formation audio engineer- nicolas masson- juillet 2009
4. Le programme
Le logiciel utilis pour programmer notre puce s'appelle MPLAB. c est un logiciel
gratuit dvelopp par Microship et servant d'environnement de dveloppement et
de test pour leur diffrentes gammes de microcontrleurs. Il est fait pour commu-
niquer avec diffrents programmateurs de microcontrleurs.
Il se prsente comme un traitement de texte dans lequel nous allons crire
squentiellement les diffrentes instructions de notre programme. Chaque ligne
de code reprsenra 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 brivement du program-
mateur utilis la fin de cet ouvrage].
Le langage utilis pour programmer notre puce est appel un langage
d'assemblage. Il se prsente 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 interprtera comme le dbut 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 premire ligne de code se trouvant dans notre fichier source.
a. Dfinition du processeur
La premire ligne de code rencontre est la ligne 61. Nous y trouvons
l'i nstruction suivante.
Lis t p=l 6f 84a
Cette instruction est utilise uniquement par le compilateur de MPLAB pour qu'il
puisse connatre le type de processeur que l'on utilise dans notre programme.
A la ligne 62, nous pouvons trouver l'instruction spciale suivante :
#incl ude <pi c 1 6F84a .inc>
Cette ligne va permettre au compilateur de trouver la dfinition de toutes les
constantes de la PIC16f84a, c'est--dire: les diffrentes instructions supportes,
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
rserv la dsignation du registre PORTA. Notre puce ne peut comprendre cette
constante directement, elle a plutt besoin de l'adresse du PORTA pour pouvoir lire
cet endroit prcis. L'tape de compilation effectue ici remplacera le mot PORTA
mmoire de fin d' tudes: "MouseTik ou mtronome visuel MIDI" 1 37
SAE institute, brussels - formation audio engineer- nicolas masson -juillet 2009
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 dj abord ce sujet au cours de notre description de notre PIC.
Examinons quoi ressemble concrtement notre directive complte :
CONFIG CP OFF & WDT ON & PWRTE OFF & XT OSC
Le mot conf ig sert au compilateur dtecter que ce qui suit ce mot correspond
nos directives de configuration. Rendons leur signification chaque directive.
_CP _OFF: il indique que notre code machine n'est pas protg [CP voulant dire
Code Protection ici]. Cel a implique que quiconque veut relire le code inscrit dans la
PIC pourra le faire avec le matriel adquat. Open Source Ru les !
_WDT _ON : il indique que nous voulons que notre watchdog soit mis en service
lors de l'excution de notre programme.
_PWRTE_ON : il indique nous ne voulons pas que notre ti mer soit remis automa-
tiquement 0 la mise sous tension notre puce. Nous nous occuperons de grer
le ti mer nous-mme dans notre programme.
_XT_OSC: il permet au compilateur d'indiquer la PIC le type d'oscillateur [ou
horloge] sur lequel elle sera connecte.
c. Dclarations
> 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
mmoire de fin d'tudes : ""MouseTik ou mtronome visuel MIDI"'' 38
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
Dtaillons ce que fait le premier groupe de trois lignes.
Lorsque le compilateur rencontrera le mot BANKO, il excutera lnstruction :
Bef STATUS, RPO
Cette instruction permet de choisir quelle banque sera utilise lors de l'accs
tout registre spcial, comme cela a dj t expliqu prcdemment.
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 qul rencontrera le mot BANKO, il remplacera ce mot
par l'ensemble des instructions dfinies 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'excution du programme. Suivant directement la dclaration
de nos macros, nous trouvons nos dclarations de variables.
> Les variables
Chaque variable est un mot de 8 bits.
A la ligne 101 de notre code source, nous trouvons le mot rserv CBLOCK.
Ce mot rserv indique au compilateur l'adresse de la mmoire FLASH de notre
microcontrleur laquelle les diffrentes variables que nous allons dclarer
devront se trouver. Elle permettra au compilateur de traduire l"adresse de chaque
variable en une adresse physique comprhensible par le processeur de notre PIC.
Nous constatons que l'adresse indique commence Ox20. Cette adresse est la
premire disponible aprs la zone mmoire occupe par les registres.
La dclaration d'une variable consiste lui donner un nom [en faisant bien at-
tention de ne pas utiliser de mot rserv par les dfinitions de constantes] ainsi
qu'une taille.
La dclaration me ter : 1 indique que nous rservons une variable du nom de
' meter et que cette variable a une taille de 1, c est--dire 1 x 8 bits.
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI " I 39
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
Voyons quoi servirons nos diffrentes variables.
CBLOCK Ox20 -> adresse o placer notre premir e variable
meter 1
pulse 1
beat 1
mda ta 1
bits 1
flags 1
ENDC
-> servira stocker la valeur dcrite par le
dipswi teh
-> comptera le nombre de messages MIDI CLOCK
reus .
-> mmorisera le nombre de noires dja
coules dans la mesure courante .
-> contiendra le byte de donnes et donc le
message MI DI qui vient d ' tre lu .
->per mettra de compter le nombr e de bits
reus sur le port MIDI .
-> un bit de ce byte aura une fonction que
nous lui attri bueront plus tard dans notre
programme
-> Fin de la dcla r ation des variables.
> Les dfinitions (#Define)
La direct ive #DEFI NE permet d'i ndiquer au compilateur qu'un mot de notre choix
quivaut une valeur particulire. Cette valeur peut reprsenter une adresse ou
un nombre significat if dans notre application, c' est nous de savoir grer ces
valeurs. Examinons les dfinit i ons se trouvant dans notre code source.
#DEFINE
#DEFI NE
#DEFINE
RUN FLAG flags , O
MIDI IN PORTA , 0
RED LED PORTA , 1
-> Le bit 0 de notre variable
flag servira savoir si un
message MIDI START valide a
t reu et donc si notre
PIC est en mode ' play'
-> Sert de raccourci pour at-
teindre l ' adresse du bit de
la pin RAO dans le registre
PORTA . Le MIDI est connect
cette pin .
-> Sert de raccourci pour at-
teindre l ' adresse du bit de
la pin RA1 dans le registre
PORTA . Nous l ' utiliserons
pour allumer nos leds en
rouge .
mmoire de fin d'tudes: "MouseTik ou mt ronome visuel MIDI" I 40
SAE instit ute. brussels- formation audio engineer - nicolas masson- juillet 2009
#DE FINE
fiDEFINE
#DE FINE
#DEFINE
#DEFINE
#DEFINE
GRE LED
CRY FLG
ZRO FLG
PORTA , 2 -> Sert de raccourci pour at-
teindre l ' adresses du bit de
la pin RA2 dans le registre
PORTA . Nous l ' utiliserons
pour allumer nos leds en
vert .
STATUS , O -> Sert de raccourci pour at-
teindre l ' adresse du bit 0
dans le registre STATUS . EN
d ' autres mots , sert at-
teindre la CARRY flag.
STATUS , 2 -> Sert de raccourci pour at-
teindre l ' adresse du bit 2
dans le registre STATUS . En
d ' autres mots , sert at-
teindre le Zero Flag .
OPTIONVAL Ox82 -> Reprsente la valeur
mettre dans le registre OP-
TION pour conflgurer la PIC
selon nos besoins .
PPQN
NBITS
Oxl8
OxOB
-> Reprsente le nombre de
Pulse Per Quarter Note , au-
tremeny d i t lenombre de mes-
sages MIDI CLOCK par noire.
PPQN vaut donc 24 en dci-
mal .
-> Reprsente le nombre de bits
de donnes reus dans une
trame de donnes MIDI .
; MIDI MESSAGES
#DEFINE MCLOCK OxfB - > Reprsente la valeur du mes-
sage MIDI CLOCK.
#DE FINE MS TART Oxfa -> Reprsente la valeur du mes-
sage MIDI START/
#DEFINE MC ONT Oxfb -> Reprsente la valeur du
messsage MIDI CONTINUE .
#DEFINE MS TOP Oxfc -> Reprsente la valeur du mes-
sage MIDI STOP .
-Macro
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI" I 41
SAE institute, brussels - formation audio engineer- nicolas masson -juillet 2009
d. Start on reset
Les 2 lignes de code rencontres servent, rappelons le, dire la PIC la premire
instruction excuter.
La directive org OxOOOO, sert prciser le code qui se trouvera l'adresse utili-
se lorsque la puce subit un RESET ou est mise sous tension. Cette adresse est
fixe par Microship et doit toujours tre O.
L.:instruction goto ini t dit simplement la PIC de commencer excuter le
code se trouvant l'tiquette init, o nous initialiserons notre hardware.
e. Initialisation Hardware
Les 2 premires instructions trouves aprs l'tiquette ini t servent se posi-
tionner dans la banque 1. En effet, les registres que nous allons manipuler ensuite
se trouve dans cette banque.
- Option Register
Le registre OPTION est initialis avec la valeur que nous avons dterin prcdem-
ment dans le define OPTIONVAL. Notre prdiviseur est maintenant configur, ainsi
que le comportement de notre timerO.
- Pins 1/0 setup
Nous allons maintenant dfinir si les pins du PORTA sont des entres ou des sor-
ties.
bsf MIDI_IN va configurer la pin sur laquelle nous recevrons le messsage MIDI
IN en entre en mettant le bit correspondantde TRISA 1.
bef RED LEI) va configurer la pin via laquelle nous allumerons nos led en rouge
en sortie, en mettant le bit correspondant du registre TRISA O.
bef GRE_ LED va configurer la pin via laquelle nous allumerons nos leds en vert
en sortie, en mettant le bitcorrespondant du registre TRISA O.
Nous pouvons maintenant nous assurer que nos leds seront teintes aprs initiali-
sation en mettant une tension de OV sur les pins GRE_LED et RED_LED.
Nous devons d' abord passer en dans la banque 0 car le registre nous permettant
de commander une valeur sur une pin, le registre PORTA, s'y trouve.
- Trn Off leds
Il nous suffit de mettre ces pins la valeur logique 0 [OV) pour les teindre.
- readDipSwitch
mmoire de fin d'tudes: ""MouseTik ou mtronome visuel MIDI""I 42
SAE institute. brussels- formation audio engineer- nicolas masson- juillet 2009
Nous rencontrons ensuite l'instruction call readDipSwi teh. Cette instruc-
tion est un appel notre unique sous-routine. Son nom nous donne dja une
information sur le rle de cette sous-routine. Elle va lire le dispwitch avec lequel
l"utilisateur pourra configurer le nombre de noires par mesure. Cette sous-routine
se trouve le fin de notre code source.
Pour ne pas trop rentrer dans les dtails, disons que cette sous-routine, pour rem-
plir sa mission va devoir lire les pins 4 7 du PORTS. Pour les lire, elle va devoir
les configurer comme tant des entres via TRIS B. Lorsque ceci sera fait, elle va
forcer la valeur se trouvant sur les pins OV. Elle va ensuite lire la valeur indique
par les 4 pins et mettre cette valeur daans la variable meter, pour que notre pro-
gramme puisse utiliser cette valeur ultrieurement.
Profitons du fait de parler du dipswitch pour en expliquer son fonctionnement.
Notre dipswitchest compos de 4 interrupteurs. Il sont otus relis au +5V. De ce
fait, lorsqu'un interrupteur sera connect, une valeur logisue de 1 sera lue sur la
pin laquelle il est connect.
Chaque interrupteur peut tre vu comme un bit faisant partie d'un mot d'une taille
totale de 4 bits. L'interrupteur connect la pin RA4 est le bit de poids faible du
mot de 4 bits et la pin RA7 est le bit de poids fort du mot de 4 bits. Comme nous
avons 4 bits, nous avons 16 combinaison diffrentes. Chacune de ces combinaison
reprsente un nombre de noires par mesure. Par exemple, si les switch RA4 et
RA5 sont ouverts, nous lirons la valeur 0011 dans notre programme. Cette valeur
correspondra 4 noires par mesure. Pourquoi 4? Car plutt que de commencer
compter Les valeurs partir de 0, nous commenons les compter partir de 1. Il
n'y a effectivement pas d'intrt avoir 0 noires dans notre mesure.
f. Initialisation Software
- Nousnous contenterons ici de mettre la valeur 0 dans les variables pulse et beat.
g.Programme principal
- Waitmidi
C'est la zone de programme dans laquelle notre puce va vrifier en boucle si un
startbit arrive sur la pin MIDI IN [quand le niveau sur la pin est de OV, ce qui cor-
respond OV).
Si aucun startbit n'est dtect au cours de la boucle, celle-ci recommence.
Si un startbit est dtect, on sait que nous allons devoir Lire une trame de mes-
sage. Pour nous y prparer, nous allons remettre La variable bits Zro et rinitia-
liser notre timerO, qui va nous permettre de compter le nombre de micro secondes
coules et ainsi de prendre la valeur de chaque bit du signal.
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI" 1 43
SAE institute, brussels- formation audio engineer - nicolas masson- juillet 2009
Notre programme va revenir en permanence dans la boucle waitmidi, afin d'tre
toujours prte recevoir un nouveau message MIDI. C'est donc l'endroit idal pour
y contrler notre watchdog.
Lorsque le programme boucle, en attente d'un message midi, il lui faut 5 micro
secondes pour refaire un check complet. C'est amplement suffisant, vu que nos
bits ont une dure de 32 1-JS. De plus, notre puce n'a rien faire pendant ces pre-
mires 32 1-JS car il s'agit du startbit, dont la valeur est inutile dans notre applica-
tion. Nous devrons simplement attendre que celui-ci se soit coul et lire les 8 bits
suivants.
- startbit
Pour attendre que le startbit soit pass, nous allons utiliser le timerO. Nous allons
en fait attendre qu'il atteigne une valeur de 4, soit 4 * 81-Js !rappelons nous du rle
du prdiviseuri.Lorsue cetemps est coul, nous savons que la tension sur la pin
MIDI IN nous indiquera si le premier bit du message vaut 1 ou O. Il nous suffit donc
de lire la valeur prsente dans le registre PORTA pour connatre la valeur de notre
bit. Nous allons stocker les bits que nous recevons au fur et mesure de leur
rception dans La variable mdata. Il ne nous reste plus qu' rpternotre action
afin de lire les 7 derniers bits composants notre message MIDI. Cette opration est
effectue dans le bitloop.
-dcodage du message.
Lorsque notre message a t compltement reu, il se trouve dans la variable
mdata. Nous devons maintenant savoir quoi correspond cette valeur.
Nous allons donc comparer cette valeur aux diffrentes valeurs MIDI que nous
avons dclar dans nos DEFI NE.
Si c'est un message MIDI START, nous devons valider ce message.
Un message MIDI START est valide dans 2 cas:
- il est reu aprs mise sous tension de la PIC.
-il est reu aprs la rception d'un message MIDI STOP.
Si ces conditions ne sont pas rencontres, le message MIDI START devra tre ig-
nor.
Si le message est valide, nous positionnerons le RUN_FLAG 1. ce flag indiquera
simplement qu'un MIDI START valide a t reu et que notre mtronome peut faire
son boulot.
A chaque fois qu'un MIDI START valide est reu, nous devons aussi lire le dipswitch
en faisant appel la sous-routine readDipSwitch.
mmoire de fin d' tudes: "' MouseTik ou mtronome visuel MIDI " I 44
SAE institute, brussels- formation audio engineer- nicolas masson -juillet 2009
Si c'est un message MIDI CLOCK, nous devrons le comptabiliser en incrmentant
la variable pulse et ensuite vrifier plusieurs choses.
Si la variable pulse vaut 1 et que le variable beat vaut 0, cela signifie que nous
sommes sur le premier temps de la premire mesure. Nous devrons donc allumer
nos leds en rouge, condition d'avoir pralablement reu un message MIDI START
val ide.
Si la variable pulse est gale 24, nous incrmenterons notre variable beat de 1 et
remettons la variable pulse O.
Si notre variable beat est gale la variable meter, nous sommes arrivs la fin
de la mesure courante et donc au dbut de la suivante et devons simplement re-
tourner la boucle waitmidi.
Si la varibale beat est infrieure la variable meter, nous sommes sur une noire
de la mesure courante et devons allumer nos leds en vert.
Si nous recevons un message MIDI STOP valide, nous mettrons notre RUN_FLAG
zro, ce qui a pour consquence que tout message midi sera ignor.
Un message MIDI STOP est valide si un MIDI STOP ou MIDI CONTINUE a t pral-
ablement reu. Notons que nous ne remettons aucune variable zro dans ce cas.
Cela nous permettra de reprendre au 24 me de noire prs notre mesure en cas de
la rception d'un message MIDI CONTINUE.
Si un message MIDI CONTINUE valide est reu, nous remettrons le RUN_FLAG 1
et le mtronome pourra poursuivre son travail.
Un message MIDI CONTINUE est valide si il a t prcd d' un message MIDI
STOP valide.
Voila, nous venons de parcourir rapidement le droulement de notre programme
et de prciser les conditions qu'il devait respecter pour fonctionner correctement.
Cela conclut l'tude notre code source. J'espre que le lecteur aura pu suivre cette
partie autant que les autres. Nous allons maintenant prsenter le design de la
carte permettant de connecter tout cela.
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI " I 45
SAE institute, brussel s - formation audio engineer - nicolas masson -j uillet 2009
5. Montage 1 Cot 1 Disponibilit
Pour la ralisation de notre montage, identique celui de Paul Messick, nous
avons besoin des composants suivants :
-Une interface DIN 5 broches femelle 180.
- Une Pic 16f84a.
-Un crystal cadenc 4 MHz.
- Une ou plusieurs leds bicolores [rouge et verte].
- 2 rsistances de 4,7 KOhms, placer entre les pins des leds et les pins de la
puce.
-1 rsistance de 750 ohms.
- 4 rsistances de 270 ohms, placer entre le +5V et les pins du dispwitch.
- 2 capacits de 27pF, pour le crystal.
- 1 capacit de 22 IJF, pour l'alimentation fournie par lnerface Dl N.
- 1 Dipswitch 4 positions.
- Un programmateur de PIC Velleman VM 111.
6. le programmateur de PIC Velleman VM 111 et MPLAB
Le programmateur de PIC Velleman VM 111 permet la programmation des PIC ba-
ses sur une mmoire FLASH. Concrtement, ce sontles PIC comportant la lettre
'f' dans leur nom, comme notre PIC16f84a.
Il se connecte sur le port srie d'un PC et peut tre pilot par diffrents pro-
grammes.
C'est aussi une plaque d'exprimentation, c'est dire qu'elle est munie
d'lments permettant de faire ragir la PIC un stimuli, comme la pression d'un
bouton poussoire par exemple.
Consultez le site de velleman [www.velleman.com) pour plus d'informations ce
sujet.
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI" 1 46
SAE institute, brussels - formation audio engineer - nicolas masson - j uillet 2009
7. Perspectives, Amliorations & Conclusions
Nous sommes arrivs faire fonctionner correctement, non sans mal il faut bien
L'avouer, notre mtronome. IL cependant possible d'amliorer son fonctionnement.
Au niveau software, il serait plus lgant d' utiliser Les interruptions pour
dclencher La rception d'un message midi.
Au niveau fonctionnalits, L'tude approfondie du protocole MIDI dvoile que L'on
pourrait trs bien flasher nos Leds sur autre chose que La noire. L'utilisateur pour-
rait chois entre La noire, La croche ou La double croche selon ses besoins par ex-
emple.
Le fait que notre mtronome ne peut fonctionner que si une alimentation de 5 Volts
est fournie peut poser des problmes. En effet, de nombreux constructeurs dvel-
oppant des priphriques munis d'interfaces MIDI ne respectent pas La norme et
n' envoient pas toujours La prcieuse alimentation. Dansee cas, notre mtronome
ne fonctionnera tout simplement pas ! Misre ... IL faudrait donc prvoir depouvoir,
si ncessaire, alimenter Le mtronome via une Limentation branche sur Le sec-
teur. Une Liste non-exhaustive de priphriques posant ce problme [et ils sont
maheureusement nombreux] se trouve dans La section suivante.
Le type de Leds utiliser est une question ncessitant encore quelques investiga-
t ions. IL faudra tenir compte, Lors de notre choix dfinitif, de La taille de celle-ci, de
L' angle de vision qu'elle couvrira !certaines Leds en on un trs petit], ainsi que sa
Luminance. On remarquera d' ailleurs que sur Le prototype fourni, se trouvent deux
Leds aux proprits visuelles diffrentes.
Le bot ier pourrait Lui mme tre inclnipour permettre une vision pluss aise Lors
d' une performance.
Pour conclure, je dirais que je suis trs heureux d'avoir pu concrtiser La ralisa-
tion d' un priphrique MIDI. Les ides et Les envies n'ont pas manqu Lors de La
ralisat ion de ce travail, qui s' est avr un fantastique premier projet au caratre
didact ique trs fort. Mais avant de passer d'autres projets, je vais d'abord ter-
miner celui-ci, c'est dire raliser un mtronome dans un chassis mtallique ro-
buste, qui permettra quelques musiciens de L'emporter sur scne et de L' util iser
de manire concrte. Deux personnes diffrentes m'en on dja command une
version. Si vous connaissez des personnes intresses, donnez Leur mes coordon-
nes.
Je ne peux terminer ce mmoire sans remercier infiniment toutes Les personnes
qui m'ont aid Le raliser et m'ont soutenu tout au Long de ma formation La
SAE. Je pense bien sr en premier Fla [qui a, plus que n'importe qui, su me
supporter, m'encourager, me recadrerl, ma famille, mes amis, sans oublier toute
L' quipe de La SAE, dont les cours ont plus qu'utile plus d'un gard lors de La r-
alisation de ce mmoire et plus particulirement monsieur Pierre Coheur,
mmoire de fi n d'tudes : "MouseTi k ou mt ronome visuel MIDI"' 1 47
SAE institute, brussels - format ion audio engineer - nicolas masson -j uillet 2009
qui m'a sorti d'un problme pour le moins incomprhensible (pour lui comme pour
moi d'ailleurs], mais cela est une autre histoire.
Plus indirectement, j'aimerais aussi remercier Mr Paul Messick, qui m'a offert
toutes les bases ncessaires l'entreprise de la construction du mtronome. Son
document complet se trouve en annexe de ce document. Le schma lectrique
utilis dans notre application, est similaire au sien, hormis le fait qu'un autre type
de PIC a t utilis et n'est donc pas dtaill plus ici.
En un mot, adress tous: MERCI !
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIOI " I 48
SAE institute, brussels - formation audio engineer - nicolas masson - juillet 2009
8. Produits similaires dans le commerce
Dans le commerce, je n'ai trouv qu'un seul appareil permettant de r liser
l'application que nous avons dvelopp ici. Il s'agit du MIDI Solutions Beat li nd ica-
tor [140 USD].
Voici une liste non exhaustive de produits qui sont connus comme ne fournissant
pas d'alimentation MIDI et qui ne sont donc pas conformes la norme en vigueur,
cette liste provient de la page FAQ du site de MIDI Solutions:
- Aardvark DirectPro 24/96
- Ahlborn DS-26
- A ka i M PC500
-Apple MIDI interface
- Alesis ControlPad, Micron
- Basyn M 1 Dl Controller
-Boss FC-50, GT-5, GT-8, GT-10, GT-Pro, RC-50
- Ca dac A,E,F,J-Type Consoles
- Classic Organ Works MIDijetPro
- Clavia C1, G2, Nord Electro 3, Nord Stage
- CME U2MIDI
- Digidesign 003 Factory and Rack, Comma nd 18
- Digitech GNX4, GSP11 01, VHM5
- Echo Audiofire2, Audiofire8, Layla3G
- Edirol UM-1, UM-2 and UM-4 USB MIDI Interfaces [the newer UM-1 EX and
UM-2EX do provide power!. UA-25, UM-550
- Elektron Monomachine
- E-MU 0404 USB 2.0, Xboard 49 and 61, Xmidi 1 x1
-Evolution MK-149
- Faderfox DJ2, DX2, LX2
- Fatar Studio-37
- Focusrite Saffire
- Galanti Praeludium
- Hammond XK-1
- Hosa USM422
- JLCooper MCS2
- Korg earlier models of the Triton Studio, X50
- Kurzweil MIDIBoard, PC3X
- M-Audio Midisport 1 x1, 2x2, 4x4 USB MIDI Interfaces [the 8x8 does provide
power!. Radium
- Moog Little Phatty Tri bute Edition
- Musictech Music Maker
- Novation nia 2/4
mmoire de fin d' tudes : "MouseTik ou mtronome visuel MIDI" 1 49
SAE institute, brussels - format ion audio engineer - nicolas masson - juillet 2009
- Roland A-37, AX-7 [older models]. FR-3, FC-300, PC-160A, PC-200, PC-300,
PK-5 [PK-5A does provide power]. VG-99.
- RME Fireface 800, HDSP 9632
- Tascam DP-02CF
-TC Electronic G-System
- Use Audio Plugiator
- Voce MIDI Drawbar, V3
- Yamaha 01X, EZ-TP, GT1, GT2, N P-30, P70, P85, P120, P200, P250, PSR275, WX7
-Zoom G9.2tt
mmoire de fin d'tudes: ''MouseTik ou mtronome visuel MIDI" 1 50
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
Cl)
C"'
ctl
-
c:
0
E
Cl)
L.
-
0
c:
Cl)
"C
Cl)
::J
C"
:
-
u
Cl)
- Cl)
ctl
E
Cl)
.s::.
u
Ill
Cl)
...J
ctl
Pl
MIDI IN
. C3

uF
1 14
Ul
VDD RA3
3
RTCC
RA2
RA!
RAO
"'D"
MCLR
OS Cl
RB?
RB6
4 MHz
RB5
27 pF 15
RB4
RB3
RB2
GND
RB!
RBO
PIC16C54
Rl
4.7K
R3
/FLASH
GND
1 1 1
Dl
BICOLOR LED
Title
750
Paul Messic:k
paul@maxmidi.com

DIY MIDI METRONOME
SIZe jDc:lc:ument-Number
A
Date: 16. 19981Sheet 1 of
REV
1

Lt)
:.__o--
00
_o
:EN

::J:-:::::
Ill ::::>
"'>
Q) c
E o
0 Ill
c Ill
o ro
.:, E
<V

:::J 0
0
.:.:. c
Q) ....
Ill Q)
:::J Q)
0 c
:::;: "0>
c
"'
Ill 0
Q) -
-o"
:::J ::::>
- ro
Q)
. c
"1:J .2
c-
- ro
E
"0 0
"'-
.
0 Vl
Ew
Q) Ill
E
....
.0

::::>

c
w
<{
Vl
b. Le code source de notre application.
;**********************************************************************
; Name : MouseTick*
; Date : 19/ 07/ 2009 *
; Version : 1. 0 *
; Circuit: PIC16F84a*
; Author : nicomasson@gmail . com*
;**********************************************************************
;
*
; Required file P16F84a.inc
*
;
*
;**********************************************************************
; *
; Notes :
*
; *
;Hardware :
*
; - XTal : 4MHz
*
; - lcycle : l ~ s (4 clock pulses is 1 cycle on pic16f84) *
; *
; Midi serial protocol
*
; - Logical 0 is current on *
; - Rise and fall times are max 2 ~ s *
; - lbit lasts 3 2 ~ s
*
; - message is 10 bits long *
; - 1 start bit *
; - 8 data bit *
; - 1 stop bit
*
; *
; Timer settings
*
; - Prescaler at 1/8 (TMRO pulses every 8 cycles or ~ s )
*
; - 1 bit is 32 ~ s thus timer has to pulse 4 times *
;
*
; Author details *
; - Source code largely inspired by Paul Messick ' s
*
; DIY midi metronome and adapted for the 16f84 PIC series *
; (check out http: // www . maxmidi . com/ diy/metro/)
*
; *
;
*
; **********************************************************************
********************************************************************** ,
; SCHEMATIC DIAGRAM
********************************************************************** ,
; +---+ +- - - +
; Green LedPORTA . 2 <- Il 181-> PORTA . ] Red Led
; GroundedPORTA . 3 ->12 171 <- PORTA . OMidi IN
; GroundedPORTA. 4 ->13 PIC 1 61 - - XTAL ( 4MHz )
mmoire de fin d' tudes : "MouseTik ou mtronome visuel MIDI "I 52
SAE institute, brussels - formation audio engineer - nicolas masson - juillet 2009
; (+SV) MCLR --14 16F 151-- XTAL
; (GND) Vss --15 84A 141-- Vdd ( +5V)
; GroundedPORTB . O ->16 131<- PORTE . 7Dip Switch
; GroundedPORTB . 1 ->1 7 121<- PORTE . 6Dip Switch
; GroundedPORTB . 2 - >18 111<- PORTB . 5Dip Switch
; GroundedPORTB . 3 ->19 101<- PORTE. 4 Dip Switch
; +- ---- --- - +
; **********************************************************************
LIST p=16f84 ; Dtinition du processeur
#include <p16F84 . inc> ; Dtinitions des constantes du PIC16f84
CONFIG CP OFF & WDT ON & PWRTE OFF & XT OSC
; CONFIG' prcise les paramtres encods dans le processeur au mo-
menrde
; la programmation du processeur . Les dtinitions sont dans le tichier
include .
; Voici les valeurs et leurs dtinitions :
;_CP_ON Code protection ON : impossible de relire
;_CP_OFF Code protection OFF
;_PWRTE_ONTimer reset sur power on en service
;_PWRTE_OFFTimer reset hors-service
;_WDT_ON Watch-dog en service
;_WDT_OFFWatch-dog hors service
;_LP_OSC Oscillateur quartz basse vitesse
;_XT_OSC Oscillateur quartz moyenne vitesse
;_HS_OSC Oscillateur quartz grande vitesse
; RC OSC Oscillateur rseau RC
; *********************************************************************
; ASSIGNATIONS
*
; *********************************************************************
; *********************************************************************
; MACRO
*
; *********************************************************************
; see PIC16F84A memory organisation and
; bank select operations for details
BANKO macro ; Switch to bank 0 in RAM - > PORTA, PORTE, etc ...
bef STATUS , RPO
en dm
BANKl macro ; Switch to bank 1 in RAM -> TRISA , TRISB , tee ...
bsf STATUS , RPO
en dm
********************************************************************* ,
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI "I 53
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
; VARIABLES DECLARATIONS
*
; *********************************************************************
CBLOCK Ox 20 ; SRAM user area start adress (BANKO)
me ter
pulse
beat
mdata
bits
flags : 1
ENDC
; 8 bits variables
1 ; bars per measure from dipswitch
1; incoming midi clock pulse count
1 ; current beat of this measure
1; incomming midi data byte
1 ; bit count for serial port
; flag byte
; end zone
********************************************************************* ,
; DEFI NE
*
; *********************************************************************
#DEFINE RUN_ FLAG flags , O; lbit from flags used as r un flag
; running flag , run=l , stop=O
#DEFINEMIDI_INPORTA , O ; midi ser ial input pin
#DEFINE RED LED PORTA , ] ; red led output pin
#DEFINE GRE LED PORTA, 2 ; green led output pin
#DEFINE CRY_FLGSTATUS , O; carry flag shortcut
#DEFINE ZRO FLG STATUS , 2 ; zero flag shortcut
#DEFINE OPTIONVAL0x82 ; mask for prescaler (1/8) i nit in OPTION REG
#DEFINEPPQN0x18 ; 24 clock messages per qua r ter note
#DEFINE NBITS Ox08 ; number of data bits per midi message
; MIDI MESSAGES
#DEFINE MCLOCK Oxf8 ; clock message
#DEFINE MSTART Oxfa ; start message
#DEFINE MCONT Oxfb ; continue message
#DEFINE MSTOP Oxfc ; stop message
********************************************************************** ,
; START ON RESET
*
;**********************************************************************
org OxOOOO ; start adress on reset
goto init ; goto beginning of progr am
; *********************************************************************
; INITIALISATIONS
*
;*********************************************************************
init
bef STATUS , RPl
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI" 1 54
SAE institute, brussels - format ion audio engineer- nicolas masson - juillet 2009
BANKl
; OPTION REGISTER
movlwOPTIONVAL ; charger masque
movwfOPTION_ REG; initial iser r egistre option
; PINS SETTINGS
; MIDI IN
bsf MIDI IN ; midi in ( RAD) as input
; LEDS
bcfRED LED ; red led
bef GRE LED ; green led
BANKO
; TURN OFF LEDS
bef GRE LED
bef RED LED
; green led
; red led
; READ DIPSWITCH
trigger (RAl )
tri gger ( RA2)
call readDipSwitch ; read the dipswitch
as output
a s outp u t
********************************************************************* ,
; VARIABLES INITIALISATION
*
; *********************************************************************
clrfpulse; pulse 0
clrfbeat ; beat = 0
********************************************************************* ,
; MAIN PROGRAM
*
; *********************************************************************
waitmidi
BANKO
clrwdt ; clear watchdog timer
; wait for star t bit ( start bit est dct lors d ' une transi-
tion de tension de +5V ( zr o logique ) vers OV ( un logique ))
; WAIT FOR INCOMING MIDI MESSAGE
btfsc MIDI IN; loop if MIDI IN i s set (RAO is high) ou boucler si RAO
vaut 5V et- quivaut un b i c de v a leur logi q ue 0
; on en attendant donc que le signal pa s se la valeur
logique 1 , qui quivaut OV - > on attend une trans i tion sur flanc de -
scendant .
; remember logical 0 is +5V : D
gotowaitmidi ; skip goto i f MIDI_ IN is clear (RAD i s low)
; START PROCESSING OF MIDI MESSAGE
clrf bits ; reset b i t counter
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI"I 55
SAE institute, brussels - formation audio engineer- nicolas masson- juillet 2009
movlw0x02
movwfTMRO
startbit
; WAIT end of start bit
movlw0x04
subwfTMRO, w; 4 - TMRO in w
btfss CRY_ FLG; break loop if TMRO 4
goto startbit ; loop if TMRO < 4
; Start bit over , read flrst data bit
movlw0x02
movwfTMRO
; READ MIDI IN
bef CRY FLG; carry at 0
btfscMIDI IN ; if midi in is zero , leave Carry at 0
bsf CRY FLG ; if midi in is one , set Carry at 1
; STORE BIT READ
rrf mdata , 1 ; rotate carry in mdata
; COUNT RECEIVED BITS
incfbits ; flrst bit
bitloop
; WAIT
movlw0x03 ; wait for next bit
subwfTMRO, w; TMRO - 3 in w
btfssCRY_ FLG ; loop if TMRO ! = 3
gotobitloop; skip goto if TMRO == 3
clrf TMRO ; reset timer for next bit
nop ; Rise and fall times are less than 2 ~ s
nop
; READ MIDI IN
bef CRY FLG; carry at 0
btfscMIDI IN ; if midi in is zero , leave Carry at 0
bsf CRY FLG ; if midi in is one , set Carry at 1
; STORE BIT READ
rrf mdata , l ; put carry in mdata (rotate all 8 bits from right to
le ft)
; COUNT RECEIVED BITS
incfbits ; 1 more bit
; check if 8bits message complete
movlwNBITS ; read all 8 bits yet ???
subwfbits , w; 8 - bits in w
btfssCRY_FLG ; break loop if bits 8
gotobitloop; loop if bits < 8
; MESSAGE PARSING
; CLOCK ?
movlwMCLOCK; Oxf8
mmoire de fin d' tudes: " MouseTik ou mtronome vi suel MIOI "I 56
SAE institute, brussel s - formation audio engineer- nicolas masson - juillet 2009
subwfmdata , w ; mdata - MCLOCK in w
BtfscZRO FLG ; skip if not equal
gotoclock ;
; START ?
movlwMSTART; Oxfa
subwfmdata , w ; mdata - MSTART in w
BtfscZRO FLG ; skip if not equal
gotocstart
; CONTINUE ?
movlwMCONT; Oxfb
subwfmdata , w ; mdata - MCONT in w
BtfscZRO FLG ; skip if not equal
gotoccontinue
; STOP ?
movlwMSTOP; Dxfc
subwfmdata , w ; mdata - MSTOP in w
BtfscZRO_ FLG ; skip if not equal
gotocstop
; ELSE ??? RESTART
1 1 1
gotowaitmidi
clock
btfssRUN FLAG; is the clock able to run ?
gotowaitmidi ; no
incfpulse ; increment pulse counter
movlwOxDl ; flrst pulse ?
subwfpulse , w ; pul se - 1 in w
BtfssZRO_FLG ; skip if equal
gotochk_la
movlwOxOD ; flrst beat ?
subwfbeat , w ; beat - 0 in w
BtfssZRO FLG ; skip if equa l
gotochk_ la
bsf RED LED ; flash the red led
goto waitmidi
chk la
movlwPPQN ; is it the flrst (24th + 1 ) pulse
subwfpulse , w ; pulse - PPQN in w
BtfssZRO FLG ; skip if equa l
gotov_ fB
; it was the last pulse
clrfpulse ; clear pul se
incfbeat ; next beat
;
movfmeter , w ; is beat = bpm (end of measure?)
subwfbeat , w ; beat - meter in w
BtfssZRO FLG ; skip if equa l
gotochk_g ; flash green l e d
mmoire de fin d'tudes: "MouseTik ou mtronome vi suel MIDI " I 57
SAE institute, brussels- formation audio engineer- nicolas masson - juillet 2009
clrfbeat ; end of measure , reset beat
gotowaitmidi
chk_g
bsf GRE LED ; turn on green led
gotowaitmidi
; Turn off led
v f8
movlwPPQN/8 ; is pulse equal to ppqn/8
; led rema i ns li gh t ed for 6 pulses thus
subwfpulse , w ; pulse - PPQN/8 in w
BtfssZRO FLG ; skip if equal
gotowaitmidi
bef GRE LED ; turn off both leds
bef RED LED
goto waitmidi
cs tart
clrfpulse ; it ' s a start , clear pulse
clrfbeat ; beat too
movlwOxOf ; RB4-7 as outputs
BANKl
movwfTRISB
BANKO
clrfPORTB ; force floating input low
; nop
; nop
movlwOxff ; RB4 - 7 as inputs
BANKl
movwfTRISB
BANKO
; nop
; nop
movfPORTB,
andlwOxfO
movwfmeter
w; read dipswitch
; mask trashes
; put in bpm (beat per MEASURE)
swapf meter ; put in lower nibble
incfmeter ; one greater (dipswitch starts at 0 !!!)
bsf RUN FLAG; RUN RUN RUN
gotowaitmidi
ccontinue
movlw0xf9 ; RAl-2 as outputs
BANKl
movwfTRISA
BANKO
bef GRE LED ; turn off l e ds
bef RED LED
mmoire de fin d' tudes: "MouseTik ou mtronome visuel MIDI " 1 58
SAE institute, brussels- formation audio engineer - nicolas masson - juillet 2009
bsf RUN FLAG; RUN RUN RUN
gotowaitmidi
cs top
movlw0xf9 ; RAl-2 as outputs
BANKl
movwfTRISA
BANKO
bef GRE LED ; turn off leds
bef RED LED
bef RUN_FLAG; STOP STOP STOP
goto wai tmidi
********************************************************************* ,
; SUBROUTINES
*
********************************************************************* ,
; *********************************************************************
;readDipSwitch
. --- - -- - ------ ,
;Description :
READ THE NUMBER OF BARS PER MEASURE SELECTED BY USER ON DIPSWITCH
READ DIPSWITCH AND PUT THE RESULT IN THE 'meter' VARIABLE
; *********************************************************************
readDipSwitch
; READ THE NUMBER OF BARS PER MEASURE SELECTED BY THE USER ON THE
DIPSWITCH
; READ DIPSWITCH AND PUT THE RESULT IN THE ' me ter' VARIABLE
movlwOxOf ; RB4-7 as outputs
BANKl
movwfTRISB
BANKO
clrfPORTB ; force floating inputs low
nop
nop
movlwOxff ; RB4-7 as inputs
BANKl
movwfTRISB
BANKO
nop
nop
movfPORTB, w; read dipswitch
andlwOxfO ; mask trashes on RB0 - 3
movwfmeter ; put in bpm (beat per MEASURE)
swapf meter ; put in lower nibble
incfmeter ; one greater (coz dipswitch starts at 0)
return ; exit subroutine readDipSwitch
********************************************************************* ,
; END OF PROGRAM
*
mmoire de fin d'tudes : "MouseTik ou mtronome visuel MIDI" 1 59
SAE institute, brussels - format ion audio engineer - nicolas masson - juillet 2009
*********************************************************************
,
END
mmoire de fin d' tudes: "MouseTik ou mtronome visuel MIDI" 1 60
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
1 O. Rfrences
- La page du site de Paul Messick contenant les informations sur son mtronome:
http://www.maxmidi.com/diy/metro/index.html
-MIDI technical fanatic's brainwashing center: La meilleure ressource concer-
nant le MIDI trouve jusqu' prsent sur le net. Trs complet et bourr de d-
tails plus intressants les uns que les autres. http://www.blitter.com/-russtopia/
MIDI/-jglatt/
-le site du MMA: http://www.midi.org/, pour celui qui veut acheter les specs MIDI,
mais une source d'informations non ngligeable et trs bien faite.
-le site de bigonoff qui contient le cours sur l'utilisation de la pic16f84a !vital !] :
htt p ://a bcelectro nique. com/big o noff 1
- Wikipedia :
http://en.wikipedia.org/wiki/Baud
http://en.wikipedia.org/wiki/Time_signature
http :/1 en. wi ki ped ia. o rg/wi ki/0 pto- isolator
http ://fr. wi ki ped ia. org/wi ki/1 nternati on a l_M id i_Association
http:/ /fr.wiki ped ia.org/wiki/M us ica l_l nstru ment_Dig ita l_l nterface
Un mtronome software pour linux, dont le code source s'est avr utile: le KMet-
ronome. http :/ /kmetronome.sou rceforge .net/
mmoire de fin d'tudes: "MouseTik ou mtronome visuel MIDI" 1 61
SAE institute, brussels- formation audio engineer- nicolas masson- juillet 2009
11. Contact
email: nicomassonragmail.com
mmoire de fin d' tudes: "MouseTik ou mtronome visuel MIDI" 1 62
SAE institute, brussels - formation audio engineer- nicolas masson - juillet 2009