High Level Design:

 

The wireless keyboard consists of a wired 102-key ps/2 keyboard, two Atmega32 microcontrollers, one 433.92MHz transmitter and one 433.92MHz receiver from Radiotronix. 

Our design can be divided into two parts: the keyboard side and the computer side.  On the keyboard side, we have one of the microcontrollers connected to the keyboard and to the transmitter.  The keyboard communicates with the microcontroller and the microcontroller sends data out to the transmitter by using it’s built in UART.  On the computer side, we have the other microcontroller connected to the computer and to the receiver.  The computer communicates with the microcontroller and the microcontroller gets data from the receiver through its build in UART.  Note that we use the UART because they allow us to easily set the transmit and receive rate and they do all the transmitting and receiving in the background.  Our setup is shown in the figure below.

 

Because we decided to use a ps/2 keyboard and connect to the ps/2 port on the computer, we needed to implement the ps/2 protocol on the microcontrollers.  A very good reference on the ps/2 protocol is located on Adam Chapweske’s webpage.  The ps/2 protocol is a bi-directional protocol, which means that not only does the keyboard send data to the computer, but the computer sends data to the keyboard.  For example, the computer can do such things as tell the keyboard to reset or set the typematic delay and typematic rate, among other things.  This means that in our wireless set up, not only should the keyboard be able to transmit to the computer, but the computer should be able to transmit to the keyboard.  However, due to budgetary constraints, we could only purchase one transmitter and one receiver.  To overcome this obstacle, we had to program the microcontroller on the keyboard side so that it would pretend to be the computer and program the microcontroller on the computers side so that it would pretend to be the keyboard.  On the keyboard side, this requires that the microcontroller sends the appropriate commands to the keyboard when it boots up, and that it listens for the correct responses back from the keyboard.  Furthermore, on the computer side, this requires that the microcontroller responds correctly to all the commands that the computer sends to it.

            In addition, the ps/2 protocol specifies that data be sent at a maximum rate of 10kbps to 16.6kbps.  However, the transmitter/receiver pair can only transmit at a maximum of 4.8kbps.  As a result, the microcontroller on the keyboard side needs to buffer the keyboard data so that it can send it out at a much slower rate through the transmitter.  We rely heavily on the fact that a human being can only type so fast, and that the typematic rate (the rate at which the keyboard resends a key that is held down) is well below the maximum.  On the computer side, this also means that the microcontroller needs to buffer all the data that it slowly receives before passing it along to the computer at a faster rate.