Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel

Hogeschool Gent : Departement Muziek & Drama


<Terug naar inhoudstafel kursus>

   

[950704]

 

2501:

Een PIC-Controller:

de Parallax BASIC-Stamp

 

Type: BS1

 <Klik hier voor afbeelding>

 

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