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
led command in the BASIC interpreter is handled by the function
ubasic.c, which calls the function
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.