• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

自制玩意4——基于PIC12F实现RGB调色+调光、FADE+调速、EEP存储

    本人电源工程师一枚,一直从事于LED驱动开发的行当,细数也近6年了,对于单片机的学习也是近期工作所需,硬着头皮上,充其量只是入

     门,更谈不上什么高手。

    此款RGB产品早在五年前便已流行于整个市场,路人皆知,在当时此款24KEY的面板遥控器似乎成了通用遥控器,五年之后的现在,市场价值荡然无存,现也难觅它的踪影。为了留住过往,特自制此玩意,以此纪念!

      也是机缘巧合,当时是拜读了乐云兄发的《LED全彩遥控控制器(C语言程序+电路原理图+PCB版图)整套 原创.. 》这个帖子后,就冲动了想弄个出来玩玩,在此得感谢乐云兄。完成这个确实花了不少功夫,特别是在解码这部分,以及配色。光解码程序就做了几种尝试,无论你是外部中断查询,还是主函数查询都只能写大部分的功能,譬如调光、变色、颜色跳变这些都可以用定时器来实现,但是有一个FADE平滑渐变的功能,适合用循环的方式来实现,如果用外部中断或主函数查询法解码你将很难或无法实现,因为太多的PWM需要变换将会拖累定时器。所以最终尝试第三种解码方式定时器查询法便解决这所有的问题。

     品名:24KEY型RGB灯

     遥控器型号:暂且叫1616(24KEY型)

     单片机型号:Microchip PIC12F1822(带EEP),8引脚,8M内置振荡,如果使能PLL功能4倍,最大到32M

全部回复(56)
正序查看
倒序查看
daihui713
LV.6
2
2014-06-22 10:11

.

0
回复
2014-06-27 00:23
@daihui713
.
没有了,PIC我也有在玩了,不过新建的板块大多都是初学者,所以都是以51为主,不然没多少人回帖
0
回复
2014-06-27 14:27
@wangchuangwccc
没有了,PIC我也有在玩了,不过新建的板块大多都是初学者,所以都是以51为主,不然没多少人回帖
戴工 单片机版块的兴旺也有你的军功章,你可不能删帖哟,得多带带头!
0
回复
2014-06-27 14:27
戴工这个版块才建几个月,是咱们的新兴版块已经有很多小伙伴加入进来了,楼主别弃楼,给我们来点鲜货吧!~
0
回复
2014-06-27 14:28
@电源网-娜娜姐
戴工这个版块才建几个月,是咱们的新兴版块已经有很多小伙伴加入进来了,楼主别弃楼,给我们来点鲜货吧!~
师长都来啦,哈哈,加油!
0
回复
2014-06-27 14:28
@yueyunno1
戴工单片机版块的兴旺也有你的军功章,你可不能删帖哟,得多带带头!
嗯嗯,时间好接近的回复 哈哈~
0
回复
2014-06-27 14:28
@yueyunno1
师长都来啦,哈哈,加油!
好巧哦~~
0
回复
2014-06-27 14:29
@电源网-娜娜姐
嗯嗯,时间好接近的回复哈哈~
我网速不给力,要不然都同时出现。
0
回复
daihui713
LV.6
10
2014-06-27 16:43
@yueyunno1
戴工单片机版块的兴旺也有你的军功章,你可不能删帖哟,得多带带头!

呵呵,乐兄客气了,单片机的版块我还是经常看的,这个版块你和王兄带头多啊,我只是打打酱油啊,呵呵。

0
回复
daihui713
LV.6
11
2014-06-27 16:47
@电源网-娜娜姐
戴工这个版块才建几个月,是咱们的新兴版块已经有很多小伙伴加入进来了,楼主别弃楼,给我们来点鲜货吧!~
路过这里,打打酱油啊,呵呵,  还是电源版块热闹啊,不过真正的肉比较少
0
回复
daihui713
LV.6
12
2014-06-27 16:53
@wangchuangwccc
没有了,PIC我也有在玩了,不过新建的板块大多都是初学者,所以都是以51为主,不然没多少人回帖
嗯 王兄威武,帖子给力,我只是偶尔过来打打酱油的,这个版块也慢慢活跃起来了,
0
回复
daihui713
LV.6
13
2014-06-27 19:20
**此帖已被管理员删除**
0
回复
daihui713
LV.6
14
2014-06-27 19:21
@daihui713
**此帖已被管理员删除**

 先上裸机图片,洞洞板的极致拼凑,惨不忍睹!

0
回复
2014-07-01 10:38
@daihui713
 先上裸机图片,洞洞板的极致拼凑,惨不忍睹![图片][图片][图片]
肉来啦!~ 顶起来~~此贴已被推荐到论坛首页,戴工继续继续~~
0
回复
2014-07-01 14:33
@daihui713
 先上裸机图片,洞洞板的极致拼凑,惨不忍睹![图片][图片][图片]
RGB灯杯市场上确实不怎么见了,不过泛光灯还是有的,30W左右
0
回复
daihui713
LV.6
17
2014-07-01 15:15
@daihui713
 先上裸机图片,洞洞板的极致拼凑,惨不忍睹![图片][图片][图片]

针对此RGB产品,需要用到单片机的资源不多,一般普通的MCU即可满足

外部资源:只需三个IO驱动口、一个IR红外接收。

内部资源:一个EEPROM存储、一个8位定时器、一个8M内部时钟

此RGB玩意采用Microchip 12系列XLP超低功耗的MCU——PIC12F1822,此MCU内部集成功能较多,当然单价也会比较贵. 如果做产品建议可以选择功能单一,价格便宜的MCU即可。

PIC单片机的通用性比较好,特别是普通功能寄存器的设置基本一致,特殊功能寄存器的设置只需多加了解DATASHEET重新定义即可。

针对内部时钟,初步设置为8M,如果使能4倍频锁相环功能(PLL),最大时钟可以在8M的基础上*4倍=32M,此功能比起直接外接32M的晶振,对外界的辐射干扰会小很多。

PIC12F1822简介:

 

 

 

 

0
回复
daihui713
LV.6
18
2014-07-01 15:16
@电源网-娜娜姐
肉来啦!~顶起来~~此贴已被推荐到论坛首页,戴工继续继续~~
多谢支持!
0
回复
daihui713
LV.6
19
2014-07-01 15:20
@wangchuangwccc
RGB灯杯市场上确实不怎么见了,不过泛光灯还是有的,30W左右

嗯 是的,此款RGB早在五年前我就已经接触过了,只不过那时还没有正式接触单片机。

0
回复
daihui713
LV.6
20
2014-07-01 17:09
@daihui713
 先上裸机图片,洞洞板的极致拼凑,惨不忍睹![图片][图片][图片]

玩意简易说明:

一、此玩意的重点在于遥控器的解码方式的选择——出发点就是既不能打断正在循环渐变或调光的LED,又要

      能准确的接收遥控器的信号.

二、传统红外解码常用有三种方式:    

   1、外部中段解码,执行级别高,速度快。缺点很明显,在中断的同时不能干别的事情   

   2、主函数循环查询法,适合小型的程序。主函数执行程序不能太多,不然红外信号会偶尔丢失。优点就是可以

       在中断里面干别的事情。

   3、定时器查询法,设定一个时基,定时查询红外的码值,通过时基累积来判断红外码的码值的宽度,从而判断

       是否是引导码,或是连续码,以及用户码高低电平的解码。优势就是不打断主函数中正在进行的循环PWM,

       通俗说就是抽个空进行了解码。这样既不占资源,也可以干别的事情,此方式误码率比较低,所以此方法是

      最适合此玩意。 

三、此款24健遥控器的灯管渐变模式分三种: 

    1. 不同颜色之间,以一定的时间间隔来实现跳变,也称闪变(FLASH),跳变时间间隔长短可调.

    2. 三基色平滑过度型实现16色的变化,也称渐变(FADE),渐变速度可调.

    3. 不同颜色实现慢慢从亮到暗,从暗到亮的呼吸渐变,渐变速度可调。

 四、对于RGB灯, 除了颜色渐变外,然后就是16色的单色调光与颜色切换,以及开关机。利用内部EEP掉电后保存当前颜色、当前颜色亮度、当前渐变的模式、当前渐变的速度

0
回复
phantasm
LV.5
21
2014-07-01 22:09
作为做技术的   这个得关注一下
0
回复
daihui713
LV.6
22
2014-07-02 11:40
@daihui713
玩意简易说明:一、此玩意的重点在于遥控器的解码方式的选择——出发点就是既不能打断正在循环渐变或调光的LED,又要     能准确的接收遥控器的信号.二、传统红外解码常用有三种方式:     1、外部中段解码,执行级别高,速度快。缺点很明显,在中断的同时不能干别的事情      2、主函数循环查询法,适合小型的程序。主函数执行程序不能太多,不然红外信号会偶尔丢失。优点就是可以      在中断里面干别的事情。  3、定时器查询法,设定一个时基,定时查询红外的码值,通过时基累积来判断红外码的码值的宽度,从而判断      是否是引导码,或是连续码,以及用户码高低电平的解码。优势就是不打断主函数中正在进行的循环PWM,      通俗说就是抽个空进行了解码。这样既不占资源,也可以干别的事情,此方式误码率比较低,所以此方法是     最适合此玩意。 三、此款24健遥控器的灯管渐变模式分三种:     1.不同颜色之间,以一定的时间间隔来实现跳变,也称闪变(FLASH),跳变时间间隔长短可调.    2.三基色平滑过度型实现16色的变化,也称渐变(FADE),渐变速度可调.    3.不同颜色实现慢慢从亮到暗,从暗到亮的呼吸渐变,渐变速度可调。 四、对于RGB灯,除了颜色渐变外,然后就是16色的单色调光与颜色切换,以及开关机。利用内部EEP掉电后保存当前颜色、当前颜色亮度、当前渐变的模式、当前渐变的速度

还是自己顶自己吧,大家看看就行。

说到红外遥控,就得先了解红外码的格式,以下图形为实测随机抓取:

单次按键(不含连续码)——引导码+用户码/用户反码+数据码/数据反码+结束码 

码长实测时间大概在115mS

趁睡觉前抓了几个图形(家里的测试环境比较简陋)

 

引导码和用户码的部分截取:

引导码码长以9+4.5mS起头,实测在13.2-14mS之间,接下来就是用户码,

从图形可以看出用户码和用户反码是互补的(0x01和0xFE)

 

 

 

结束码图形截取:

从图形上看,结束码需要在数据反码完成之后,大概延时80多mS,以9+2.5mS作为结束码

实测结束码码长为12mS

 

 

 

0
回复
terry2006
LV.2
23
2014-07-02 13:54
@daihui713
还是自己顶自己吧,大家看看就行。说到红外遥控,就得先了解红外码的格式,以下图形为实测随机抓取:单次按键(不含连续码)——引导码+用户码/用户反码+数据码/数据反码+结束码 码长实测时间大概在115mS趁睡觉前抓了几个图形(家里的测试环境比较简陋)[图片] 引导码和用户码的部分截取:引导码码长以9+4.5mS起头,实测在13.2-14mS之间,接下来就是用户码,从图形可以看出用户码和用户反码是互补的(0x01和0xFE) [图片] [图片] 结束码图形截取:从图形上看,结束码需要在数据反码完成之后,大概延时80多mS,以9+2.5mS作为结束码实测结束码码长为12mS[图片]   
顶一个,这种24键RGB控制器我们公司还在每月几万个不断的生产(用于鱼缸水族照明)。我是51入了门(当初买了几种51多功能的学习板),后又想学PIC,买了PICKIT3一年多了我都没去摸它。惨愧啊(这种热情现在是越来越少了,因为需要学习的东西太多了,最后时间还是玩过去了)。
0
回复
贴片机
LV.8
24
2014-07-02 14:27
不知道这种东西有什么用呀?用在哪里呀?
0
回复
daihui713
LV.6
25
2014-07-02 14:36
@terry2006
顶一个,这种24键RGB控制器我们公司还在每月几万个不断的生产(用于鱼缸水族照明)。我是51入了门(当初买了几种51多功能的学习板),后又想学PIC,买了PICKIT3一年多了我都没去摸它。惨愧啊(这种热情现在是越来越少了,因为需要学习的东西太多了,最后时间还是玩过去了)。[图片]

嗯,PIC的开发工具都比较贵,我还是在某宝上淘的山寨版——PICKIT3.5   不过现在也被生活磨的没有太多的开发热情了, 一般急功近利的比较多,特别是在深圳这个高节奏的环境中

0
回复
daihui713
LV.6
26
2014-07-02 14:56
@贴片机
不知道这种东西有什么用呀?用在哪里呀?
一般多用于景观灯(非照明类),RGB射灯居多
0
回复
daihui713
LV.6
27
2014-07-02 16:25
@daihui713
还是自己顶自己吧,大家看看就行。说到红外遥控,就得先了解红外码的格式,以下图形为实测随机抓取:单次按键(不含连续码)——引导码+用户码/用户反码+数据码/数据反码+结束码 码长实测时间大概在115mS趁睡觉前抓了几个图形(家里的测试环境比较简陋)[图片] 引导码和用户码的部分截取:引导码码长以9+4.5mS起头,实测在13.2-14mS之间,接下来就是用户码,从图形可以看出用户码和用户反码是互补的(0x01和0xFE) [图片] [图片] 结束码图形截取:从图形上看,结束码需要在数据反码完成之后,大概延时80多mS,以9+2.5mS作为结束码实测结束码码长为12mS[图片]   

由于东西简单,没有原理图,刚刚简单整理了一下。

 

 

 

0
回复
daihui713
LV.6
28
2014-07-08 19:00
@daihui713
由于东西简单,没有原理图,刚刚简单整理了一下。 [图片]  

  先上传一个初期的实验性的验证程序,红外解码采用主函数查询的方法,这种解码方式倒是可以,但是执行其他事件的时间不能太长,否则会影响解码程序的运行,导致解码丢失

    以下程序为利用PIC12F1822的验证程序,整篇采用switch case语句贯穿整个程序,由于采用固定延时做判断来解码的方式,所有功能在定时器中来完成PWM的转换。最终导致还有一个FADE平滑过渡型渐变功能没法再继续写下去。

   不过此程序实现调光 混色  颜色跳变的遥控功能足以!  当然最终的量产程序肯定和这个有着本质区别了。

 

  

 

0
回复
daihui713
LV.6
29
2014-07-08 19:25
@daihui713
 先上传一个初期的实验性的验证程序,红外解码采用主函数查询的方法,这种解码方式倒是可以,但是执行其他事件的时间不能太长,否则会影响解码程序的运行,导致解码丢失   以下程序为利用PIC12F1822的验证程序,整篇采用switchcase语句贯穿整个程序,由于采用固定延时做判断来解码的方式,所有功能在定时器中来完成PWM的转换。最终导致还有一个FADE平滑过渡型渐变功能没法再继续写下去。  不过此程序实现调光混色 颜色跳变的遥控功能足以! 当然最终的量产程序肯定和这个有着本质区别了。   [图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片][图片] 

以下程序为史上红外解码最精简程序示例——摘自阿莫论坛

——利用定时器的固定时基来查询红外脉冲的宽度,从而进行解码!

大家可以自己去分析,至于中间的高电平是多少时间,低电平是多少时间都不用去管,只需计算两个下降沿间隔时间就可以判断0和1,同时也可以判断是否是引导码,或是结束码,或是连续码

定时器查看时间设置为125us,执行定时器中断程序一次

void Timer0 interrupt 1()                                                            

{      

        irTime++;   

        if(irTime==240) // ir解码后码值存放时间, 240*125us = 30ms   

       {

             irTime--;  

             codeCnt=0x3f;

       }       

       if(IR_IO)   Irprot_LastState=1; // 记录IO状态   

       else if(Irprot_LastState)       // 有下降沿 

       {      

              Irprot_LastState = 0;        // 下降沿后IO状态记录为0      

              if(irTime<24)                // 小于24*125us=3ms的间隔才进行处理      

             {         

                    codeCnt++;  

                    codeCnt &= 0x1f;         

                    IR_data[codeCnt>>3] <<= 1;       

                    if( irTime>15)   

                    IR_data[codeCnt>>3]++;  // 大于15*125us=1.875ms的间隔为数据1      

             }    

             irTime = 0;                  // 下降沿处理完成,将时间清0   

        }

}

 

0
回复
dwx159
LV.2
30
2014-07-09 00:20
@daihui713
 先上裸机图片,洞洞板的极致拼凑,惨不忍睹![图片][图片][图片]
这个紧凑....吊炸天!!
0
回复
aninstone
LV.4
31
2014-07-11 15:22
@wangchuangwccc
没有了,PIC我也有在玩了,不过新建的板块大多都是初学者,所以都是以51为主,不然没多少人回帖
pic和51差不了多少 我也在用
0
回复