por Vonnilmam » 29 Dez 2009 19:46
O blackmore....agora eu saquei o que vc quer fazer...
Ok, então faça da forma que te indiquei, eu trabalho com musica eletrônica a nível profissional (com toda a modestia, 90% dos instrumentos musicais nacionais são projétos de nossa autoria)...e todos são baseados no procolo MIDI 1.0..
A melhor forma é vc colocar na memória externa todos os parametros que desejar, no meu caso eu leio um potencometro com resolução do AD=8 bits (aliais são 16 potenciometros), pego cada valor e direciono diretamente para ler as posições de memória, aí nessa memória eu faço a curva que eu desejar em relação ao potenciometro (se vc não sabe a melhor curva para o potenciometro é uma curva exponencial, como um pot desse tipo é dificil de achar, fazendo assim na memória podemos gerar qualquer curva, sacou)...utilizo também outros parametros:
Por ex.: quando desejo adcionar vibrato ao timbre, é lá na memória que contém uma tabela (8 bits) onde eu "monto" a curva que eu quero afim de poder pegar esses valores e enviar para a serial....o mesmo se faz com os timbres....desta forma eu tenho a liberdade de comandar o timbre e também a altura (volume) indivualmente de cada timbre quando são chamados pelo usuário...
Modestia parte MIDI é comigo mesmo, sou doido por musica eletrônica, ja´mexo com isso a mais de 20 anos...heheheh, os cabelos estão brancos já!
Qual MCU vc esta usando? tem usart?...se tem é facil, basta vc programar para o TX enviar em 31250k....se não tem usart, me avisa que te envio uma rotina para tx midi via software (assembler)....melhor já vou postar aquí:
O protocolo midi parece ser simples de implementar, mas não o é, dependendo da aplicação e da sua complexidade, os recursos de software vão muito além, e envolvem técnicas complexas....
Uma dica é vc procurar utilizar tramas sisex entremeadas com o padrão midi basico, a trama sisex esta dentro do procolo midi e serve para comunicações especiais entre equipamentos do proprio fabricante, as vezes os equipamentos: teclados, samplers etc, não reconhecem o midi standart....se vc observar no protocolo midi existe os mesmos comandos em standart e também e sisex...observa isso!
; *********************************
; * Driver serial MIDI 31250 BPS *
; *********************************
; Este Driver serial assincrono envia dados com Baud rate de 31.250 bps,
; o BIT "COM2" é o pino de saida de dados seriais
;
Serial2:
Bank0
Movlw .8
Movwf Cont_Com2
Bcf Com2 ; START BIT
Prox:
Call TemporizaBit ; TEMPO de duracao do bit enviado
Rrf Twreg, F ; prox bit vai ao Carry
; TESTE SE E' 1 OU 0
Btfsc Status, C ; Ve se e' 1 ou 0. se for 0 executa "eh0"
Eh1:
Bsf Com2 ; Era 1. Seta a saida
Eh0:
Btfss Status, C ; Se era 1 este teste desvia
Bcf Com2 ; E' 0. Zera a saida
; ATUALIZA CONTADOR DE BITS
Decfsz Cont_Com2, F
Goto Prox ; ainda tem bit a enviar
; repete esperando o tempo do bit
; JA MANDOU TODOS. DELAY PARA STOP BIT
Call TemporizaBit
Bsf Com2 ; STOP BIT ( 1 Stop )
Call TemporizaBit
Return
;- - - - - - - -
Temporizabit:
Bank1
; Delay Baudrate p/ 31250kbps
Movlw .36; - Xt 16Mhz;.46 ;Xt 20Mhz; .18; = Xt 8.192Mhz;
Movwf Resetar1 ; Delay_Bit ;
Decfsz Resetar1, f ; Delay_Bit, F ; Acrescente + 14 ciclos ao calculo
Goto $-1 ; até a exposição do bit na saida
Bank0
Return
;---------------
VonNilmam "Assembler" e agora "C"