USB MIDI Controller - PIC18F4550

Berätta om dina pågående projekt.
arte
Inlägg: 317
Blev medlem: 13 januari 2006, 01:18:50

USB MIDI Controller - PIC18F4550

Inlägg av arte »

Hej,

Jag håller på att bygga en USB MIDI controller.
MIDI kontrollen kan användas för att styra olika musik program på datorn.
Man kan använda controllen som ett rent mixer bord eller så kan man
styra t.ex olika effekter med den.

En rätt avancerad kommersiell midi kontroll ser ut så här.

Kärnan i systemet är en PIC18F4550, den har inbyggt stöd för USB samt
många portar. Idags läget finns det endast en knapp kopplad som skickar ett NOTE ON kommando.

Jag har tagit ett COM port exempel från Microchips
hemsida och skrivit om det till så det passar USB AUDIO.
Man behöver altså inga drivrutiner utan det är bara att koppla in.

I slut ändan är tanken att jag skall ha många rattar och knappar - eventuellt
en display också.
Exact hur fördelningen på detta skall vara är ännu inte bestämt.
Användarvisningsbild
JimmyAndersson
Inlägg: 26540
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Kul projekt. :)

Är det tänkt att du ska använda både reglar (skjutpotar) och vridpotar som i BCF2000?
Jag har förresten den mixern. Mycket trevlig pryl! :D

Jag såg din tråd om att läsa av många potar med en PIC-krets.
För att göra det lite enklare så kan du använda encoders istället för vridpotar. Då slipper du problemet med att pot-ratten är inställd på ett värde och datorns mixerprogram visar ett annat. Dessutom kan encoders vridas runt hur många varv som helst, vilket gör finjusteringar lättare.

Det finns även skjut-encoders, men de är varken billiga eller helt lätta att få tag i.

Hur menar du med "USB Audio" ? Känner inte igen det namnet.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

De kallas "Rotationssensorer" på ELFA-språk. Om det är svårt att hitta dom.
arte
Inlägg: 317
Blev medlem: 13 januari 2006, 01:18:50

Inlägg av arte »

>Är det tänkt att du ska använda både reglar (skjutpotar) och vridpotar som >i BCF2000?
>Jag har förresten den mixern. Mycket trevlig pryl! :D

Hehe se där.
Den verkar vara grym.

>Jag såg din tråd om att läsa av många potar med en PIC-krets.
>För att göra det lite enklare så kan du använda encoders istället för >vridpotar. Då slipper du problemet med att pot-ratten är inställd på ett >värde och datorns mixerprogram visar ett annat. Dessutom kan encoders >vridas runt hur många varv som helst, vilket gör finjusteringar lättare.

Aha! Hade en plan på det först men viste inte att det hette Rotationssensorer :)
Det löser problemet med AD.
Då kan man också spara ner presets! Presets med vridpot kräver ju motoriserade.
Giverts vis skall jag skall jag ha skjutreglar men dessa behöver nog inte vara encoders.

>Hur menar du med "USB Audio" ? Känner inte igen det namnet.

USB Audio Device
När man pluggar in en audio enhet så registreras den som detta.
Det kan altså vara allt från MIDI till rena ljudkort.
Oftast så ser man inte det namnet för att man installerar tillverkarens drivrutin, drivrutinen byter då namn till något annat.
Det är möjligt att man kan byta namn ändå utan drivrutiner - men jag vet inte hur.

Vissa midicontrollers (t.ex MidiSport tror jag) registerar sig inte alls somett audio device utan bara som en enhet som kan kommunicera (lite som en COM port).
Sedan när man installerar drivrutinen så gör den MIDI av det.
(Vissa drivrutiner skall man t.exinstallera innan man pluggar in devicet)


Rotationssensorer! Har letat eftersådana men inte kommit på vad det hette! Tack!
Användarvisningsbild
JimmyAndersson
Inlägg: 26540
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

"USB Audio Device. När man pluggar in en audio enhet så registreras den som detta."

Aha, det låter intressant! Jag har annars fuskat och använt t.ex en PIC18F2320 och en FTDI FT232R som gör om till USB-anslutning, men din lösning låter mycket trevligare. :)

Hur gör man för att en PIC18F4550 ska registreras som ett USB Audio Device?
Länk? Kod? :D
arte
Inlägg: 317
Blev medlem: 13 januari 2006, 01:18:50

Inlägg av arte »

Det är faktiskt ganska lätt, jag utgick från ett Microchip exempel.

1. Ladda ner CDC COM ports exempel. Det finns någon som har portat detta till C18 kompilatorerna.
Se till att detta funkar.

2. Sedan så skriver man descriptorn (i usbdev.c tror jag den ligger). Jag tog exemplet rakt av från USB Midi Spec.
Då kommer den registera sig som ett Audio instrument med 1 MIDI IN och 1 MIDI out.

3. CDC exemplet har 2 stycken endpoints (typ kommunikations kanaler), det räcker med en. Jag rensade upp ganska mycket.

Jag hade stora problem innan pga av ett usb-sniffer program ställde till det. Men närjag avinstallerade det så funkade det.

Mina fungerade descriptors i hexform finns på http://www.freelists.org/archives/wdmau ... 00042.html (Heter ken bensson där :)

Jag är inte hemma nu och skall bort över helgen, men skall se ifall jag kan få iväg koden till dig.
[/url]
Användarvisningsbild
JimmyAndersson
Inlägg: 26540
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Det vore jättebra. :)

Det ska bli mycket kul att följa det här projektet! :)
arte
Inlägg: 317
Blev medlem: 13 januari 2006, 01:18:50

Inlägg av arte »

Hej,

Jag har skickat upp filerna på: http://www.hakenas.se/USBTest.zip

För att kunna köra dem så behöver du följande:

HI-TIDE 3.12PL1 (finns på Hi Techs hemsida gratis)

PICC-18 (PL3) v9.50 PL3 (finns som trial, ej pro versionen)

Installera HITIDE och kompilatorn. När du startar HI IDE och den frågar efter workspace location så väljer du där USBTest mappen ligger.
(hoppas att detta räcker, i annat fall får du försöka skapa ett nytt projekt).

Bygg projektet, efter det så finns det en hex fil i Release mappen.

--------------

/main.c
i mainloop:

USBCheckBusStatus(); Dessa körs varje loop för att ta hand om USB
USBDriverService();

MIDIRxService(); körs varje gång per loop och tar imot data. (i en dummy array)

MIDITxService(); Körs när man trycker ner en knapp. Hårdkodad data

/autofiles/usbdsc.c

Innehåller descriptors.

/usb/class/midi/midi.c

Innehåller funktioner för att skicka data.
I dags läget är det hårdkodat och den skickar bara en NOTE ON E4.

-----------------

- Förutom en knapp på port A1 och en lysdiod på port A0 så är det ett väldigt standard schema.

-Du kan inte använda interna oscilatorn till usb!! Måste ha en extern!
(jag har 20mhz kristal)

All kod är skriven i "komma igång" style, så gör du förbättringar får du gärna skicka tillbaks. (typ funktioner för att skicka noteon, noteoff, controllchange osv..)

Lycka till.
Användarvisningsbild
JimmyAndersson
Inlägg: 26540
Blev medlem: 6 augusti 2005, 21:23:33
Ort: Oskarshamn (En bit utanför)
Kontakt:

Inlägg av JimmyAndersson »

Oj så smidigt det ser ut! :)

Jag har inte programmerat i C på väldigt länge. Brukar köra med assembler eller basic när det gäller PIC-kretsar. Men jag ska helt klart börja med C igen efter att ha sett de här filerna. Nice! :D

Stort tack för hjälpen! :)
BJ
Inlägg: 8864
Blev medlem: 11 april 2007, 08:14:53
Ort: En_stad

Inlägg av BJ »

Det skrivs en del om Elfas pulsgivare ibland. Jag har använt en av dom i ett pic-processor-program. Jag tycker att det är lite konstigt att riktnings-informationen ligger mellan dom fasta lägena.
Det blev lite avancerat att läsa av den, med kontaktstuds-hantering och allting. :)
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

jag sitter också och "leker" med PIC18F4550 i mitt fall försöker jag göra ett "tangetbord" och enjoystick med 8 knappar enbart, men har fortfarande inte riktigt fått till det -PIC18F4550 och C18 är dock en trevlig kombination - bara jag inte inte fattat allt med USB än.... Lite knöligt med alla EP och descriptors.....
arte
Inlägg: 317
Blev medlem: 13 januari 2006, 01:18:50

Inlägg av arte »

Ja verkligen, har verkligen inte stenkoll på USB.
Segt att lära sig standarden till 100%. Har skaffat mig ett humm.
Jag har behållt så mycket som möjligt av microchip koden för usb. Har bara gjort små tilllägg.
Är det ett HID device du skall göra då?
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

Ja, HID-joy OCH HID-kbd. Idén är att man sedan ansluter externa kontakter som kortsluter valda portpinnar och då ger knappevent eller joystick event till mjukvaran på målsystemet. Mus och musknappar var rätt enkelt, för det har jag bråkat med tidigare och dessutom så hade microchip en expempelkod som fungerade med små modifieringar. Dock så var det HID-mouse denna gången som jag skulle göra. Har gammal kod från 16C745, men assamblerkod för 16-serien är inte direkt att bara flytta över till 18F - iaf inte med USB då det skiljer sig en massa "junk" och desutom var den gamla koden dåligt dokumenterad, så jag minns inte rakt av vad jag gjorde den gången... *suck*

Jaja, går man tid över så skall det nog att gå lösa detta också...
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Har också försökt skaffat mig förståelse för USB på det teoretiska planet en gång, men måste erkänna att det är ganska komplext. Det fick dock prioriteras bort, så jag kom inte så långt.

Ni får ju gärna slänga upp lite info om det går att få det lite kortfattat när ni har greppat det. :)
Användarvisningsbild
bengt-re
EF Sponsor
Inlägg: 4829
Blev medlem: 4 april 2005, 16:18:59
Skype: bengt-re
Ort: Söder om söder
Kontakt:

Inlägg av bengt-re »

*skrattar* Ja, gärna - USB är rätt mycket stökigare än de flesta andra interface. Gäller bara att lyckas hitta tillräckligt med tid för att läsa in sig på "allt". Det är inte utan att man känner sig lite korkat även när man tittar på speciella USB-forum.... De flesta har läst in sig en aning bättre än en själv.... Och innan man ens kan ställa frågorna bör man ju likssom ha gått i väggen själv, så bara att plöja datablad, manualer och standarder till dess att man börjar förstå USB ordentligt.
Skriv svar