Zelfgemaakte MPC-stijl MIDI controller (1 / 6 stap)

Stap 1: De werking van het programma.


3.0 PROGRAMMAWERKING
De volgende sectie zal bespreken hoe het programma werkt.  Punt 3.1 zal gaan over het deel van de initialisatie van de code die voordat de hoofdlus gebeurt. Zodra het programma de hoofdlus is aanroepen uit 4 verschillende functies: potread, ToetsIndrukken (KeyPress), bankchange, en RGB. Secties 3.2, 3.3, 3.4 en 3.5 zullen deze functies afzonderlijk bespreken.  Raadpleeg de code in stap 6.

3.1 initialisatie
Een microcontroller moet eerst worden geconfigureerd voordat zij een hoofdprogramma lus.  Het gaat hierbij om instellen van de richting van de pinnen, zetten de juiste waarden in om het even welk van de control registers en definiëren van de belangrijkste klok die de microcontroller is gaan gebruiken.  De eerste stap van mijn programma moest de config registers opstellen.   Deze registers bepalen gewoonlijk dingen zoals de watchdog-timer, elke basispagina duidelijk reset pinnen, bruin uit detecteren en oscillator configuraties. In dit specifieke voorbeeld instellen ik zodat u een externe oscillator 20Mhz kristal wordt gebruikt als de belangrijkste klok voor de PIC.  De PIC heeft interne oscillatoren en kunt uitvoeren tot 8Mhz aan, maar als gevolg van de snelheid van de midi-data, die ik nodig had om de microcontroller uitgevoerd bij een hogere snelheid om te voorkomen dat eventuele gegevensfouten.  Noteer de locatie van de oscillator in de belangrijkste PCB board lay-out in paragraaf 7.1. Ik gesoldeerd het kristal direct onder de Raad van bestuur, dus het is niet zichtbaar in figuur 2.0.
Het volgende register ik configureerde was de registers RCSTA en TXSTA. Deze registers zijn verantwoordelijk voor het beheren van hardware seriële opdrachten. De reden dat ik gebruikte hardware seriële commando's, in tegenstelling tot software seriële voor het verzenden van de midi-opdrachten, is omdat ik ben het verzenden van de gegevens aan de Raad van bestuur van midi converter op 31250 baud.  Ik probeerde het verzenden de gegevens eerst gebruiken software opdrachten alleen, en ik kreeg fouten en de computer was het ontvangen van gegevens die ontbrekende stukken en brokken van de ontbrekende informatie had.  De seriële poort van de hardware heeft een interne buffer die wordt gebruikt voor de regie van de gegevensstroom en daarom betrouwbaarder.  De enige beperking van het gebruik van seriële commando's van de hardware is dat u bent beperkt tot het gebruik van alleen bepaalde pinnen op de microcontroller waar alsof u opdrachten van de software verzendt, kunt u elk beschikbaar pin die u wilt.   Het LCD-scherm ik alleen gebruikte verplicht de gegevens worden verzonden met 9600 baud, dus ik om het even welk commando dat ik stuurde naar de LCD software seriële opdrachten was.
Ik stel de pinnen die worden gebruikt zouden om de LTC2309 chips.  Deze chips zijn gecontroleerd met behulp van I2C opdrachten kunnen slechts twee pinnen zijn nodig om te bepalen van het twee-chips.
Na dit gedefinieerd ik alle globale variabelen in het programma gebruikt. Vervolgens configureerde ik de richting van de pinnen, maar het laden van de juiste bytes in de registers van het TRISA, TRISB en TRISC op de PIC.  Laden van een nul definieert de pin van die poort naar een uitgang. Het laden van een transactie, omschrijft het als een input. Bijvoorbeeld: als ik de waarde 00000001 in in het TRISB-register laadt, Pin nul op PORTB zou een input terwijl pinnen door zeven worden gedefinieerd als uitgangen.
Aangezien de PIC ook aan boord ADCs ik uitschakelen die heeft moest dus dat is het volgende wat dat ik deed.  De LCD display dan is ingeschakeld en een introscherm wordt weergegeven.  De software seriële opdracht is een functie ingebouwd in Picbasic Pro die is de compiler die ik gebruikte.   Wanneer ik wil een seriële commando van software, moet ik opgeven van de pin die ik wil versturen van de opdracht op de baud-rate en de gegevens die ik wil versturen.  Ik heb ontdekt hoe u kunt besturen van het LCD-scherm door middel van het gegevensblad.
De knoppen zijn vervolgens doorlopen van de verschillende kleuren.  Het doel hiervan is om ervoor te zorgen dat alles correct is aangesloten.  Als alle kleuren worden weergegeven weet ik dat de RGB-LED's correct zijn aangesloten. Het programma voert vervolgens de hoofdlus.

3.2 Potread
Aangezien er 8 kanalen op elke LTC2309, ik het programma instellen zodat alle 8 kanalen van IC2 worden gelezen in een for-lus, en alle 8 kanalen van IC4 worden gelezen in een ander for-lus.  Aangezien deze chips zijn gecontroleerd met behulp van I2C opdrachten alleen twee naalden worden gebruikt.  Een is de pin van een klok, die een 100Khz loopt, en de andere pin is een bi-directionele pin, die wordt gebruikt voor het verzenden en ontvangen van gegevens.

Om te lezen de analoge waarde van een gegeven kanaal, moet u de ADC vertellen wat u lezen daarom wilt voordat u elk kanaal lezen kanaal moet u eerst twee bytes aan informatie naar sturen de chip. De eerste byte die de microcontroller naar de ADC stuurt is het frame van het adres. Er zijn twee pinnen op de LTC2309, die u configureren kunt om het adres instellen.  Door het instellen van de AD1 pin, en AD0 pin hoge, lage of drijvende, kunt u maximaal 8 verschillende adressen, wat betekent dat u kunt maximaal 8 verschillende LTC2309s op een I2C bus.  Als u naar de figuur 6.0 verwijst kunt u de verschillende configuraties weergeven.  Ik heb aangegeven welk adres ik ben met behulp van. 7 bits worden gebruikt als het adres en de LSB (Bit 0) wordt gebruikt om aan te geven weer het is een lees opdracht of schrijven commando.  Het instellen van dit stukje op een bereidt de ADC voor een lees opdracht en stellen op nul ingesteld op een commando ' write '.

De volgende byte verzonden naar de ADC is een 6 bit "Din" woord.  Dit is verantwoordelijk voor kanaal configuratie.  Zie figuur 8.0 voor Din configuraties. Ik heb gewezen op de verschillende woorden die ik heb gebruikt.  In mijn programma, is de S/D-bit altijd ingesteld omdat ik doe enkele eindigde metingen.  De UNI-bit is ook altijd ingesteld want ik ben alleen met behulp van de chip in de unipolaire modus.  Figuur 7.0 is het diagram van de timing voor een commando ' write ' opgenomen in de data sheet.

De ADC stuurt vervolgens de analoge waarde naar de microcontroller. Echter elk moment alle informatie uitgewisseld van de ADC de microcontroller, moet u nog steeds sturen het adres frame, behalve de LSB in het frame van het adres is gewijzigd in een, wat betekent dat het is een lees commando.   De analoge waarde van 12 bit wordt verzonden in twee bytes.  Cijfer 9.0 is dat de indeling van de gegevens komt. Ik lees de analoge waarde in twee verschillende variabelen. Een variabele bevat de 8 meest significante bits en de andere byte houdt de 4 minst significante bits van de variabele.  Echter de minst significante bits 4 plaatsen naar links in die variabele zijn aanbrengen, en de 4 bits rechts zijn alleen nullen. Om deze waarde in een bruikbare vorm, verschuiven ik de 8 meest significante bits 4 plaatsen naar links. Ik ben in staat om dit te doen omdat de variabele die ik gebruik een 16-bits woord is.  Ik vervolgens verschuiving de variabele met de 4 minst significante bits 4 plekken naar rechts.  Deze twee waarden zijn vervolgens or'ed samen en het resultaat is een 16-bits variabele met een analoge waarde van 12 bits.  Ik moet echter nog steeds de waarde verkleinen omdat een midi controlewaarde signaal slechts één byte is. De max waarde van de ADC bedraagt 4095 in decimale notatie, en daarom moet worden verkleind tot 128. Om dit te doen ik vermenigvuldigt u de ADC met 4095 dan kloof is door 128.  Ik heb een andere variabele, die ik gebruik om op te slaan van de vorige waarde van de ADC. Als de lus rond komt opnieuw wordt gecontroleerd als de nieuwe waarde van de ADC veranderd. Als het meer dan een bepaalde drempelwaarde hebt gewijzigd, stuurt het een midi-signaal met de nieuwwaarde van de ADC.  Als het lager dan deze waarde is, het slaat het allemaal samen en blijft om te lezen het volgende kanaal.  Ik sla de un-geschaalde waarde, zodat deze drempel 50 is.  Ik moest kiezen een waarde die groot genoeg was om boven het geluid, maar niet zo groot dat de analoge waarden verzonden naar de midi-controller zijn echt ver uit elkaar, waardoor een onregelmatig geluid. Een midi-controle-opdracht is een serie van 3 bytes. De eerste byte aangeeft dat er een controle-opdracht die wordt verzonden. De tweede byte is welk kanaal de controle-opdracht wordt verzonden.  De laatste byte is de analoge waarde.    Dus bijvoorbeeld, laat zeggen binnen mijn muzieksoftware wijs ik een volume op een bepaalde zender te accepteren van binnenkomende midi-signalen van kanaal 16.  Zoals ik draai de potentiometer, stuurt de midi controller deze 3 bytes voortdurend aan een zeer snel tempo.  Eerste twee bytes blijven hetzelfde elke keer dat deze bytes worden verzonden, maar de laatste waarde zal veranderen. Het idee is dat u wilt dat deze waarde omhoog of omlaag te verplaatsen in kleine stappen. De verhogingen die verandert door is de drempelwaarde werd eerder besproken. Ik verhogen het kanaal met 1, na elke lus, zodat alle de potentiometers op hun eigen kanaal van de midi intoetst. Deze lus is dan verdere 7 vaker voor dat ADC chip. Ik blijf een verschillende lus een andere 8 keer lees de waarden van de andere ADC-chip. Het enige verschil tussen de twee lussen is het adres dat ik gebruikt om te communiceren met de chip en de kanaalnummers die worden bijgewerkt.

Gerelateerde Artikelen

Arcade stijl DJ MIDI-controller

Arcade stijl DJ MIDI-controller

>>> Dit is niet helemaal klaar nog als ik een beetje van het circuit omhoog hield. Ik update de instructable en een video uploaden wanneer het wordt gesorteerd op <<<Ik heb DJ voor ongeveer 10 jaar nu, en voor de laatste paar heb ik goed
Tekenen-het-zelf - MIDI controller met de geleidende inkt

Tekenen-het-zelf - MIDI controller met de geleidende inkt

'Draw It Yourself' is een MIDI-controller met de geleidende inkt als drukknoppen. Het is gebaseerd op de Arduino, en maakt gebruik van een capacitieve sensor (twee, eigenlijk) om te bepalen of de getekende knoppen zijn geraakt of niet.http://sanidanz
Maak uw eigen goedkope USB MIDI-Controller of toetsenbord

Maak uw eigen goedkope USB MIDI-Controller of toetsenbord

Ik was op zoek naar een USB MIDI controller-apparaat (of interface) voor muziek toepassingen zoals piano of orgel toetsenbord of pedalboard. Na wat onderzoek wilde ik gaan naar een meer "zelfgemaakte" oplossing. Mijn keuze is tenslotte gericht o
Vlam gecontroleerde MIDI Controller

Vlam gecontroleerde MIDI Controller

Een groot probleem in de wereld van digitale muziekproductie is het bijhouden van die analoge warmte (dat resoneerde uit reel-to-reel systemen en buizen) in moderne digitale muziek. Veel zweren dat analoge systemen hebben een geluid dat nooit kan wor
Sigaar vak MIDI Controller

Sigaar vak MIDI Controller

hier is een DIY MIDI controller die kan worden gebruikt met Max/MSP, Ableton Live, en zowat elke andere muzieksoftware of hardware waarmee MIDI i/o.Het project maakt gebruik van de MIDI-CPU, die kan worden gebruikt als een MIDI "brein" voor DIY-
How To Build een Dj MIDI Controller

How To Build een Dj MIDI Controller

dus dit een schoolproject was. Ik heb net het. Het document dat is gekoppeld aan het einde is het hele project, zoals ik schreef het omhoog de hand. Als u wilt proberen deze build laat het me weten en ik een paar tips kan geven. Ook is een onderstebo
MIDI-Controller met toetsenborden

MIDI-Controller met toetsenborden

We bouwen vandaag de 400 sleutel MIDI-controller met behulp van een Arduino en computer toetsenborden!Voor de budget bewuste muziekproducenten daar is dit project een geweldige manier om het bouwen van een goedkope control board voor uw digitale audi
MIDI-Controller Arcade

MIDI-Controller Arcade

Ik ben zeker dat u deze coole video's van mensen die jammen op een doos met een bos van knoppen op het hebben gezien. Nou, vandaag, zal ik je laten zien hoe u ook kunt verdienen een vak waarmee u Jam kunt maken. < Geïnspireerd door de MIDI Fighter Cl
Aangepaste Arduino MIDI Controller

Aangepaste Arduino MIDI Controller

Hallo, en welkom op dit instructable over het bouwen van een aangepaste, goedkoop en makkelijk USB MIDI-controller, gebaseerd op de Arduino. Het beste nieuws: geen gedoe met USB-naar-MIDI interfaces of softwaretools zoals Haarloze MIDI, gewoon plug '
BeatSauce - een Laptop Midi Controller hybride

BeatSauce - een Laptop Midi Controller hybride

Voor een lange tijd heb ik gezocht om te bouwen van een aangepaste Midi-controller, en hoewel dit niet precies een nieuwe controller deed ik adem nieuw leven in sommige oude hardware.Met behulp van sommige delen die ik had opgelopen en minimale geld
U Rock Guitar midi controller met Bluetooth BLE en oplaadbare batterij

U Rock Guitar midi controller met Bluetooth BLE en oplaadbare batterij

In deze tutorial zal ik u tonen hoe te schakelen gitaar u Rock gitaar in een midi-controller voor Bluetooth 4.0 met oplaadbare batterij. De oplossing was simpel maar moest denken.Dit systeem is getest met de iMac, iPad en iPhoneHet materiaal dat we n
Sugarcube MIDI Controller

Sugarcube MIDI Controller

Dit project is een draagbare, Arduino aangedreven, grid-gebaseerde MIDI controller die zelfstart opwaarts in allerlei apps te doen veel dingen met geluid. Het heeft 16 verlichte knoppen, gebruikt als zowel in- en uitgangen te geven van de controller
Makey Makey MIDI-controller

Makey Makey MIDI-controller

Makey makey is een microcontroller die als een toetsenbord fungeert wanneer deze aangesloten op uw computer. Ik geherprogrammeerd het zodat het stuurt midi notities. Waarom? Omdat wanneer u een toetsenbord controle dingen gebruikt heeft het venster d
Knop MIDI-Controller Arcade

Knop MIDI-Controller Arcade

met een hardware-interface naar uw favoriete muziek / DJ / VJ-software kan echt open deuren in uw creativiteit. De meest voorkomende vorm van controle van de hardware op uw PC voor dergelijke toepassingen is dat een MIDI-gebaseerde controller.Een MID