Line 1: |
Line 1: |
| <pre> | | <pre> |
| UM82C11-C Bidirectional Printer Port Modification | | UM82C11-C Bidirectional Printer Port Modification |
− |
| |
| ================================================= | | ================================================= |
− |
| |
| | | |
| | | |
| This is a bidirectional modification for computers using the 82C11 for their | | This is a bidirectional modification for computers using the 82C11 for their |
− |
| |
| parallel ports. Please note that we give no guarantee that it will work or | | parallel ports. Please note that we give no guarantee that it will work or |
− |
| |
| that everything is correct! Proceed at your own risk! (There is only one | | that everything is correct! Proceed at your own risk! (There is only one |
− |
| |
| mistake as far as we know, but everybdy knows how easy it is to make a typo.) | | mistake as far as we know, but everybdy knows how easy it is to make a typo.) |
− |
| |
| | | |
| | | |
| NOTE: An asterix (*) in front of a control signal indicates a negative true | | NOTE: An asterix (*) in front of a control signal indicates a negative true |
− |
| |
| signal (low = 1). eg. CS=true when high, *CS=true when low. | | signal (low = 1). eg. CS=true when high, *CS=true when low. |
− |
| |
| | | |
| | | |
| The UM82C11-C is almost a one chip IBM pc printer interface. It includes | | The UM82C11-C is almost a one chip IBM pc printer interface. It includes |
− |
| |
| all the the registers and buffers for a printer port and needs only some | | all the the registers and buffers for a printer port and needs only some |
− |
| |
| address decoding and a LS245 buffer to hook a PC to a printer (plus some wire | | address decoding and a LS245 buffer to hook a PC to a printer (plus some wire |
− |
| |
| of course). It comes in two packages - a 40 pin dual in line (DIP) package, | | of course). It comes in two packages - a 40 pin dual in line (DIP) package, |
− |
| |
| and a 44 lead flat pak. The pin numbers referred to below are for the DIP | | and a 44 lead flat pak. The pin numbers referred to below are for the DIP |
− |
| |
| package. There is a pinout for both packages at the end of this article. | | package. There is a pinout for both packages at the end of this article. |
− |
| |
| | | |
| | | |
| Pin 19 on this chip is the Printer Data Output Enable (*POE). The printer | | Pin 19 on this chip is the Printer Data Output Enable (*POE). The printer |
− |
| |
| data buffers drive the printer data bus when this pin is grounded. On my | | data buffers drive the printer data bus when this pin is grounded. On my |
− |
| |
| machine, and probably many others, this pin is simply connected to pin 20 | | machine, and probably many others, this pin is simply connected to pin 20 |
− |
| |
| (Ground) next to it to permanently enable the printer data bus. This pin | | (Ground) next to it to permanently enable the printer data bus. This pin |
− |
| |
| needs to be controlled by the D5 output of the printer control word to make | | needs to be controlled by the D5 output of the printer control word to make |
− |
| |
| the port bidirectional. Unfortunately the printer control word is internal | | the port bidirectional. Unfortunately the printer control word is internal |
− |
| |
| to this chip and we can't simply add a couple of jumpers (as suggested in | | to this chip and we can't simply add a couple of jumpers (as suggested in |
− |
| |
| Steve Ciarcia's article in Byte-Sept/88, pp 304-305,310) | | Steve Ciarcia's article in Byte-Sept/88, pp 304-305,310) |
− |
| |
| | | |
| | | |
| On examining the truth table and some timing diagrams in the spec sheets we | | On examining the truth table and some timing diagrams in the spec sheets we |
− |
| |
| find that when *CS and DIR are low and A1 is high we can use the rising edge | | find that when *CS and DIR are low and A1 is high we can use the rising edge |
− |
| |
| of *IOW to latch the printer control word. After detailed analysis and | | of *IOW to latch the printer control word. After detailed analysis and |
− |
| |
| consideration of our junkbox the following design presented itself. We used | | consideration of our junkbox the following design presented itself. We used |
− |
| |
| a 74LS10 triple 3 input NAND gate as a decoder and a 74LS379 Quad D flip-flop | | a 74LS10 triple 3 input NAND gate as a decoder and a 74LS379 Quad D flip-flop |
− |
| |
| with Clock enable to latch the data. | | with Clock enable to latch the data. |
− |
| |
| | | |
| | | |
Line 73: |
Line 45: |
| | | |
| 74LS10 74LS379 | | 74LS10 74LS379 |
− |
| |
| | | |
| | | |
| ------\ | | ------\ |
− |
| |
| (8)DIR --------|1 \ D5(14) /-------tie | | (8)DIR --------|1 \ D5(14) /-------tie |
− |
| |
| /-|2 12>0---\ | | | | | | /-|2 12>0---\ | | | | |
− |
| |
| (40)+5v--\/\/\-+-|13 / | ------------------------ | | (40)+5v--\/\/\-+-|13 / | ------------------------ |
− |
| |
| 4k7 | ------/ | | 4 (D0) 5 12 13 | | | 4k7 | ------/ | | 4 (D0) 5 12 13 | |
− |
| |
| | ------\ | (6) *IOW ---|9 (CP) (D1,D2,D3)| | | | ------\ | (6) *IOW ---|9 (CP) (D1,D2,D3)| |
− |
| |
| tie ----+-|3 \ | | | | | tie ----+-|3 \ | | | |
− |
| |
| \-|4 6>0-\ | /--|1(*CE) | | | \-|4 6>0-\ | /--|1(*CE) | |
− |
| |
| (18)*CS --------|5 / | | ------\ | | 2 (Q0) | | | (18)*CS --------|5 / | | ------\ | | 2 (Q0) | |
− |
| |
| ------/ | \-|11 \ | ------------------------ | | ------/ | \-|11 \ | ------------------------ |
− |
| |
| \---|9 8>0--/ | | | \---|9 8>0--/ | |
− |
| |
| (39) A1 -----------------------|10 / *POE (19) | | (39) A1 -----------------------|10 / *POE (19) |
− |
| |
| ------/ | | ------/ |
| | | |
| (40) +5 --(LS10-14, LS379-16) A 0.01uf decoupling capacitor was added | | (40) +5 --(LS10-14, LS379-16) A 0.01uf decoupling capacitor was added |
− |
| |
| (20)GND --(LS10--7, LS370--8) between +5 and GND. | | (20)GND --(LS10--7, LS370--8) between +5 and GND. |
| | | |
| (The numbers in paranthesis are the pin numbers on the 82C11.) | | (The numbers in paranthesis are the pin numbers on the 82C11.) |
− |
| |
| | | |
| | | |
| Wiring Diagram | | Wiring Diagram |
− |
| |
| ============== | | ============== |
− |
| |
| | | |
| | | |
| 40 39 40 6 | | 40 39 40 6 |
− |
| |
| +5 A1 +5 *IOW | | +5 A1 +5 *IOW |
− |
| |
| | /---\ | /-\ /---\ | | | | | /---\ | /-\ /---\ | | |
− |
| |
| | tie | | | | | | | | tie tie | | | | tie | | | | | | | | tie tie | |
− |
| |
| ------------------------|--- | -------------------------------- | | ------------------------|--- | -------------------------------- |
− |
| |
| |14 13 12 11 10 9 | 8| | |16 15 14 13 12 11 10 9| | | |14 13 12 11 10 9 | 8| | |16 15 14 13 12 11 10 9| |
− |
| |
| |+5 | | | | | | | |+5 | | | | | |
− |
| |
| | | | | | | | | | | | | | | |
− |
| |
| |1 2 3 4 5 6 | 7| | | 1 2 3 4 5 6 7 8| | | |1 2 3 4 5 6 | 7| | | 1 2 3 4 5 6 7 8| |
− |
| |
| ------------------------|--- | -------------------------------- | | ------------------------|--- | -------------------------------- |
− |
| |
| | tie tie tie | | | | | | | | tie | | | | tie tie tie | | | | | | | | tie | |
− |
| |
| | | \-/ | \---/ | | | | | | | \-/ | \---/ | | | |
− |
| |
| DIR *CS GND *POE D5 GND | | DIR *CS GND *POE D5 GND |
− |
| |
| 18 18 20 19 14 20 | | 18 18 20 19 14 20 |
− |
| |
| | | |
| | | |
| (40) +5 --/\/\/--tie (All pins marked tie are pulled up to +5v through | | (40) +5 --/\/\/--tie (All pins marked tie are pulled up to +5v through |
− |
| |
| 4k7 this resister. (4.7k ohms)) | | 4k7 this resister. (4.7k ohms)) |
| | | |
Line 153: |
Line 93: |
| | | |
| (40) +5 ---||---GND(20) (This capacitor is connected across the supply | | (40) +5 ---||---GND(20) (This capacitor is connected across the supply |
− |
| |
| 10n for decoupling. (.01 uf)) | | 10n for decoupling. (.01 uf)) |
− |
| |
− |
| |
| | | |
| | | |
| | | |
| I built this circuit on a small piece of perf board and hot melt glued it on | | I built this circuit on a small piece of perf board and hot melt glued it on |
− |
| |
| top of the 82C11. The wires were kept as short as possible and tack soldered | | top of the 82C11. The wires were kept as short as possible and tack soldered |
− |
| |
| to the pins of the 82C11. The circuit board trace connecting pin 19 to GND | | to the pins of the 82C11. The circuit board trace connecting pin 19 to GND |
− |
| |
| (pin 20) was cut. The printer seems to work fine and the CHECKDDT program | | (pin 20) was cut. The printer seems to work fine and the CHECKDDT program |
− |
| |
| reports that my printer port is now bidirectional. I have yet to finish | | reports that my printer port is now bidirectional. I have yet to finish |
− |
| |
| constructing the DDT51 to see if it really is working as it needs to, but I | | constructing the DDT51 to see if it really is working as it needs to, but I |
− |
| |
| don't see any reason why it shouldn't be. | | don't see any reason why it shouldn't be. |
− |
| |
| | | |
| | | |
| The next challenge is to see if this can be reduced to one IC. A PAL or | | The next challenge is to see if this can be reduced to one IC. A PAL or |
− |
| |
| something similar should be easy to program for this. | | something similar should be easy to program for this. |
− |
| |
− |
| |
| | | |
| | | |
| | | |
| ------------------------------------------------------- | | ------------------------------------------------------- |
− |
| |
| | | |
| | | |
| Alternate Schematic Diagram (untried) | | Alternate Schematic Diagram (untried) |
− |
| |
| ===================================== | | ===================================== |
− |
| |
| | | |
| | | |
| This should do the same thing, and the parts might be more common. | | This should do the same thing, and the parts might be more common. |
− |
| |
| | | |
| | | |
| ---------- | | ---------- |
− |
| |
| (14) D5 -----------------------------------|2 5|---------*POE (19) | | (14) D5 -----------------------------------|2 5|---------*POE (19) |
− |
| |
| | | | | | | |
− |
| |
| ------\ ------------- | 74LS74 | | | ------\ ------------- | 74LS74 | |
− |
| |
| (8)DIR -------O|4 \ | 15|O---|3 | | | (8)DIR -------O|4 \ | 15|O---|3 | |
− |
| |
| (18)*CS -------O|5 >O| | | 1 4 | | | (18)*CS -------O|5 >O| | | 1 4 | |
− |
| |
| (39) A1 --------|6 / | 74LS138 | ---------- | | (39) A1 --------|6 / | 74LS138 | ---------- |
− |
| |
| ------/ | | | | | | ------/ | | | | |
− |
| |
| (6)*IOW -----------------|1 | \--+--/\/\/\---+5v | | (6)*IOW -----------------|1 | \--+--/\/\/\---+5v |
− |
| |
| /---|2 | 4k7 | | /---|2 | 4k7 |
− |
| |
| GND ---+---|3 | | | GND ---+---|3 | |
− |
| |
| ------------- | | ------------- |
− |
| |
| | | |
| | | |
| (40) +5 --(LS14-14, LS138-16) | | (40) +5 --(LS14-14, LS138-16) |
− |
| |
| (20)GND --(LS14--7, LS138--8) | | (20)GND --(LS14--7, LS138--8) |
| | | |
| (The numbers in paranthesis are the pin numbers on the 82C11.) | | (The numbers in paranthesis are the pin numbers on the 82C11.) |
− |
| |
− |
| |
− |
| |
− |
| |
| | | |
| | | |
| | | |
| ------------------------------------------------------- | | ------------------------------------------------------- |
− |
| |
| | | |
| | | |
| Data on the 82C11 | | Data on the 82C11 |
− |
| |
| ================= | | ================= |
− |
| |
| | | |
| | | |
| UM82C11-C pinout | | UM82C11-C pinout |
− |
| |
| ================ | | ================ |
− |
| |
| | | |
| | | |
| This is the 40 pin Dual in Line package. | | This is the 40 pin Dual in Line package. |
− |
| |
| | | |
| | | |
| ___________ | | ___________ |
− |
| |
| Crystal in x1 | 1 40| Vdd Power Supply +5v | | Crystal in x1 | 1 40| Vdd Power Supply +5v |
− |
| |
| Crystal in x2 | 2 39| A1 System Address 1 | | Crystal in x2 | 2 39| A1 System Address 1 |
− |
| |
| Clock out CLK | 3 38| A0 System Address 0 | | Clock out CLK | 3 38| A0 System Address 0 |
− |
| |
| Clock / 10 DCLK | 4 U 37| P0 Printer Data Bus 0 | | Clock / 10 DCLK | 4 U 37| P0 Printer Data Bus 0 |
− |
| |
| Reset RST | 5 M 36| P1 | | | Reset RST | 5 M 36| P1 | |
− |
| |
| I/O Write *IOW | 6 8 35| P2 |-Data to Printer | | I/O Write *IOW | 6 8 35| P2 |-Data to Printer |
− |
| |
| I/O Read *IOR | 7 2 34| P3 | | | I/O Read *IOR | 7 2 34| P3 | |
− |
| |
| Direction DIR | 8 C 33| P4 | | | Direction DIR | 8 C 33| P4 | |
− |
| |
| System Data Bus D0 | 9 1 32| P5 | | | System Data Bus D0 | 9 1 32| P5 | |
− |
| |
| | D1 |10 1 31| P6 | | | | D1 |10 1 31| P6 | |
− |
| |
| | D2 |11 - 30| P7 Printer Data Bus 7 | | | D2 |11 - 30| P7 Printer Data Bus 7 |
− |
| |
| | D3 |12 C 29| *ERROR Error input from printer | | | D3 |12 C 29| *ERROR Error input from printer |
− |
| |
| | D4 |13 28| SLCT Select input from printer | | | D4 |13 28| SLCT Select input from printer |
− |
| |
| | D5 |14 27| PE Paper end input from printer | | | D5 |14 27| PE Paper end input from printer |
− |
| |
| | D6 |15 26| *ACK Acknowledge input from printer | | | D6 |15 26| *ACK Acknowledge input from printer |
− |
| |
| System Data Bus D7 |16 25| BUSY Busy input from Printer | | System Data Bus D7 |16 25| BUSY Busy input from Printer |
− |
| |
| Interrupt IRQ |17 24| *STROB Strobe output to Printer | | Interrupt IRQ |17 24| *STROB Strobe output to Printer |
− |
| |
| Chip Select *CS |18 23| *AUTOFD Printer feeds one line after printng | | Chip Select *CS |18 23| *AUTOFD Printer feeds one line after printng |
− |
| |
| Data output En *POE |19 22| *INIT Initialize printer | | Data output En *POE |19 22| *INIT Initialize printer |
− |
| |
| Ground (0v) Vss |20 21| *SLCT Select Printer | | Ground (0v) Vss |20 21| *SLCT Select Printer |
− |
| |
| ----------- | | ----------- |
− |
| |
| | | |
| | | |
| There is also a flat pack 48 pin version of this IC. Pin 1 on the flat | | There is also a flat pack 48 pin version of this IC. Pin 1 on the flat |
− |
| |
| pack is *IOW and the pins follow the same sequence around the package with | | pack is *IOW and the pins follow the same sequence around the package with |
− |
| |
| four not connected pins (pins 40-43) between VDD and X1. | | four not connected pins (pins 40-43) between VDD and X1. |
− |
| |
| | | |
| | | |
| P0 *SLCT | | P0 *SLCT |
− |
| |
| 36 25 | | 36 25 |
− |
| |
| ------------------ | | ------------------ |
− |
| |
| A0 37| |24 PE | | A0 37| |24 PE |
− |
| |
| | | | | | | |
− |
| |
| (4 NC lines | | | | (4 NC lines | | |
− |
| |
| pins 40-43) | | | | pins 40-43) | | |
− |
| |
| | | | | | | |
− |
| |
| RST 48| |13 D7 | | RST 48| |13 D7 |
− |
| |
| ----------------/ | | ----------------/ |
− |
| |
| 1 12 | | 1 12 |
− |
| |
| *IOW D6 | | *IOW D6 |
− |
| |
− |
| |
| | | |
| | | |
| | | |
| The data sheets give the following truth table for the operation of this chip: | | The data sheets give the following truth table for the operation of this chip: |
− |
| |
| | | |
| | | |
| Input Output Operation: | | Input Output Operation: |
− |
| |
| *CS A1 A0 *IOR *IOW DIR | | *CS A1 A0 *IOR *IOW DIR |
− |
| |
| 1 x x x x 0 Inactive (x=don't care) | | 1 x x x x 0 Inactive (x=don't care) |
− |
| |
| 1) 0 0 0 1 0 0 Write Data to Printer | | 1) 0 0 0 1 0 0 Write Data to Printer |
− |
| |
| 2) 0 0 0 0 1 1 Read data on printer Bus | | 2) 0 0 0 0 1 1 Read data on printer Bus |
− |
| |
| 3) 0 0 1 0 1 1 Read Status from Printer | | 3) 0 0 1 0 1 1 Read Status from Printer |
− |
| |
| 4) 0 1 0 1 0 0 Write Control word to the printer | | 4) 0 1 0 1 0 0 Write Control word to the printer |
− |
| |
| 5) 0 1 0 0 1 1 Read control word on Printer control bus | | 5) 0 1 0 0 1 1 Read control word on Printer control bus |
− |
| |
| 0 1 1 0 x x *****Illegal operation***** | | 0 1 1 0 x x *****Illegal operation***** |
− |
| |
| 0 ---Others--------------- No Action | | 0 ---Others--------------- No Action |
− |
| |
| | | |
| | | |
| The 82C11 supports 5 commands: (Addresses are for LPT1). | | The 82C11 supports 5 commands: (Addresses are for LPT1). |
− |
| |
| | | |
| | | |
| 1) Write data to printer (Out &H378,data) The data written to the 82C11 is | | 1) Write data to printer (Out &H378,data) The data written to the 82C11 is |
− |
| |
| latched into the output register. *POE enables or disables the data from | | latched into the output register. *POE enables or disables the data from |
− |
| |
| being driven onto the printer data bus (GND=Enabled). | | being driven onto the printer data bus (GND=Enabled). |
− |
| |
| | | |
| | | |
| 2) Read data from the printer bus (data = in &h378). The data on the printer | | 2) Read data from the printer bus (data = in &h378). The data on the printer |
− |
| |
| data bus is read back to the computer. If *POE is enabled(GND) this will | | data bus is read back to the computer. If *POE is enabled(GND) this will |
− |
| |
| reflect the output data. If *POE is disabled (+5) it will reflect whatever is | | reflect the output data. If *POE is disabled (+5) it will reflect whatever is |
− |
| |
| on the other end of the printer data bus. | | on the other end of the printer data bus. |
− |
| |
| | | |
| | | |
| 3) Read Status from the Printer (data = in &h379). The data reflects the | | 3) Read Status from the Printer (data = in &h379). The data reflects the |
− |
| |
| status of the printer status lines. | | status of the printer status lines. |
− |
| |
| | | |
| | | |
| D7 = Inverted version of BUSY signal - When this goes high the | | D7 = Inverted version of BUSY signal - When this goes high the |
− |
| |
| printer is ready to accept data. | | printer is ready to accept data. |
− |
| |
| D6 = *ACK - The printer pulls ACKnowledge low to indicate it has | | D6 = *ACK - The printer pulls ACKnowledge low to indicate it has |
− |
| |
| received the data and is ready for more. | | received the data and is ready for more. |
− |
| |
| D5 = PE - Paper End - A high indicate the printer is out of paper. | | D5 = PE - Paper End - A high indicate the printer is out of paper. |
− |
| |
| D4 = SLCT - SeLeCT -This signal is high when the printer is on-line. | | D4 = SLCT - SeLeCT -This signal is high when the printer is on-line. |
− |
| |
| D3 = *ERROR - This pin indicates the printer has a problem. | | D3 = *ERROR - This pin indicates the printer has a problem. |
− |
| |
| D2 = Not used | | D2 = Not used |
− |
| |
| D1 = Not used | | D1 = Not used |
− |
| |
| D0 = Not used | | D0 = Not used |
− |
| |
| | | |
| | | |
| 4) Write Control word to the printer (out &h37a,data). Send control signals | | 4) Write Control word to the printer (out &h37a,data). Send control signals |
− |
| |
| to the printer. | | to the printer. |
− |
| |
| | | |
| | | |
| D7 = Not used | | D7 = Not used |
− |
| |
| D6 = Not used | | D6 = Not used |
− |
| |
| D5 = Not used ***(we use this to enable/disable bidirectional)*** | | D5 = Not used ***(we use this to enable/disable bidirectional)*** |
− |
| |
| D4 = IRQEN - When this pin is high the 82C11 sends an Interrupt | | D4 = IRQEN - When this pin is high the 82C11 sends an Interrupt |
− |
| |
| request to PC when *ACK is asserted by the printer. | | request to PC when *ACK is asserted by the printer. |
− |
| |
| D3 = SLCT - ?? | | D3 = SLCT - ?? |
− |
| |
| D2 = INIT - INITiate printer (reset printer) | | D2 = INIT - INITiate printer (reset printer) |
− |
| |
| D1 = *AUTOFD - When low the printer automatically feeds one line | | D1 = *AUTOFD - When low the printer automatically feeds one line |
− |
| |
| after printing. | | after printing. |
− |
| |
| D0 = STROB - This pin is set to a 1 to tell the printer to read | | D0 = STROB - This pin is set to a 1 to tell the printer to read |
− |
| |
| the data on the printer data bus. | | the data on the printer data bus. |
− |
| |
| | | |
| | | |
| Pins D3, D2 and D0 are inverted between the control word and the | | Pins D3, D2 and D0 are inverted between the control word and the |
− |
| |
| output pins that connect to the printer. (eg. A 1 on D0 will be | | output pins that connect to the printer. (eg. A 1 on D0 will be |
− |
| |
| actually sent to the printer as a low on the *STROB pin) | | actually sent to the printer as a low on the *STROB pin) |
− |
| |
| | | |
| | | |
| 5) Read Control word from the printer (data=in &h37a). Read what control | | 5) Read Control word from the printer (data=in &h37a). Read what control |
− |
| |
| signals have been sent to the printer. Data bits are the same as above. | | signals have been sent to the printer. Data bits are the same as above. |
− |
| |
| Note that this will not read what has been stored on D5. | | Note that this will not read what has been stored on D5. |
− |
| |
| | | |
| | | |
| ---------------------------------------------------------- | | ---------------------------------------------------------- |
− |
| |
| | | |
| | | |
| February 27, 1991 | | February 27, 1991 |
− |
| |
| | | |
| | | |
| I welcome any constructive criticism. I know that I do not know everything | | I welcome any constructive criticism. I know that I do not know everything |
− |
| |
| there is to know about the parallel port and I may have made some mistakes. | | there is to know about the parallel port and I may have made some mistakes. |
− |
| |
| Please let me know so I can fix them. | | Please let me know so I can fix them. |
− |
| |
| | | |
| | | |
| Thank you. | | Thank you. |
− |
| |
| | | |
| | | |
| David Meed (506) 375-XXXX | | David Meed (506) 375-XXXX |
− |
| |
| c/o NBBI | | c/o NBBI |
− |
| |
| Victoria, NB | | Victoria, NB |
− |
| |
| E0J 2A0 | | E0J 2A0 |
− |
| |
| </pre> | | </pre> |
| | | |
− | [[Category:Computing]] | + | [[Category:How-To]] |