% !TEX root = master.tex
\subsubsection{Clock Shaper}
This project is an interesting take on the solution to driving WS2811 controlled RGB LEDs. The issue the WS2811 / WS2812 pose is the communication protocol the chips use for digital control. The protocol can being roughly though of as PWM to send digital data, in which 2/3rds of the time high represents a one while 1/3rd of the time represents a zero, and then a longer amount of time low unlatches the shift register it uses to keep track of the input data. The WS2811/12 ICs can be thought of as a shift register mated to a led constant current drivers mated to a signal shaping chip that activates one the shift register is full, allowing the ICs to retransmit data and thus be daisy chained together. What the clock shaper project aims to address is the computational overhead of constantly generating the pseudo PWM signals required to drive the WS2811 chips, which on a lower end microcontroller could account for the vast majority of its available cycles. Thus this project uses dedicated hardware that is commonly available on most microcontrollers to offload the cost of the signal generation off of the main processor to hardware that runs separate to the main unit. SPI modules essentially have data shoved onto them, then the hardware itself sends out the data serially without further intervention besides the initial data push to it. The issue with this approach is that the data itself is standard high-low formatting and thus is not the pseudo PWM the WS2811 chips require for their control. Thus the author of this project uses another set of external hardware to apply signal shaping to the output of the SPI module. The author uses essentially a simple RC circuit with a transistor to generate the required PWM signals with acceptable margins of error in the signal. This results in massively reduced overhead for driven these style LED driver ICs, which is a key consideration in using these ICs and copious amount of care must be given to this issue.
\cite{SimProjects:ClockShaper}
