[8/16-bit MCU] MC9S08系列 进行呼吸灯设计

[复制链接]
 楼主| focus_447 发表于 2015-4-23 11:19 | 显示全部楼层 |阅读模式
目前,用MC9S08系列进行呼吸灯设计,前期电路设计过程中,LED口没有连接到PTF等PWM口上,所以现在只能采用GPIO模式进行设计,主要思路是:
1)目前测试方案:利用中断定时器进行设计,通过更改中断定时时间来做到改变LED亮度的调整,类似于PWM占空比变化。
2)另外一个方案:利用PWM接口的占空比变化做到亮度调整,但是由于我的LED口没有设计在专用口上,没有这个方案有点局限。
进行第一种方案是出现的问题:
1)意图通过进入定时器溢出中断时,重新复制TPM1MODH:TPM1MODL,从而达到改变定时器时间的效果,但是实际测试过程中发现,目前的定时时间一直为第一次写入TPM1MOD的设置值。
2)如果采用PWM占空比变化,是否可以不直接硬性采用Chx通道输出,而是可以进入中断处理从而改变LED连接的通用口赋值。
如下附上,中断处理函数。

uint_8 dummy=0;
uint_16 time_tmp=0xFFF0;
void interrupt VectorNumber_Vtpm1ovf  TPM_ISR(void)
{
        TPM1SC &=0x0F ;
        PTCD_PTCD4^=1;

         if(time_tmp>0x0020)
         time_tmp-=0x20;

        TPM1MODH=(uint_8)(time_tmp>>8);
        TPM1MODL=(uint_8)(time_tmp>>0);

        dummy=TPM1SC;
        TPM1SC =0x4F;

}
gaoyang9992006 发表于 2015-4-23 12:11 | 显示全部楼层
呼吸灯要明白其中的原理,然后规划需要哪些外设来实现它。
kamen588 发表于 2015-4-23 13:41 | 显示全部楼层
请问你用的是什么编程器,哪里买的
598330983 发表于 2015-4-23 14:09 | 显示全部楼层
飞思卡尔这么高级的东西,做呼吸灯,浪费了吧。
 楼主| focus_447 发表于 2015-4-23 14:13 | 显示全部楼层
gaoyang9992006 发表于 2015-4-23 12:11
呼吸灯要明白其中的原理,然后规划需要哪些外设来实现它。

呼吸灯的原理是明白,理论上直接运用PWM口输出占空比变化来实现LED等的亮度高低来实现是最为简易的,但是基于目前这块开发板的设计,只能变通的使用计数器进行GPIO口的赋值输出来实现,但是现在的疑惑出现在:
1)使用计数器中断过程中,对TPM1MODH:TPM1MODL重新赋值,却没办法实现定时长度的变化。
 楼主| focus_447 发表于 2015-4-23 14:15 | 显示全部楼层
kamen588 发表于 2015-4-23 13:41
请问你用的是什么编程器,哪里买的

使用的是USBDM编程器进行实时下载,直接网络上淘的
 楼主| focus_447 发表于 2015-4-23 14:17 | 显示全部楼层
598330983 发表于 2015-4-23 14:09
飞思卡尔这么高级的东西,做呼吸灯,浪费了吧。

说的好,呼吸灯是我功能里面的一部分,全局使用,不只是这么一块功能而已
le062 发表于 2015-4-23 23:03 来自手机 | 显示全部楼层
我之前做过3*33矩阵,32级亮度,100hz刷新速度
le062 发表于 2015-4-23 23:05 来自手机 | 显示全部楼层
我有个帖子就是讲这个算法,需要做到 O(1)
734774645 发表于 2015-4-23 23:07 | 显示全部楼层
楼主先做个动态调整PWM的试试
 楼主| focus_447 发表于 2015-4-23 23:54 | 显示全部楼层
le062 发表于 2015-4-23 23:03
我之前做过3*33矩阵,32级亮度,100hz刷新速度

不敢做到那么大  但是就是连亮度调整 现在都是出于迷糊状态
 楼主| focus_447 发表于 2015-4-23 23:55 | 显示全部楼层
le062 发表于 2015-4-23 23:05
我有个帖子就是讲这个算法,需要做到 O(1)

求链接
 楼主| focus_447 发表于 2015-4-23 23:56 | 显示全部楼层
734774645 发表于 2015-4-23 23:07
楼主先做个动态调整PWM的试试

我也打算尝试做动态的PWM控制 ,可是现在就是定时中断中更改TPM1MOD赋值后,出来的定时时间还是原来的,貌似没有更改
 楼主| focus_447 发表于 2015-4-24 00:02 | 显示全部楼层
734774645 发表于 2015-4-23 23:07
楼主先做个动态调整PWM的试试

你的意思是通过改变PWM占空比值进行亮度调整是吗,但是我又担心我现在不是用PWM口进行LED驱动,所以调整了也达不到作用,我是希望通过调整定时时间来进行GPIO口的高低赋值输出
jrcsh 发表于 2015-4-24 01:12 | 显示全部楼层
  我用 SPWM 玩的    变占空比,  


[开源硬件] 开源~~软件实现~SPWM

https://bbs.21ic.com/icview-887210-1-1.html




wanggang4383 发表于 2015-4-24 08:58 | 显示全部楼层
赋值前是不是要将定时器停止啊,你那个TPM1SC &= 0x0F 改成TPM1SC &= 0x00 试试?
liuxing4585 发表于 2015-4-24 10:36 | 显示全部楼层
MC9S08系列 进行呼吸灯设计
 楼主| focus_447 发表于 2015-4-24 13:45 | 显示全部楼层
jrcsh 发表于 2015-4-24 01:12
我用 SPWM 玩的    变占空比,  

谢谢连接啊 ,可以借鉴下
 楼主| focus_447 发表于 2015-4-24 13:49 | 显示全部楼层
wanggang4383 发表于 2015-4-24 08:58
赋值前是不是要将定时器停止啊,你那个TPM1SC &= 0x0F 改成TPM1SC &= 0x00 试试?

可以了。之前的问题是我的赋值偏差比较小,而且我放到中断里面处理,处理结束后我外面的循环函数又把PTCD_PTCD4端口复位,所以看到没有什么变化,现在测试证实TPM1MOD赋值变化可以改变中断计时时间。
后续的呼吸灯逻辑再慢慢调整下就是了 ,谢谢大家!!!!!!!!!!!!!!!!
598330983 发表于 2015-4-25 21:40 | 显示全部楼层
le062 发表于 2015-4-23 23:05
我有个帖子就是讲这个算法,需要做到 O(1)

需要做到 O(1),,,????是什么啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

12

帖子

0

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