
A simple 4-value send/receive chip
This project realizes a very simple 4-value sender and receiver chip. The mode of the chip is determined by input 7: sender low, receiver high. Currently, the protocol only supports 1 sender and 1 receiver.
Sender mode is enabled when Input[7] is set low. In sender mode, the chip looks for a rising value on bits 0:4 of the input bus. This can be achieved through the use of a 4-button PMOD module, or by toggling the corresponding DIP switch on the carrier board.
Sender Mode Input:
| # | Input | Description |
|---|---|---|
| 0 | input[0] | bit[0] to send |
| 1 | input[1] | bit[1] to send |
| 2 | input[2] | bit[2] to send |
| 3 | input[3] | bit[3] to send |
| 4 | unused | N/A |
| 5 | unused | N/A |
| 6 | unused | N/A |
| 7 | input[7] | Sender/Receiver indicator |
To send data, the sender pulls Output[0] high and relays the corresponding input bit (i) on Output[i+1] (Note: currently only one bit can be sent at a time). The Sender also sets Output[7] to indicate to the connected chip that it should operate in receiver mode.
Finally, The sender keeps Output[0] high long enough to prevent the receiver's debounce filtering from masking the signal before setting it low again.
Sender Mode Output:
| # | Output | Description |
|---|---|---|
| 0 | Transmit | Signal receiver to read data |
| 1 | x_bit[0] | Transmit bit[0] |
| 2 | x_bit[1] | Transmit bit[1] |
| 3 | x_bit[2] | Transmit bit[2] |
| 4 | x_bit[3] | Transmit bit[3] |
| 5 | unused | N/A |
| 6 | unused | N/A |
| 7 | Mode_of_connected_chip | Sender/Receiver indicator |
Receiver mode is enabled when Input[7] is set high. In receiver mode, the chip listens on Input[0:5]. It waits until the positive edge of Input[0] before registering an input.
Receiver Mode Input:
| # | Input | Description |
|---|---|---|
| 0 | Read | Read input bits |
| 1 | input[0] | recv_ bit[0] |
| 2 | input[1] | recv_ bit[1] |
| 3 | input[2] | recv_ bit[2] |
| 4 | input[3] | recv_ bit[3] |
| 5 | unused | N/A |
| 6 | unused | N/A |
| 7 | input[7] | Sender/Receiver indicator |
The chip utilizes the carrier chip's 7 segment display to echo a value corresponding to the input data:
| Input[1:4] | Output Value | Display Value |
|---|---|---|
| 1000 | 0000_0110 | 1 |
| 0100 | 0101_1011 | 2 |
| 0010 | 0110_0110 | 4 |
| 0001 | 0111_1111 | 8 |
The receiver initially displays zero (on the 7-segment display) until it receives the read signal from the sender. The receiver then displays the value received or an E when the value is not 1, 2, 4, and 8. The last value received, or E is displayed until the receives gets the signal to read the next value.
To connect two chips, configure them as follows:

| # | Input | Output | Bidirectional |
|---|---|---|---|
| 0 | Input[0]/Message Ready | Transmit/LCD Display Value[0] | |
| 1 | Input[1]/recv_bit[0] | input[0]/LCD Display Value[1] | |
| 2 | Input[2]/recv_bit[1] | Input[1]/LCD Display Value[2] | |
| 3 | Input[3]/recv_bit[2] | Input[2]/LCD Display Value[3] | |
| 4 | unused/recv_bit[3] | Input[3]/LCD Display Value[4] | |
| 5 | unused | unused/LCD Display Value[5] | |
| 6 | unused | unused/LCD Display Value[6] | |
| 7 | Sender/Receiver Mode Select (0/1) | Mode of connected chip//LCD Display Value[7] |