Hardware/Embedded Projects


6502 Based Computer


Summary

  • Built 6502-microprocessor based computer on breadboards, later being translated to a PCB.
  • Referenced wiring diagrams as well as creating logic diagrams while building. Used oscilloscope as well as EEPROM programmer to debug.
  • Enhanced knowledge of computer architecture, assembly, I/O, Binary and Hexadecimal.

Development environment

Kikad

External Resources

BMP_180 Library Sensor Project


Background

The BMP_180 is a temperature and pressure sensor manufactured by Bosh. My Goal was to write my own library using I2C in order to operate the device and access temperatures in my building. After doing this, My goal was to use the onboard WIFI in order to send POST requests to my website so I could monitor temperatures wherever I was through my website.

Summary

  • Referenced datasheet in order to write C++ code to communicate with the BMP180 sensor via I2C.
  • Used a logic analyzer in order to debug I2C communication while referencing the datasheet and known good examples.
  • Integrated WiFi communication to communicate with node.js server and post temperatures.

Skills

  • I2C Protocol
  • ESP32
  • Logic Analyzing(Sigrok)
  • Hardware/Software interface

Development environment

Vscode + Platformio

External Resources

UW Orbital Firmware Team


About the Team

UW Orbital is a student design team at the University of Waterloo participating in the Canadian Satellite Design Challenge (CSDC) - a competition that involves a dozen universities from across Canada and runs every two years. Teams design a 3U CubeSats with unique missions and payloads, and attempt to pass launch readiness evaluations such as vibration testing. The competition offers to fund the launch costs for the winning team.

Skills

  • FreeRTOS
  • I2C protocol
  • Interrupts
  • Hardware/Software interface
  • Mutex's, Semaphores, Task creation and management

External Resources

ADXL-345 library project


Summary

Starting this project, I learned the basics of SPI communication (MISO, MOSI, SS,CLK) and wrote basic functions in order to power on the device and initate readings. Along the way, I used both a logic analyser and oscilliscope to debug my program. Next I worked on implementing more functionality of the adxl345 such as changing data rate, tap detection, and interrupt handling. Next, I hope to convert the project to freeRTOS and C in order to more easily handle interrupts and bring my code closer to code seen in production.

Skills

  • FreeRTOS
  • SPI protocol
  • Realtime Interrupts
  • Hardware/Software interface
  • Mutex's, Semaphores, Task creation and management
  • Logic Analyzing
  • Debugging with Oscilliscope
  • ESP32

Development environment

Vscode + Platformio

External Resources

IR Remote reverse engineering


Summary


Need

The need for this project started after I hosted my own local music server and was able to start playing music from my phone, but needed to physically turn on the reciever and switch inputs. I figured if I could salvage an IR led from a previous remote and connect it to an esp32 using bluetooth or wifi, I could control the reciever remotely.

The Project

I used an IR led from an unused remote and connected it to my oscilliscope in order to view the data being sent from the reciver's remote for various commands such as ON, INPUT ETC. I then measured the lengths of these pulses and wrote a c++ program to mimmick this behaviour. On testing this, it did not work!. At first, I attributed this to the strength of the IR led, so I reduced it's resistance hoping for an improvement. However, this yeilded no success. Upon further research, I discovered my problem was twofold. First, my timing for what should be interpereted as a 1 and 0 were slightly off, and second the signal used a 40khz carrier wave. I fixed the first by simply adjusting the timing, and the second I wrote a function to oscillate a signal at 40khz when it was specified to be on. After testing this out, it worked!

My process for sending bits to the IR led was rudimentary so I improved it by using bitwise operations on a 16bit word of data in order to send a bit, then shift the remaining bits until none were left. Next, I researched the bluetooth capabilities of the ESP32 and BluetoothSerial library that would work. I then downloaded a serial terminal on my phone and was able to send commands to the receiver through character input over Bluetooth!

Skills

  • Reverse engineering
  • Troubleshooting
  • Bluetooth
  • Hardware/Software interface
  • Oscilliscope triggering, measurement and analysis
  • FreeRTOS queues
  • ESP32

Development environment

Vscode + Platformio

External Resources

DIY Streamdeck (UART/USB)


Summary


Need

I often have many manual applications and keypresses I want to accomplish when I start my pc, or various programs. I decided to create a hardware device that would function as a keyboard and would have buttons that could be programmed to execute certain keypresses or strings of keypresses.

The Project

To start, I discovered I had a CP2102 USB to UART bridge already in my possesion so I connected this to the UART2 port of the ESP32. I then wrote basic freeRTOS functionality in order to detect and send button presses to a queue. On a button being pressed, this would trigger the serial output from the UART port, displaying a button has been pressed. Upon further reasearch I realized that I need this device to appear to the computer as a HID (Human Interface Device) in order for it to function as a keyboard. So, I plan on upgrading to a CP2110 which has this feature and should mean button interrupts can trigger HID events, such as keyboard presses, as described in the OSdev wiki

Skills

  • UART/USB
  • Troubleshooting
  • Interfacing with multiple libraries
  • Hardware/Software interface
  • FreeRTOS queues
  • ESP32

Development environment

Vscode + Platformio

External Resources