Bonjour,
But recherché : Je cherche à jouer une note de musique en appuyant sur un interrupteur. Pour celà, je veux utiliser un PIC16F88 qui va transmettre via l'USART un code MIDI au synthé.
Paramètres de la connection MIDI : c'est un transfert de 1bit start + 8bits + 1bit stop sans parité en asynchrone à 31.250 bauds.
Le code MIDI : 1 octet de statut ( 91 = jouer une note sur le canal MIDI 1 / 81 = ne plus jouer une note sur le canal 1) + 1 octet note ( 60 = do ) + 1 octet volume ( 7F = volume max ).
Voici mon programme :
#pragma bit detect @ PORTB.0 //interrupteur
#pragma bit led @ PORTB.1
void main(void)
{
OSCCON = 0b01100110; //oscillateur interne à 4MHz
TRISB = 0b00000001;
TX9 = 0; //pas de 9eme bit
SYNC = 0; //mode asynchrone
BRGH = 0; //faible vitesse
SPBRG = 0x01; //31.250bauds
for(;; ) { if(detect==1)
{ TXEN = 1; //demande d'emission
TXREG = 0x91; //canal synthé actif
TXREG = 0x60; //note do
TXREG = 0x7F; //volume max
led=1;
}
else { TXEN = 1;
TXREG = 0x81; //canal synthé inactif
TXREG = 0x60;
TXREG = 0x7F;
led=0;
}
}
}
Je pense que je ne sais pas bien paramétrer l'USART car quand j'appuie sur l'inter, il ne se passe rien ( j'ai mis une led sur RB5 pour constater un transfert de données ). La demande est bien prise en compte ( quand j'appuie sur l'inter, une autre led témoin s'allume ).
Voilà, pouvez-vous me dire où je me trompe pour déclarer la transmission et pour l'envoi des octets ?
Merci.
Greg
-----