Empower your electronic innovations with our LED driver, providing the foundation for creative lighting solutions across various industries
A
A
Hardware Overview
How does it work?
LED Driver 10 Click is based on the TLC59283, an SPI bus-controlled, 16-channel, constant-current sink light-emitting diode (LED) driver with pre-charge FET from Texas Instruments. It operates within a VCC supply voltage range where its outputs are 10V tolerant. Each LED output, 16 LED drivers presented on two nine-position spring terminals, with a maximum output current of +50mA per channel, is programmable at OFF and ON state with a programmable individual LED brightness. The internal pre-charge FET prevents the ghosting of multiplexed LED modules. One cause of this phenomenon is the parasitic capacitance charging current of the constant-current outputs and PCB wiring connected to the LED pins of the TLC59283 through the external LED. The TLC59283 communicates with MCU using the standard SPI serial interface with a maximum frequency of 35MHz. It has a 16-bit shift
register and an output ON/OFF data latch. The shift register and data latch are 16 bits long and used to turn the constant-current outputs ON/OFF. When the serial data buffer is loaded, a LAT pin of the mikroBUS™ socket rising edge transfers the data to the LED outputs. When the TLC59283 is initially powered on, the data in the 16-bit shift register and output ON/OFF data latch are not set to default values. Therefore, the output ON/OFF data must be written to the data latch before turning ON the LED output. The PWM pin of the mikroBUS™ socket should be set to a high logic state when powered on because the constant current may be turned on due to random data in the output ON/OFF data latch. When the PWM pin is in a low logic state, the corresponding LED output is turned ON if data in the ON/OFF control data-latch are '1' and remains off if the data are '0'. When the PWM pin is high, all LED outputs
are forced OFF. The LED Driver 10 Click also possesses the adjustable potentiometer labeled VR1 that adjusts the constant-current value of all 16 channels. The constant-current value of all 16 channels is set by a single external resistor placed between the IREF pin, the constant-current value setting pin of the TLC59283, and the ground. Selection can be performed by onboard SMD jumper labeled as CURRENT to an appropriate position marked as L and H. This Click board™ can operate with either 3.3V or 5V logic voltage levels selected via the VCC SEL jumper. This way, both 3.3V and 5V capable MCUs can use the communication lines properly. Also, this Click board™ comes equipped with a library containing easy-to-use functions and an example code that can be used as a reference for further development.
Features overview
Development board
Nucleo 32 with STM32F031K6 MCU board provides an affordable and flexible platform for experimenting with STM32 microcontrollers in 32-pin packages. Featuring Arduino™ Nano connectivity, it allows easy expansion with specialized shields, while being mbed-enabled for seamless integration with online resources. The
board includes an on-board ST-LINK/V2-1 debugger/programmer, supporting USB reenumeration with three interfaces: Virtual Com port, mass storage, and debug port. It offers a flexible power supply through either USB VBUS or an external source. Additionally, it includes three LEDs (LD1 for USB communication, LD2 for power,
and LD3 as a user LED) and a reset push button. The STM32 Nucleo-32 board is supported by various Integrated Development Environments (IDEs) such as IAR™, Keil®, and GCC-based IDEs like AC6 SW4STM32, making it a versatile tool for developers.
Microcontroller Overview
MCU Card / MCU
Architecture
ARM Cortex-M0
MCU Memory (KB)
32
Silicon Vendor
STMicroelectronics
Pin count
32
RAM (Bytes)
4096
You complete me!
Accessories
Click Shield for Nucleo-32 is the perfect way to expand your development board's functionalities with STM32 Nucleo-32 pinout. The Click Shield for Nucleo-32 provides two mikroBUS™ sockets to add any functionality from our ever-growing range of Click boards™. We are fully stocked with everything, from sensors and WiFi transceivers to motor control and audio amplifiers. The Click Shield for Nucleo-32 is compatible with the STM32 Nucleo-32 board, providing an affordable and flexible way for users to try out new ideas and quickly create prototypes with any STM32 microcontrollers, choosing from the various combinations of performance, power consumption, and features. The STM32 Nucleo-32 boards do not require any separate probe as they integrate the ST-LINK/V2-1 debugger/programmer and come with the STM32 comprehensive software HAL library and various packaged software examples. This development platform provides users with an effortless and common way to combine the STM32 Nucleo-32 footprint compatible board with their favorite Click boards™ in their upcoming projects.
Used MCU Pins
mikroBUS™ mapper
Take a closer look
Click board™ Schematic
Step by step
Project assembly
Track your results in real time
Application Output via Debug Mode
1. Once the code example is loaded, pressing the "DEBUG" button initiates the build process, programs it on the created setup, and enters Debug mode.
2. After the programming is completed, a header with buttons for various actions within the IDE becomes visible. Clicking the green "PLAY" button starts reading the results achieved with the Click board™. The achieved results are displayed in the Application Output tab.
Software Support
Library Description
This library contains API for LED Driver 10 Click driver.
Key functions:
leddriver10_set_channels
- This function sets all channels to desired value by using SPI serial interfaceleddriver10_read_channels
- This function reads the current state of all channels by using SPI serial interfaceleddriver10_set_duty_cycle
- This function sets the PWM duty cycle in percentages ( Range[ 0..1 ] ).
Open Source
Code example
This example can be found in NECTO Studio. Feel free to download the code, or you can copy the code below.
/*!
* @file main.c
* @brief LEDDriver10 Click example
*
* # Description
* This example demonstrates the use of LED Driver 10 click board.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initializes the driver, starts the PWM module and enables all channels.
*
* ## Application Task
* Controls the LEDs brightness by changing the PWM duty cycle.
* The PWM duty cycle percentage will be logged on the USB UART.
*
* @author Stefan Filipovic
*
*/
#include "board.h"
#include "log.h"
#include "leddriver10.h"
static leddriver10_t leddriver10;
static log_t logger;
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
leddriver10_cfg_t leddriver10_cfg; /**< Click config object. */
/**
* Logger initialization.
* Default baud rate: 115200
* Default log level: LOG_LEVEL_DEBUG
* @note If USB_UART_RX and USB_UART_TX
* are defined as HAL_PIN_NC, you will
* need to define them manually for log to work.
* See @b LOG_MAP_USB_UART macro definition for detailed explanation.
*/
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
Delay_ms( 100 );
log_info( &logger, " Application Init " );
// Click initialization.
leddriver10_cfg_setup( &leddriver10_cfg );
LEDDRIVER10_MAP_MIKROBUS( leddriver10_cfg, MIKROBUS_1 );
err_t init_flag = leddriver10_init( &leddriver10, &leddriver10_cfg );
if ( SPI_MASTER_ERROR == init_flag )
{
log_error( &logger, " Application Init Error. " );
log_info( &logger, " Please, run program again... " );
for ( ; ; );
}
leddriver10_pwm_start( &leddriver10 );
leddriver10_set_channels ( &leddriver10, LEDDRIVER10_ENABLE_ALL_CH );
log_printf( &logger, " All channels enabled!\r\n" );
log_printf( &logger, " Dimming the LEDs light...\r\n" );
}
void application_task ( void )
{
static int16_t duty_cnt = 1;
static int8_t duty_inc = 1;
float duty = duty_cnt / 10.0;
leddriver10_set_duty_cycle ( &leddriver10, duty );
log_printf( &logger, "> Duty: %u%%\r\n", ( uint16_t )( duty_cnt * 10 ) );
Delay_ms( 500 );
if ( 10 == duty_cnt )
{
duty_inc = -1;
}
else if ( 0 == duty_cnt )
{
duty_inc = 1;
}
duty_cnt += duty_inc;
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END