Dr.Godfried-Willem RAES
Kursus Experimentele Muziek
: BoekdeelHogeschool Gent : Departement Muziek & Drama
< Terug naar inhoudstafel kursus> |
[950704]
2501:
Een PIC-Controller:
de Parallax BASIC-Stamp
Type: BS1
Een eenvoudiger, minimaler en goedkoper systeem hadden we zeer waarschijnlijk niet kunnen bedenken. De BASIC-Stamp is eigenlijk een van een in ROM-ingebouwde BASIC-interpreter voorziene PIC-controller (Programmable Interface Controller, chip nr. 16C56). Deze 8-bit controller kommuniceert met de buitenwereld via 8 bit per bit programmeerbare I/O-pennen. Daarnaast heeft ie nog de klassieke 'navelstreng', in dit geval gevormd door een 3- draads verbinding met de parallelle poort van de PC. De parallelle poort wordt hier weliswaar serieel gebruikt (2400 Baud, 8 bits, 1 stopbit, no parity). Via deze poort worden programmas ingeladen en -ten behoeve van het debuggen- meldingen naar de PC verstuurd. Er bestaan 2 versies: een kleine module met 14 pinnen uitgevoerd in SMD techniek (type BS1) en een meer klassieke uitvoering met een PIC in klassieke DIL behuizing met een EEPROM en een klok. Beide versies zijn 100% kompatibel. Het komputersysteempje wordt geklokt aan 4MHz en werkt zo'n 2000 Basic instrukties af per sekonde.
Het intern RAM-geheugen van de Stamp-chip beschikt over niet meer dan 16 bytes, te gebruiken voor I/O én voor de opslag van systeemvariabelen. De eerste twee bytes zijn gereserveerd voor I/O:
byte 1= Pins (I/O pin besturing, bits Pin0 tot Pin7)
byte 2= Dirs (I/O richting (R/W), Dir0 tot Dir7)
de volgende byte kunnen als words georganiseerd worden:
W0 = byte 3 & 4 (B0, B1)
W1 = B2,B3
W2 = B4,B5
W3 = B6,B7
W4 = B8,B9
W6 = B10,B11
Dit laatste 'word' echter vervalt wanneer de Gosub instruktie in een programma wordt gebruikt. Immers, in dat geval wordt het door de chip gebruikt om het terugkeeradres op te slaan.
Het extern geheugen van de Stamp beslaat maximaal 255 bytes en wordt zowel voor data-opslag als voor het programma zelf gebruikt. Spaarzaamheid is dus wel aangewezen hier! Dit geheugen bestaat uit een enkele 8-pins EEPROM- chip met seriele I/O. (Een 93LC56 chip.) Eens het programma in het systeem geladen is, blijft het -tenzij het wordt overschreven- in het geheugen staan, zelfs wanneer de stroom wordt uitgeschakeld. Het opgeslagen programma begint te lopen vanzodra de voedingsspanning wordt aangesloten.
Uiteraard is het Basic dat voor het programmeren wordt gebruikt niet zo uitgebreid als BC7 of QBX. Vooreerst kent het slechts integer-math, bovendien kent het slechts 32 instrukties:
sprongen en vertakkingen:
IF... THEN
BRANCH
GOTO GOSUB
RETURN
lussen:
FOR ... NEXT
numerieke:
[LET]
LOOKUP LOOKDOWN
RANDOM
digitale I/O instrukties:
OUTPUT INPUT
LOW HIGH
TOGGLE PULSOUT PULSIN
REVERSE
BUTTON
seriele I/O instrukties:
SERIN SEROUT
analoge I/O:
PWM POT
sound-instruktie:
SOUND
EEPROM-geheugen instrukties:
EEPROM
READ WRITE
Tijdsinstrukties:
PAUSE
Power-management instrukties:
NAP SLEEP
END
Debug-instrukties:
DEBUG
Logische en aritmetische funkties:
+ (add)
- (subtract)
* (return low byte of multiplication)
** (return high byte of multiplication)
/ (return quotient)
// (return remainder)
min (behoud de variabele groter dan de aangegeven waarde)
max (behoud de variabele kleiner dan de aangegeven waarde)
& logische AND
| logische OR
^ logische EXOR
&/ logische NAND
|/ logische NOR
^/ logische EXNOR
Hiermee is de hele rijkdom van de chip beschreven. De volledige manual, in acrobat reader formaat kan worden ingeladen via de website van Parallax, de fabrikant. Het URL is :
ftp://ftp.parallaxinc.com/pub/acrobat/stamp1_manual_V1.8.pdf. Wat ondanks deze welhaast ascetische beperkingen toch mogelijk blijkt met deze chip, grenst aan het ongelooflijke.Enkele programma-voorbeelden geput, uit de application notes van Parallax, mogen dit verduidelijken:
' SOURCE-KODE PROGRAMMA: Sonar.bas
' The Stamp runs a sonar transceiver to measure distances up to 10 feet.
Symbol echo_time = w2 ' Variable to hold echo delay
setup: let pins = 0 ' All pins low
output 0 ' Controls sonar transmitter
input 1 ' Listens to sonar receiver
ping: pulsout 0,50 ' Send a 1-ms ping
pulsin 1,1,echo_time ' Listen for return
debug echo_time ' Display time measurement
' via PC-navelstreng
pause 500 ' Wait 1/2 second
goto ping ' Do it again.
' SOURCE-KODE PROGRAMMA: VCO.BAS
' The BASIC Stamp uses input from the VCO of a 4046 phase-locked loop as a logarithmic A-to-D converter. Input on pin 7; 2400-baud serial
' output on pin 0.
input 7
output 0
VCO: pulsin 7,1,w2 ' Put the width of pulse on pin 7 into w2.
let w2 = w2-45 ' Allow a near-zero min value without underflow.
serout 0,N2400,(#w2,10,13)
pause 1000 ' Wait 1 second between measurements.
goto VCO
' SOURCE-KODE PROGRAMMA: AD_CONV.BAS
' Taken from Parallax Stamp Application Note: Interfacing an A/D Converter - July 15, 1993
' BASIC Stamp program that uses the National ADC0831 to acquire analog data and output it via RS-232.
Symbol CS = 0
Symbol AD = pin1
Symbol CLK = 2
Symbol S_out = 3
Symbol data = b0
Symbol i = b2
setup: let pins = 255 'Pins high (deselect ADC).
let dirs = %11111101 'S_out, CLK, CS outputs; AD input.
loop: gosub conv 'Get the data.
serout S_out,N2400,(#b0,13,10) 'Send data, CR, LF.
pause 2000 'Wait 2 seconds
goto loop 'Do it forever.
conv: low CLK 'Put clock line in starting state.
low CS 'Select ADC.
pulsout CLK, 1 '10 us clock pulse.
let data = 0 'Clear data.
for i = 1 to 8 'Eight data bits.
let data = data * 2 'Perform shift left.
pulsout CLK, 1 '10 us clock pulse.
let data = data + AD 'Put bit in LSB of data.
next 'Do it again.
Zelf pasten we de BS1 module toe in ons <Diana> projekt uit 1995, de verbeterde versie van de analoge komputer zoals we die ontwierpen voor ons onzichtbaar muziekinstrument (cfr. <
Book of Moves> en <Songbook>).Daar zetten we er een hele reeks van in om de parameters snelheid en versnelling uit de bewegingsinformatie te distileren, door deze parameters om te zetten in een evenredige gelijkspanning.
Onze kode -voor de omzetting van pulsduur naar dc- ziet eruit alsvolgt:
' ************************************************
' * < HOLOSOUND - Hardware V3.0 > *
' * <DIANA> *
' * Hybrid computer section front-end *
' * Source code for Basic Stamp microcontrollers *
' * used for velocity derivation in channels X,Y,Z *
' * ADC Channels 4, 5, 6 *
' * by Dr.Godfried-Willem Raes *
' * filename: FRQ2PWM.BS1 *
' ************************************************
Start:
input 0 ' input pin for puls-time measurement
input 1 ' grounded on PC-board
input 2 ' not used
input 3 ' not used
input 4 ' not used
input 5 ' PWM-output pin!. Defined as in to reduce leaks.
input 6 ' not used
input 7 ' not used
Frq:
pulsin 0,1,w1 ' Read positive-going pulse on pin 0.
pulsin 0,0,w2 ' Read negative-going pulse on pin 0.
' These readings return 16bit values:0-&HFFFF.One bit equals 10microseconds.
' A full period is w1+w2, but since we should never exceed &HFFFF, we scale the values down:
w1 = w1/10 ' more precise alternative - 100microsec. units
w2 = w2/10 ' =0.1ms
' For true binary calculation we could also do w1 = w1/2 20microsecond increments
' w2 = w2/2
' w3 = w1+w2
' w4 = $FFFF / w3 range= 0 - $FFFF 16bits
' w4 = w4 / $100 range= 0-255 8bits
w3 = w1 + w2 ' time for a full period (averaged over 2 cycles) . w3 is expressed in 0.1ms units.
w4 = 10000 / w3 max 255 ' w4 is the frequency expressed in Hz
' The microcontroller does not need a protection against divide through zero-errors!
' If w3 is zero, w4 is evaluated as zero as well.
pwm 5,w4,1 ' output this as a number (1) of pwm bursts
' each burst takes about 5 ms.
'debug #w4 ' used for measurement and test purposes.
goto Frq
bsave ' use once to generate an object file
De kode voor de versnellingsparameter verloopt alsvolgt
:' ********************************************************************
' * < HOLOSOUND - Hardware V3.0 > *
' * <DIANA> *
' * Hybrid computer section front-end *
' * Source code for Basic Stamp 1 microcontrollers *
' * used for acceleration derivation in channels X,Y,Z *
' * ADC-channels 12, 13, 14 *
' * by Dr.Godfried-Willem Raes *
' * Filename: ACC2PWM.BS1 *
' ********************************************************************
' CODE-LIST: ' timing ' comments
' ' 0.5ms/instruction
Init:
input 0 ' 1ms ' input pin for puls-measument
input 1 ' ' grounded
input 2 ' ' not used
input 3 ' ' not used
input 4 ' ' not used
nput 5 ' 1ms ' pwm output pin - for drift reduction
input 6 ' 1ms ' not used
input 7 ' 1ms ' Algo select pin (driven by mP)
if pin7=0 then goto begin ' select first algorithm
if pin7=1 then goto algo2 ' select second algorithm
Begin:
b0 = 39 ' 1.5ms ' estimated loop-time for program in ms
' the units used will be ms and Hz
' perform a first conversion: full period
pulsin 0,1,w1 ' 2ms+w1*100 'w1 = 0 -> $FFFF * 10 microsec.
pulsin 0,0,w2 ' 2ms+w2*100 'w2 = 0 -> $FFFF * 10 microsec.
w1 = w1 / 100 ' 2.5ms ' w1 = 0 -> 655 ms
w2 = w2 / 100 ' 2.5ms ' w2 = 0 -> 655 ms
w1 = w1 + w2 ' 2.5ms ' w1 = 0 -> 1310 ms
w1 = 1000 / w1 ' 2.5ms ' w1 = [0] 1 -> 1000 Hz frequency
' if w1 is 0, the result is zero!
Frq: ' 0.5ms ' perform a conversion: full period
'debug #b1
pulsin 0,1,w2 ' 2ms+w2*100 'w1 must be preserved, so dont use this variable
pulsin 0,0,w3 ' 2ms_w3*100
w2 = w2 / 100 ' 2.5ms ' in ms
w3 = w3 / 100 ' 2.5ms ' in ms
w3 = w2 + w3 ' 2.5ms ' new period in ms
w2 = 1000 / w3 ' 2.5ms ' new frequency in Hz
' IF w1 > w2 THEN Vertraag ' 3ms ' vertraging
IF w2 > w1 THEN Versnel ' 3ms ' versnelling
' = 17ms (Frq sektie)
Vertraag: ' 0.5ms
w4 = w1 - w2 ' 2.5ms ' verschil der frekwenties steeds
' positief : range= [0] 1-1000 Hz
w3 = b0 + w3 ' 2.5ms
w5= w4 * 1000 / w3 max 128 ' 4.5ms ' bereken de versnelling (neg)
b1 = 128 - w5 ' 2.5ms
pwm 5,b1,1 ' 7ms = 2+5ms ' output a 0->2.5V value
w1 = w2 ' 1.5ms
goto Frq ' 1ms
' =======
' = 22ms (Vertraag sektie)
' => lustijd 39ms
Versnel: ' 0.5ms
w4 = w2 - w1 ' 2.5ms ' verschil der frekwenties steeds
' positief
w3 = b0 + w3 ' 2.5ms
w5 = w4 * 1000 / w3 ' 3.5ms ' bereken de versnelling (pos)
b1 = 128 + w5 max 255 ' 3.5ms
pwm 5,b1,1 ' 7ms = 2+5ms ' output a 2.5->5V Value w1 = w2 ' 1.5ms
goto Frq ' 1ms
' =======
' = 22ms (Versnel sektie)
' => lustijd 39ms
' Kode (experimenteel) voor uiterst snelle versnellingsmetingen: Hier wordt als basis voor de versnellingsmeting uitgegaan van de assymmetrie van een enkele periode. Deze kode zou bijzonder geschikt moeten zijn voor het detekteren van botsingen en overgangen van stilstand naar beweging. Voor meting van versnellingswaarden, is het gedrag erg onlineair! Immers,de snelheidsverandering moet al minstens 1:2 belopen eer zij door deze kode zal worden herkend.
Algo2:
pulsin 0,1,w1
pulsin 0,0,w2
If w1 > w2 THEN goto versnel2
Vertraag2:
w3= w2/w1 MAX 637 ' w3 >=1 !
b1 = w3 / 5 ' scale to 0-127
b1= 128 - b1 ' 128 -> 0 (negative bipolar)
pwm 5,b1,1
goto Algo2
Versnel2:
w3 = w1/w2 MAX 637
b1 = w3 / 5 ' scale to 0-127
b1 = 128 + b1 ' 128 -> 255 (positive, bipolar)
pwm 5,b1,1
goto Algo2
MACH96:
Intelligente lichtsluis RPM-converter
In 1996 kregen we een kompositieopdracht van het festival van Vlaanderen voor het schrijven van een multimediaal werk voor stoommachines en instrumenten. Daarvoor wilden we zoveel mogelijk muzikale en kompositorische parameters afhankelijk maken van de werking van die stoommachines. Het probleem was natuurlijk ook hier weer , hoe relevante eigenschappen van de bewegingen van de machines op kompakte wijze naar onze komputer (waarop het eigenlijke muziekstuk als interaktief programma loopt) te krijgen.
De stoommachines in het Leuvense laboratorium voor werktuigkunde, de plek van het gebeuren, zijn voorzien van een groot (ca. 3meter) vliegwiel dat draait met een rotatiesnelheid van gemiddeld 100 rpm (omwentelingen per minuut). Deze snelheid wilden we als parameter kunnen benutten. Hiervoor maakten we gebruik van het feit dat de vliegwielen voorzien waren van 6 spaken. Wanneer het wiel draait kunnen we deze spaken een laserlichtstraal laten onderbreken. We opteerden voor het gebruik van laserlicht omdat dit de mechanische opstelling heel wat eenvoudiger maakt: eerst en vooral krijgen we op deze wijze weinig hinder van omgevingslicht, omdat we gebruik kunnen maken van een lichttubus met lens waardoor de uitrichting op de lichtbron binnen enkele boogsekonden precies kan gebeuren, voorts laat het gebruik van zichtbaar licht toe de zaak zonder theodoliet op te stellen, wat nodig ware geweest indien we gebruik hadden gemaakt van (veel goedkoper) infrarood licht. De door een fotohalfgeleider (een fototransistor, fotothyristor, fotodiode of een stukje zonnepaneel) opgevangen laserlichtpulsen hebben een frekwentie die overeenkomt met het zesvoud van de rotatiesnelheid. Voor dit projekt bouwden we een stamp-controller volledig diskreet op, dus gebruik makend van een losse PIC16C56. (cfr. schema).
Het programma waarin het omzettingsalgoritme is geimplementeerd ziet eruit alsvolgt:
'***********************************************************************
' * < MACH96 - Hardware V1.0 > *
' * <TACHO> *
' * Hybrid computer section front-end *
' * Source code for Basic Stamp microcontrollers *
' * used as a tacho-meter with analog out *
' * by Dr.Godfried-Willem Raes *
' * filename: MACH96.BS1 *
' ***********************************************************************
' Hardware description:
' The BASIC Stamp serves as frequency to pwm converter. The circuit is build from discrete components, not a hybrid BS1 stamp. The output is a DC-voltage to be fed to an ADC-converter channel (Contec board on <Hera>). It accepts pulses (from a TTL Schmitt-Trigger) input through pin 1, and output pwm-signals its pin 7.resolution is <= 8 bits.(?) Pin 7 is connected to an RC-circuit, for integration:4.7kOhm - 0.47mF gives 2.2 ms RC = 1 PWM burst. This dc-signal is buffered. The DC range is 0-5V if CA5160 or CA3130 opamps are used. Conversion speed is a function of the input signal!
Start:
input 0 ' not used
input 1 ' input pin for puls-time measurement
input 2 ' not used
input 3 ' not used
input 4 ' not used
input 5 ' not used
input 6 ' not used
input 7 ' PWM-output pin!. Defined as IN to reduce leaks.
w4 = 0 ' reset w4 on init.
Frq:
pulsin 1,1,w1 ' Read positive-going pulse on pin 1.
pulsin 1,0,w2 ' Read negative-going pulse on pin 1.
' These readings return 16bit values:0-&HFFFF
' One bit-count equals 10microseconds.A full period is w1+w2.
' We divide, to avoid overflow. (max.=&HFFFF)
w1 = w1/2
IF w1 < 2 THEN NulOut
w2 = w2/2
IF w2 < 2 THEN NulOut
w3 = w1+w2 ' Spoke-pulse period in 20microsecond increments
' w3=&HFFFF => 1.3107s => f-spokes= 0.762951094 Hz
' This should become the lowest measurable frequency and rpm.
' It corresponds to 0.1271585 Hz for the 6-spoke flywheel
' To obtain the rpm value we multiply by 60 and this
' gives us 7.6295 rpm.(= 8rpm as integer)
' The freewheel period is then: 7.8642 seconds!
' If w1=w2= 1 we have the fastest possible speed:
' w3= 2 => 40microsec => f-spokes= 25000 Hz
' f-wheel= 4166Hz, or, 250000 rpm.
' If either w1 or w2 was 0, w3 becomes invalid.
' If MSB of w3 = 1 we have:
' 256 * 20= 5,120 milisec. = 195Hz for spokes or
' 32 Hz for the wheel = 1953 rpm
' Therefore, we limit w3 to w3 > 2049 and thus rpm to 245
IF w3 < 1024 THEN Frq
' this condition means unreliable reading
' so we take another reading.
IF w3 < 1910 THEN PrevOut
' If the reading is overrange, we stick to the previous reading.
' Of course we could also fix the output at 5V
w3=w3/10 ' rpm= 50000 / (w3 /10)
w3=50000/w3 ' w3 now holds the exact rpm value.
w3=w3 - 7 MAX 255 ' remove the offset for &HFFFF=8rpm
pwm 7,w3,1 ' output this as a number (1) of pwm bursts.Each burst takes about 5 ms.
w4 = w3 ' save oldvalue
goto Frq
NulOut:
pwm 7,0,1
w4 = 0
goto Frq
PrevOut:
pwm 7,w4,1
goto Frq
VijfOut:
pwm 7,255,1
w4 = 255
goto Frq
bsave ' use once to generate an object file
Om de werking het algoritme te testen en een tabel te krijgen van de verkregen omzetting van rpm naar uitgangsspanningen schreven we -nu in QBX- volgend programma als hulpmiddel:
DEFLNG A-Z
PRINT "Conversion table for MACH96-tacho controller"
PRINT "********************************************"
PRINT " using -7 offset in the rpm to V conversion"
rpm0old% = 0
d$ = ""
PRINT " w-count", " rpm-wheel", " PWM-voltage"
w& = 65534
DO
w& = w& - 1
rpm0% = 50000 / (w& \ 10)
pwmbyte% = rpm0% - 7: ' offset correction
DACvoltage! = pwmbyte% * (5! / 255!): ' rpm0% * (5! / 255!)
IF rpm0% <> rpm0old% THEN
PRINT w&; HEX$(w&); " ", rpm0%; "rpm", DACvoltage!, " Volt"
SOUND 20000, 1
rpm0old% = rpm0%
END IF
LOOP UNTIL DACvoltage! >= 5!
Opmerkingen en aantekeningen bij de hardware:
1. Tacho schakeling
Alle verbindingen naar en van de tachoschakeling gebeuren via een stuk lintkabel voorzien van een vrouwelijke DB9 stekker. De pinning is alsvolgt:
1= OUTPUT dc signaal 0-5V evenredig met de omwentelingssnelheid.(mapping: cfr. tabel)
2= OUTPUT analoog signaal van de fotosensor. (ac).
Dit kan eventueel worden gebruikt als audiosignaal (nominaal 0dB).
3= OUTPUT: TTL-pulsen in faze lichtstraalonderbrekingen
4= OUTPUT: TTL-pulsen in tegenfaze
5,6= VOEDING: +11 tot +15Volt, ca. 100mA
7,8,9= MASSA
Beschrijving van de schakeling:
Het signaal van de optische sensor wordt in een 3160 FET-opamp gevoed door 5V versterkt zodat het kan worden aangeboden aan een Schmitt-trigger. De zo verkregen pulsen worden toegevoerd aan een als ingang geprogrammeerde pen van de PIC (D1, pin7). De PWM uitgangs van de PIC wordt geprogrammeerd op pen 13. Daarop volgt een integrator (4k7,470nF) die hoogohmig wordt belast met de ingang van een bufferopamp (LF356) die met een symmetrische spanning wordt gevoed. Hier kon geen 3160 o.i.d. worden gebruikt omdat deze types niet zijn bestand tegen de in dit geval te verwachten kapacitieve belasting gevormd door de lange aansluitkabel: 5m lintkabel heeft een kapaciteit van meer dan 1000pF tussen elk paar naasteenliggende geleiders! Anderzijds kan een LF356 niet goed met een enkelvoudige voeding worden gebruikt, omdat de uitgangsspanning dan niet tot 0V kan zakken.
De noodzakelijke symmetrische spanning werd verkregen door gebruik te maken van een inverterchip 7660. Aangezien deze geen spanningen kan verwerken groter dan 10V, pasten we een 7808 regulator toe, en bekwamen we een symmetrische +/-8V voedingsspanning voor de opamps. De 5V spanning nodig voor de TTL-chip en voor de PIC zelf werd op gebruikelijke wijze betrokken uit een 7805 regulator.
Wanneer de gevoeligheid van de 3160 -via de trimpot van 200k in het midden van het bereik wordt ingesteld, is het mogelijk het uitgangssignaal -na buffering en ac koppeling via een tweede LF356- als audiosignaal naar buiten te brengen. Enkele overgebleven NAND-poorten uit de 74132 -de Schmitt-trigger- werden gebruikt om ook de pulsen als symmetrisch signaal naar buiten te brengen. Deze kunnen worden gebruikt voor externe tellerschakelingen, indikatie enz...
2. Laser-schakeling
Voor de realisatie van de lasers maakten we gebruik van halfgeleider laserdiodes. Hoewel deze genoeg hebben aan een voedingsspanning van 3V bij een stroom van zo'n 30mA om een ononderbroken lichtstraal te leveren, ziet de schakeling er toch wat komplexer uit. Om de repetities en software tests voor MACH96 mogelijk te maken, ook buiten de machinehal, voorzagen we de schakeling van een oscillator waarmee de laserstraal periodiek kan worden gepulst. Dit heeft hetzelfde effekt als een lichtstraalonderbreking door de spaken van het vliegwiel.
We opteerden voor een lichtnetgevoede zelfstandige schakeling. De voeding werd symmetrisch uitgevoerd omdat de laserdiode de plus-pool verbonden heeft met de behuizing, waardoor we haar konden voeden via een LM337 negatieve regulator. Door nu de stroomingang van deze regulator uit een klassieke 555 astabiele multivibrator te pulsen, kan de laser aan en uit worden geschakeld. Pulsbreedte modulatie bleek heel goed mogelijk tot hoge snelheden! Dit opende perspektieven voor verder gaande toepassingen, draadloze signaalverbindingen inklusief zelfs gekodeerde audiotransmissie. Daarop ingaand bouwden we een tweede schakeling, identisch aan het eerste exemplaar maar nu bovendien voorzien van een externe sturingsingang waarop een TTL signaal (bvb. 1 bit van een printerpoort vanuit de komputer) kan worden aangeboden. Uiteraard hadden we ook hiervoor een Basic Stamp kunnen toepassen. De pulsen voor de laser worden opgewekt door een klassieke 555-timer schakeling zo gedimensioneerd dat de puls-pause verhouding overeenkomt met een door de spaken onderbroken lichtstraal.
De laserdiodes die we hier toepasten haalden we uit tegenwoordig koerant verkrijgbare zgn. laserpennen, die gebruikt worden in het onderwijs voor het aanwijzen van plaatsen op diaprojekties, transparanten en landkaarten. Deze oplossing bleek immers heel wat goedkoper dan de aanschaf van losse laserdiodes!
Filedate: 950328
Terug naar inhoudstafel kursus: < Index Kursus> |
Naar homepage dr.Godfried-Willem RAES |
Naar projekten met de BS2 basic stamp controller |