433频率可以用315频率的解码程序吗?两种频率的解码程序是一样的吗?

433频率可以用315频率的解码程序吗?两种频率的解码程序是一样的吗?,第1张

一、 基本概念 工作频率:433.92MHz 调制方式:ASK/OOK,FSK,GFSK 现有遥控与接收器方案中,多数使用 ASK/OOK 调试方式。ASK 即“幅移键控”又称为“振幅键控”,也 有称为“开关键控”(通断键控)的,所以又记作 OOK(On-Off keyed)信号。ASK 是一种相对简单的 调制方式。幅移键控(ASK)相当于模拟信号中的调幅,不同的是与载频信号相乘的是二进制数码。幅 移就是把频率、相位作为常量,而把振幅作为变量,信息比特是通过载波的幅度来传递的。如下图所 示,ASK 调制方式的典型时域波形,虚线部分表示二进制的 0 和 1,红色实线部分表示调制信号:

二、 国家标准 标准可参考“信部无[2005]423 号 关于发布《微功率(短距离)无线电设备的技术要求》的通知”,要 求如下: (十一)各类民用设备的无线控制装置 不得用于无线控制玩具、模型等。 1.使用频率:314-316MHz,430-432MHz,433.00-434.79MHz 发射功率限值:10mW(e.r.p) 占用带宽:不大于 400kHz 三、 编码与解码 以遥控器为例,在明确调制方式后,需要为遥控器编码方式进行约定。一组遥控编码通常需要包含“引 导码/起始码”、“用户码” 、“数据码” 、 “结束码”、 “重复码”,格式如下:

确定编码组成后需要明确“逻辑 0” 、 “逻辑 1”的表示方法,可以遵循标准的编码方案,也可以进行自 定义。标准编码方案可以使用“曼彻斯特编码”等方案,在自定义编码方案时可以参考下图所示的编码 规则,主要是电平顺序与电平长度的组合。

以遥控的编码为例进行分析,得到如下编码波形:

假设: 高电平长码 + 低电平短码表示逻辑 1 高电平短码 + 低电平长码表示逻辑 0 可以得到该组数据为“0x88 0x03 0xBD 0xB6”。

解码过程是对编码过程的逆向,解码程序需要根据编码方案进行设计。竞品遥控器的解码方案请参考 “参考示例” 。 四、 参考示例 根据测得的遥控器编码波形可知,433MHz 接收端输出的信号中,电平维持时间有 20ms、9ms、1.6ms、 700us 这几种。使用 1.6ms 高电平 + 700us 低电平表示逻辑 1,700us 高电平 + 1.6ms 低电平表示逻辑 0,9ms 高电平表示引导/起始码,700us 高电平 + 20ms 低电平表示结束码,同时也表示“重复码“”的 起始。 程序设计中,对 700us 的电平进行检测并计数,要保证做够的容错能力,需要将定时器中断做到 100us 以下,甚至更小,显然使用定时器中断处理时不合理的。在本示例中,采用外部中断 + 定时器计数的 方式进行电平长度采样。外部中断采用上升沿和下降沿触发,在中断中根据当前电平切换边沿触发方 式。定时器使用系统时钟(16.6MHz)的 64 分频作为时钟源,具有足够的分辨率,可提高接收机的容错 能力。 数据采样逻辑中,下降沿时判断当前高电平表示的逻辑值,上升沿是对上一步中产生的逻辑值进行确 认,若逻辑值合法则对该逻辑值进行记录,若不合法,这舍弃该逻辑值,并初始化接收机,等待下一次 数据。程序流程图如下:

示例代码: 外部中断初始化为上升沿触发,当前电平 INT45Level 默认为低。 使用定时器 3 作为计数器

/*---------------定时器时钟使用系统频率 64 分频------------------*/

//1ms 计数 260 //实测引导码高电平长度为 9.7ms,低电平长度为 2ms

#define HeadCont_H 2540 //9.7ms

#define HeadCont_L 500 //2ms

//实测逻辑 1 为高电平 1.7ms+低电平 0.6ms

#define OneCode_H 450 //1.7ms

#define OneCode_L 160 //0.6ms

//假设 0 码为高电平 0.6ms+低电平 1.7ms

#define Zero_H 160

#define Zero_L 450

//容错范围

#define FaultTolerant 50

寄存器定义

uint16 T3Counter

bit INT45Level = 0

bit ZeroCode//接收到逻辑 0

bit OneCode//接收到逻辑 1

bit MaybeRemoteStart//疑似接收到起始码

bit RemoteStart//开始接收遥控数据

bit ReadOver//接收完成

#define DefRemoteDataBufLen 10 //默认遥控数据长度

idata uint8 RemoteDataBuffer[DefRemoteDataBufLen]//接收缓冲区

idata uint8 ReadTab[DefRemoteDataBufLen]//已接收,待处理数据

idata uint8 ReadBitCont//读取 Bit 计数

idata uint8 ReadBuffer//数据缓存区

idata uint8 ReadByteCont//读取字节计数

外部中断服务程序

void INT45_interrupt() interrupt 9

{

u8 backtemp

backtemp = INSCON

INSCON = 0x00

if((EXF1&0x20) == 0x20)

{

//读取 T3 计数器

INSCON |= 0x40

T3CON = 0x00

T3Counter = 0x0000|(TH3 <<8)

T3Counter |= TL3

TL3 = 0x00

TH3 = 0x00

T3CON = 0x24//系统分频 1/64,启动定时器

INSCON &= ~0x40

if(INT45Level) //处理下降沿

{

if((T3Counter >(HeadCont_H - FaultTolerant))&&(T3Counter <(HeadCont_H + FaultTolerant)))

{

MaybeRemoteStart = 1//疑似遥控数据头

}

else

{

if((T3Counter>(OneCode_H - FaultTolerant))&&(T3Counter <(OneCode_H + FaultTolerant)))

{

OneCode = 1

ZeroCode = 0

}

else

{

if((T3Counter >(Zero_H - FaultTolerant))&&(T3Counter <(Zero_H + FaultTolerant)))

{

ZeroCode = 1

OneCode = 0

}

else

{

ZeroCode = 0

OneCode = 0

}

}

}

INT45Level = 0//当前电平为低

EXF0 = 0x80//设置为上升沿触发

}

else //处理上升沿

{

if(RemoteStart)

{

if((T3Counter >(OneCode_L - FaultTolerant))&&(T3Counter <(OneCode_L + FaultTolerant)))

{

if(OneCode)

{ //接收到一个 bit 为 1

GetOneByte()

}

else

{ //数据出错,丢弃

RemoteStart = 0

OneCode = 0

ZeroCode = 0

ReadOver = 0

}

}

else

{

if((T3Counter >(Zero_L - FaultTolerant))&&(T3Counter <(Zero_L + FaultTolerant)))

{

if(ZeroCode)

{ //接收到一个 bit 为 0

GetOneByte()

}

else

{ //数据出错,丢弃

RemoteStart = 0

OneCode = 0

ZeroCode = 0

ReadOver = 0

}

}

else

{

if(ZeroCode &&(T3Counter >4000)) //结束码,同时也是重复码的起始

{

ReadOver = 1

OneCode = 0

ZeroCode = 0

RemoteStart = 0

GetOneByte()

}

else

{ //干扰数据,接收器初始化

RemoteStart = 0

OneCode = 0

ZeroCode = 0

ReadOver = 0

}

}

}

}

else

{

if(MaybeRemoteStart)

{

if((T3Counter >(HeadCont_L - 20))&&(T3Counter <(HeadCont_L + 20)))

{

RemoteStart = 1//遥控数据开始发送

ReadBitCont = 0//读取 Bit 计数

ReadBuffer = 0//数据缓存区

ReadByteCont = 0//读取字节计数

ReadOver = 0

MaybeRemoteStart = 0

}

}

}

INT45Level = 1//当前电平为高

EXF0 = 0x40//设置为下降沿触发

}

}

EXF1 = 0x00

INSCON = backtemp

}

GetOneByte()子函数,接收完整字节并处理

void GetOneByte()

{

int i

if(ReadBitCont<=7)

{

ReadBuffer <<= 1

if(OneCode)

{

ReadBuffer |= 0x01

}

}

ReadBitCont ++

if(ReadBitCont >= 8)

{

RemoteDataBuffer[ReadByteCont++] = ReadBuffer//每接收 1byte,写入缓存

ReadBuffer = 0

ReadBitCont = 0

}

if(ReadOver) //全部接收完后

{

for(i=0i<ReadByteConti++)

{

ReadTab[i]=RemoteDataBuffer[i]

}

ReadByteCont = 0

}

}

解码程序就是让你现在使用的播放器可以播放更多格式的文件,没有解码器,有的视频文件将不可用。

如果你不想安装解码器,或者嫌他麻烦,建议下载安装

万能播放器——暴风影音,即可解决问题,不再下载解码器

或者韩国全插件(解码器)播放器————KMPLAYER,只要是能看的他都能播放~~不用下载什么东西!

硬解码是什么

所谓“解码”,指的是用特定方法把数字编码还原成它所代表的内容或将电脉冲信号转换成它所代表的信息、数据等的过程。

简单而言,“硬解码”(硬件解码)就是通过显卡(一般是显卡核心GPU)的视频加速功能对高清视频进行解码,把大数据巨量却低难度的的视频解码工作从CPU里分离出来。“软解码”就是纯粹依靠CPU解码。

软解码和硬解码是什么意思?

一般来说,硬解是通过GPU(显卡的核心)进行解码,可以解放CPU,在CPU占用率极低的情况下流畅度可以有明显的提升。

软解就是使用CPU解码。

硬解码是什么意思

就是明明不会解码,还非得要解码

硬解码+是什么意思?

解码是用特定方法把数字编码还原成它所代表的内容或将电脉冲信号转换成它所代表的信息、数据等的过程。

通俗解释:通过硬件实现的解码称为硬解码。

较严谨解释:由显卡核心GPU来对高清视频进行解码工作,CPU占用率很低,画质效果比软解码略差一点,需要对播放器进行设置

h264硬解码是什么意思?

H264是当前比较流行的高清视频编码解码规范,可以有效压缩视频体积,利于存储和网络播放。播放的时候必须解码,解码分为软解和硬解。硬解就是利用专门的硬件,比如显卡或专门的解码芯片,优点是速度快,对电脑的资源占用少,缺点是必须有硬件的支持才行。软解就是利用电脑的CPU通过软件计算方式解码,优点是成本低,不需要额外的硬件支持,缺点是对电脑要求较高,低端机器CPU占用较高,解码效果可能会不好。

什么是dts软解码和硬解码?

DTS软解码是通过CPU解码后由CODEC芯片输出音频信息。硬解码比软解码速度快,质量高,不占用系统资源等优点,但是需要另外的解码芯片,费用较软解码高。

在线观看视频用软解码和硬解码有什么区别

简单地说。软解码是用软件方式进行解码,需要占用CPU资源,速度相当较慢。硬解码直接用硬件方式解决,不占用CPU资源,速度相对较快。软件解码是 将解码程序调入内存中用cpu解压 一般来讲,硬解压因为不占用或很少占用系统资源,效果比较好但现在电脑的cpu处理能力不断扩大,两者几乎没有区别 但是选择硬解...

视频播放器的软、硬解码是什么意思

硬解码指的是用手机的硬件解码,软解码就是软件用程序解码,软解码是相当消耗内存的!

什么是硬解码播放,有什么好处和不足

硬解码,即直接用显卡硬件对视频解码(或者游戏的显示),不占用CPU,或CPU占用少,因为是专用的硬件解码所以速度快,播放流畅。没有硬解码,就是软解码,即用软件解码,运行软件占用CPU,所以CPU占用率高。CPU不强的话,比较卡,播放不流畅。

当然,哪个好,那个不好,没有绝对。

现在新的CPU软解,比旧显卡落后的设备硬解,可能效果更好。

软解码和硬解码哪个好 软解码和硬解码有什么区别

简单地说。软解码是用软件方式进行解码,需要占用CPU资源,速度相当较慢。硬解码直接用硬件方式解决,不占用CPU资源,速度相对较快。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10953167.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-12
下一篇 2023-05-12

发表评论

登录后才能评论

评论列表(0条)

保存