Odyssey Personality - PWM LEDs
This personality demonstrates how FPGA logic can be used to create a large number of PWM controllers, common in lighting and motor control applications. It is related to the MAX 10 Dual Config personality.
How To Use
After connecting the Odyssey board with your smartphone app, select the PWM LEDs personality. When the FPGA configuration finishes loading, the board comes up in manual mode and can be controlled without the App:
Push button zero (PB0) will cycle through LED states: flashing, global level, or pattern. When in global level, push button one (PB1) will cycle through four levels of brightness (off, low, med, high).
The App control page also allows control of these functions, but once an LED button has been pressed, manual control via the pushbuttons is disabled until the next time the personality is loaded.
How It Works
Unlike the Dual Config personalities, this personality loads the SRAM configuration bits of the Max10 FPGA directly, which means the image is not non-volatile and will be lost on a power-cycle.
The PWM (pulse width modulator) is a function well suited and easily implemented in FPGA logic. Since it's just a counter that controls the on time and off time of an I/O pin, you can create as many as you need in the Max 10 logic fabric. Eight have been used to control the LEDs in this design, but they can also be used for functions such as motor control.
Like all controls from the phone app to the Max10 FPGA, commands are sent via I2C-compatible writes from the Broadcom BLE module.