Dr.Godfried-Willem RAES

Kursus Experimentele Muziek: Boekdeel 2: live electronics.

Hogeschool Gent - Departement Muziek en Drama


<Naar inhoudstafel kursus>

2111:

Praktische toepassing

<HEX>

In onze kompositie <Hex> uit 1987, bestond een van de delen uit een ballet voor twee stappenmotoren. De data waren oorsronkelijk opgenomen in Eproms. We vertaalden -bij wijze van illustratie- de oorspronkelijke kode voor demonstratie in Power Basic's console compiler. Merk op dat deze kode werd geschreven voor andere hardware en voor een ander type stappenmotor, wat de verschillende telpatroon hier verklaart. Hier worden twee nibbles gebruikt, zo dat elk nibble een andere stappenmotor bestuurd. Ook hier wordt weer de standaard printerpoort van de PC gebruikt. De uitsturing gebeurt in assembler met onze portin en portout procedures opgenomen in de DLL van GMT.

De hardware bestaat uit een poort die we aan de printeruitgang van de PC kunnen koppelen. Deze poort wordt gebufferd met een 1-byte latch (een tussengeheugen), type 74HC573, onmiddellijk gevolgd door twee speciale chips voor de besturing van stappenmotoren. De motoren zelf zijn hier 4 fazig, 12 Volt per wikkeling.

'*******************************************************************
'Les voorbeeld besturing stappenmotoren
'hardware: dual steppermotor driver card as designed for <HEX>, 1987
'Motor data copied from 4000:1800 eprom dump HX20

' translated: 18.12.1999
'*******************************************************************
'Balletje voor 2 stappenmotoren...

' we include the following, to gain support for win functions and portin, portout in the
' GMT library.

'wanneer we dit programma zonder volgende includes willen draaien, kunnen we gewoon de procedures Portin, Portout en Strobe uit de source kode van gmt_lib.inc kopieren en aan deze module toevoegen.
%CCWIN = 1
#INCLUDE "C:\b\pb\winapi\win32api.inc"
#INCLUDE "C:\b\pb\winapi\commctrl.inc"
#INCLUDE "C:\b\pb\winapi\comdlg32.inc"
#INCLUDE "C:\b\pb\winapi\mdi32.inc"
#INCLUDE "C:\b\pb\winapi\richedit.inc"
#INCLUDE "C:\b\pb\gmt\gmt_kons.bi"
#INCLUDE "C:\b\pb\gmt\gmt_type.bi"
#INCLUDE "C:\b\pb\gmt\gmt_lib.bi" ' this loads the GMT dll.

FUNCTION PBMAIN

DIM Rp(0 TO DATACOUNT -1) AS GLOBAL BYTE
LOCAL dum AS STRING
LOCAL i AS WORD
LOCAL strobebyte AS BYTE
dev$ = LPRINT$
IF dev$ = "" THEN
dev$ = "No printer attached..."
PRINT dev$
'SLEEP 1000
dev$ = ""
END IF
Strobebyte = PortIn(&H37A)

DO


FOR i = 0 TO UBOUND(Rp)
' &H100 => &H200 = tutti data


dum = READ$(i+1)
Rp(i) = VAL(dum)
IF dev$ = "" THEN


LOCATE (i MOD 25)+1,1
PRINT BIN$(Rp(i)), HEX$(Rp(i)), Rp(i)
PortOut &H378, Rp(i)
' send the bit pattern to the selected I/O port
Strobe &H37A, Strobebyte, 0, 100
' strobe bit 0


END IF
SLEEP 20
' 20 ms wait time between steps


NEXT i


LOOP UNTIL INKEY$ = "*"
PortOut &H378, 0
' ontkoppel anders lopen de motoren heet!!!
Strobe &H37A, StrobeByte, 0, 1000

Data section:
'&H00
'M1 vooruit 2 X 4 stappen M2 vooruit 2 X 4 stappen

DATA &H0F, &H07, &H05, &H0D, &H0F, &H07, &H05, &H0D, &HF0, &H70, &H50, &HD0, &HF0, &H70, &H50, &HD0
'M1 en M2 vooruit in 2x 4 stappen M1 achteruit 2 X 4 stappen
DATA &HFF, &H77, &H55, &HDD, &HFF, &H77, &H55, &HDD, &H0D, &H05, &H07, &H0F, &H0D, &H05, &H07, &H0F
'M2 achteruit 2 X 4 stappen M1 en M2 achteruit in 2 X 4 stappen
DATA &HD0, &H50, &H70, &HF0, &HD0, &H50, &H70, &HF0, &HDD, &H55, &H77, &HFF, &HDD, &H55, &H77, &HFF
DATA &HDF, &H57, &H75, &HFD, &HDF, &H57, &H75, &HFD, &HFD, &H75, &H57, &HDF, &HFD, &H75, &H57, &HDF
DATA &H0F, &H03, &H07, &H04, &H05, &H01, &H0D, &H0C, &HF0, &H30, &H70, &H40, &H50, &H10, &HD0, &HC0
DATA &HFF, &H33, &H77, &H44, &H55, &H11, &HDD, &HCC, &H0C, &H0D, &H01, &H05, &H04, &H07, &H03, &H0F
DATA &HC0, &HD0, &H10, &H50, &H40, &H70, &H30, &HF0, &HCC, &HDD, &H11, &H55, &H44, &H77, &H33, &HFF
DATA &HFC, &H3D, &H71, &H45, &H54, &H17, &HD3, &HCF, &HCF, &HD3, &H17, &H54, &H45, &H71, &H3D, &HFC
'&H80
DATA &H0F, &HFF, &HF7, &H77, &H75, &H55, &H5D, &HDD, &HDF, &HFF, &HF7, &H77, &H75, &H55, &H5D, &HDD
DATA &HDF, &HFF, &HF7, &H77, &H75, &H55, &H5D, &HDD, &HDF, &HFF, &HF7, &H77, &H75, &H55, &H5D, &HDD
DATA &HDD, &H5D, &H55, &H75, &H77, &HF7, &HFF, &HDF, &HDD, &H5D, &H55, &H75, &H77, &HF7, &HFF, &HDF
DATA &HDD, &H5D, &H55, &H75, &H77, &HF7, &HFF, &HDF, &HDD, &H5D, &H55, &H75, &H77, &HF7, &HFF, &HDF
DATA &HDF, &HD7, &HD5, &HDD, &HDF, &HD7, &HD5, &HDD, &HFF, &HF7, &HF5, &HFD, &HFF, &HF7, &HF5, &HFD
DATA &H7F, &H77, &H75, &H7D, &H7F, &H77, &H75, &H7D, &H5F, &H57, &H55, &H5D, &H5F, &H57, &H55, &H5D
DATA &HDF, &HFF, &H7F, &H5F, &HDF, &HFF, &H7F, &H5F, &HD7, &HF7, &H77, &H57, &HD7, &HF7, &H77, &H57
DATA &HD5, &HF5, &H75, &H55, &HD5, &HF5, &H75, &H55, &HDD, &HFD, &H7D, &H5D, &HDD, &HFD, &H7D, &H5D
'&H100
'bewegingssekwens van 256 bytes gebruikt in TUTTI

DATA &HFF, &HF3, &HF7, &HF4, &HF5, &HF1, &HFD, &HFC, &H3C, &H7C, &H4C, &H5C, &H1C, &HDC, &HCC, &HCF
DATA &HC3, &HC7, &HC4, &HC5, &HC1, &HF1, &H31, &H71, &H41, &H51, &H5D, &H5C, &H5F, &H53, &H13, &HD3
DATA &HC3, &HC7, &HC4, &HF4, &HF5, &H75, &H7D, &H5D, &HDD, &HDF, &HD7, &HF7, &H77, &H57, &H55, &H5D
DATA &H5F, &HDF, &HFF, &H7F, &H5F, &H57, &H55, &H5D, &H5F, &HDF, &HFF, &H7F, &H5F, &HDF, &HD7, &HD5
DATA &HDD, &HDF, &HD7, &HD5, &HF5, &H75, &H55, &HD5, &HF5, &H75, &H55, &H5D, &H5F, &H57, &H55, &H5D
DATA &H5F, &H57, &H55, &H45, &H75, &H35, &HF5, &HC5, &HD5, &HD1, &HDD, &HDC, &HDF, &HD3, &HD7, &HD4
DATA &HF4, &H74, &H54, &HD4, &HF4, &H74, &H54, &H57, &H53, &H5F, &H5C, &H4C, &H7C, &H3C, &HFC, &HCC
DATA &HCF, &HC3, &HC7, &HC4, &HC5, &HC1, &HCD, &HCC, &HCF, &HFF, &H3F, &H7F, &H4F, &H5F, &H1F, &HDF
'&H180
DATA &HD7, &HD5, &HDD, &HDF, &HD7, &HD5, &HDD, &H1D, &H5D, &H4D, &H7D, &H3D, &H3C, &H3F, &H33, &H37
DATA &H34, &H74, &H44, &H54, &HD4, &HF4, &H34, &H74, &H54, &H55, &H5D, &H5C, &H5F, &H57, &H54, &H55
DATA &H15, &HD5, &HC5, &HCD, &HCF, &HC7, &HC5, &HCD, &HDD, &H5D, &H55, &H57, &H5F, &H5D, &H55, &H57
DATA &HD7, &HF7, &HF4, &HF5, &HF1, &HFD, &HFC, &HFF, &HF3, &HC3, &HD3, &H13, &H17, &H15, &H11, &H1D
DATA &H1F, &H13, &H17, &H15, &H55, &H45, &H75, &H35, &HF5, &HD5, &H55, &H75, &H77, &H7F, &H7D, &H75
DATA &H77, &H7F, &H7D, &HFD, &HFF, &HF7, &HF4, &HF5, &HF1, &HFD, &HFC, &H3C, &H7C, &H4C, &H5C, &H1C
DATA &HDC, &HFC, &HFF, &HF3, &HF7, &HF5, &HF1, &HFD, &HFC, &HFF, &HF3, &H73, &H53, &HD3, &HF3, &H73
DATA &H7F, &H7D, &H75, &H77, &H7F, &H5F, &HDF, &HCF, &HFF, &H3F, &H7F, &H5F, &HD7, &HF5, &HFD, &HFF

END FUNCTION

Lesopdracht: schrijf zelf kode voor een zwaaiende metronoom uitgevoerd met een stappenmotor. Maak het tempo instelbaar en houd rekening met de doorlopend veranderende bewegingssnelheid, eigen aan een slinger.


Terug naar de inhoudstafel: Index Kursus

Naar homepage dr.Godfried-Willem RAES