Beginner
10 min

Measure and report temperature in a digital format with AT30TSE758A and STM32F091RC

Record and store temperature data over time

Temp-Log Click with UNI Clicker

Published Dec 09, 2023

Click board™

Temp-Log Click

Dev Board

UNI Clicker

Compiler

NECTO Studio

MCU

STM32F091RC

Monitor temperature in various applications with the highest precision

A

A

Hardware Overview

How does it work?

Temp-Log Click is based on the AT30TSE758A, a 9 to 12bit, ±0.5°C accurate digital temperature sensor with non-volatile registers and integrated serial EEPROM from Microchip. The AT30TSE758A utilizes a band-gap type temperature sensor with an internal sigma-delta ADC to measure and convert the temperature. The internal ADC can be configured to work with a resolution of 9, 10, 11, or 12 bits. This directly affects the size of the temperature measurement steps. However, it should be noted that the higher resolution results in longer conversion times. The measured temperature is calibrated in degrees Celsius. The AT30TSE758A sensor uses the I2C bus for communication with the MCU. The AT30TSE758A sensor is made with power saving in mind. When the shutdown mode is engaged, the power consumption is minimal, and most device sections do not consume any power. The ONE SHOT function allows you to wake up the device, take one measurement, update the registers, and reenter shutdown mode. The 16bit configuration

register is used to configure all the working parameters of the sensor: mode (one-shot mode, normal, and shutdown mode), conversion resolution, the polarity of the ALERT pin, ALERT mode, non-volatile memory busy status, and more. There is also a copy of this register in the non-volatile memory, which can be independently changed. After the power is on, the content of the non-volatile config register will be copied to its volatile counterpart. The non-volatile version of the configuration register contains additional bits for the permanent lock-down and config lock, used to prevent further changes to the configuration parameters. Also, two more 16-bit registers are used to set the high and the low-temperature thresholds, which also have their non-volatile copies. Depending on the ALERT mode bit in the config register, the temperature threshold values in these registers will be used to trigger an event on the ALERT pin, routed to the mikroBUS™ INT pin. This pin is pulled HIGH on this Click, so it is a good idea to configure it as active LOW using the

polarity bit in the config register. The 8Kbit EEPROM section of the AT30TSE758A acts as an additional serial device with its own I2C slave address. The 7-bit I2C address of the serial EEPROM is 1010APP, where “A” corresponds to the status of the A2 address pin. The last two “P” characters correspond to the memory page bits P1 and P0. The remaining two address pin states (A0 and A1) are not required to match when addressing the EEPROM. These bits and the word address byte transmitted via the I2C comprise the 10-bit address field required to map all 1024 bytes available on this device. The EEPROM contains 16 bytes per page and 64 pages in an array. 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.

Temp-Log Click hardware overview image

Features overview

Development board

UNI Clicker is a compact development board designed as a complete solution that brings the flexibility of add-on Click boards™ to your favorite microcontroller, making it a perfect starter kit for implementing your ideas. It supports a wide range of microcontrollers, such as different ARM, PIC32, dsPIC, PIC, and AVR from various vendors like Microchip, ST, NXP, and TI (regardless of their number of pins), four mikroBUS™ sockets for Click board™ connectivity, a USB connector, LED indicators, buttons, a debugger/programmer connector, and two 26-pin headers for interfacing with external electronics. Thanks to innovative manufacturing technology, it allows you to build

gadgets with unique functionalities and features quickly. Each part of the UNI Clicker development kit contains the components necessary for the most efficient operation of the same board. In addition to the possibility of choosing the UNI Clicker programming method, using a third-party programmer or CODEGRIP/mikroProg connected to onboard JTAG/SWD header, the UNI Clicker board also includes a clean and regulated power supply module for the development kit. It provides two ways of board-powering; through the USB Type-C (USB-C) connector, where onboard voltage regulators provide the appropriate voltage levels to each component on the board, or using a Li-Po/Li

Ion battery via an onboard battery connector. All communication methods that mikroBUS™ itself supports are on this board (plus USB HOST/DEVICE), including the well-established mikroBUS™ socket, a standardized socket for the MCU card (SiBRAIN standard), and several user-configurable buttons and LED indicators. UNI Clicker is an integral part of the Mikroe ecosystem, allowing you to create a new application in minutes. Natively supported by Mikroe software tools, it covers many aspects of prototyping thanks to a considerable number of different Click boards™ (over a thousand boards), the number of which is growing every day.

UNI clicker double image

Microcontroller Overview

MCU Card / MCU

default

Type

8th Generation

Architecture

ARM Cortex-M0

MCU Memory (KB)

256

Silicon Vendor

STMicroelectronics

Pin count

64

RAM (Bytes)

32768

Used MCU Pins

mikroBUS™ mapper

NC
NC
AN
NC
NC
RST
NC
NC
CS
NC
NC
SCK
NC
NC
MISO
NC
NC
MOSI
Power Supply
3.3V
3.3V
Ground
GND
GND
NC
NC
PWM
Alert Interrupt
PB3
INT
NC
NC
TX
NC
NC
RX
I2C Clock
PB6
SCL
I2C Data
PB7
SDA
Power Supply
5V
5V
Ground
GND
GND
1

Take a closer look

Schematic

Temp-Log Click Schematic schematic

Step by step

Project assembly

UNI Clicker front image hardware assembly

Start by selecting your development board and Click board™. Begin with the UNI Clicker as your development board.

UNI Clicker front image hardware assembly
Thermo 28 Click front image hardware assembly
SiBRAIN for STM32F745VG front image hardware assembly
Prog-cut hardware assembly
UNI Clicker MB 1 - upright/with-background hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
Necto image step 7 hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

Track your results in real time

Application Output

After loading the code example, pressing the "DEBUG" button builds and programs it on the selected setup.

Application Output Step 1

After programming is completed, a header with buttons for various actions available in the IDE appears. By clicking the green "PLAY "button, we start reading the results achieved with Click board™.

Application Output Step 3

Upon completion of programming, the Application Output tab is automatically opened, where the achieved result can be read. In case of an inability to perform the Debug function, check if a proper connection between the MCU used by the setup and the CODEGRIP programmer has been established. A detailed explanation of the CODEGRIP-board connection can be found in the CODEGRIP User Manual. Please find it in the RESOURCES section.

Application Output Step 4

Software Support

Library Description

This library contains API for Temp-Log Click driver.

Key functions:

  • temp_log_read_temp_dec - This function reads decimal value of temp.

  • temp_log_convert_to_celsius - This function converts temperature data to celsius value.

  • temp_log_get_alert - This function alerts user if temperature limit is alarming.

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 
 * \brief TempLog Click example
 * 
 * # Description
 * This example returns values of the temperature from the sensor.
 *
 * The demo application is composed of two sections :
 * 
 * ## Application Init 
 * Initializes click driver.
 * 
 * ## Application Task  
 * Reads temperature from temperature register in decimal value in 9-bit resolution,
 * converts that decimal value in celsius value and checks Alert pin witch goes active (low)
 * if the measured temperature meets or exceeds the high temperature limit.
 * 
 * 
 * \author MikroE Team
 *
 */
// ------------------------------------------------------------------- INCLUDES

#include "board.h"
#include "log.h"
#include "templog.h"

// ------------------------------------------------------------------ VARIABLES

static templog_t templog;
static log_t logger;

// ------------------------------------------------------ APPLICATION FUNCTIONS

void application_init ( void )
{
    log_cfg_t log_cfg;
    templog_cfg_t cfg;

    /** 
     * 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.
    templog_cfg_setup ( &cfg );    
    TEMPLOG_MAP_MIKROBUS( cfg, MIKROBUS_1 );
    if ( TEMPLOG_OK != templog_init ( &templog, &cfg ) )
    {
        log_error( &logger, " Communication init." );
        for ( ; ; );
    }
    
    templog_default_cfg ( &templog );
    
    log_info( &logger, " Application Task " );
}

void application_task ( void )
{
    uint16_t temp_in_dec = 0;
    float temp_in_cels = 0;
    
    temp_in_dec = temp_log_read_temp_dec( &templog, TEMP_LOG_RESOLUTION_9_BITS );
    temp_in_cels = temp_log_convert_to_celsius( temp_in_dec );
    
    log_printf( &logger, "Temperature in celsius value is: %.2f\r\n", temp_in_cels );

    if ( temp_log_get_alert( &templog ) == 0 )
    {
        log_printf( &logger, "TEMPERATURE LIMIT ALARMING!\r\n" );
    }
    
    Delay_ms( 1000 );
} 

void main ( void )
{
    application_init( );

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

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

Additional Support

Resources