用定时器进行PIE编码的另一种思考

之前进行PIE编码的,考虑什么问题都在中断里面进行处理,如果中断处理不过来,那么问题就来了啊,就会产生重复波形啊

而且我也不太清楚,如何把数据传递到我的中断程序里面。

之前的代码思路是这样的:

int_bit_clear;
cnt++;
if(cnt==1) 
    preamble(1);
else if(cnt==2)
    preamble(2);
else if(cnt==3)
    preamble(3)
else if(cnt==4)
    preamble(4)
else
{
      if(data[cnt-4])
          {
            rTCNTB0=data_1;
            rTCMPB0=data_1;
         }
     else
         {
             rTCNTB0=data_0;
             rTCMPB0=data_0;
          }
}


有一个需要说明的问题是,如果开启翻转,那么在开启翻转的那么一瞬间,会产生尖峰脉冲

就这么简单明了,可以,完全可以,毛刺问题可能会出现


第二种思考方法

把preamble头部也放进,data里面,而且是直接计数的,比如是data0,那么就在数组里面相应的位置赋值为(312,156)

要是1的话就赋值为(712,156) ,先把这个数组计算出来

然后再定时器0的中断里面计数,对于每一个计数,在中断里面把rTCNTB0赋值为计算好的数组里面的相应的位,简单明了,还不用判断语句

多么的大气啊

不过这样有一个坏处,就是牺牲存储,来换取速度的提升。

可以试验一下,反正现在也没有什么事情干。


现在的问题是,老师写非常容易出错的代码


比如判断一个字符型数据的最高位是0还是1,如过是1,则给某一位赋值1,否则赋值0;

你写的不行,这个时候,0x1<<7位是判断最高位的,而不是0x1<<8;否则得到都都是0;


音乐能产生共鸣,当你比较活跃的时候,翻翻一些不用于大众流行的音乐,你会收获很多。


PIE编码我发现了一个问题,如果启动定时器就让它产生一个query波形,那是不现实的一个问题,肯定会有在帧头的前面,有一段比较脏的数据在里面

当然并不是没有办法了,可以采取这样的措施。

启动定时器,让它一直产生高电平脉冲,当然会有一条线下来,这个是没有办法避免的事情哈,然后延时一段时间,避免帧头和一开始启动时产生的脏数据部分连接到一起

即延时一段时间之后,定时器0中断,这个时候,使用示波器大量到的波形,就比较完美,但是问题是还是会有一条线下来。

产生的query命令图形如下所示。


下面是一开始给定时器定最大的值,开启翻转给定时器初始值为(65535,0),延时一段时间,让定时器跑一会儿,然后开启中断允许

当定时器跑完之后,稳定下来,计数值变为0的时候,马上进入中断,产生所需要的波形,下面是所需要的波形图,看上去还挺漂亮的哈。



因为要一直给标签供电,所以在产生query命令之后,pwm的输出要一直保持高电平,来给标签供电,所以嘛哈哈

这个时候就需要一个问题了,如果产生query命令之后,pwm的输出拉低怎么办?

这真的是个问题,还好我再主函数里面,只发送一次query,然后while(1),并用示波器打开,查看pwm输出口的电平

发现时高电平,窃喜,这个问题就不是问题了哈!!

但是现在还有一个电平的问题啊,就是给标签发送命令的时候,之前PA要打开,CTA载波要打开,最低貌似要保持20us的时间,陈师兄说的

看来应该会满足的吗。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值