Bit-Banging a PS/2 Keyboard Interface

ECE 381
Lab 8 – Bit-Banging a PS/2 Keyboard Interface
Bit-Banging a PS/2 Keyboard Interface
Use the bit-banging technique to read scan codes from a PS/2 keyboard, map printable scan codes to
their ASCII equivalent, and have some of the keyboard non-printable scan codes control the brightness
of an LED and made tones on a speaker.
The PS/2 interface is a standard used by many computing platforms for keyboard and mouse
interaction. Keystroke scan codes are sent to the host computer on a data line in data frames that are
similar to RS232 frames using 8-bit LSB first data with odd parity and one stop bit. The similarity ends
there since RS232 has separate transmit and receive lines and clock synchronization between the
devices is handled by a UART on each end. The PS/2 specification includes a separate clock line with the
clock signals on it being generated by the PS/2 device. Furthermore, both the data and clock lines are
pulled-up to VCC inside the keyboard and logic signals are placed on these lines by open-drain (or opencollector) logic gates on both the PS/2 device and the host that either pull these lines low or go highimpedance and let the pull-up resistors on the lines bring them high. Although host-to-keyboard
communication is not used in this lab, the pulled-up data and clock lines allow the host to inform the
keyboard that it has data pending for the keyboard.
In personal computers, specialized hardware is used for PS/2 interfacing. Although some
microcontrollers have similar specialized logic for PS/2 interfacing, most do not. Nevertheless, occasions
arise where interfacing a microcontroller without this hardware to a PS/2 device is necessary or
beneficial. A technique, colloquially know as bit-banging, can be used to interface with devices that
communicate data serially, like RS232 and PS/2.
Bit-banging is a software method of emulating a dedicated hardware interface when dedicated
hardware is not available. Developing reliable and fast bit-banging software requires a fairly in-depth
knowledge of the microcontroller platform and the precise timing requirements for the device to be
interfaced. As such, and because of time limitations of the class, it is considered beyond the scope of
this lab assignment. Instead, in this lab assignment you will be provided with a PSoC project template
that implements a bit-banged PS/2 interface for keyboard-to-host communications that returns scan
codes sent by a PS/2 keyboard and also maps the printable scan codes to ASCII and also takes a specific
action on some of the non-printable scan codes . You will reverse-engineer this PSoC project and build
upon it to meet all the following specifications.
Begin by downloading the project template at this lab’s URL.
ECE 381
Lab 8 – Bit-Banging a PS/2 Keyboard Interface
Hardware Configuration
Be sure jumpers JP1 and JP2 are on both of their pins or by connecting P16 to RX and P27 to TX
on J13.
Connect the DB-9 serial port on the PSoC to the DB-9 serial port of your lab computer.
Obtain a PS/2 Keyboard, with a 6-Pin MiniDIN connector on the end of the cable, from the TA
Obtain a PS/2 MiniDIN 6-Pin socket breakout board from the TA. Be sure to return this after the
lab demonstration!
Connect the PS/2 breakout board to your PSoC evaluation board according to the following
specifications: + to VCC, G to GND, C (clock) to P[1]2 and P[1]3, and D (data) to P[1]4. A
decoupling capacitor and the pull-up resistors are already built into the PS/2 breakout board.
Connect P[1]1 to LED1 on the PSoC evaluation board.
Connect the PSoC to the speaker on the Digi-Designer according to the figure shown below
ECE 381
Lab 8 – Bit-Banging a PS/2 Keyboard Interface
Initial Testing
Run RealTerm, set the baud rate to 57600, and have it open the serial port that is attached to your PSoC.
Compile the template program and upload it to your PSoC. Power on the PSoC and observe what
happens when you do the following:
Type on the “printable” keys on the PS/2 keyboard connected to your PSoC. Be sure to watch
the RealTerm program window.
Try holding down either the left or right shift key.
Press the “Print Screen” key and watch the PSoC Evaluation Board.
Hold down F1 for a long time and watch the PSoC Evaluation Board. Repeat, this time holding
down F2.
Press the “Pause” button once then press the letters in the Q, A, and Z rows, sequentially, from
left to right.
Hold down either Control key and generate control characters by pressing one of the printable
keys. Verify the control characters are being generated using RealTerm.
Modify the program so that LED1 has only 8 brightness levels instead of the 256 it currently has.
The brightness should change relatively uniformly from off to full intensity over the 8 levels.
The Delete key current does a rubout sequence on the terminal. Modify the program to also
make the Backspace key perform this function.
Modify the program so that it detects that either Alt key is pressed and a sequence of keys is
pressed, pre-programmed strings will be printed to the terminal. Numeric sequences should
work for both numbers type in the number row or on the keypad with NumLock off. The
sequences and strings are:
o Alt-123 – The quick brown fox jumps over the lazy dog
o Alt-314 – 3.1415926535897932386
o Alt-000 – I love/hate ECE381!
Invalid sequences should be quietly ignored.
Add two additional PWM User Modules to create additional tones to the speaker. Route these
to P[0]1 and P[0]2 respective.
In Piano mode, each of the keyboard rows begging with Q, A, and Z should control one of the
PWM user modules so that three-part musical harmony is possible, at least across octaves.
Make sure that each PWM tone generator stops if none of its assigned keys is pressed.
Add the capability to detect the CTRL-ALT-DELETE key sequence used by many operating
systems. Once detected, your PSoC should perform a software reset. Figure out how.
ECE 381
Lab 8 – Bit-Banging a PS/2 Keyboard Interface