Built a controller that scans a 4×4 matrix keypad, maps each key to a preset in a 2D lookup table, and updates the PWM period in real time. Implemented row/column scanning with debounce, key mapping, and a PWM timer/counter that applies period changes at period boundaries to avoid glitches. Result: pressing a key instantly selects a new PWM period from the preset set.
Scanned a 4×4 matrix keypad and mapped each key to a preset in a 2D lookup table to set the PWM driving an AUX output (simple tone generator). Added a potentiometer as a volume control to adjust the output level. Implemented debouncing and smooth PWM updates to minimize audible artifacts when switching presets. I also played "Mary Had a Little Lamb" on it.
Measured how long a push-button was held and used that duration to increase the LED’s brightness by raising the PWM duty cycle (longer hold -> higher duty -> brighter LED). Implemented a timer-based PWM and updated duty cycles cleanly to avoid flicker.
Read digits from a matrix keypad and sent the corresponding character over UART to a serial terminal, displaying the pressed value on screen. Included keypad debouncing and consistent key-to-digit mapping.
Periodically transmitted my RedID over UART; upon completing each full send, issued a newline to start a fresh line on the terminal. Used a timer to pace messages and verified framing/baud settings for reliable output.
Encoded a string into Morse code and drove an LED with accurate dot/dash timings and inter-symbol/word spacing using timers.
In this lab, I turned an LED on and off with a small delay in between that. It taught me the basics in firmware programming and how to set registers and GPIO pins as high and low.