Hemgjord MPC stil MIDI controller (1 / 6 steg)

Steg 1: Program drift.



3,0 PROGRAM drift
I följande avsnitt kommer att diskutera hur programmet fungerar. Avsnitt 3.1 går över den initiering del av koden som händer innan den viktigaste loopen. När fylls i huvudloop är samtal ut till 4 olika funktioner: potread, knapptryckning, bankchange, och RGB. Avsnitt 3.2, 3.3, 3.4 och 3.5 kommer att diskutera dessa funktioner separat. Se koden i steg 6.

3.1 initiering
Någon microcontroller måste konfigureras först innan det träder en huvudprogrammet ögla. Detta inkluderar inställning av riktningen av stiften, sätta rätt värden i någon av register som kontroll och definiera de viktigaste klocka som mikrokontroller kommer att använda. Det första steget av mitt program var att ställa in config registren. Dessa register styra oftast saker som watchdog timer, alla master klart återställa pins, brun ut upptäcka och oscillator konfigurationer. I detta gäller till exempel upp jag det så att en 20Mhz kristall som externa oscillator används som främsta klockan för PIC. BILDEN har inre oscillatorer och kan köra upp till 8Mhz, men på grund av hastigheten av MIDI-data, jag behövde köra mikrokontroller med en högre hastighet för att undvika eventuella datafel. Anteckna platsen för oscillatorn på huvudsakliga PCB styrelsen layout i avsnitt 7.1. Jag lödde kristallen direkt under styrelsen så det inte syns i bild 2.0.
Nästa registret jag konfigurerat var de RCSTA och TXSTA register. Dessa register är ansvariga för att kontrollera hårdvara seriell kommandon. Jag använde hårdvara seriell kommandon, i motsats till mjukvaran följetong för att skicka MIDI-kommandon, anledningen är att jag skickar data till midi converter styrelsen på 31250 baud. Jag försökte skicka data först använda programvara kommandon bara, och jag fick fel och datorn var ta emot data som hade saknas bitar och saknade bitar av information. Hårdvara serieporten har en intern buffert används för att styra flödet av data och är därför mer tillförlitliga. Den enda begränsningen av med kommandona hårdvara följetong är du är begränsad till att använda endast vissa stift på mikrokontroller där som om du skicka programvara kommandon, du kan använda alla tillgängliga pin som du vill. LCD jag använde endast obligatoriska uppgifter som ska skickas på 9600 baud, så var jag något kommando jag skickade till LCD mjukvaran följetong kommandon.
Jag satte in stiften som kommer att användas för att styra LTC2309 marker. Dessa marker styrs med hjälp av I2C kommandon så bara två stift behövs för att styra två marker.
Efter detta definierade jag alla globala variabler som används i programmet. Jag konfigurerat sedan riktningen av stiften men laddar rätt byte till TRISA, TRISB och TRISC registren på bild. Laddar ett noll definierar pin av porten till en utgång. Lastning en en, definierar det som en ingång. Till exempel: om jag ladda värde 00000001 i i TRISB register, stift noll på PORTB skulle vara en ingång medan stift en genom sju definieras som resultat.
Eftersom bilden har också inbyggda ADC behövde jag göra oduglig den här så det är nästa sak jag gjorde. LCD-displayen då är påslagen och en intro skärmen visas. Kommandot mjukvaran följetong är en funktion inbyggd i Picbasic Pro som är kompilator jag använde. När jag vill att utfärda en mjukvaran följetong, måste jag ange PIN-koden jag vill skicka kommandot överföringshastigheten och de data som jag vill skicka. Jag grunda ute hur man styr LCD genom dess datablad.
Knapparna Bläddra sedan genom de olika färgerna. Syftet med detta är att se till att allt är korrekt ansluten. Om alla färger visas vet jag RGB-lysdioder är korrekt anslutna. Programmet kommer då in de viktigaste loopen.

3.2 Potread
Eftersom det finns 8 kanaler på varje LTC2309, ställt jag in programmet så att alla 8 kanaler IC2 läses i en for-loop, och alla 8 kanaler IC4 läses upp i en annan for-loop. Eftersom dessa marker styrs med I2C-kommandon bara två stift används. En är en klocka stift, som löper en 100Khz, och andra PIN-koden är en dubbelriktad stift, som används för att skicka och ta emot data.

Läsa det analoga värdet från någon viss kanal, måste du berätta ADC vilken kanal du vill läsa därför innan du läser någon kanal måste du först skicka två byte av information till chipet. Den första byten mikrokontroller skickar till ADC är adressen ramen. Det finns två stift på LTC2309, som du kan konfigurera för att ange adress. Genom att ange AD1 pin och AD0 pin till antingen högt, lågt eller flytande, kan du få upp till 8 olika adresser, vilket innebär att du kan ansluta upp till 8 olika LTC2309s' på en I2C bussen. Om du refererar till figur 6.0 kan du Visa olika konstellationer. Jag har angivit vilken adress jag använder. 7 bitar används som adress och LSB (Bit 0) används för att ange vädret är det en read-kommando eller skriva-kommando. Att denna biten att man förbereder ADC för en read-kommando och sätter det till noll ställer det till en write-kommandot.

Den följande byten skickas till ADC är lite 6 "Din" ordet. Detta är ansvarig för kanal konfiguration. Se figur 8.0 för Din konfigurationer. Jag har belyst olika orden jag har använt. I mitt program anges alltid S/D lite eftersom jag gör enda avslutade mätningar. Den UNI-biten anges också alltid eftersom jag bara använder chip i unipolär läge. Figur 7.0 är timing diagrammet för skriva kommandot ingår i databladet.

Därefter skickar ADC analoga värdet till mikrokontroller. Dock helst någon information som växlade från ADC till mikrokontroller, måste du fortfarande skicka adress ramen, förutom LSB i ramen adress ändras till en, vilket betyder att det är en read-kommando. 12-bitars analog värdet skickas i två byte. Figur 9.0 är formatet på data kommer in. Jag läste det analoga värdet i två olika variabler. En variabel innehåller de 8 mest signifikanta bitarna, och den andra byten innehåller de 4 minst signifikanta bitarna av variabeln. Men de minst signifikanta bitarna placering 4 platser till vänster i den variabeln, och de 4 bitarna till höger är bara nollor. För att få detta värde till en användbar form, skifta jag 8 mest betydande bitar 4 platser till vänster. Jag kan göra detta eftersom jag använder variabeln är ett 16-bitars ord. Jag skifta sedan variabeln med 4 minst signifikanta bitar 4 ställen till höger. Dessa två värden är sedan or'ed ihop och resultatet är en 16-bitars variabel med en 12-bitars analog värde. Men jag har fortfarande att förminska värdet eftersom en MIDI-signalen värde är bara ett byte. Max ADC värdet är 4095 i decimal, och därför måste skalas till 128. För att göra detta jag multiplicera värdet som ADC av 4095 då klyftan är av 128. Jag har en annan variabel, där jag spara tidigare ADC värde. När slingan kommer runt igen kontrollerar den om det nya ADC-värdet har ändrats. Om det ändrats mer än ett visst tröskelvärde, sedan skickar MIDI-signalen med det nya värdet för ADC. Om det är under detta värde, det hoppar över det alla tillsammans och fortsätter att läsa nästa kanal. Jag spara un-skalade värdet, så att detta tröskelvärde är 50. Jag var tvungen att välja ett värde som var tillräckligt stor för att vara över bullret, men inte vara så stor att de analoga värden skickas till MIDI-controller riktigt långt bort från varandra, vilket ger ett hackigt ljud. Ett MIDI-kontroll kommando är en serie 3 byte. Den första byten anger att det är en kontroll kommando som skickas. Den andra byten är vilken kanal sänds trafikstyrning. Den sista byten är det analoga värdet. Så kan exempelvis säga inom min musikprogramvara jag tilldela en volym på en viss kanal att acceptera inkommande MIDI-signaler från kanal 16. När jag vrider potentiometern, sänder MIDI-controller kontinuerligt dessa 3 byte i mycket snabb takt. Första två byte bo samma varje gång dessa byte skickas men det sista värdet kommer att förändras. Tanken är du vill att detta värde ska flytta uppåt eller nedåt i små steg. De steg som den ändras av är tröskelvärdet diskuterades tidigare. Jag öka kanalen med 1, efter varje slinga, så alla potentiometrar skriver till sin egen MIDI-kanal. Denna slinga är då fortsatt 7 gånger för att ADC chip. Jag fortsätter en annan slinga en annan 8 gånger att läsa värden från andra ADC chip. Den enda skillnaden mellan de två slingorna är adressen jag använder för att kommunicera med chip, och det kanalnummer som uppdateras.

Se Steg
Relaterade Ämnen

Arkad stil DJ MIDI-controller

>>> detta är inte helt klar ännu som jag spänt lite av banan. Jag ska uppdatera den instructable och ladda upp en video när det sorteras <<<Jag har varit DJ ungefär 10 år nu, och under de senaste har jag bytte bra gamla gammaldags vinyl...

Rita själv - MIDI controller med ledande bläck

"Rita det själv" är en MIDI-controller som använder ledande bläck som knappar. Den bygger på Arduino, och använder en kapacitiv sensor (två, faktiskt) att avgöra huruvida ritade knapparna är beröring eller inte.http://sanidanz.tumblr.com/drawity...

Arcade-knappen MIDI-Controller

att ha en hårdvara gränssnitt till din favorit musik / DJ / VJ programvara kan verkligen öppna upp dörrar i din kreativitet. Mest utbredda form av hårdvara kontroll till datorn för sådana program är en MIDI controller.En MIDI-controller kan skicka oc...

Flamma kontrollerade MIDI-Controller

En stor fråga i världen av digital musikproduktion är att hålla det analog värme (som genljöd från rullbandspelare system och rör) i dagens moderna digitala musik. Många svär att analoga system har ett ljud som aldrig kan replikeras av bits, och hopp...

Makey Makey MIDI-controller

Makey makey är en mikrokontroller som fungerar som ett tangentbord när den är ansluten till datorn. Jag omprogrammerade det så att den skickar MIDI-noter. Varför? Eftersom när du använder ett tangentbord till kontroll saker har fönstret du styr vara...

Hur man bygger en Dj MIDI Controller

så detta var ett skolprojekt. Jag har precis avslutat den. Dokumentet bifogas i slutet är hela projektet, som jag skrev det att lämna in det. Om du vill försöka detta bygga Låt mig veta och jag kan ge några tips. Också är en upp till detta projekt at...

Beatfly: Gör en lysande luftskepp och kontrollera den med din röst, tangentbord, MIDI-Controller, Garageband fil, iPhone, Flash och mycket mer! [Mac OSX]

Jag har arbetat med flera projekt med hjälp av luftskepp och ballonger, och här vill jag dela en av dem, Beatfly. Detta är en lysande luftskepp kontrolleras med olika gränssnitt såsom röst, tangentbord, MIDI-Controller, Garageband MIDI-fil, iPhone oc...

Cigar Box MIDI-Controller

här är en DIY MIDI-controller som kan användas med Max/MSP, Ableton Live, och bara om någon annan musikprogramvara eller maskinvara som erbjuder MIDI i/o.Projektet använder MIDI-CPU, som kan användas som en MIDI "hjärna" för DIY projekt.Denna zi...

Anpassade Arduino MIDI Controller

Hej och Välkommen till detta instructable om hur man bygger en anpassad, Billigt och enkelt USB MIDI-controller, baserat på Arduino. Den bästa nyheten: inget krångel med USB-till-MIDI-gränssnitt eller programvaruverktyg som Hårlösa MIDI, bara plug 'n...

Arcade MIDI-Controller

Jag är säker på att du har sett dessa coola videor människor fastnar på en låda med en massa knappar på den. Tja, idag, kommer jag att visa dig hur du kan göra en låda som du kan göra sylt. < Inspirerad av MIDI-Fighter klassiska >begränsad tid erbju...

Teensy Monster v1.0 / / DIY MIDI-Controller

Välkommen till Instructable Teensy Monster!Detta Instructable hjälper dig montera din Teensy Monster, förstå hur man kan programmera den och ge många tips för att bygga en stor DIY controller.teensymonster.ccKöp din Teensy Monster här.https://github....

Konvertera en räddade leksak till en MIDI-controller

i detta Instructable, jag kommer att gå igenom processen att konvertera ett räddade buller-making barnleksak till ett faktiskt användbara musikaliska instrument med MIDI! Ta en stund att bara kasta en blick över titlarna på stegen i detta Instructabl...

Du Rock gitarr MIDI-controller med Bluetooth BLE och uppladdningsbart batteri

I denna tutorial kommer jag visa dig hur du slår gitarr du Rock gitarr i en MIDI-Bluetooth 4.0 controller med uppladdningsbart batteri. Lösningen var enkel men att tänka på det.Detta system har testats med iMac, iPad och iPhoneDet material vi behöver...

Sockerbit MIDI Controller

Detta projekt är en bärbar, Arduino-powered, grid-baserad MIDI-controller som startar upp till olika apps att göra massor av saker med ljud. Den har 16 bakgrundsbelysta knappar, används som både in- och utgångar för att ge registeransvarige lite visu...

MIDI-Controller med tangentbord

Idag bygger vi 400 nyckeln MIDI-controller med hjälp av en Arduino och dator tangentbord!För budget medvetna musik producenterna ute är detta projekt ett bra sätt att bygga en billig kontroll styrelse för din digital audio workstation.Eller om du bar...

Arduino MIDI-controller med en ZX avstånd och gest Sensor

Välkommen till detta instructable om hur man bygger en mycket grundläggande MIDI-Controller med SparkFun ZX avståndet och gest Sensor. Detta instructable är del av en skoluppgift.Obs: Detta är ingen kodning handledning. Den final koden kommer att ing...

Arduino MIDI-controller - techshop använder scarff boarduino

jag har tittat på ett antal olika arduino lösningar för MIDI. Mitt projekt omfattar över 100 analoga ingångar att varje känsla hastighet och ge MIDI-utgången. Med den bakgrunden info jag fick från techshop klass beslutat jag att ställa in det först m...

Laser MIDI-Controller - (Laser utlösta Midi Keyboard)

Projektets målsättning:"Bygga en laser utlösta MIDI-controller, med hjälp av standard elektriska komponenter och en återvunnen midi keyboard."Steg 1.Hitta en återvunnen midi keyboard / controller.Steg 2.Konstruera en laser utlöste switch.Steg 3....

Arduino MIDI Controller

En MIDI-controller är någon utrustning som genererar och sänder MIDI-data till MIDI-aktiverade enheter. Kort sagt, om du har knappar på din MIDI-controller, kan du programmera dessa knappar till alla ljud du vill ha via musikaliska programvara (ex.:...