
Reading an Analog Voltage Through the PC Printer Port Part 2
Here we simply altered the electrical connections for two of the pins in the TLC548 ADC to free up pins to connect a serial LCD display. This also demonstrates how to manipulate individual bits on the 8-bit data port.
See Reading an Analog Voltage Through the PC Printer Port Part 1

Connect the ADC as follows:
# Connect to TLC548 CS-NOT pin 5 to Db25 pin 3 D1
# Connect to TLC548 CLK pin 7 to Db25 pin 2 D0
# Connect TLC548 Pin 6 DATA OUT to Db25 pin 15
The program is written in Python and runs under Linux. To use this one must setup a module pyparallel. How to set this up is on my webpage Programming the PC Printer Port in Python
#!/usr/bin/env python
# File pporttlc548bits.py
# http://www.bristolwatch.com/pport/index.htm
# By Lewis Loflin - lewis@bvu.net
# Read serial ADC TLC548 and send value to terminal.
# Connecting the TLC548 to the data port pins D0 and D1.
# Program halts when Sw1 is pressed.
# Sw1 is connected from ground to Db25 pin 10 and pulled high
# by a 10k resistor.
# Because two individual port bites used to control ADC
# they can't be used to display binary.
# This frees up pins 1 and 16 for use with LCD circuit
# with pportlcdADC.py
import parallel
import time
p = parallel.Parallel()
'''
; Pins on the TLC548 8-bit ADC:
; 1 -> Ref + -> connect to Vcc
; 2 -> analog in
; 3 -> Ref - -> connect to GND
; 4 -> GND
; 5 -> CS-NOT -> chip select active LOW
; 6 -> DATA OUT
; 7 -> CLK
; 8 -> Vcc
'''
# init i/o pins
p.setDataStrobe(0) # Pin 1 output NC
p.setAutoFeed(0) # Pin 14 output NC
p.getInError() # Pin 15 input to DATA OUT TLC548
p.setInitOut(1) # Pin 16 output NC
p.setSelect(0) # Pin 17 output NC
# Connect to TLC548 CLK pin 7 to Db25 pin 2 D0
def writeD0(bit_val):
if bit_val == 1:
p.setData(p.data() | 1) # set bit 0
else: # clear bit 0
p.setData(p.data() & (255 - 1))
return
writeD0(0) # set TLC548 CLK pin 7 LOW
# Connect to TLC548 CS-NOT pin 5 to Db25 pin 3 D1
def writeD1(bit_val):
if bit_val == 1:
p.setData(p.data() | 2) #set bit 1
else: # clear bit 1
p.setData(p.data() & (255 - 2))
return
writeD1(1) # set TLC548 CS-NOT pin 5 HIGH
# data LSB first
# enable TLC548 CS-NOT LOW
# set CLK HIGH
# read data bit shift left
# set CLK LOW
def readADC():
temp = 0
writeD1(0) # enable CS-NOT LOW
# time.sleep(.01)
for i in range(0,7): # loop here 7 times
writeD0(1) # CLK HIGH
temp = temp + p.getInError() # get bit
temp = temp << 1 # shift 1 bit left
writeD0(0) # CLK LOW
writeD0(1) # CLK HIGH
temp = temp + p.getInError() # get bit 8
writeD0(0) # CLK LOW
writeD1(1) # CS-NOT HIGH
return temp
# convert a 8-bit number (integer) to a binary.
# Returns string.
# unlike python bin() this doesn't drop leading zeros
def convBinary(value):
binaryValue = 'b'
for x in range(0, 8):
temp = value & 0x80
if temp == 0x80:
binaryValue += '1'
else:
binaryValue += '0'
value = value << 1
return binaryValue
def Sw1():
return p.getInAcknowledge()
# check pin 10 Db25 when pressed returns 0
# Sw1 is connected from ground to Db25 pin 10 and pulled high
# by a 10k resistor.
# When Sw1 pressed program exits.
while Sw1():
val = readADC()
time.sleep(.1)
print "Reading =", convBinary(val), " ", hex(val)
p.setData(0) # LEDs off
print
print "Exit now."
exit
Download pport-1.0.iso from Sourceforge.com then burn to DVD (file size 920 meg.), insert into DVD drive and reboot. Make sure PC is set to boot from DVD ROM.
This is pre-configured by myself to use Python to control the printer port. Python can be run from IDLE or Geany.
All of my PPORT electronics projects will work without installation to a PC.
Programs can be saved to thumb drive in LIVE mode.
Projects
Below are listed a series of projects using pyparallel and electronics. Starting with routines I wrote to aid students I'd advise walking through this in sequence. Have fun and send comments and/or corrections to lewis@bvu.net.
- Introduction to Python Bitwise Operations
- Python Bitwise Operations by Example
- Using the PC Printer Port series:
- Programming the PC Printer Port in Python
- Additional Commands for Py-Parallel
- Controlling Data Bits on the PC Parallel Port
- Connecting Switches to the PC Printer Port with Python
- Reading an Analog Voltage Through the PC Printer Port Part 1
- Reading an Analog Voltage Through the PC Printer Port Part 2
- Controlling a Serial LCD Display on a PC Printer Port with Python
- Serial ADC and LCD Display with PC Printer Port with Python
- Controlling MAX7219 LED Display with PC Printer Port with Python
- MAX7219 8-Digit LED Display and Serial ADC in Python
- Project pages:
- Part 1: Read Arduino with PC Printer Port
- Part 2: Better way to Read Arduino Through the PC Printer Port
- Part 3: Read-Write an Arduino Through a PC Printer Port
- Part 4: Control LCD Display and Arduino from the PC Printer Port
- Arduino sketches needed by programs:
- pportArduino1.ino read only after reset.
- pportArduino2.ino reset once and multiple reads.
- pportArduino3.ino reset once read write Arduino infinite times - multiple commands.
- Related Raspberry Pi projects:
- Connect Serial LCD to Raspberry Pi
- Serial Read from Arduino to Raspberry Pi
- Arduino Raspberry Pi Interface with LCD Display
Linux Videos
- Live Linux Distro for Using Printer Port with Electronics
- Using the powerful Rox-Filer system in Linux
- Use FEH under Linux for a Wallpaper Setter
- How to create Symbolic links in Linux
- Printer Port Interfacing Videos:
- Connect Electronics to PC printer Port with Python
- Setup PC Printer Port with Python-Linux
- Use PC Printer Port to Read Analog Voltage
- Read-Write Arduino ADC PWN with Printer Port
- Printer Port to Serial LCD Display
- Connect Arduino to PC Printer Port for advanced control
Printer Port in C
- Exploring Digital Computer Electronics
- Hardware Review Connecting PC Parallel Ports
- Operation TB6600 Stepper Controller with PC Parallel Port
- Build or Buy Parallel Port Breakout Board?
- Build Serial HD44780 LCD Display Connect to Parallel Port
- Motherboards
- Presario 1999 CM1001 Gaming Computer Salvage
- Live Test 2002 VIA EPIA-800 Mini ITX Motherboard
- Salvage, Test 2012 AAEON EMB-B75A Industrial Motherboard
- Web Master
- Gen. Electronics
- YouTube Channel
- Arduino Projects
- Raspberry Pi & Linux
- PIC18F2550 in C
- PIC16F628A Assembly
- PICAXE Projects
Web site Copyright Lewis Loflin, All rights reserved.
If using this material on another site, please provide a link back to my site.