控制器接受设计
0赞接收编码信号分为从键盘接收信号和从遥控器接收信号,本程序设置为从遥控器发射优先。从键盘接收到的信号直接翻译对应的二进制编码然后再输出到显示模块
如何解码是本次设计的关键。发射端编码方式已经在“附录一”中给出,要接收发射端发射的编码最关键的地方是解决发射段频率和接收段频率不一致的问题。发射端频率为38KHz,程序中设计的接收端频率为2.048MHz的2的8次方分频,分出来以后即为8KHz。
发射端每四个周期(4a)代表一个二进制编码,时间为1/38KHz*16*4=1.684ms,四个周期的时间换算成接收端周期数为1.684ms/(1/8KHz)=13.47个。一个a所占的周期数为13.47/4=3.37个,三个a共占的周期数为13.47/4*3=10.1个。由于编码中一个周期的低电平代表“1”,三个周期的低电平代表“0”。如下形式的1位的编码时分别表示“0”和“1”:

再考虑到同步的问题,取(10.1+3.37)/2=6.77作为判断“0”、“1”的分界线,即当检测到连续收到等于或超过7个接收端周期的低电平后即可认为接收到的是“1”,否则为“0”。以上就是解码的基本原理。翻译出编码信号后根据编码的规则,分析用户码和所应显示的数字即可
按下一个按键将会发送出去一串编码,而无论是连续信号还是单发信号,接收的波形中有用部分仅其中的十二位码,且其中的H、S1、S3位已经能名区分单发与连续信号,为节约资源,只需对接收信息中的十二位码进行编码即可。而从接收到的波形图可看出,仅当接收有编码时才有低电平,其余时间均为高电平。这样就可从低电平开始,对BIT‘0’和BIT‘1’进行编码。而BIT‘0’和BIT‘1’的区别在于其占空比不同,可以考虑用这样一个计数器cnt1:在低电平时被启动开始计数,当计数器的输入变为高电平时停止计数,这时可以比较计数值的大小。
各个状态的说明如下:
S0:复位等待状态,键盘输入状态,低电平检测计数器cnt1、编码位数计数器cnt2和响铃时间计数器cnt3清零,12位移位寄存器清零,响铃标志位输出为低电平。因为设置为遥控器接收优先,所以此时若接收到遥控器发射的信号则转入遥控器发射信号解码状态,否则就进行键盘输入解码。
S1:接收信号有低电平,转入S2状态低电平检测计数器开始计数,否则继续检测是否有低电平。
S2:低电平检测计数器cnt1开始计数,检测低电平时间长度,当检测到输入信号为高电平时,计数器停止工作并转入下一状态。
S3:编码位数计数器cnt2加‘1’,计算已收到多少位编码。并且以7为分界线,检测到输入信号为BIT‘1’,则12位移位寄存器向前移一位,最低位并入一个‘1’;检测到输入信号为BIT‘0’,则12位移位寄存器向前移一位,最低位并入一个‘0’。当编码计数器达到计数上限12,表明已经接收到一个完整的12位编码,跳入下一状态开始译码。
S4:译码部分,对解码之后的信号进行相应的译码输出。
