瑞萨单片机论坛
直播中

jf_07365693

1年用户 379经验值
擅长:嵌入式技术 控制/MCU
私信 关注
[经验]

【瑞萨RA6E2地奇星开发板试用】驱动 TEMT6000 环境光传感器

TEMT6000

【瑞萨RA6E2地奇星开发板试用】驱动 TEMT6000 环境光传感器

本文介绍了 RA6E2 地奇星开发板通过 ADC 读取 TEMT6000 传感器数据,实现串口打印环境光照强度的项目设计。

项目介绍

RA6E2 地奇星是一款基于100MHz Arm® Cortex®-M33 内核架构的核心板,主控芯片为 R7FA6E2BB3CNE

项目包括

  • 串口配置:使能 SCI9 异步串口通信功能,实现串口测试;
  • ADC 配置:使能 AN000 通道 ADC 功能,并配置引脚、传感器、扫描频率、回调函数等;
  • TEMT6000 驱动:通过计算获得环境光照强度数据并串口打印。

硬件连接

包括 JLINK 调试器、DHT11 模块、串口模块。

  • J-Link 调试器
RA6E2 J-Link Note
SWCLK SCL Serial Clock
SWDIO SDA Serial Data
GND GND Ground
3V3 3V3 Power
  • TEMT6000 模块
RA6E2 TEMT6000 Note
P000 OUT Analog Output
3V3 VCC Power
GND GND Ground
  • 串口模块 (JLINK CDC)
RA6E2 J-Link Note
TXD (P109) RX Transmit
RXD (P110) TX Receive
GND GND Ground

实物图

temt6000_hardware.jpg

动态展示见顶部视频。

串口配置

介绍了板载 USB 串口打印字符串的项目设计,以测试 UART 输出功能。

工程创建

  • 打开 e^2^ studio 软件;
  • 依次点击 文件 - 新建 - 瑞萨 C/C++ 项目 - Renesas RA
  • 依次进行工程命名,路径设置,FSP版本,目标开发板选择,Device 选择 R7FA6E2BB3CNE ,工具链选择 GNU ARM Embedded ,调试器选择 J-Link ;
  • 完成工程创建 ;
  • 进入 FSP 配置界面,打开 Pins 标签页,根据原理图或开发板丝印,将 P109 和 P110 引脚分别配置为 TXD9 和 RXD9 串口模式;
  • 新建串口通信堆栈 New Stack - Connectivity - UART (r_sci_uart)
  • 串口属性配置,中断和回调函数 user_uart_callback 设置;
  • 进入 BSP 标签页,配置 RA Common 属性,配置内存空间 0x2000
  • 点击 Generate Project Content 按钮,生成工程代码。

详见:【瑞萨RA6E2】ADC 电压温度计 .

ADC 配置

在完成前面关于 UART 串口创建的基础上,进一步实现 ADC 项目的添加。

  • 进入 Stacks 标签页,新建 ADC 堆栈 New Stack - Analog - ADC (r_adc)

属性配置

  • Input 选项下勾选 Channel 0 ;
  • 中断配置 - Interrupts - Callback 值修改为 adc_callback - 优先级设置为 Priority 2 ;
  • 引脚 Pins 开启 AN000 对应 P000 引脚;

ADC 及串口配置完成后,

  • 点击 Generate Project Content ,构建工程。

代码

修改 .../src/hal_entry.c 主程序,代码如下

#include "hal_data.h"

fsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
void user_uart_callback (uart_callback_args_t * p_args)
{
    if(p_args->event == UART_EVENT_TX_COMPLETE)
    {
        uart_send_complete_flag = true;
    }
}

/*------------- UART redirection printf -------------*/
#ifdef __GNUC__
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else

#endif

PUTCHAR_PROTOTYPE
{
        err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);
        if(FSP_SUCCESS != err) __BKPT();
        while(uart_send_complete_flag == false){}
        uart_send_complete_flag = false;
        return ch;
}

int _write(int fd,char *pBuffer,int size)
{
    for(int i=0;i<size;i++)
    {
        __io_putchar(*pBuffer++);
    }
    return size;
}

/*------------- ADC callback -------------*/
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{
    FSP_PARAMETER_NOT_USED(p_args);
    scan_complete_flag = true;
}

void hal_entry(void)
{
    /* TODO: add your own code here */
    /* Open the transfer instance with initial configuration. */
        err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
        assert(FSP_SUCCESS == err);

        /* Initializes the module. */
        err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
        /* Handle any errors. This function should be defined by the user. */
        assert(FSP_SUCCESS == err);

        /* Enable channels. */
        err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
        assert(FSP_SUCCESS == err);

        while(1)
        {
            uint16_t adc_data0=0;
            /* Enable scan triggering from ELC events. */
            (void) R_ADC_ScanStart(&g_adc0_ctrl);
            scan_complete_flag = false;
            while (!scan_complete_flag)
            {
                /* Wait for callback to set flag. */
            }

            err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data0);
            assert(FSP_SUCCESS == err);
            printf("P000(AN0)=%d\\n",adc_data0);

            R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
        }
}

保存代码,编译工程并调试。

效果

  • JLINK CDC UART 接收端连接开发板串口发送端 P109;
  • 运行串口调试助手,配置端口号、波特率等参数;
  • 打开串口,即可接收 ADC 原始值和 MCU 温度数据;

adc_temp_uart.jpg

TEMT6000 光感

TEMT6000 环境光(可见光)传感器,对可见光照度的反应特性与人眼的特性类似,可以模拟人对环境光线的强度的判断,从而方便做出与人友好互动的应用。

  • 可应用于照明控制、屏幕背光控制等。

TEMT6000.jpg

原理

通过 RA6E2 板载 ADC 功能读取 TEMT6000 模块模拟输出引脚的电压,获取环境光强度。

  • 模块原理图

SCH_TEMT6000.jpg

代码

while(1)
{
            uint16_t adc_raw=0;
            int32_t temp_c = get_temperature_c();
            float volt=0;
            /* Enable scan triggering from ELC events. */
            (void) R_ADC_ScanStart(&g_adc0_ctrl);
            scan_complete_flag = false;
            while (!scan_complete_flag)
            {
                /* Wait for callback to set flag. */
            }

            err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_raw);
            assert(FSP_SUCCESS == err);

            volt = (float)(adc_raw *3.3/4096);
            printf("P000(AN0) = %d, Temp: %ld ℃, Voltage: %.2f\\n", adc_raw, temp_c, volt);

            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_HIGH);
            R_BSP_SoftwareDelay (50, BSP_DELAY_UNITS_MILLISECONDS);
            R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_04_PIN_02, BSP_IO_LEVEL_LOW);
            R_BSP_SoftwareDelay (950, BSP_DELAY_UNITS_MILLISECONDS);
}

保存代码,编译工程并调试。

效果

  • 运行串口调试助手,配置端口号、波特率等参数;
  • 打开串口,即可接收 ADC 电压和 TEMT6000 光感数据;

temt6000_print.jpg

动态效果见底部视频。

总结

本文介绍了 RA6E2 地奇星开发板通过 ADC 读取 TEMT6000 传感器数据,实现串口打印环境光照强度的项目设计,为相关产品的快速开发和应用设计提供了参考。

光感print

更多回帖

发帖
×
20
完善资料,
赚取积分