RGB LED Controller with PIC18F25K20

13,874

Circuit Image

In this project it was used the Piranha Super-flux RGB Led of common anode, and the PIC18F25K20, in order to generate combinations of colors. It has two function modes, automatic that generate the color sequence that is stored in the C memory, and the manual mode in which you can select one of the seven possible colors. The control of the RGB led is made with PWM (Pulse Width Modulation), because PIC18F25K20 only have 2 PWM outputs (Hardware), I did the PWM by software to have 3 PWM outputs for that I use TIMER0 and for the Manual mode I use IOC (interrupt on change). More: In this project I use push buttons to change between modes and to change the colors. But if we use the button as in the circuit (1) we have a problem. The problem with this configuration, due to the mechanical nature of any switch that may contains spring return action of some kind, there won’t be a clean transition from a state to another, but instead there will be a series of high and low states spikes. To solve that problem we have to implement a de-bouncing system, it can be done by hardware or software. We can use a RC delay circuit or it can be done with a schmitt trigger, but both ways will increase the price. So I done by software the de-bounce.

The project utilizes a Piranha Super-flux RGB LED configured as a common anode device, interfaced with a PIC18F25K20 microcontroller. The primary objective is to generate various color combinations through two operational modes: an automatic mode that cycles through a pre-defined sequence stored in the microcontroller's memory and a manual mode that allows the user to select from seven distinct colors.

The RGB LED is controlled using Pulse Width Modulation (PWM) techniques. The PIC18F25K20 microcontroller is equipped with only two hardware PWM outputs. To achieve control over all three colors (Red, Green, and Blue) of the RGB LED, software PWM techniques are implemented. This is accomplished by leveraging TIMER0 to generate the necessary timing signals for PWM control, effectively allowing the microcontroller to simulate additional PWM outputs.

For user interaction, push buttons are employed to switch between the automatic and manual modes, as well as to choose specific colors in manual mode. A significant challenge arises from the mechanical characteristics of push buttons, which can lead to erratic state transitions due to bouncing. This bouncing results in multiple high and low states being detected during a single press, potentially causing unintended behavior in the circuit.

To mitigate this issue, a software-based de-bouncing algorithm is implemented. This approach avoids additional costs associated with hardware solutions, such as RC delay circuits or Schmitt triggers. The software algorithm ensures that only a clean, single transition is recognized for each button press, thereby enhancing the reliability of user inputs and ensuring smooth operation of the color selection functionality.

Overall, the design emphasizes efficient use of microcontroller resources, effective user interaction through intuitive controls, and robust handling of mechanical switch behavior, making it suitable for applications requiring dynamic RGB color control.In this project it was used the ?Piranha Super-flux RGB? Led of common anode, and the PIC18F25K20, in order to generate combinations of colors. It has two function modes, automatic that generate the color sequence that is stored in the ?C memory, and the manual mode in which you can select one of the seven possible colors. The control of the RGB led is made with PWM(Pulse With Modulation), because PIC18F25K20 only have 2 PWM outputs (Hardware), I did the PWM by software to have 3 PWM outputs for that I use TIMER0 and for the Manual mode I use IOC(interrupt on change).

In this project I use push buttons to change between modes and to change the colors. But if we use the button as in the circuit (1) we have a problem. The problem with this configuration, due to the mechanical nature of any switch that may contains spring return action of some kind, there won?t be a clean transition from a state to another, but instead there will be a series of high and low states spikes. To solve that problem we have to implement a de-bouncing system, it can be done by hardware or software.

We can use a RC delay circuit or it can be done with a schmitt trigger, but both ways will increase the price. So I done by software the de-bounce. 🔗 External reference