Sida 1 av 1

Bygga MIDI interface av USB mus/t-bord?

Postat: 24 april 2012, 17:00:34
av Bigstone
Leker med tanken att bygga ett enkelt portabelt MIDI interface utan för mycket meck med redan existerande delar man har.
Visst, det finns ju färdiga "kablar" (har bara dåliga erfarenheter av dem by the way! :evil:), Arduino, PIC osv. men tanken är svår att släppa om än teoretiskt.
Det kastas USB möss och tangentbord till höger och vänster på jobbet och de är ju egentligen seriella men frågan är om de skulle kunna konverteras till att kunna sända och ta emot MIDI data från syntar?

Klippt från Wikip. :
MIDI-porten är en asynkron seriell databuss i full duplex liknande EIA-232.
Som kontakt används en 5-polig DIN-kontakt.
MIDI-porten använder optokopplare för att eliminera jordslingor och på så sätt undvika brum och andra elektromagnetisk interferens.
MIDI-porten skickar information som strömnivåer över en kabel. Ström används istället för spänning för att övervinna dåliga kablar och längre avstånd då en spänning skulle sjunka på grund av resistanser.

Standardhastigheten för MIDI-porten är 31 250 bit/s och varje informationspaket skickas med 3 byte samt en start- och stoppbit för varje byte.

Det är liksom hastigheten som är kruxet, att köra det på en PS/2 port hade ju varit smidigt men den är inte tillräckligt snabb. Usb 1.1 klarar 1.5Mb/s så det finns ju potetial. Sedan var det ju själva protokollet och drivrutinerna då.. är kanske inte helt samma sak gissar jag men kanske lite hemkörda drivrutiner?

Fullständigt hopplöst eller går det att applicera på en USB råtta eller ett t-bord?
Vad tror ni? Förslag, ideér och tips mottages gärna.

Re: Bygga MIDI interface av USB mus/t-bord?

Postat: 24 april 2012, 17:56:56
av psynoise
Texten från Wikipedia var underlig, inte mycket som stämde där. RS-232 har inget med protokoll att göra utan endast det elektriska gränssnittet som skiljer sig från MIDI! Det finns bra litteratur om MIDI, se tråden Litteraturförteckning för mixerbordskonstruktion under MIDI för några exempel.

http://elektronikforumet.com/forum/view ... 10&t=51772

Ytterliggare fanns det en bra hemsida om MIDI tidigare. Tyvärr är den borttagen sedan länge men en backup finns på TomasLs sida

http://www.ebaman.com/

Re: Bygga MIDI interface av USB mus/t-bord?

Postat: 13 maj 2012, 13:58:03
av Bigstone
Har inte hunnit labba något än men ska bli.
Någon som har något tips på vad man ev. skulle kunna konvertera till midi-interface?
Egentligen bara som ett kul projekt, billigare att köpa ett färdigt men inte lika kul som att försöka själv!
(Arduino är ju givet också.)

Re: Bygga MIDI interface av USB mus/t-bord?

Postat: 13 maj 2012, 16:11:39
av GFEF
Bigstone
>Någon som har något tips på vad man ev. skulle kunna konvertera till midi-interface?

En ren skrivbords tips........

http://www.lawicel-shop.se/prod/USB-Pro ... 39/SWE/SEK

Re: Bygga MIDI interface av USB mus/t-bord?

Postat: 13 maj 2012, 18:08:24
av Fredrik79
Jag byggde nyligen ett interface för att koppla gammal joystick/midi-port till usb, baserat på en pic18F2550, Funkar kalas. Det är ju dock inte en modifierad USB-pryl som du skrev att du letar efter, men undrar om det inte nästan är enklare att göra så, behövs ingen speciell drivrutin för den heller, utan bara firmware (baserade min på microchips midi-exempel).

Re: Bygga MIDI interface av USB mus/t-bord?

Postat: 13 maj 2012, 21:24:53
av Bigstone
Jag byggde nyligen ett interface för att koppla gammal joystick/midi-port till usb, baserat på en pic18F2550, Funkar kalas. Det är ju dock inte en modifierad USB-pryl som du skrev att du letar efter, men undrar om det inte nästan är enklare att göra så, behövs ingen speciell drivrutin för den heller, utan bara firmware (baserade min på microchips midi-exempel).
Oops! Vänta lite.. det där lät intressant! Har sökt över en del hemsidor efter en köpbar sådan men utan tur so far.
Har du någon länk till det projektet, har fått frågan om det går att lösa (som jag sa "Jodå, det går nog.." på) men här kom lösningen på det! Kalas! Vart vart vart?? :D



GFEF: Den var ju väldigt smutt liten lösning.. ska jag titta närmare på. Tack!

Re: Bygga MIDI interface av USB mus/t-bord?

Postat: 13 maj 2012, 21:29:45
av MiaM
Bigstone skrev:Har inte hunnit labba något än men ska bli.
Någon som har något tips på vad man ev. skulle kunna konvertera till midi-interface?
En såndär FTDI-seriesnöre-kabel med 5V-nivåer.

Du behöver en optokopplare, en transistor och några motstånd om jag inte minns galet.

http://howcircuits.com/microcontroller- ... rface.html
"UART" på bilden = FTDI-kabeln.


OBS! Det här förutsätter att FTDI-kabeln kan köra på rätt hastighet (31250BPS tror jag det var?) och dessutom förutsätter det att mjukvaran vill prata med kabeln. Antagligen inte så lätt i framförallt Windows, där jag TROR att MIDI dyker upp på annat sätt än vanliga serieportar.

Re: Bygga MIDI interface av USB mus/t-bord?

Postat: 13 maj 2012, 22:12:10
av Fredrik79
Har ingen länk då jag byggt den själv utifrån microchips solutions-bibliotek. Finns ett exempel där som spelar en midi-not vid knapptryck. hittar 17 inte schemat, men är simpelt.

Gjorde helt enkelt om det exemplet lite. Behöll 1 knapp till reset, och satte en jumper på RB4 för bootloadiing.

Sen satte jag RX + TX till motsvarande midisignaler på en DB15-kontakt och även GND och +5 på motsvarande kablar för att ta ström från USB.

D+ och D- på picen till usb-porten, och en kondensator till GND från vusb. Har även en pullup från Ra2 av någon anledning ^^. ska kolla koden och se om jag kan hitta varför, har projektet ivägstädat i någon backup just nu. (tror dock det var någon powersensefunktion på picdem som även kan ha tänkts funnits i bootloadern)

I övrigt så städade jag bort allt som hörde till diverse demokort, och sparade enbart koden till picdem. Modifierade den för en 18F2550 (den är normalt baserad på 18F4550, men de är kompatibla, bara lite LED-kod för PORTD som behöver bort).

Den viktiga biten i den koden är ProcessIO, där läser jag från RX/RC7. Om data finns ledig, så läser jag det antal bytes ett specifikt midimeddelande utgör, packar om till ett 32-bitars usb-midipaket och skickar via usb till datorn. MidiOX är fantastiskt för att debugga och bygga detta. Dessutom så innehåller exemplet en bootloader, så när du uppdaterat koden är det bara trycka ner reset och kortsluta jumpern på RB4 och ladda på ny firmware via programmet microchip skickade med. resetta, starta om midiOX och kör.

Kod: Markera allt

void ProcessIO(void)
{
    // User Application USB tasks
    if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;

    if(!USBHandleBusy(USBRxHandle))
    {
        //We have received a MIDI packet from the host, process it and then
        //  prepare to receive the next packet

        //INSERT MIDI PROCESSING CODE HERE

        //Get ready for next packet (this will overwrite the old data)
        USBRxHandle = USBRxOnePacket(MIDI_EP,(BYTE*)&ReceivedDataBuffer,64);
    }

	if(DataRdyUSART()==1)
	{
		data1=ReadUSART();
		while (!DataRdyUSART());
		data2=ReadUSART();
		while (!DataRdyUSART());
		data3=ReadUSART();

        midiData.Val = 0;   //must set all unused values to 0 so go ahead
                             //  and set them all to 0
        midiData.CableNumber = 0;
		
		if(data1==0x90)
		{
       		midiData.CodeIndexNumber = MIDI_CIN_NOTE_ON;
		}else{
			if(data1==0x80)
			{
				midiData.CodeIndexNumber = MIDI_CIN_NOTE_OFF;
			}else{
				midiData.CodeIndexNumber = MIDI_CIN_POLY_KEY_PRESS;
			}	
		}

        midiData.DATA_0 = data1;
        midiData.DATA_1 = data2;
        midiData.DATA_2 = data3;

        USBTxHandle = USBTxOnePacket(MIDI_EP,(BYTE*)&midiData,4);

	}

}//end ProcessIO
Min kod i ProcessIO, som du ser där så hanterar det inga meddelanden skickade från datorn, utan bara den andra vägen. Pga att jag har en ganska dum keyboard. :P
Men det är ganska enkelt att bygga vidare på. Övriga ändringar i koden är väl mest städning, och initiering av serieport.

Initierar picens serieport till midi i mainfunktionen med:

Kod: Markera allt

	TRISCbits.TRISC7=1; //Make UART RX pin input
	OpenUSART (USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 383);
i

i usb_descriptors.c kan du ändra namnet på din device som står i windows också. :)

Hoppas det här hjälper dig lite på vägen.

Edit: Det kan även behövas en optokopplare mellan miditillbehör och datorn, i detta fallet behövdes det inte, då jag dels ger keyboarden sin ström direkt från usb-porten, och gameportsignalen är TTL-kompatibel. För att undersöka detta gjorde jag först ett program till picen som loggade serieportssignalerna till en display istället för usb, och jämförde datan med protokollet.