Funpack第三季第5期-PRU控制的呼吸灯LED
该项目使用了beaglebone black,实现了呼吸灯的设计,它的主要功能为:基于TI am3358的pru模块,实现按键捕获及呼吸灯的实现。
标签
Funpack活动
Beaglebone
am3358
FANBOFEI
更新2025-01-15
8

项目介绍

本次活动我使用BeagleBone BlackPRU控制了LED实现呼吸灯

BeagleBone® Black 是一款面向开发人员和业余爱好者的低成本、高扩展、并有社区支持的开发平台。处理器选用了TI AM3358芯片,基于ARM Cortex-A8架构处理器。还配备了丰富的扩展资源,包括HDMI接口、以太网、SD 卡槽、并预留了足够多的管脚用于AD转换、LCD显示屏、PWM输出、I2C、串口等等。板卡可运行完整的 Linux 系统,且支持多种编程语言。

BeagleBone Arduino Raspberry Pi(树莓派)可以说是目前应用最广泛的三大嵌入式开源平台。而 BeagleBone 在一定程度上可视为融合了 Arduino 与树莓派的优点,它有比 Arduino 更多的 GPIO 口,有着比树莓派更高的性能和更好的开源(软件硬件全部开源)。

BeagleBone 可以运行完整的 Linux 系统,程序的编写、编译和调试都可以在板子上进行,而且支持多种编程语言,如常用的 CC++Pythonperl 都可以在 BeagleBone 内使用。此外,BeagleBone 还自带了基于 Web Cloud9 编辑器以及对应的 BoneScript 语言,可以方便的在电脑浏览器中对 BeagleBone 进行编程

 

设计思路

本次的编程环境就是基于Web Cloud9 编辑器,开发板连接电脑后会自动弹出使用指南,按照指南的指示访问开发板ip,即可进入Cloud9编辑器。

代码的整体逻辑如下

主循环包括三个部分:按键轮询,若按下则占空比累加的步长增加(改变呼吸灯速率);判断呼吸灯占空比累加步长是否溢出;呼吸灯任务;

void main(void) {
CT_CFG.SYSCFG_bit.STANDBY_INIT = 0;
gpio1[GPIO_SETDATAOUT]=USR1;

while(1) {
if (key_scan())
{
gpio1[GPIO_SETDATAOUT]=USR1;
if (step_dir ==1){
step=step+4;
}
} else gpio1[GPIO_CLEARDATAOUT] = USR1;
if (step>20){
step=4;
}
Breath(step);
}
__halt();
}

代码最主要的部分是呼吸灯的实现,相比传统的基于单片机定时器实现呼吸灯,或arduino里直接模拟输出,这次用了相对复杂一点的方式

如图可以看到,呼吸灯主要由两个函数组成,breathblinkblink负责单周期内的led亮灭。

void Blink(uint16_t T, uint16_t Ht)
{
__R30=P9_30;
delay_us(Ht);
__R30=0;
delay_us(T-Ht);
}

breath负责修改占空比

void Breath(uint16_t step)
{
uint16_t T=2000;
Ht=Ht+step*dir;
if(Ht<=step){
Ht=step;
dir=1;
}
else if (Ht>=T){
Ht=T;
dir=-1;
}
Blink(T,Ht);
}

因为是呼吸灯,占空比增加是有方向的,所以增加了方向变量dir,此变量仅为1-1变化,每次增加时与增加步长step相乘(Ht=Ht+step*dir;),实现增加或减少。

 

感谢eetree和得捷电子举办这次活动,让我复习了呼吸灯的实现方式,习惯了arduino里使用analogout和单片机的定时器实现,一下子让我直接写呼吸灯还是有点生疏。期待下次更有意思的活动。

 

附件下载
code.txt
团队介绍
个人开发者
团队成员
FANBOFEI
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号