MIDI toevoegen aan oude Home orgels (7 / 9 stap)

Stap 7: Hoe het werkt


Hoe de microcontroller converteren de informatie uit de registers van de verschuiving in MIDI notities?
Zoals eerder (in shift-in-midi-description.rtf, beschikbaar op GitHub) wordt beschreven, zorgt ervoor dat de microcontroller de registers van de verschuiving naar de klink van de gegevens over elke input en vervolgens verschuivingen alle 64 bits van gegevens uit de registers. Hier is het proces voor het omzetten van de shift registergegevens in notes:

Opmerking: dit proces draait continu in een lus, duizenden keren per seconde

1. de shift registers zijn vergrendeld, lezen de 61inputs allemaal tegelijk.

Opmerking: logica poorten moeten altijd een verwijzing voor hoge of lage. Het is meestal het beste om een verwijzing naar "high". Dit was noodzakelijk voor vroege geïntegreerde schakelingen "emitter combinatie logic" of "TTL" genoemd. Het was veel minder verspilling van macht voor hoog op deze chips dan te proberen te trekken ze lage pull-ingangen. Als we zeggen "pull" bedoelen we een PIN-code verbinden met een stroombron of gootsteen via een weerstand. Typisch 10K Ohm wordt gebruikt. Zo, in ons geval, elke input vereist een verbinding met de voedingsspanning (5 V) via een 10K-weerstanden. Dit is een heleboel weerstanden, maar gelukkig, weerstanden zijn zeer goedkoop. Dus, wanneer we in de ingangen, klink als geen toets wordt ingedrukt een "hoog" logica staat worden gelezen. Wij verbinden de gedeelde bus op grond (eigenlijk een pin op de microcontroller ingesteld op een lage productie, die als een huidige wastafel fungeert). Als een toets wordt ingedrukt, trekt het"" de shift register invoer pin naar een "lage" logica staat. Dit betekent een belangrijke wezen "op" eigenlijk gelezen is als "off", die verschijnt achterstevoren, maar wij kunnen dit bevestigen gemakkelijk een beetje later.

2. shift registergegevens wordt opgeslagen in een 8-byte-matrix van belangrijke stand en vorige hoofdframe.

Zodra de shift registers zijn vergrendeld, beginnen we met het verzenden van pulsen van de klok. Elke klok-puls zorgt ervoor dat de status van de shift-inschrijven voor het verschuiven van een beetje richting de uitgang-Pins. Elke fiches-uitgang is aangesloten op de ingang van de volgende chip. Dit kan de gegevens sequentieel doorlopen alle chips. Maar hoe gaan we om met de "op is uitgeschakeld" en "uit is op"? De 74hc165 biedt twee seriële uitgangen - een normale uitgang en een omgekeerde uitgang. Wij verbinden de microcontroller met de omgekeerde uitgang van het laatste shift register. Deze wijzigt de input staat terug naar wat wij willen - toets ingedrukt is "on" of "1" en belangrijke omhoog is "uit" of "0".

We zijn met behulp van een 8-bit microcontroller. Het werkt het beste en meest efficiënt met 8 bits (één byte) tegelijk. Dus, we lezen de shift register gegevens één byte tegelijk.  De acht bits in een byte slaan de belangrijke status van acht toetsen. We moeten de 8 bytes voor het opslaan van de belangrijke staten van alle 61 toetsen.

Wij moeten zorgvuldig aandacht besteden aan hoe de gegevens zijn afkomstig uit de registers van de verschuiving. We bedraad onze chips, zodat de eerste registers eerste pin (a-invoer) is aangesloten op de meest rechtse sleutel - we die sleutel "1 noemen". De laatste sleutel is sleutel "61". Wij gaan er dus, om de belangrijke staten uit de registers in rechts links om. Dus gaat de eerste byte lezen eigenlijk worden van de laatste vijf sleutels (en de drie ongebruikte ingangen). We wilden onze bytes worden opgeslagen in links naar de juiste volgorde, dus moesten we ook zorg ervoor dat we de eerste bit ontvangen in elke byte in de meest linkse bit van de hoofdframe-byte.

U kunt elke gewenste volgorde doen, maar je moet wel consequent!

3. belangrijke staten worden omgezet in push-Staten; Push-Staten worden opgeslagen in een 61-byte-array dat nota over, opmerking af of geen verandering.

We hebben dus 8 bytes waard van belangrijke staten voor alle 61 toetsen. Maar dit is niet precies wat we nodig hebben om MIDI-opdrachten te sturen. MIDI veroorzaakt toelichting op geluid met een "nota over" commando en de notitie blijft op tot "opmerking uit" is verzonden. Dus hebben we de belangrijkste Braziliaanse omzetten in een druk op staat. We willen weten wanneer een toets heeft worden gedrukt, dus we kunnen de notitie inschakelen en we willen weten wanneer een sleutel is vrijgegeven zodat we de notitie kunt uitschakelen. We willen niet verzenden "Let op" duizenden keren per seconde. Dat zou het overspoelen van de MIDI-bus met gegevens en het zou niet werken.

Voor het genereren van push Staten van belangrijke staten hebben we voor het opslaan van de huidige sleutel staat en de vorige belangrijkste staat. We vergelijken de twee elke scan loop en zie als de staat gewijzigd. Als het ging laag naar hoog, dan een duw naar beneden is geregistreerd en een "nota over" wordt verzonden. Als het ging hoog-op-laag, vervolgens een sleutel omhoog is geregistreerd en een "notitie uit" wordt verzonden. Als er niets veranderd, is geen nieuwe MIDI-gegevens verzonden.

We berekenen MIDI notitie-informatie door een laagste waarde van de notitie op te slaan en vervolgens de matrixindex toe te voegen om het te krijgen van de werkelijke notitie. Dit is de eenvoudigste manier te benaderen. Als u wilt krijgen fancy moet u één of andere soort look-up tabel.

4. het proces wordt herhaald. Wij zorgen ervoor dat we wachten een minimale hoeveelheid tijd tussen toetsenbord scans. Als wij te snel scannen zullen wij halen wat "belangrijke bounce" - elektrische ruis gegenereerd heet wanneer de belangrijke contactpersonen openen en sluiten. Als we lezen zullen we valse belangrijke statusinformatie. Alles wat we moeten doen is wachten een beetje langer dan de typische "bounce"-periode. Als de bounce periode (10 microseconden in dit project) nog niet verstreken is, we gewoon verlaten de scannen lus en probeer het opnieuw.

Hoe we eigenlijk belangrijke staten omzetten in push-Staten?
In dit project lezen we dat de verschuiving registreert met behulp van software. Dit heet "bits bonzen". Het is niet de snelste methode. Er is een hardwarefaciliteit in de chip van de ATMEGA genaamd de SPI (seriële/parallelle Interface), die kon doen veel sneller. Echter het is moeilijker te begrijpen en het blijkt voor veel snelle menselijke ingangen bit-banging lezen is. Wij zorgen ervoor dat er snel met behulp van de microcontroller zo efficiënt mogelijk. We maken alle onze belangrijkste staat vergelijkingen met bitsgewijze operatoren. De bitsgewijze operatoren die we gebruiken zijn "<<" verschuiving links, ">>" rechts verschuiven. "^" exclusieve-of (XOR) en "&" AND. XOR wordt gebruikt om te zien wanneer belangrijke staat binnen een staat byte veranderd in vergelijking met de vorige toestand. EN wordt gebruikt voor het selecteren van stukjes van een byte met behulp van een bitmasker. De operatoren verplaatsen worden gebruikt voor het verplaatsen van een bitmasker beetje links of rechts binnen een byte te selecteren van een specifieke bit te vergelijken. Al deze operaties kunnen worden uitgevoerd in één of twee klokcycli, waardoor ze zeer snel.

Als u meer weten wilt over hoe de code werkt, neem een kijkje bij de bron. Wij bieden tal van opmerkingen over de werking van elk onderdeel. Nogmaals, het moeilijkste deel is gewoon om ervoor te zorgen u lezen en vergelijken van gegevens in de juiste volgorde.

Gerelateerde Artikelen

Procedure: Stem Feedback toevoegen aan uw Home Automation met koppelen een!

Procedure: Stem Feedback toevoegen aan uw Home Automation met koppelen een!

Hallo iedereen,Vandaag zal ik u tonen hoe u stem feedback toevoegt aan uw Home Automation.Dit zal altijd een goede additief aan uw Home Automation Project met Link het één omdat uw Linkit ONE zou een feedback als een "Heb ik draaide op verlichting vo
Hoe knop functies toevoegen aan Peter Knight's Auduino project

Hoe knop functies toevoegen aan Peter Knight's Auduino project

het is leuk! Geef niet op! Ik zal niet.Stap 1: Bouw de Auduino! Dit project is eenvoudig en erg leuk. Hulde aan Peter Knight!Mensen over het algemeen adviseren prototyping met een breadboard om ervoor te zorgen dat uw potten werk, beslissen over een
WiFi toevoegen aan uw 3D-Printer

WiFi toevoegen aan uw 3D-Printer

3D Printers hebben een lange weg afgelegd in de afgelopen 2 jaar. Hiermee worden de norm om te worden vastgebonden aan uw printer en wijden een hele computer voor het uitvoeren van uw afdruktaken of erger nog uw printers gebruiken SD-kaarten aan snea
Diode-Clipping vervorming toevoegen aan uw gitaarversterker

Diode-Clipping vervorming toevoegen aan uw gitaarversterker

hier is een relatief eenvoudige manier om sommige "bite" toevoegen aan uw oude gitaarversterker.Versterker overdrive en vervorming wordt meestal bereikt door signaal knippen--de winst te duwen totdat het signaal pieken worden afgehakt. "Ech
Lades toevoegen aan uw werkbank

Lades toevoegen aan uw werkbank

Dit Instructable toont hoe ik aan een werkbank met 2 x 4 lades toegevoegd om te beter gebruik maken van de ruimte onder de workbench.De beginselen die in dit Instructable besproken dient te gelden tot bijna een werkbank of andere afgesloten ruimte.Vo
Tekst toevoegen aan afbeeldingen met opdracht Linux 'convert'

Tekst toevoegen aan afbeeldingen met opdracht Linux 'convert'

dit instructable zal u tonen hoe kunt u tekst toevoegen aan een afbeelding met behulp van de opdracht convert in Linux. Een waardevolle gebruik van dit is het plaatsen van een bijschrift op een plaatje voor documentatie. Een ander gebruik zou het bre
Een halogeenkoplamp toevoegen aan uw Game Boy Color

Een halogeenkoplamp toevoegen aan uw Game Boy Color

als je bent opgegroeid met het afspelen van Gameboy zoals ik deed, ben ik zeker u talloze uren van pokemon veldslagen, waarvan vele alleen mogelijk door de reddende genade van uw wormlight waren. Ik weet dat ik veel lange nachten van Gameboy te danke
Video functionaliteit toevoegen aan uw Quad Rotor kostenloos

Video functionaliteit toevoegen aan uw Quad Rotor kostenloos

Een paar weken geleden ik de lange kocht opgewacht SK450 Turnigy Quad Rotor aangedreven door Multistar. Het was een vaste aankoop en de quad woonde tot aan mijn verwachting meestal. Hoewel ik uitgaven van bijna 300 dollar op het en meer op rekwisiete
Een echte gids knop toevoegen aan Homebrew Xbox 360 Arcade Stick

Een echte gids knop toevoegen aan Homebrew Xbox 360 Arcade Stick

De eerste arcade-sticks die ik heb voor de 360 gebruikt gemaakt wired controllers en hoefde echt feedback over de status van de verbinding van de controller, zodat mijn "Guide Button" altijd gewoon een standaard groen drukknop was.  Maar vast co
Een LED Flasher/Veiligheidslicht toevoegen aan uw fiets helm

Een LED Flasher/Veiligheidslicht toevoegen aan uw fiets helm

een beetje veiligheid toevoegen aan u of uw kind van dag tot dag of avond fietstocht.  De volgende paar stappen zal een overzicht van hoe u koppelt een LED knipperen veiligheid licht aan uw helm.Wat u nodig hebt:1 kleine schroef1 kleine boor bits iet
Een spel/skip knop toevoegen aan uw standalone cd-rom-station

Een spel/skip knop toevoegen aan uw standalone cd-rom-station

als u wilt maken van een CD-speler uit een oude cd-rom-station (Bekijk hier) maar het station niet een PLAY/SKIP-knop op de voorkant hoeft... Dont wanhoop, kunt u toevoegen aan de meeste Cd-stations, >>>> Lees verderStap 1: Tools n StuffTOOLS:
Een regel in toevoegen aan een boombox met een cassettespeler

Een regel in toevoegen aan een boombox met een cassettespeler

** zoals met alle de instructables, u uw object neemt / gezondheid / wat in uw eigen handen wanneer het proberen! Wees bewust van hoge spanningen op de hoofdkrachtbron board, de hete soldeerbout, enz. Zorgvuldige en patiënt brengt u succes. **Dit is
Knoppen toevoegen aan uw muis

Knoppen toevoegen aan uw muis

Ik heb spelen FPS games op mijn PC voor een tijdje nu, en ik vond mezelf vaak behoefte aan meer knoppen op mijn muis. Dat is waarom ik kocht in één keer een Logitech G9, maar in sommige spellen zelfs die de knoppen op het extra 4 die leek te zijn paa
Decoratieve Trims toevoegen aan uw gordijnen

Decoratieve Trims toevoegen aan uw gordijnen

Gordijnen zijn essentiële onderdelen van elke kamer decor en zij grote waarde toevoegen aan uw interieur als met zorg ontworpen. Met behulp van fringe trims, kunt u verfraaien van uw gordijnen en geven hen een bijgewerkte look zonder over uw budget.S