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