I am a Systems Design Engineering student at the University of Waterloo
with a planned minor in philosophy. I would sum up my entire personality
into a venn diagram of four main categories:
Although Systems Design Engineering is a very broad program, I would say
I specialize in hardware and software. I am proficient in Python, C, and
I recently organized and hosted a student-run threatre festival. I ended
up writing a play, directing, acting, and running audio for the entire show.
In the end we had multiple plays, a magician, musical acts, and a bit of improv.
This year I intended to audition for some local theatres in Kitchener-Waterloo.
This past year I played Ultimate Frisbee on the varsity team for UW.
The overarching mentallity I've adopted has been to understand the root
of everything. This is the cause for my passion in all branches of my life.
I have spent the past few years learning about circuitry and
hardware from the ground up. Beginning with simple LEDs blinking
with entirelly analog components, to Arduino, to custom PCBs
with selected microprocessors: it's all covered in the Design
Engineering Report. Some of my favourite projects include:
Flexible PCB: Snake Programmed in assembly (p. 115)
To begin, the game snakewas made in C for a breadboard prototype.
Then a surface-mount PCB is designed; the screen is an custom 8x8 LED
matrix with an ATmega328p as the microcontroller. The PCB is made to be
flexible so it can be laminated into a page in the report along with
a flexible solar panel for power. Finally, the game is reprogrammed in
assembly for practice.
Bluetooth Photoframe (p. 103)
An app is created that can send photos to a bluetooth HC05 module which
is used as a receiver for a microcontroller. This is then processed and
sent to a TFT graphical LCD.
Four bit Programmable Computer (p. 61/109)
This project is outlined in much more detail in it's own dedicated
page since it is my most challenging completed project to date.
Basically, the goal was to create a computer from scratch with
all essential pieces: an ALU, RAM, program counter, program & control
ROM, etc. It took three months to build a breadboard prototype, then
another three months to create a full PCB with an LED matrix output,
an extended program counter, and a separate board to program the device.
The final product was hand soldered and encased in a custom 3D print
with an acryllic cover.
Download my report!
Andro is a project I am currently working on to combine my knowledge of AI
with my skills in circuitry.
An independent, application specific processor for 1 bit quantized neural networks.
This is my largest completed project to date. Below is a detailed
description of how the device functions:
The control ROM receives the opcode from the program ROM. This opcode
is the instruction for the entire computer. Using this information
and its eight output pins, the control ROM distributes the proper ALU
instruction, which function the RAM should be performing (read or write),
and the inhibiting pin of the accumulator chip (Accum). It knows this
based on the previously agreed upon interpretation/language inside the
registers of the ROMs. For example, the current opcode for an addition
operation is 0010. This number becomes the address for the control ROM.
It looks inside that specific register and outputs whatever it sees.
In this case, it would set the ALU to addition and enable the Accum.
Since we aren’t using the RAM, it is set to read as a precaution. The
RAM that is used in this project is the SN74LS189N. It has 16 four-bit
registers. As a result, it has four address pins, four data input pins,
and four output pins. It works similarly to the EEPROMs as previously
discussed the main difference being that in this project we are writing to
it in certain scenarios. To write to this chip, the R/W pin is grounded.
The address chip is a hex flip-flop. It has eight inputs and eight
corresponding outputs. When an input is given power, even for an instant,
its respective output is set to high. In this way, it acts as a single
register that holds the address for the RAM. Once its clock pin completes
one full cycle all its outputs are set low. The Accum is the exact
same chip, but it is an octal flip-flop with an inhibitor.The multiplexer
has two primary inputs comprised of four pins each: A and B. Based
on the input of a select pin, it decides to output either all the A
inputs or all the B inputs. This is used in the CHUMP to determine
whether to use the constant provided by the program ROM or the output of
the RAM. Since this project was such a huge undertaking, I cannot put
all the theory on this website. If you are curious about the CHUMP and
all of its difficulty, download my report on the Project Overview Page.
There's a complete write-up of this project and more!
A programmable 4-bit computer.
Load value into reg
Add constant to reg
Subtract constant from reg
Store reg in address given
Read RAM from address given
Jump PC to constant
Jump PC to constant if reg is 0
dan . raymond