【NUCLEO-L476RG开发】EV1527解码
本帖最后由 DAHAIGE-355079 于 2015-11-24 14:27 编辑现在低功耗,无线发射接收应用很普遍,本文就电动车遥控器常用的发射IC:EV1527解码做介绍。EV1527发射出来的波是进行调制过后的,借条电路有很多种,有专用的IC解调,有用分立元件搭的超再生解调电路,本文不做电路讲解;
需要知道的就是一条,经过解调出来的波形就是一串高低电平。
本测试EV1527的参数是:
工作电压:DC6V
OSC电阻:360K。
具体见EV1527的数据手册。
//************************************************************************************************************
unsigned char hh_w,ll_w; //高,低电平宽度
unsigned char ma_x; //接收到第几位编码了
unsigned char mma1,mma2,mma3,mma4; //用于解码过程
unsigned char old_rc5; //保存上一次查询到的电平状态
unsigned char tb_ok; //接收到同步的马时置1
unsigned char rf_ok; //接收到一个完整的遥控命令后置1,通知解码程序可以解码了
unsigned char bma1,bma2,bma3,bma4; //用于接收过程存放遥控编码
// 4t = 1.81ms
//time 180us调用
void DecodingEv1527(void)
{
unsigned char RC5;
//GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS); //连接逻辑分析仪,查看T0中断时间间隔
RC5 = GPIO_ReadInputPin(Ev1527_GPIO_PORT, Ev1527_GPIO_PINS);
if(!RC5)// 检测到低电平 低电平时间加1,记录本次电平状态
{
ll_w++;
old_rc5=0;
}
else // 检测到高电平
{
hh_w++;
if (!old_rc5) // 检测到从低到高的跳变,已检测到一个完整(高-低)电平周期
{
if (((hh_w>=2)&&(hh_w<=3))&&((ll_w>=60)&&(ll_w<=93))) //判同步码
{
ma_x=0; tb_ok=1; bma1=0; bma2=0; bma3=0; bma4=0;
}
else if ((tb_ok)&&((ll_w>=6)&&(ll_w<=9))) //已经接收到同步码,判0
{
ma_x++;
}
else if ((tb_ok)&&((ll_w>=2)&&(ll_w<=3)))
{
switch (ma_x)
{
case 0 : { bma1=bma1 | 0x80; break; }//遥控编码第1位
case 1 : { bma1=bma1 | 0x40; break; }
case 2 : { bma1=bma1 | 0x20; break; }
case 3 : { bma1=bma1 | 0x10; break; }
case 4 : { bma1=bma1 | 0x08; break; }
case 5 : { bma1=bma1 | 0x04; break; }
case 6 : { bma1=bma1 | 0x02; break; }
case 7 : { bma1=bma1 | 0x01; break; }
case 8 : { bma2=bma2 | 0x80; break; }
case 9 : { bma2=bma2 | 0x40; break; }
case 10: { bma2=bma2 | 0x20; break; }
case 11: { bma2=bma2 | 0x10; break; }
case 12: { bma2=bma2 | 0x08; break; }
case 13: { bma2=bma2 | 0x04; break; }
case 14: { bma2=bma2 | 0x02; break; }
case 15: { bma2=bma2 | 0x01; break; }
case 16: { bma3=bma3 | 0x80; break; }
case 17: { bma3=bma3 | 0x40; break; }
case 18: { bma3=bma3 | 0x20; break; }
case 19: { bma3=bma3 | 0x10; break; }
case 20: { bma4=bma4 | 0x80; break; }//按键状态第1位
case 21: { bma4=bma4 | 0x40; break; }
case 22: { bma4=bma4 | 0x20; break; }
case 23: { bma4=bma4 | 0x10;
// mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//将接收到的编码复制到解码寄存器中
//在下一行设一个断点,用ICD2调试
// rf_ok=1; // 通知解码子程序可以解码了
break;
}
default:break;
}
ma_x++;
}
else //接收到不符合的高-低电平序列
{
ma_x=0; tb_ok=0; bma1=0; bma2=0; bma3=0; bma4=0;
}
if(ma_x == 23)
{
mma1=bma1;mma2=bma2;mma3=bma3;mma4=bma4;//将接收到的编码复制到解码寄存器中
//在下一行设一个断点,用ICD2调试
rf_ok=1;
}
ll_w=0;hh_w=1;
}
old_rc5=1; // 记录本次电平状态
}
}
@沐紫,不好意思这些天太忙了 DAHAIGE-355079 发表于 2015-11-24 14:30
@沐紫,不好意思这些天太忙了
谢谢你的分享~ 谢谢分享 请问下:
// 4t = 1.81ms
//time 180us调用
怎么算的?:) 下载来看看啊,。。
页:
[1]