打印
[资源分享]

AC7801x电位器调LED (0手写代码)

[复制链接]
2427|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 JasonLee27 于 2020-7-2 16:26 编辑

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

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


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


ADC模块使用了IN8,使用Mode1(单通道单次采样)使能规则组DMA。DMA的配置如下,startAddress填写的PWM1的CH6V寄存器地址。这个是CH6的匹配值寄存器。
这里采用的是DMA的外设到内存的搬运模式,我们可以把CH6V就当作一个普通的内存地址来看(目前来看这个设想是成立的)。

一切配好后,生成代码,编译下载运行。效果杠杠的。
吐槽一下,生成的工程不能仿真,DMA配置的数据总是丢掉。@dengyonglei 有空的给看看
最后附上工程:
pwmout.rar (1.5 MB)


使用特权

评论回复

相关帖子

沙发
dengyonglei| | 2020-7-2 17:00 | 只看该作者
你使用的是1.2版本,请使用1.3版本AutoGen Studio就不会存在不能仿真的问题,1.3版本DMA也改为数组方式呢,而不是固定地址,你再帮忙尝试下,有问题反馈

使用特权

评论回复
板凳
lihuasoft| | 2020-7-4 09:08 | 只看该作者
楼主666

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

使用特权

评论回复
地板
lihuasoft| | 2020-7-4 09:09 | 只看该作者

使用特权

评论回复
5
lihuasoft| | 2020-7-4 09:11 | 只看该作者
另外,楼主,TIMER可以不用吧,直接用PWM触发ADC,把TIMER也省了

使用特权

评论回复
6
JasonLee27|  楼主 | 2020-7-6 10:40 | 只看该作者
lihuasoft 发表于 2020-7-4 09:08
楼主666

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

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

使用特权

评论回复
7
JasonLee27|  楼主 | 2020-7-6 10:43 | 只看该作者
lihuasoft 发表于 2020-7-4 09:11
另外,楼主,TIMER可以不用吧,直接用PWM触发ADC,把TIMER也省了

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

415

帖子

11

粉丝