Bakgrund. Musical Instrument Digital Interface, MIDI, r en hrdvaruspecifikation och ett
protokoll fr verfring av not- och effektinformation mellan syntar, klaviaturer och liknande apparater. MIDI-signaler r seriella och verfr hndelserna not p/av, notnummer och tangenthastighet (styrka); mnga andra sorters hndelser finns, men dessa ignorerades. Projektet syftade till att bygga en enhet som omvandlar en signal frn ett standard-MIDIklaviatur till ett enkanaligt ljud. Systemuppbyggnad. Enheten som avkodar MIDI-signalen bestr av en enkapseldator (AT90S8535), en digital/analog-omvandlare (DAC0808) och en hgtalare (5 V). MIDIsignalen genereras av en MK-61 MIDI Keyboard Controller. Den seriella MIDI-signalens hndelser lses av enkapseldatorn och omvandlas till en parallell 8-bitars signal vars binrvrde anger momentana positionen fr hgtalarens membran. Detta binrvrde uppdateras med tidsintervall som beror p tonen (ljudfrekvensen). Signalen gr sedan vidare genom d/a-omvandlaren som omvandlar binrvrdet till en spnning, innan den till sist omvandlas till ett ljud i hgtalaren. Figur 1: Systemuppbyggnad. klaviatur
MIDI
enkapseldator
binrvrde
d/a-omvanlare
spnning
hgtalare
Genomfrande (mjukvara). Enkapseldatorn (AT90S8535) har 4 MHz CPU, 8 KB
programmerbart flashminne, 512 byte arbetsminne samt mjlighet att generera timer- och seriella avbrott. Chipet programmerades med C-kompilatorn Code Vision. Nr en tangent trycks ned eller slpps p klaviaturen genereras tre seriella byte (not p/av, notnummer och tangenthastighet) som hamnar i enkapseldatorns seriella buffert. Varje byteverfring inleds med en startbit och avslutas av en stoppbit, som inte ingr i sjlva byten. not p not av notnummer tangenthastighet 1001**** 1000**** 0******* 0******* Figur 2: MIDI-byte (hndelser). Programmet till enkapseldatorn gr fljande: 1. Nr bufferten mottar en byte genereras ett seriellt avbrott och funktionen getByte() anropas. Denna sparar/tar bort notnummer och tangenthastighet i