356|0

70

帖子

1

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使用杜邦线连接。

播放器加载失败: 未检测到Flash Player,请到安装
20241215_234136

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

点赞 关注(1)
个人签名

人生苦短,我用Python

 
 

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

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
直播报名最后1周:艾迈斯欧司朗 OSP 开放协议,从氛围灯动态照明到传感器交互融合
直播时间:4月22日(周二)10:00
直播奖励:京东卡、蓝牙温湿度计、定制水杯

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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

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

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

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