Software version Microlab (midi)
mlab51f.src latest version Microlab: 10 bit / Pic16f873
stappen.src Driving step-motors with Midi
servopin.src Driving servo motors with Midi
pwmvolt.src Driving 8 Pulse Width Outputs with Midi
mlab412.src First Microlab, 5 analog inputs, keyboard matrix 4x4
pwmvolt.src
motorpwm.src
Driving 8 Pulse Width Modulation (PWM) Outputs with Midi
Greycode.src Greycode to midi conversion

 

Software Microlab
(by Jo Scherpenisse)

Het microlab van binnen.

Het hart van het microlab wordt gevormd door een processor, in dit geval eigenlijk een micro-controller. Een micro-controller is in feite een processor met ingebouwd programmageheugen, enig random-access geheugen, één of meer counter/timers en een aantal input/output faciliteiten.

Oorspronkelijk was gekozen voor de PIC16C73, een processor met een ingebouwde AD converter, een seriele poort, een redelijk aantal In/Out poorten en een max klokfrequentie van 20 MHz. Bij latere versies is overgestapt op de PIC16F873. De specificaties komen vrijwel overeen maar de F873 laat zich makkelijk herprogrammeren, tegenover de C73 die na éénmaal geprogrammeerd te zijn, niet meer te veranderen is.

Programma

Het programma bestaat uit een aantal blokken. Een vereenvoudigde voorstelling van de loop van het programma volgt hieronder. Na de startroutine, waarbij een aantal waardes worden geïnitialiseerd, pinnen worden geprogrammeerd voor input of output, de seriele poort ingesteld wordt voor de juiste baudrate voor MIDI, etcetera, gaat het hoofdprogramma lopen.

Hoofdprogramma, AD conversie

Dit hoofdprogramma is in feite een programmalus die steeds herhaald wordt. Deze programmalus zorgt ervoor dat op de poorten A1 t/m A5 achtereenvolgens een selectiecode komt voor de getallen 0 t/m 31. De multiplexers IC’s U3 en U4 reageren daarop door één van de analoge inputlijnen door te verbinden met poort A0 van de processor. De processor zet nu de Analoog-naar Digitaal converter in werking, zodat de spanning op de A0 poort als een binaire waarde in de processor bekend wordt. De nu gemeten waarde wordt vergeleken met de waarde die op dezelfde analoge inputlijn stond bij de vorige doorloop van de programmalus.

Als de gemeten waarde identiek is aan de vorige dan gaat het programma verder met de volgende code op de poorten A1 t/m A5 zodat de volgende inputlijn wordt gemeten. Wijkt de waarde af van de vorige meting dan genereert de processor een Midi Control-Change-message. Dit message wordt byte voor byte naar de seriele output gestuurd. De code die op dat moment naar de multiplexer werd gestuurd,en die dus bepaalt welke ingangslijn wordt gemeten, bepaalt nu het controllernummer in het midi message. De nieuwe gemeten waarde wordt als 7-bits code in de derde byte van het message meegestuurd. Tevens wordt de nieuwe waarde nu in de processor bewaard om bij een volgende doorloop weer mee te kunnen vergelijken.

Keyscan

Na iedere xx doorlopen van de hoofdprogramma-lus wordt een signaal gezet op één van de vier scan-zend lijnen die gekoppeld zijn aan een matrix van 16 schakelaars. Een stukje programma test nu de signalen op de scan-read lijnen om te kijken welke schakelaars van die groep van vier aan- of uit staan. Ook dit wordt weer vergeleken met de stand van deze schakelaars bij de vorige test. Is er een wijziging dan wordt  vanhet nummer en de stand van de betreffende schakelaar een midi note-on of note-off message afgeleid en verzonden. Na de volgende xx doorlopen van de hoofdprogramma-lus wordt een nieuwe scan-zendlijn geselecteerd, zodat na 4x alle 16 schakelaars van het matrix keypad gelezen zijn.

Afstandsmeter

Na iedere xxx doorlopen van de hoofdprogramma-lus wordt een apart stukje programma gestart dat de Ultrasone afstandsmeter in werking zet. Door middel van een signaal op een van de pinnen van de processor wordt de 40 kHz op de ultrasone zender aangezet. De procesor wacht nu op een signaal van de ultrasone ontvanger. Intussen heeft de processor ook een timer gestart. Als de ontvanger een signaal afgeeft, dan wordt de timer gestopt, de tijd uitgelezen en als midi control-change message verzonden. Tevens wordt ook de 40 kHz oscillator weer uitgeschakeld. Als de ontvanger binnen een bepaalde tijd niet heeft gereageerd dan wordt dit programmadeel afgesloten en geen message verstuurd.