ZigBee入门-CC2530-实验(七)-PWM-定时器-控制LED的亮度代码

PWM:说白了就是连续的时间内高低电平的组合,就是方波嘛~我们使一个GPIO定时器的计时下,一段时间使GPIO输出高电平,一段时间使GPIO输出低电平,我们拿示波器接到对应的GPIO上就可以看到PWM波。
PWM在我们实际应用开发中是很常见,例如:驱动电机的正转、反转;LED的亮度;蜂鸣器的声音高低;PWM控制在工业上更是尤为的重要。
// 本次实验实现:通过定时器比较模式,输出PWM波-改变LED亮度
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char

#define LED1 P1_0      //P1.0口控制LED1

void Init_Led();       //声明初始化LED函数
void Init_Timer1();    //声明定时器T1初始化函数
void Init_Clock();     //声明初始化时钟函数
void Delay(uint ms);   //声明延时函数


/*=======================主程序入口============================*/
void main()            
{

  Init_Led();          //初始化LED灯
  Init_Clock();        //初始化时钟
  Init_Timer1();       //初始化定时T1
  
/********************************************************************
 * 通过依次给T1CC2L赋不同的值,
 * 进而改变PWM的占空比,来控制LED的亮度。
 * 现象:LED由 暗 慢慢 变亮 一直循环。
 *******************************************************************/ 
  
  while(1)
  {
    uchar i;
    uchar array[11]={0xF7,0xE1,0xC8,0xAF,0x96,
                     0x7D,0x64,0x4B,0x32,0x19,0x0A};
                     //占空比依次增大,LED逐渐变亮
   
    for(i = 0; i < 11; i++)
    {
      T1CC2H = 0x00;//高位不变
      T1CC2L = array[i];//依次改变占空比
      Delay(50000);
      Delay(50000);
    }
  }
}
/*=======================声明函数的具体实现==========================*/
void Init_Led()
{
  P1SEL &=~ 0x03;     //配置P1.0 P1.1为通用I/O口
  P1DIR |=  0x03;     //配置P1.0 P1.1为输出
  LED1 = 0;           //初始LED1为熄灭
}

void Init_Timer1()
{
  PERCFG |= 0X40;//选定时器T1的I/O位置  置1:备用位置2
  P2SEL &= ~0X10;//定时器1优先
  P2DIR |= 0XC0; //第1优先级:定时器1通道2-3
  
  P1DIR |= 0XFF; //端口1为输出
  P1SEL |= 0X01; //timer1 通道2映射口P1.0为外设 
  //以上是配置PWM输出在P1_0脚,P1_0接有LED灯
  
  //定时器通道0初值 1ms的周期时钟,频率为976.516Hz
  T1CC0H = 0X00;
  T1CC0L = 0Xff;     //255
  //以上是为了确定基准频率     
  
  //定时器通道2比较值 修改T1CC2L可调整led的亮度
  T1CC2H = 0X00;     
  T1CC2L = 0X7D;     //125 ≈255%2;50%的占空比 
  //以上就是相对与基准频率 改变的占空比
  
  T1CCTL2 = 0x1c;    //通道2比较模式
  T1CTL = 0x02;      //250KHz 不分频
}
void Init_Clock()
{
  CLKCONCMD &= ~0x40;       //系统时钟源选择:外部32MHz 。
  while(!(SLEEPSTA & 0x40));//等待晶振稳定
  CLKCONCMD &= ~0x47;       //128分频 CLKSPD不发分频
  SLEEPCMD |= 0x04;         //关闭不用的RC振荡器
}
void Delay(uint ms)
{
  uint i,j;
  for(i=0; i<ms; i++)
    for(j=0; j<535;j++);
}
如果大家觉得实验中一些寄存器的配置不是很明白,大家就拿出咱们吃饭的家伙CC2530的数据手册来把实验中出现的寄存器在手册中查找,去理解,数据手册网上多的是。

啃骨头,要好好啃,使劲啃,啃到底,才能啃到精髓嘛~~

我会每天更新一篇ZigBee入门-CC2530-的基础实验,让大家学习Zigbee技术不在是从入门到“入土”,而是从入门到巅峰~!!!

欢迎大家的留言和评论我会在看到的第一时间内答复。

看完后感觉得到帮助的小伙伴,要点点赞哦~

给笔者一些动力嘛!谢谢啦~

  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
nrf51822并没有PWM模块,但是如果巧妙的结合PPI模块,并加上一个定时器中断就可以轻松的实现了PWM,思路是这样的: 定时器使用三个比较器 cc0、cc1和cc2,当三个比较器任何一产生比较事件的时候都会通过PPI去翻转GPIO的引脚,在初始化的时候这样设置这三个比较器: NRF_TIMER2->CC[0] = MAX_SAMPLE_LEVELS + next_sample_get(); NRF_TIMER2->CC[1] = MAX_SAMPLE_LEVELS; // CC2 will be set on the first CC1 interrupt. NRF_TIMER2->CC[2] = 0; 这是初始化的配置,到这里会有一个思考,这样的话计数器技术到cc0的时候依然会继续的往下计数,那这样的话他的再溢出的值就将回到cc2的时候也就是归零的时候,那这样的波形就分为了三段了,这不是我们所需要的,那这样要实现PWM就要把cc2的比较值往后挪,让他超过cc0,并且cc2到之前的一个比较值是固定的,这样就需要从新设置cc2的值,还有一个办法就是当计数器到cc0的时候请求中断重置计数器,但是这样做有一个问题就是进入中断是需要时间的,而当计数器到达cc0的时候就需要重置,同时计数器的下一个值就是cc2,这样就会造成冲突,所以我们使用了第一种方案。 具体实现是这样的,使能cc1比较中断,在第一次中断中重新设置cc1,让他的值变成了两倍,同时从新设置cc2,让他的值变成了cc1+N,N就是占空比参数,在第二次中断中,也是从新设置cc1,但是和上一次中断不同的是这时候设置的是cc0,而不是cc2 这样造成的计数器溢出值是这样的:
### 回答1: zstack-cc2530-2.3.0-1.4.0是一个基于CC2530芯片的ZigBee协议栈版本,用于构建低功耗、无线传感器网络。它支持ZigBee协议的各种功能,如网络组建、设备发现、数据传输等。同时,它还提供了丰富的API接口和开发工具,方便开发人员进行应用开发和调试。 ### 回答2: zstack-cc2530-2.3.0-1.4.0是一款嵌入式无线协议栈软件,主要应用于物联网领域的传感器、控制设备等智能硬件,使其能够实现无线通信、数据采集和云端对接。该协议栈基于IEEE 802.15.4标准,采用Zigbee协议,支持网络拓扑结构包括星型、点对点、树状和网状等。 zstack-cc2530-2.3.0-1.4.0的特点是具有高度的可靠性、稳定性和安全性。其采用AES加密算法,能够保证通信数据的隐私安全;同时支持信号质量监测和链路质量反馈,能够实现网络拓扑的优化和故障检测等功能;此外,该协议栈还支持OTA升级和协议栈配置等高级功能,便于对智能硬件进行远程维护和管理。 除此之外,zstack-cc2530-2.3.0-1.4.0还具有易于开发和适配的特点。该协议栈提供了丰富的API接口和开发工具包,支持多种开发环境和硬件平台,方便开发人员进行二次开发和定制化,大大降低了开发成本和周期。同时,该协议栈还通过Zigbee联盟的认证,确保了其在标准兼容性、互操作性和稳定性等方面的表现。 总之,zstack-cc2530-2.3.0-1.4.0是一款功能强大、易于开发和适配、具有高可靠性和安全性的无线协议栈软件,可以广泛应用于物联网领域的智能硬件。 ### 回答3: zstack-cc2530-2.3.0-1.4.0 是一种无线通信模块,它是针对 TI 公司的 CC2530 系统级芯片设计的。该模块运行在 2.4GHz ISM 频段,可以实现高质量的数据传输,并且在无线网络中实现高度的可靠性和安全性。该模块具有协同处理器、内存、收发器、MAC 和 PHY 等多种功能,可以应用于多种物联网场景。 zstack-cc2530-2.3.0-1.4.0 支持运行 ZigBee 网络协议栈,并提供了丰富的接口和 API,以便用户能够快速、轻松地开发具有丰富功能的 ZigBee 产品。该模块基于 Z-Stack 协议栈,支持 ZDO、ZCL 等多个协议,可以实现灵活、可靠、高效的无线通信。 该模块还支持 OTA(空中升级)功能,可以让用户通过无线网络升级设备固件。同时,该模块还具有低功耗模式,可以使设备的电池寿命更长。 总之,zstack-cc2530-2.3.0-1.4.0 是一种高度可靠、灵活、安全性强的无线通信模块,可以为物联网应用提供强有力的支持,并且具有广泛的适用性和灵活性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字梦想家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值