Enhance your project's capabilities by integrating IR remote control functionality that improves your system and allows you more flexibility
A
A
Hardware Overview
How does it work?
IR Click is based on the TSOP38238, a miniaturized sensor for receiving the modulated signal of QEE113 IR emitting diode from Vishay Semiconductors. All Vishay IR receivers have the same circuit architecture consisting of a photodetector, pre-amplifier, and automatic gain control (ACG) to surpass ambient noise with transmitted signals. Tuned to a carrier frequency of 38kHz with a transmission distance of 45m and beam and viewing angle of 45 degrees, this Click board™ represents a compact and easy solution allowing you to control A/V equipment with an IR remote controller. The infrared signal generates an equivalent photocurrent in the integrated photo PIN diode. The DC part of the signal is blocked in the
bias circuit, while the AC part is passed to a trans-impedance amplifier, followed by an automatic gain-control amplifier and an integrated bandpass filter. A comparator, an integrator, and a Schmitt Trigger stage perform the final signal conditioning. The blocks “Automatic Gain Control” and “Automatic Threshold Control” dynamically control the operating points and the threshold levels required to suppress noise from disturbance sources. The digital output signal has an active-low polarity and consists of an incoming optical burst envelope signal without the carrier frequency. IR Click communicates with the target MCU via selectable GPIO lines. The selection can be made by positioning SMD jumpers to an appropriate
position marked as GPIO or UART. The default configuration of this Click board™ allows transmission via the PWM pin of the mikroBUS™ socket and reception via the AN pin, while the other configuration allows communication using TX and RX pins. This Click board™ can operate with either 3.3V or 5V logic voltage levels selected via the PWR 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
Fusion for PIC v8 is a development board specially designed for the needs of rapid development of embedded applications. It supports a wide range of microcontrollers, such as different PIC, dsPIC, PIC24, and PIC32 MCUs regardless of their number of pins, and a broad set of unique functions, such as the first-ever embedded debugger/programmer over WiFi. The development board is well organized and designed so that the end-user has all the necessary elements, such as switches, buttons, indicators, connectors, and others, in one place. Thanks to innovative manufacturing technology, Fusion for PIC v8 provides a fluid and immersive working experience, allowing access anywhere and under any
circumstances at any time. Each part of the Fusion for PIC v8 development board contains the components necessary for the most efficient operation of the same board. In addition to the advanced integrated CODEGRIP programmer/debugger module, which offers many valuable programming/debugging options and seamless integration with the Mikroe software environment, the board also includes a clean and regulated power supply module for the development board. It can use a wide range of external power sources, including a battery, an external 12V power supply, and a power source via the USB Type-C (USB-C) connector. Communication options such as USB-UART, USB
HOST/DEVICE, CAN (on the MCU card, if supported), and Ethernet are also included, including the well-established mikroBUS™ standard, a standardized socket for the MCU card (SiBRAIN standard), and two display options (graphical and character-based LCD). Fusion for PIC v8 is an integral part of the Mikroe ecosystem for rapid development. Natively supported by Mikroe software tools, it covers many aspects of prototyping and development thanks to a considerable number of different Click boards™ (over a thousand boards), the number of which is growing every day.
Microcontroller Overview
MCU Card / MCU
![default](https://cdn.mikroe.com/rent-a-product/request-setup/mcu-cards/mcu-card-for-pic32-pic32mx795f512l.png)
Type
8th Generation
Architecture
PIC32
MCU Memory (KB)
512
Silicon Vendor
Microchip
Pin count
100
RAM (Bytes)
131072
Used MCU Pins
mikroBUS™ mapper
Take a closer look
Schematic
![IR Click Schematic schematic](https://dbp-cdn.mikroe.com/catalog/click-boards/resources/1ee790b1-bce8-6a3a-a085-0242ac120009/schematic.webp)
Step by step
Project assembly
Track your results in real time
Application Output
After pressing the "FLASH" button on the left-side panel, it is necessary to open the UART terminal to display the achieved results. By clicking on the Tools icon in the right-hand panel, multiple different functions are displayed, among which is the UART Terminal. Click on the offered "UART Terminal" icon.
![UART Application Output Step 1](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703a-40a0-6b58-88de-02420a00029a/UART-AO-Step-1.jpg)
Once the UART terminal is opened, the window takes on a new form. At the top of the tab are two buttons, one for adjusting the parameters of the UART terminal and the other for connecting the UART terminal. The tab's lower part is reserved for displaying the achieved results. Before connecting, the terminal has a Disconnected status, indicating that the terminal is not yet active. Before connecting, it is necessary to check the set parameters of the UART terminal. Click on the "OPTIONS" button.
![UART Application Output Step 2](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703a-eb29-62fa-ba91-02420a00029a/UART-AO-Step-2.jpg)
In the newly opened UART Terminal Options field, we check if the terminal settings are correct, such as the set port and the Baud rate of UART communication. If the data is not displayed properly, it is possible that the Baud rate value is not set correctly and needs to be adjusted to 115200. If all the parameters are set correctly, click on "CONFIGURE".
![UART Application Output Step 3](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703b-7543-6fbc-9c69-0242ac120003/UART-AO-Step-3.jpg)
The next step is to click on the "CONNECT" button, after which the terminal status changes from Disconnected to Connected in green, and the data is displayed in the Received data field.
![UART Application Output Step 4](https://dbp-cdn.mikroe.com/cms/shared-resources/1eed703c-068c-66a4-a4fc-0242ac120003/UART-AO-Step-4.jpg)
Software Support
Library Description
This library contains API for IR Click driver.
Key functions:
ir_get_an_state
- IR get AN pin state function.ir_nec_send_command
- IR NEC send data function.ir_nec_read_command
- IR NEC data reading function.
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 IR Click Example.
*
* # Description
* This is an example that demonstrates the use of the IR Click board.
*
* The demo application is composed of two sections :
*
* ## Application Init
* Initialization driver enables - GPIO and Log.
*
* ## Application Task
* This example contains two parts :
* - Transmitter mode - Sends data using NEC protocol.
* - Receiver mode - Reads data that is been sent using NEC protocol and
* displaying it on the UART terminal.
*
* @author Stefan Ilic
*
*/
#include "board.h"
#include "log.h"
#include "ir.h"
static ir_t ir;
static log_t logger;
uint8_t tx_data[ 8 ] = { 'M', 'i', 'k', 'r', 'o', 'E', '\r', '\n' };
#define IR_TRANSMITTER_MODE
void application_init ( void )
{
log_cfg_t log_cfg; /**< Logger config object. */
ir_cfg_t ir_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 );
log_info( &logger, " Application Init " );
// Click initialization.
ir_cfg_setup( &ir_cfg );
IR_MAP_MIKROBUS( ir_cfg, MIKROBUS_1 );
err_t error_flag = ir_init( &ir, &ir_cfg );
if ( ( UART_ERROR == error_flag ) || ( PWM_ERROR == error_flag ) )
{
log_error( &logger, " Communication init." );
for ( ; ; );
}
log_info( &logger, " Application Task " );
log_printf( &logger, "- - - - - - - - - - - - \r\n" );
#ifdef IR_TRANSMITTER_MODE
log_printf( &logger, "- Transmitter mode - \r\n" );
#else
log_printf( &logger, "- Receiver mode - \r\n" );
#endif
log_printf( &logger, "- - - - - - - - - - - - \r\n" );
}
void application_task ( void )
{
#ifdef IR_TRANSMITTER_MODE
log_printf( &logger, " Sending message." );
for ( uint8_t cnt = 0; cnt < 8; cnt++ )
{
ir_nec_send_command( &ir, 0x00, tx_data[ cnt ] );
log_printf( &logger, "." );
Delay_ms( 50 );
}
log_printf( &logger, "\r\n Message sent! \r\n" );
log_printf( &logger, "- - - - - - - - - - - - \r\n" );
Delay_ms( 500 );
#else
uint8_t arr;
char rx_data;
err_t err_flag = ir_nec_read_command ( &ir, &arr, &rx_data );
if ( IR_OK == err_flag )
{
log_printf( &logger, "%c", rx_data );
}
else
{
log_printf( &logger, "Read ERROR! \r\n" );
}
Delay_ms( 50 );
#endif
}
void main ( void )
{
application_init( );
for ( ; ; )
{
application_task( );
}
}
// ------------------------------------------------------------------------ END