矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 11644|回复: 5

绝对原创:RC0852红外遥控器协议测试经过及编程

[复制链接]
     
发表于 2007-11-17 13:16:50 | 显示全部楼层 |阅读模式
RC0852红外遥控器协议测试经过及编程
l
缘由

几周前从虬江路5元购得一全新PHILIPS遥控器,上世纪的产品,打开一看用料非常足,内部用三菱的遥控IC M34236MJ352GP,查遍网络无文档。没法,又舍不得这5块钱,决定硬起头皮从头测起。
l
准备

38K
一体化接收头(网上资料很多)
       一根电脑Mic插头线,将接收头连通5v,与Mic插头共地,接收头的输出接到插头的输入端。
       到网上寻找Cool Edit Pro 2.1软件并破解安装上(建议使用正版),包括3个插件(其实用不到)。安装后如发现软件打不开,卡在插件检查处,退出将安装目录下Direct
.xfm
文件删除,就可以打开了。使用教程网上很多,自己摸索也很快。
       将插头插入电脑的MIC输入端(不要差错)。打开软件,这样就有了一台带存储的数显示波器了。呵呵。


l
测试
新建一个文件,选择单通道,用最高的采样率吧,时间显示选时分秒吧。
点击“录制”按钮,并用遥控器对准接收头,按“1”键,电脑屏幕上会有波形显示,有几个就够了,保存“1.wav”,如此我做了7个文件,06的数字键的波形。
对波形逐个编辑,主要是让他们水平轴同步,这是个漫长的过程,做下来该软件的操作你就基本会了,呵呵。
       完成后多轨编辑,将7个文件分别输入到7个轨里,现在可以研究它的编码规则了。
l
结论
       引导码,2.7ms高电平,之后的可以不管,从末尾向前看,上升沿是bit0,下降沿是bit1,都是等长的880us脉冲,高电平480us,低电平400us,编程方便。如此向前一共8位,就是我们关心的控制码,这样下面就是编程的工作了。注意软件显示电平与实际电平正好相反,即是副逻辑。
       最后发现数字键和编码正好一一对应。
l
编程思路
将一体化接收头的输出引脚接到单片机的中断口上,我用的是int0,最好加个10k的上拉电阻。这就是红外接收部分的电路。
       单片机只能电平或下降沿中断(就mcs51而言),这里要检测上升、下降沿,怎么办?
解决办法:
       待机时开外部边沿触发中断,待有中断时开启定时器中断,关外部边沿中断,这样从定时器中断中判别输入电平,定时时间至少T/2 (两刀三段),即(480400/2440us,再加上偏移量,即440/2220us,当然你可以提高精度,向串口那样做16次判断一个电平,呵呵。我就是懒,用0.44ms了。
       主要程序如下
void int_x0() interrupt 0
{

TH0=0xfe;
//0xfe
22.1184M

220us
偏移量,错开,检测中间部位

TL0=0x72;
//0x6a
22.1184M
220us

TR0=1;

EX0=0;

ET0=1;

ircnt=1;
}

//
|--|
480us
//
|_|
400us
//
_|--
0

//
--|_
1

void int_t0() interrupt 1
{

TH0=0xfc;
//22.1184M
440.0us

TL0=0xf7;
//0xf7


switch (ircnt++)

{


case 1:if (irled) irerr();

break;

case 2:if (!irled) irerr();

break;

case 3:if (irled) irerr();

break;

case 4:if (irled) irerr();

break;

case 5:if (!irled) irerr();

break;

case 6:if (!irled) irerr();

break;

case 7:if (irled) irerr();

break;

case 8:if (!irled) irerr();

break;

case 9:if (irled) irerr();

break;




case 10:irr0();


//bit7

break;

case 11:irr1();

break;



case 12:irr0();


//bit6

break;

case 13:irr1();

break;


case 14:irr0();


//bit5

break;

case 15:irr1();

break;



case 16:irr0();


//bit4

break;

case 17:irr1();

break;



case 18:irr0();


//bit3

break;

case 19:irr1();

break;



case 20:irr0();


//bit2

break;

case 21:irr1();

break;


case 22:irr0();


//bit1

break;

case 23:irr1();

break;



case 24:irr0();


//bit0

break;

case 25:

{

irr1();

if (!err)

{

irchar=irtmp;
//结果输出到irchar

irerr();

}

}

break;


default:;



}


}

void irerr()
{


TR0=1;

ET0=0;

irtmp=0;

EX0=1;
//
errkey=ircnt;

ircnt=0;

err=1;
}

void irr0()
{

irb0=irled;

}


void irr1()
{

if (irb0!=irled)

{

irtmp<<=1;

irtmp|=irled;

err=0;

}

else irerr();
}











抛砖引玉:
这是个通用的方法,对类似的时序检测均可以用,尤其是在不知道通讯协议时格外合适。
文章匆忙完成,不免有误,请指正!
支持原创,大家一起兴隆自己的论坛!



















2007-11-17
于斗室一隅



电子人生――争取每天都过得有意义
http://hi.baidu.com/rfider





建议使用正版软件
所有资料均来自互联网,本人不负任何连带责任。

rc0852协议测试经过.part1.rar

180 KB, 下载次数: 925

rc0852协议测试经过.part2.rar

180 KB, 下载次数: 860

rc0852协议测试经过.part3.rar

180 KB, 下载次数: 893

rc0852协议测试经过.part4.rar

82.71 KB, 下载次数: 892

     
发表于 2007-11-17 17:42:21 | 显示全部楼层
哈,也是用22.1184的时钟。
前段时间做了个遥控音量电路,也是用这个频率的晶体。
一会找找程序,贴出来参考一下。
这个用的遥控器是长虹液晶LT3212的,长虹DVD的摇控器也一样接收。这些码的特点是以时间长度确定Bit0和Bit1的,连续按有一特定码。
时钟22.1184M。
  1. #include <stdio.h>
  2. #include  <reg52.h>
  3. #include <sio.c>
  4. #include <intrins.h>
  5. /*
  6. FF 61
  7. 08 08 08 09 08 08 10 08
  8. 10 10 11 10 10 10 08 10
  9. 09 10 08 10 08 08 08 08
  10. 11 08 10 08 10 10 11 10
  11. FF 51
  12. */


  13. bit s=0,t=0;
  14. union{
  15.         struct{unsigned char h,hr,l,lr;}c;
  16.         unsigned char b[4];
  17. }irbuf;

  18. bit irok=0;
  19. void inittimer0(void)
  20. {
  21.     TMOD&=0xf0;
  22.     TMOD|=0x02;
  23.     TH0=0x0;
  24.     TL0=0x0;
  25.     TR0=1;
  26.     ET0=1;
  27.     EA=1;
  28. }

  29. void timer0(void) interrupt 1
  30. {
  31. static unsigned char ir=0,irc=0,ird=0,irp=0;
  32. static bit int1;
  33.         if(ir!=0xff)ir++;
  34.         if(INT1){
  35.                 int1=1;
  36.         }else if(int1){
  37.                 int1=0;
  38.                 if(ir>0x5c && ir<0x66){
  39.                         irc=0;ird=0;irp=0;
  40.                 }else if(ir>0x4c && ir<0x56){
  41.                         irok=1;
  42.                 }else if(ir>0x5 && ir<0xc){
  43.                         irc<<=1;
  44.                         ird++;
  45.                         if(ird>=8 && irp<4){
  46.                                 irbuf.b[irp]=irc;
  47.                                 irp++;
  48.                                 ird=0;
  49.                                 irc=0;
  50.                         }
  51.                 }else if(ir>0xd && ir<0x14){
  52.                         irc<<=1;
  53.                         irc|=1;
  54.                         ird++;
  55.                         if(ird>=8 && irp<4){
  56.                                 irbuf.b[irp]=irc;
  57.                                 irp++;
  58.                                 ird=0;
  59.                                 irc=0;
  60.                         }
  61.                 }
  62.                 ir=0;
  63.         }
  64. }

  65. main()
  66. {
  67.         initsio();
  68.         inittimer0();
  69.         while(1){
  70.                 PCON|=1;
  71.                 if(irok && irbuf.c.h==~irbuf.c.hr && irbuf.c.l==~irbuf.c.lr){
  72.                         int i;
  73.                         irok=0;
  74.                         putchar('\n');
  75.                         for(i=0;i<4;i++)printf("%02bX ",irbuf.b[i]);
  76.                        
  77.                 }               
  78.                
  79.         }
  80. }
复制代码

[ 本帖最后由 翌阳 于 2007-11-17 17:46 编辑 ]
发表于 2007-11-17 17:43:25 | 显示全部楼层
图文并茂,好文章!
如果可以把“Cool Edit Pro 2.1软件并破解”的下载链接附上,就更加完美了。
     
发表于 2007-11-17 17:47:26 | 显示全部楼层

回复 4# 的帖子

看波型可以用声卡示波器,也不错的。
     
 楼主| 发表于 2007-11-17 17:56:33 | 显示全部楼层
呵呵,版主的程序也不长啊!
破解我不敢发表啊,再说这个软件很常见,呵呵,实在不行私下我可以帮你。
改天我再把fpga做的解码程序贴出来。

[ 本帖最后由 cyjun99 于 2007-11-17 17:59 编辑 ]
     
发表于 2022-10-25 10:41:15 | 显示全部楼层
都是高手,我只能望文兴叹...
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-4 09:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表