Hackaday Badge RGB LED
The canonical introductory activity in microcontroller programming is to blink a LED. The Hackaday Belgrade 2018 badge makes this easy because there's already an LED on board. Actually three LEDs - a red, a green, and a blue inside a single integrated unit.
To make this even easier to access, this LED can be commanded from the onboard BASIC interpreter enhanced with badge-specific command led
. It makes the LED blinking activity nearly trivial. This is a great way to get people started in a way that is as non-intimidating as possible
The custom led
command in the BASIC interpreter is handled by the function led_statement
inside ubasic.c
, which calls the function set_led
inside hw.c
. Custom user programs written in C can call set_led
as well, or copy code from set_led
to manipulate LED hardware directly. They set the state of several predefined PIC hardware pins. In hw.h
, we see the following
#define LED_R LATDbits.LATD6
#define LED_G LATFbits.LATF1
#define LED_B LATDbits.LATD7
These pins match up with what we see on the schematic, wired to three pins on the controller each in series with a current-limiting resistor and the corresponding LED.
So if someone wants to blink the LED on/off, they are all set. The infrastructure exists to do so from either BASIC or from C.
However, if they want to do something more sophisticated than just on or off - such as dimming, pulsing, or mixing the three LEDs to create custom colors, the existing infrastructure is not enough. In order to create a light intensity level somewhere between full on and full off, additional code will be required. The PIC is perfectly capable of creating this pulse-width modulated (PWM) activity on an output pin, it'd take just a bit of code, and should be one of the easier custom coding project to tackle.