Jump to content

réalisation d'une "interface" midi assez particulière...


lthomas
 Share

Recommended Posts

Bonjour, je débute dans la programmation des pics avec les cous de Bigonoff... Bon c'est pas évident...

Je suis également musicien, et j'ai une douzaine de pads électroniques (avec sortie midi) que j'aimerai brancher sur une autre interface midi.

Le problème c'est que les numéros des notes ne sont pas compatibles : les pads envoient 33, 45, 67,... et l'interface attend 55, 56, 57... par exemple. J'aimerai donc faire une interface midi permettant de changer le numéro de la note tout en conservant les messages note on et note off, ainsi que le paramètre vélocité. C'est assez simple, mais dure à faire (pour moi en tout cas)...

Alors je suis à la recherche de routines d'envoi et de réception des messages midi en assembleur, pour que je puisse réaliser un programme pour un PIC16F628A assez façilement... USART ça ne me parle pas trop ! Si, en théorie ça va, mais dès qu'on passe à la pratique ça se gâte... Donc une routine d'envoie et une routine de réception qui fonctionnent me simplifiraient énromément la vie ! Est-ce que quelqu'un aurai ça ? A mois que quelqu'un ai d'autres idées ?

Merci pour votre aide

A+

Link to comment
Share on other sites

Bon ben je crois que je devrai me débrouiller seul...

J'ai juste une question au niveau des signaux midis (exemple pour un note on sur canal1)

Est-ce comme ça :

.... - start bit - 10010001 - stop bit - ... - start bit - 0"num note" - stop bit - ... - start bit - 0"velocité" - stop bit - .......

Ou alors comme ça :

.... - start bit - 10010001 0"num note" 0"velocité" - stop bit - ...

Faut-il envoyer les 3 octets en même temps ou un après l'autre ?

Le niveau au repos est bien 0V ? Dans ce cas le start bit est un 1 ?

Merci pour vos réponses

Link to comment
Share on other sites

salut, le "mios" c'est l'OS des midibox, une fois chargé (avec le bootstrap loader), il te reste à écrire une application que tu vas uploader dans le PIC via MIDI.

pour charger le mios via MIDI, il te faut avant charger le "bootstrap loader" avec un programmateur de PIC.

- tu télécharge le skeleton  (page download)

- tu y ajoutes ton code en utlisant les fonctions implémentée dans le Mios (celle dont tu as besoin existe déjà):http://www.ucapps.de/cmios_fun.html

pour chaque fonction il y a des exemples là.

ensuite tu charge ton appli dans le PIC via MIDI.

les fonction dont tu auras besoin:

"USER_MPROC_NotifyReceivedEvent" pour récupérer le canal/numéro/velocité de note entrant, les trois byte seront mis dans MIOS_PARAMETER_1, MIOS_PARAMETER_2 et MIOS_PARAMETER_3

"MIOS_MIDI_TxBufferPut" pour envoyer sur ta sortie MIDI une (autre) note

exemple (pour l'idée juste):

call USER_MPROC_NotifyReceivedEvent

///ici tu peux déjà t'assurer que le message est bien un message de note en comparant la valeur  du registre "MIOS_PARAMETER_1"///

TRANSP_note_1

movlw    [le numéro de la 1ere des notes qui doit être transposée]//tu charge w avec le num. de note que tu veux modifiée///

cpfseq    MIOS_PARAMETER_2, banked//

goto TRANSP_note_2

movlw    (le canal de la note que tu veux au final)

call        MIOS_MIDI_TxBufferPut

movlw    (le numéro de la note que tu veux au final)

call        MIOS_MIDI_TxBufferPut

movf      MIOS_PARAMETER_3, 0

call        MIOS_MIDI_TxBufferPut

call        MIOS_MIDI_EndStream

TRANSP_note_2

movlw    (le numéro de la 2eme note  qui doit être transposée)

cpfseq    MIOS_PARAMETER_2, banked

goto TRANSP_note_3

movlw    (le canal de la note que tu veux au final)

call        MIOS_MIDI_TxBufferPut

movlw    (le numéro de la note que tu veux au final)

call        MIOS_MIDI_TxBufferPut

movf      MIOS_PARAMETER_3, 0

call        MIOS_MIDI_TxBufferPut

call        MIOS_MIDI_EndStream

TRANSP_note_3

idem...

ça risque de pas marcher aussi simplement, c'est vraiment pour t'orienter...y'en a sûrement des plus calé ici qui pourront affiner tout ça -)

Link to comment
Share on other sites

Bon maintenant pour écrire l'application en assembleur, en regardant ton exemple ça correspod à ce que je veux faire ! Mais pour écrire le .asm j'écris juste le programme comme ça ou il faut rajouter d'autres éléments genre initialisation, END etc... ?

Une fois que j'ai mon .asm il faut que je le convertisse en .hex pour l'envoyer ? Si oui comment ?

Merci ! Je commence à y voir plus claire !  :)

A+

Link to comment
Share on other sites

il faut définir les variables dans "app_defines.h"

ensuite dans le fichier "main.asm" tu as une entrée "USER_MPROC_NotifyReceivedEvent", juste aprés tu appelle ta fonction, que tu mets dans un fichier séparé -qu'il faut déclarer dans le main.asm (à la fin) avec "include...."

en fait par apport à l'exemple que je t'ai donné plus haut, je pense que tu n'as même pas besoin d'utiliser "call  USER_MPROC_NotifyReceivedEvent", la fonction se fait dans la boucle principale, à partir de là, dans ta prog, tu commence directement à analyser les reg. mios_parameter_1 2 et 3

il te faut aussi remettre à zéro les reg. mios_parameter_1 2 et 3 quand ta fonction est finie

edite ton appli avec mplab (lien et tutoriel sur Ucapps.de), compile-la avec ce programme.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...