Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

envoi messages MIDI avec un pic



  1. #1
    blacksword

    envoi messages MIDI avec un pic


    ------

    Bonjour à tous! Le but de mon projet est de pouvoir envoyer des évènements midi à mon synthétiseur (un Roland Juno-D pour ceux que ça intéresse). pour la partie hardware j'ai utilisé le schéma présent sur ce site. Pour l'inverseur j'ai utilisé celui-ci, il est alimenté en 5v, le signal arrive par 3A et ressort par 3Y. J'ai reproduis le reste du schéma à l'identique. Bon forcément je n'arrive pas à faire jouer des notes à mon synthé c'est la raison pour laquelle je suis ici. J'utilise comme microcontrôlleur un PIC16F628A, les bits de config sont à 0x3FF8. Tout le circuit est alimenté via le PICKit 2 car j'ai oublié mon alim 5v chez mes parents. Voici mon code :
    Code:
    #ifndef _XTAL_FREQ
    #define _XTAL_FREQ 4000000
    #endif
    #include <htc.h>
    #include <pause.c>
    void send(char x) {	
    	while(!TXIF);
    	TXREG = x;
    }	
    void envoiMIDI(int on, char note, char velocity) {
    	int noteon=0x90,noteoff=0x80;
    	if(on==1) {send(noteon);} else {send(noteoff);}
    	send(note);
    	send(velocity);
    }
    void main(void) {
    	SPEN = 0x1;
    	BRGH = 0x1;
    	TXEN = 0x1
    	SPBRG = 0x7;
    	TRISB = 0x0;
    	CMCON = 0x07;
    	TRISA = 0x0;
    	PORTA = 4; //On allume une del pour être sûr que le programme se lance
    	int on=0x1,off=0x0;
    	char note=0x3C,velocity=0x40;
    	while(1) {
    	envoiMIDI(on,note,velocity);
    	PORTA=0;
    	pause100ms(10);
    	envoiMIDI(off,note,velocity);
    	PORTA=4;
    	pause100ms(10);
    	}
    }
    La DEL s'allume et s'éteint bien mais mon synthé ne réagit pas. Avez-vous une idée de ce qui cloche dans tout ça? Merci d'avance!!

    -----

  2. Publicité
  3. #2
    RISC

    Re : envoi messages MIDI avec un pic

    Salut,

    Attention...Le Pickit2 ne peut fournir que 25 ou 30mA ...vérifie que ton alimentation ne s'écroule pas sur ton montage...

    a+

  4. #3
    blacksword

    Re : envoi messages MIDI avec un pic

    oui je viens de vérifier la tension d'alim et effectivement elle est à 4,72v et l'inverseur requiert 4,75v minimum pour fonctionner... Je sens que demain je vais pouvoir aller m'acheter un régulateur 5v. Sinon au niveau du code devrait pas y avoir de problème?

  5. #4
    blacksword

    Re : envoi messages MIDI avec un pic

    bon j'ai fait une vraie alim 5v, j'ai testé mon inverseur et il était naze du coup j'ai fait un inverseur avec un AOP rail-to-rail mais ça ne marche toujours pas. si j'utilise l'inverseur le synthé affiche "MIDI communication error" et si je met seulement une résistance de 220Ω entre Tx et ma prise MIDI le synthé ne joue tjr rien et en plus il met beaucoup de temps à réagir quand j'appuie sur une touche. j'ai fais un code simplifié que voici :
    Code:
    #define _XTAL_FREQ 4000000
    #include <htc.h>
    void main(void) {
    	TXEN = 1;
    	SPEN = 1;
    	BRGH = 1;
    	SPBRG = 7;
    	while(1) {
    	while(!TXIF);
    	TXREG = 0x90; //noteon sur canal 1
    	while(!TXIF);
    	TXREG = 0x3C;	//DO4
    	while(!TXIF);
    	TXREG = 0x40;	//Velocité à 64
    	__delay_ms(100);
    	while(!TXIF);
    	TXREG = 0x80; //noteoff sur canal 1
    	while(!TXIF);
    	TXREG = 0x3C; //DO4
    	while(!TXIF);
    	TXREG = 0x40; //Release à 64
    	__delay_ms(100);
    	}
    }
    Je pense à un problème de configuration de PIC mais je ne sais pas, c'est mon premier programme "série". Des suggestion? Merci d'avance!

  6. #5
    blacksword

    Re : envoi messages MIDI avec un pic

    bon pour les futurs lecteurs et ceux que ça intéresse ça marche!!! J'ai refais le code et j'ai câblé directement la sortie du pic sur la prise MIDI, la masse à la masse de la prise et l'alim (du PICKit 2) à l'alim de la prise via une résistance de 220Ω. Je vous met le code que j'ai fais, celui là joue le début d'au clair de la lune
    Code:
    #define _XTAL_FREQ 4000000
    #include <htc.h>
    #include "pause.c"
    void send(int x);
    void envoiMIDI(int on, int note, int velocity);
    void main(void) {
    	TXEN = 1;
    	SPEN = 1;
    	BRGH = 1;
    	SPBRG = 7;
    	CMCON = 7;
    	TRISA = 0;
    	PORTA = 4;
    	int pause = 3;
    	while(1) {
    	envoiMIDI(1,60,64);
    	pause100ms(pause);
    	envoiMIDI(0,60,64);
    	pause100ms(pause);
    	envoiMIDI(1,60,64);
    	pause100ms(pause);
    	envoiMIDI(0,60,64);
    	pause100ms(pause);
    	envoiMIDI(1,60,64);
    	pause100ms(pause);
    	envoiMIDI(0,60,64);
    	pause100ms(pause);
    	envoiMIDI(1,62,64);
    	pause100ms(pause);
    	envoiMIDI(0,62,64);
    	pause100ms(pause);
    	envoiMIDI(1,64,64);
    	pause100ms(pause);
    	envoiMIDI(0,64,64);
    	pause100ms((2*pause));
    	envoiMIDI(1,62,64);
    	pause100ms(pause);
    	envoiMIDI(0,62,64);
    	pause100ms((2*pause));
    	envoiMIDI(1,60,64);
    	pause100ms(pause);
    	envoiMIDI(0,60,64);
    	pause100ms((2*pause));
    	envoiMIDI(1,64,64);
    	pause100ms(pause);
    	envoiMIDI(0,64,64);
    	pause100ms(pause);
    	envoiMIDI(1,62,64);
    	pause100ms(pause);
    	envoiMIDI(0,62,64);
    	pause100ms(pause);
    	envoiMIDI(1,62,64);
    	pause100ms(pause);
    	envoiMIDI(0,62,64);
    	pause100ms(pause);
    	envoiMIDI(1,60,64);
    	pause100ms(pause);
    	envoiMIDI(0,60,64);
    	pause100ms(5*pause);	
    	}
    }
    void send(int x) {
    	while(!TXIF);
    	TXREG = x;
    }
    void envoiMIDI(int on, int note, int velocity) {
    	if(on==1) {
    		send(144);
    	}
    	else {
    		send(128);
    	}
    	send(note);
    	send(velocity);
    }
    en espérant que ça peut aider quelqu'un!
    P.S : j'ai crée moi même la fonction pause100ms(x). Elle fait simplement une pause de x fois 100ms.

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. Envoi d'informations sur MODBUS avec un PIC
    Par jorg1n dans le forum Électronique
    Réponses: 58
    Dernier message: 16/08/2012, 16h23
  2. Pic du Midi : on continue avec quelques pépites...
    Par jbfe dans le forum Matériel astronomique et photos d'amateurs
    Réponses: 7
    Dernier message: 30/07/2009, 14h51
  3. envoi de messages avec outlook express 6
    Par michgaill03 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 16/12/2008, 14h20
  4. Envoi de données midi ave un pic
    Par LTHOMAS dans le forum Électronique
    Réponses: 7
    Dernier message: 09/08/2008, 11h30
  5. ennuis avec outlook express envoi de messages compressés
    Par roland59 dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 17/10/2006, 20h31
Découvrez nos comparatifs produits sur l'informatique et les technologies.