'16-bit PWM Optoisolated DAC is PC-Controlled ' Author: W. Stephen Woodward ' Setup Parallel Port Addresses ' Pick a parallel port base address from the three possibilities PP% = &H37A: ' LPT1 IF INP(PP%) = 255 THEN PP% = &H3BE: ' LPT2 IF INP(PP%) = 255 THEN PP% = &H27A: ' LPT3 IF INP(PP%) = 255 THEN PRINT "***Port NOT Found***"; CHR$(7): STOP PP% = PP% - 2: ' Compute I/O Address of Output Byte. ' < 7 6 5 4 3 2 1 0 > ' .PP. = ' where... ' eclk = DAC clk enable ' -1^ = toggle to set DAC = DAC - 1 ' +256^ = toggle to set DAC = DAC + 256 ' zero = reset DAC to all 0s ' reset DAC and enable clock OUT PP%, &H70: OUT PP%, &H60: OUT PP%, &HE0: CR% = 0 Calloop: INPUT "Ampere setting=", I ' Shut off clock and set "^-1" and "^+256" bits CR% = (CR% AND 7) OR &H60: ' then reset DAC and disable clock OUT PP%, CR% OR &H10: ' Divide I up into 8-bit chunks MSBY% = I \ 256: LSBY% = I AND 255: IF LSBY% THEN MSBY% = MSBY% + 1: LSBY% = 256 - LSBY% IF MSBY% <= LSBY% THEN MNBY% = MSBY% ELSE MNBY% = LSBY% IF MNBY% THEN FOR I% = 1 TO MNBY%: CR% = CR% XOR &H60: OUT PP%, CR%: NEXT IF MSBY% > LSBY% THEN FOR I% = 1 TO (MSBY% - LSBY%): CR% = CR% XOR &H20: OUT PP%, CR%: NEXT IF LSBY% > MSBY% THEN FOR I% = 1 TO (LSBY% - MSBY%): CR% = CR% XOR &H40: OUT PP%, CR%: NEXT ' Set up to enable DAC clock CR% = CR% OR &H80: OUT PP%, CR% GOTO Calloop