| 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 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.
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.
|