搜索

[资源分享] AC7801x电位器调LED (0手写代码)

[复制链接]
1796|6
 楼主 | 2020-7-2 16:26 | 显示全部楼层 |阅读模式
本帖最后由 JasonLee27 于 2020-7-2 16:26 编辑

软件环境:keil 5.23硬件环境:AC7801x 通用开发板

看到有网友关于电位器调LED的分享,并通过autoGen只需要一句代码就搞定,当时就提出通过DMA的方式可以不用写代码。这里多次试验后终于完成,特此分享一下
这里用到了5个模块(DMA在ADC中配置),配置了两个引脚,一个用于电位器AD输入,一个用于PWM输出控制LED。
WeChat Screenshot_20200702161120.png

CTU模块用于配置Timer0溢出触发ADC采样,这么做的原因是,如果ADC按1M 速率采样,那么写入PWM CHnV寄存器的频率太快,而PWM模块在不使用同步的情况下,要等上一次计数结束才能加载新值,所以这里通过Timer0触发ADC,并将Timer0设置为10ms周期,这样ADC就每10ms采一次,并写入到CHnV寄存器中。
WeChat Screenshot_20200702161325.png

ADC模块使用了IN8,使用Mode1(单通道单次采样)使能规则组DMA。DMA的配置如下,startAddress填写的PWM1的CH6V寄存器地址。这个是CH6的匹配值寄存器。
这里采用的是DMA的外设到内存的搬运模式,我们可以把CH6V就当作一个普通的内存地址来看(目前来看这个设想是成立的)。
WeChat Screenshot_20200702161639.png
一切配好后,生成代码,编译下载运行。效果杠杠的。
吐槽一下,生成的工程不能仿真,DMA配置的数据总是丢掉。@dengyonglei 有空的给看看 WeChat Screenshot_20200702162509.png
最后附上工程:
pwmout.rar (1.5 MB, 下载次数: 2)

使用特权

评论回复
| 2020-7-2 17:00 | 显示全部楼层
你使用的是1.2版本,请使用1.3版本AutoGen Studio就不会存在不能仿真的问题,1.3版本DMA也改为数组方式呢,而不是固定地址,你再帮忙尝试下,有问题反馈

使用特权

评论回复
| 2020-7-4 09:08 | 显示全部楼层
楼主666

PS:我的AutoGen Studio里,DMA设置里找不到memStartAddr、memEndAddr这两个输入框呢
是不是版本原因?强烈建议保留这个功能啊,直接指定地址,很强大的。

使用特权

评论回复
| 2020-7-4 09:09 | 显示全部楼层
6666.PNG

使用特权

评论回复
| 2020-7-4 09:11 | 显示全部楼层
另外,楼主,TIMER可以不用吧,直接用PWM触发ADC,把TIMER也省了

使用特权

评论回复
 楼主 | 2020-7-6 10:40 | 显示全部楼层
lihuasoft 发表于 2020-7-4 09:08
楼主666

PS:我的AutoGen Studio里,DMA设置里找不到memStartAddr、memEndAddr这两个输入框呢

我用的1.2版本的,1.3版本的还没有看呢

使用特权

评论回复
 楼主 | 2020-7-6 10:43 | 显示全部楼层
lihuasoft 发表于 2020-7-4 09:11
另外,楼主,TIMER可以不用吧,直接用PWM触发ADC,把TIMER也省了

用Timer是为了定时触发,PWM触发也是可以的

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表