80|0

26

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【Follow me第二季第3期】扩展任务:简单信号发生器 [复制链接]

 

在DAC任务中已经实现了三角波和正弦波的生成,本次结合按键,使用按键选择输出的波形。

新增全局变量wave_select,当wave_select==0,输出三角波,当wave_select==1,输出正弦波。

在100ms任务扫描按键,根据按下的按键切换波形;在10ms任务中输出波形。

void Timer_10msTask()
{
    if(wave_select==0)
    {
        DAC_output();
    }
    else
    {
        DAC_output_Sinewave();
    }
}

void Timer_100msTask()
{
    static uint8_t led1level=BSP_IO_LEVEL_LOW;
    if(keyscan(KEY_S1)==1)
//    if(Key_Scan(KEY_S1)==1)
    {
        wave_select=0;
//        led1level=!led1level;
//        g_ioport.p_api->pinWrite(g_ioport.p_ctrl,LED1_BLUE,led1level);
//        R_BSP_SoftwareDelay(350,BSP_DELAY_UNITS_MILLISECONDS);
    }else if(keyscan(KEY_S2)==1)
    {
        wave_select=1;
    }

}

三角波和正弦波实现代码如下

/*
 * dac.c
 *
 *  Created on: 2024年12月12日
 *      Author: LXL
 */
#include "dac.h"
#include <math.h>
#include <stdint.h>
#include "haL_data.h"

uint16_t gs_dac_value=0;
uint64_t gs_starttime=0;
uint16_t DAC_value=0;
extern uint64_t gs_dwTick;

fsp_err_t DAC_Init(void)
{
     fsp_err_t status = R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg);
     status = R_DAC_Write(&g_dac0_ctrl, 0);

     status = R_DAC_Start(&g_dac0_ctrl);
     gs_starttime = gs_dwTick;
     return status;
}

fsp_err_t DAC_output(void)
{
    static int16_t a=1;
    gs_dac_value=(uint16_t)(gs_dac_value+a);
    if(gs_dac_value>=0x0FFF)
//    if (gs_dac_value >= 0x5)
    {
        a = -1;
    }
    else if (gs_dac_value == 0)
    {
        a = 1;
    }

    fsp_err_t status = R_DAC_Write(&g_dac0_ctrl, gs_dac_value);

    return status;
}

fsp_err_t DAC_output_Sinewave(void)
{
    fsp_err_t ret;
    uint64_t currenttime=gs_dwTick;
//    uint16_t DAC_value=0;
    uint64_t t_ms=(currenttime-gs_starttime);       //ms
    double t_s   =(double)t_ms/1000;//(double)(t_ms/1000);
    DAC_value=(uint16_t)((sin(t_s)+1)/2*4096);
    gs_dac_value=DAC_value;
    ret = R_DAC_Write(&g_dac0_ctrl, gs_dac_value);
    return ret;
}

实验现象:

将dac输出引脚和LED3使用杜邦线连接。

20241215_234136

可以看到,运行后默认输出三角波,按下按键s2切换为正弦波,按下按键s1切换回三角波,由于从led看现象并不明显,所以使用freemaster直接查看gs_dac_value的值,这样直观一些。

点赞 关注(1)
 
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
推荐帖子
工控英语

induction machine 感应式电机horseshoe magnet 马蹄形磁铁magnetic field 磁场eddy current 涡流right-hand rule 右 ...

TI推出业界首款单芯片无源 IR MEMS温度传感器

本帖最后由 dontium 于 2015-1-23 13:26 编辑 ? ?Integrated Thermopile With Analog Front End ?IR Spectrum Sensit ...

用EK-LM3S811-ND制作的 万年历、温湿度计

这是用TI研讨会送的EK-LM3S811-ND做的一个简单的时钟万年历、带有温湿度显示、时间设置、整点报时功能,显示使用了128X64的LCD, ...

【TI电池管理】BQ24610充电对比测试

先上图:243718243719 BQ24610是具有 5V–28V VCC 输入的独立同步开关模式锂离子或锂聚合物电池充电器,最大输入支持6串28 ...

micropython为esp32-S2/S3芯片增加 UF2 固件格式

esp32: Create .uf2 binaries for S2 and S3 chips. 586712

今天下午1点有奖直播 | 光传感、体征监测、AR眼镜、ToF......你关注的光学传感方案

ams OSRAM光学技术论坛在线直播开放预约中!光传感器、生命体征监测、AR眼镜、LBS技术、车载位置传感、数字汽车座舱、ToF、可见 ...

【最强开源】手搓120W开关电源

最近抽空做了个开关电源 645265 645262 645263 645264 645261 645260

【博流BL606P音视频开发板】蓝牙播放音频测试

5aaae4be94703623f5b6761f6d8de25b 前言 BL606P-DVK 开发板基于博流RISC-V双核 AIoT 边缘计算SOC BL606P,它具有 Wi-Fi ...

stm32

配置DMA的时候,配置的是循环处理,没有打开FIFP模式,导致了只有一个缓冲区,用于存储串口接收到的数据,导致数据发送的时候, ...

【补 DigiKey“智造万物,快乐不停”创意大赛】3.usb_otg_hs虚拟串口的调试 基于ST...

# 【补 DigiKey“智造万物,快乐不停”创意大赛】3.usb_otg_hs虚拟串口的调试 基于STM32H7B3I-DK 测试下otg_device功能并且使 ...

关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表