[sci.electronics] Microcomputer controlled AC interface

wwf1@ra.MsState.Edu (Bill Ford) (10/28/90)

Did anyone read the article in the latest issue of "Modern Electronics" about
the interface to allow you to switch AC equipment on and off via your PC's
parellel port?  What I want to know is what in the software allows you to
raise the logic values of your parellel port hi and lo.  I don't know much
about the BASIC routine the author used.

It looks like a good project.

-- 
"Look out, droogie, don't crash here...There's only room for one, and
 here she comes, here she comes..."  David Bowie, "Suffragette City"

bc338569@longs.LANCE.ColoState.Edu (Brian Catlin) (10/31/90)

In article <wwf1.657054401@ra> wwf1@ra.MsState.Edu (Bill Ford) writes:
>Did anyone read the article in the latest issue of "Modern Electronics" about
>the interface to allow you to switch AC equipment on and off via your PC's
>parellel port?  What I want to know is what in the software allows you to
>raise the logic values of your parellel port hi and lo.  I don't know much
>about the BASIC routine the author used.
>
>It looks like a good project.
>
>-- 
>"Look out, droogie, don't crash here...There's only room for one, and
> here she comes, here she comes..."  David Bowie, "Suffragette City"


In line 10 of PSWITCH.BAS DEC is set to zero.  Then
the program outputs the value of dec to port 888
using the OUT 888, DEC command.
In this program, the value of DEC is changed according
to which lines you want to go high.  Lines 240 through
380 find the values for DEC.
The first line is  forced high by setting DEC to a value
of 1.  The second line is forced high by setting DEC to
2, third line by 4, etc.  If you want more than one line
to go high then the values are added together  (eg. for
all lines to go high, DEC = 1+2+4+8+16+32+64+128 = 255,
for the first seven lines, DEC = 1+2+4+8+16+32+64 = 127)
This value is again sent to the CPU by the command OUT 888, DEC.
The 888 in both commands tells the CPU that the value
of DEC is to be sent to the parallel port.  DEC 
tells the computer what to do with the port's lines.

Note also that the ends of several lines have been cut off. 
Following is the way that the program should appear:

10 CLEAR: CLOSE: KEY OFF: CLS: DEC = 0: OUT 888, DEC
20 BYTE$ = " 0   0   0   0   0   0   0   0"
30 LOCATE 1, 21: PRINT "ZDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD?"
40 LOCATE 2, 21: PRINT "3  PARALLEL INTERFACE PROGRAM  3"
50 LOCATE 3, 21: PRINT "@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDY"
60 LOCATE 10, 15: PRINT "BIT NUMBER    7   6   5   4   3   2   1   0 "
70 LOCATE 11, 15: PRINT "DDDDDDDDDDDDDDEDDDEDDDEDDDEDDDEDDDEDDDEDDD4 "
80 LOCATE 12, 29: PRINT "3   3   3   3   3   3   3   3 "
90 LOCATE 13, 29: PRINT "A   A   A   A   A   A   A   A "
100 LOCATE 14, 15: PRINT "   VALUE     "; BYTE$
110 LOCATE 21, 16: PRINT "COPYRIGHT,  GEORGE F. STOCKMAN, IV,  1989"
120 DELAY = TIMER + 5: WHILE DELAY > TIMER: WEND
130 LOCATE 21, 16: PRINT STRING$(41, 32)
140 LOCATE 21, 11: PRINT "BIT NUMBER TO TOGGLE / [CR] TO RESET / [ESC] TO QUIT"
150 A$ = INKEY$: IF A$ = "" THEN 150
160 IF A$ = "0" THEN 240 ELSE IF A$ = "1" THEN 260 ELSE IF A$ = "2" THEN 280
170 IF A$ = "3" THEN 300 ELSE IF A$ = "4" THEN 320 ELSE IF A$ = "5" THEN 340
180 IF A$ = "6" THEN 360 ELSE IF A$ = "7" THEN 380
190 IF A$ <> CHR$(13) THEN 230
200 BYTE$ = " 0   0   0   0   0   0   0   0"
210 DEC = 0: BIT0 = 0: BIT1 = 0:BIT2 = 0: BIT3 = 0
220 BIT4 = 0: BIT5 = 0: BIT6 = 0: BIT7 = 0: GOTO 430
230 IF A$ = CHR$(27) THEN CLS: SYSTEM ELSE BEEP: GOTO 150
240 IF BIT0 = 0 THEN BIT0 = 1: DEC = DEC + 1 ELSE BIT0 = 0: DEC = DEC - 1
250 GOTO 390
260 IF BIT1 = 0 THEN BIT1 = 1: DEC = DEC + 2 ELSE BIT1 = 0: DEC = DEC - 2
270 GOTO 390
280 IF BIT2 = 0 THEN BIT2 = 1: DEC = DEC + 4 ELSE BIT2 = 0: DEC = DEC - 4
290 GOTO 390
300 IF BIT3 = 0 THEN BIT3 = 1: DEC = DEC + 8 ELSE BIT3 = 0: DEC = DEC - 8
310 GOTO 390
320 IF BIT4 = 0 THEN BIT4 = 1: DEC = DEC + 16 ELSE BIT4 = 0: DEC = DEC - 16
330 GOTO 390
340 IF BIT5 = 0 THEN BIT5 = 1: DEC = DEC + 32 ELSE BIT5 = 0: DEC = DEC - 32
350 GOTO 390
360 IF BIT6 = 0 THEN BIT6 = 1: DEC = DEC + 64 ELSE BIT6 = 0: DEC = DEC - 64
370 GOTO 390
380 IF BIT7 = 0 THEN BIT7 = 1: DEC = DEC + 128 ELSE BIT7 = 0: DEC = DEC - 128
390 BYTE$ = "": BYTE$ = BYTE$ + STR$(BIT7) + "  " + STR$(BIT6) + "  "
400 BYTE$ = BYTE$ + STR$(BIT5) + "  " + STR$(BIT4) + "  "
410 BYTE$ = BYTE$ + STR$(BIT3) + "  " + STR$(BIT2) + "  "
420 BYTE$ = BYTE$ + STR$(BIT1) + "  " + STR$(BIT0) + "  "
430 OUT 888, DEC: LOCATE 14, 28: PRINT BYTE$;: GOTO 150
This is my own interpretation of the program and it should
work.  The author's correct version will probably come
out in one of the next few issues.
This is a very interesting project and I plan on building
it also. 
\*********************************************************************\
 \  Brian Catlin          Electrical Engineering                       \
  \  email: bc338569@longs.lance.colostate.edu                          \
   \  "Here's a battery and a wire--go light up the world!"              \
    \                                         -- Mom and Dad              \
     \*********************************************************************\