Intermediate
20 min
0

Experience secure and efficient remote control with Si4356 and PIC18F2458

Unleash connectivity at a distance: Sub-GHz ISM RF receiver is here!

ISM RX 2 Click with EasyPIC v8

Published Nov 01, 2023

Click board™

ISM RX 2 Click

Development board

EasyPIC v8

Compiler

NECTO Studio

MCU

PIC18F2458

Seamlessly integrate our sub-GHz ISM RF receiver into your home automation, industrial control, and remote access systems for long-range, low-speed communication that's robust, reliable, and ready to transform your applications.

A

A

Hardware Overview

How does it work?

ISM RX 2 Click is based on the Si4356, an easy-to-use, size-efficient, low-current wireless receiver IC from Silicon Labs that covers the sub-GHz bands. The wide operating voltage range and low current consumption make the Si4356 an ideal solution for battery-powered applications. It has an integrated crystal oscillator and uses a single-conversion mixer to downconvert the (G)FSK, or OOK modulated receive signal to a low IF frequency. The receiver demodulates the incoming data asynchronously by oversampling the incoming transmission, and the resulting demodulated signal is sent to the system MCU via the UART interface. The Si4356 has a frequency range from 315 up to 917MHz and can be configured for operation using the four selector pins (SEL0 – SEL3) where the state of each of these pins is read internally at Start-Up and used to determine which pre-loaded configuration should be

used. The SEL0 and SEL1 pins are used to adjust the frequency, and they are connected in such a way that the frequency of this Click board™ is fixed to 434.15MHz, while the setting of the SEL2 and SEL3 pins can be changed by using the SMD jumpers labeled as MODE SEL used to select the desired modulation (G)FSK or OOK. Additionally, this Click board™ has a low-pass RC filter on the receiver data output pin, which is used to filter the output and improve sensitivity. This Click board™ communicates with MCU using the UART interface for the data transfer, while the GPIO pins on the mikroBUS™ are used for mode selection and indication. More precisely, only one UART pin from the mikroBUS™ (RX) receives the data. The Si4356 provides two operating modes: a Receive Mode and a Stand-by Mode. The operating mode can be changed by toggling the STBY signal routed to the CS pin on the mikroBUS™,

while the MSTAT signal routed to the INT pin on the mikroBUS™ represents an interrupt and indicates the current operating mode of the device. It is also possible to reset the device using an RST pin routed to the RST pin on the mikroBUS™. ISM RX 2 Click possesses the SMA antenna connector with an impedance of 50Ω, and it can be used for connecting the appropriate antenna that MikroE has in its offer for improved range and received signal strength. This Click board™ can be operated only with a 3.3V logic voltage level. The board must perform appropriate logic voltage level conversion before using MCUs with different logic levels. Also, it comes equipped with a library containing functions and an example code that can be used as a reference for further development.

ISM RX 2 Click hardware overview image

Features overview

Development board

EasyPIC v8 is a development board specially designed for the needs of rapid development of embedded applications. It supports many high pin count 8-bit PIC microcontrollers from Microchip, regardless of their number of pins, and a broad set of unique functions, such as the first-ever embedded debugger/programmer. 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, EasyPIC v8 provides a fluid and immersive working experience, allowing access anywhere and under any

circumstances at any time. Each part of the EasyPIC 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 DEVICE, and CAN are also included, including the well-established mikroBUS™ standard, two display options (graphical and character-based LCD), and several different DIP sockets. These sockets cover a wide range of 8-bit PIC MCUs, from the smallest PIC MCU devices with only eight up to forty pins. EasyPIC 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.

EasyPIC v8 horizontal image

Microcontroller Overview

MCU Card / MCU

default

Architecture

PIC

MCU Memory (KB)

24

Silicon Vendor

Microchip

Pin count

28

RAM (Bytes)

2048

You complete me!

Accessories

Right angle 433MHz rubber antenna boasts a frequency range of 433MHz, ensuring optimal performance within this spectrum. With a 50Ohm impedance, it facilitates efficient signal transmission. The antenna's vertical polarization enhances signal reception in a specific orientation. Featuring a 1.5dB gain, it can improve signal strength to some extent. The antenna can handle a maximum input power of 50W, making it suitable for various applications. Its compact 50mm length minimizes spatial requirements. Equipped with an SMA male connector, it easily interfaces with compatible devices. This antenna is an adaptable solution for wireless communication needs, particularly when vertical polarization is crucial.

ISM RX 2 Click accessories image

Used MCU Pins

mikroBUS™ mapper

NC
NC
AN
Reset
RA0
RST
Operating Mode Selection
RA5
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
NC
NC
PWM
Operating Mode Indicator
RB1
INT
UART TX
RC6
TX
NC
NC
RX
NC
NC
SCL
NC
NC
SDA
NC
NC
5V
Ground
GND
GND
2

Take a closer look

Schematic

ISM RX 2 Click Schematic schematic

Step by step

Project assembly

EasyPIC v8 front image hardware assembly

Start by selecting your development board and Click board™. Begin with the EasyPIC v8 as your development board.

EasyPIC v8 front image hardware assembly
LTE IoT 5 Click front image hardware assembly
MCU DIP 28 hardware assembly
LTE IoT 5 Click complete accessories setup image hardware assembly
EasyPIC v8 28pin-DIP Access - upright/background hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
NECTO Compiler Selection Step Image hardware assembly
NECTO Output Selection Step Image hardware assembly
Necto image step 6 hardware assembly
Necto DIP image step 7 hardware assembly
Necto image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Necto PreFlash Image hardware 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

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

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

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

Software Support

Library Description

This library contains API for ISM RX 2 Click driver.

Key functions:

  • ismrx2_get_data_pin_state - ISM RX 2 get state of DATA pin function.

  • ismrx2_read_manchester_data - ISM RX 2 read manchester encoded data function.

  • ismrx2_read_rf_data - ISM RX 2 read data 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 ISM RX 2 Click Example.
 *
 * # Description
 * This application shows capability of ISM RX 2 Click board.
 *
 * The demo application is composed of two sections :
 *
 * ## Application Init
 * Initialize GPIO pins and LOG module and sets default configuration.
 *
 * ## Application Task
 * Wait for the data pin to go down and start sampling and wait for sync word if it's received 
 * collect data to buffer till it receives 0 byte
 *
 * @note
 * Application task is broken down into two parts:
 * DEFAULT_EXAMPLE - Collects data from the OOK TX Click board and displays it on the 
 * USB UART terminal.
 * MANCHESTER_EXAMPLE - Collects Manchester encoded data from the ISM TX Click board, 
 * decodes it and displays it on the USB UART terminal.
 *
 * @author Stefan Ilic
 *
 */

#include "board.h"
#include "log.h"
#include "ismrx2.h"

#define DEFAULT_EXAMPLE        
// #define MANCHESTER_EXAMPLE       

static ismrx2_t ismrx2;   /**< ISM RX 2 Click driver object. */
static log_t logger;    /**< Logger object. */

static uint8_t read_data[ 8 ] = { 0 }; /**< Read data buffer. */

void application_init ( void ) 
{
    log_cfg_t log_cfg;  /**< Logger config object. */
    ismrx2_cfg_t ismrx2_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.
    ismrx2_cfg_setup( &ismrx2_cfg );
    ISMRX2_MAP_MIKROBUS( ismrx2_cfg, MIKROBUS_1 );
    if ( DIGITAL_OUT_UNSUPPORTED_PIN == ismrx2_init( &ismrx2, &ismrx2_cfg ) ) 
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    if ( ISMRX2_ERROR == ismrx2_default_cfg ( &ismrx2 ) )
    {
        log_error( &logger, " Default configuration." );
        for ( ; ; );
    }
    log_info( &logger, " Application Task " );
}

void application_task ( void ) 
{
#ifdef DEFAULT_EXAMPLE
    
    if ( ISMRX2_PIN_STATE_LOW == ismrx2_get_data_pin_state( &ismrx2 ) )
    {
        if ( ISMRX2_OK == ismrx2_read_rf_data( &ismrx2, read_data ) )
        {
            log_printf( &logger, " RX data: " );
            for ( uint8_t n_cnt = 0; n_cnt < strlen( read_data ); n_cnt++ )
            {
                if ( read_data[ n_cnt ] != '\0' )
                {
                    log_printf( &logger, "%c", read_data[ n_cnt ] );
                }
            }    
            log_printf( &logger, "\r\n*********************\r\n" );
            Delay_ms( 10 );
        }
    }
#endif
#ifdef MANCHESTER_EXAMPLE 
    if ( ISMRX2_PIN_STATE_LOW == ismrx2_get_data_pin_state( &ismrx2 ) )
    {
        if ( ISMRX2_OK == ismrx2_read_manchester_data( &ismrx2, &read_data ) )
        {
            log_printf( &logger, " Read data: " );
            for ( uint8_t n_cnt = 1; n_cnt < strlen( read_data ); n_cnt++ )
            {
                log_printf( &logger, "%c", read_data[ n_cnt ] );
            }
            log_printf( &logger, "\r\n*********************\r\n" );
            Delay_ms( 10 );
        }
    }
#endif
}

void main ( void ) 
{
    application_init( );

    for ( ; ; ) 
    {
        application_task( );
    }
}

// ------------------------------------------------------------------------ END

Additional Support

Resources