搜索
bottom↓
12
返回列表 发新帖
楼主: gentlerain

处女贴,看到这个版块的出现,迫不及待地把自己刚做好的RFID卡读卡解码程序同大家分享,带

  [复制链接]
(232984684)

出0入0汤圆

发表于 2013-6-7 20:35:00 | 显示全部楼层
gentlerain 发表于 2013-5-28 12:15
用任意的定时器都可以,只要定时器的Counter每个值等于4us即可.
不需要开任何中断.前提是不会溢出,因为此 ...

缺点:定时器4US的中断太频繁,还需要外部中断,没有行列校验。

解决:定时器定时打点采样的方式。
(232982833)

出0入0汤圆

 楼主| 发表于 2013-6-7 21:05:51 | 显示全部楼层
本帖最后由 gentlerain 于 2013-6-7 21:24 编辑
zyw19987 发表于 2013-6-7 20:35
缺点:定时器4US的中断太频繁,还需要外部中断,没有行列校验。

解决:定时器定时打点采样的方式。 ...


我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了.
校验的工作不放在外部中断里.成功收到数据后志一个标志,在外部处理数据.
(232954365)

出0入0汤圆

发表于 2013-6-8 05:00:19 | 显示全部楼层
gentlerain 发表于 2013-6-7 21:05
我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了. ...

只需定时器,和一个普通IO。并非所有单片机都有边缘触发中断的IO,定时器可能溢出。刁难一下楼主,能否做到卡“长按”和“短按”效果啊?应该是放置,不是按。
(232954228)

出0入0汤圆

发表于 2013-6-8 05:02:36 | 显示全部楼层
gentlerain 发表于 2013-6-7 21:05
我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了. ...

校验放在外面是正确的,我还嫌你现在在中断里做的事情已经够多的了。
(232935449)

出0入0汤圆

发表于 2013-6-8 10:15:35 | 显示全部楼层
路过学习!
(232927977)

出0入0汤圆

 楼主| 发表于 2013-6-8 12:20:07 | 显示全部楼层
zyw19987 发表于 2013-6-8 05:00
只需定时器,和一个普通IO。并非所有单片机都有边缘触发中断的IO,定时器可能溢出。刁难一下楼主,能否做 ...

长短按当然是可以的,跟按键的长短按没什么两样。
(232849875)

出0入0汤圆

发表于 2013-6-9 10:01:49 | 显示全部楼层
lZ,这个能读多远的卡?
(232838404)

出0入0汤圆

 楼主| 发表于 2013-6-9 13:13:00 | 显示全部楼层
jaskle 发表于 2013-6-9 10:01
lZ,这个能读多远的卡?

十来厘米应该没有问题,没仔细测过。
(232634166)

出0入0汤圆

发表于 2013-6-11 21:56:58 | 显示全部楼层
MARK,学习了
(230315323)

出0入0汤圆

发表于 2013-7-8 18:04:21 | 显示全部楼层
试过可以实现,不错,个人觉得可以用定时器的捕获功能,操作简单还可以对管脚信号进行滤波
(229983697)

出0入0汤圆

发表于 2013-7-12 14:11:27 | 显示全部楼层
mark!!以后用到再来看!
(229950831)

出0入0汤圆

发表于 2013-7-12 23:19:13 | 显示全部楼层
记下了,有空再来详看
(227809732)

出0入0汤圆

发表于 2013-8-6 18:04:12 | 显示全部楼层
有没有做过远点的距离的?
(227442082)

出0入0汤圆

发表于 2013-8-11 00:11:42 | 显示全部楼层
要是有解码程序就好了 哈哈
(227384113)

出0入0汤圆

 楼主| 发表于 2013-8-11 16:17:51 | 显示全部楼层
dainqi10 发表于 2013-8-11 00:11
要是有解码程序就好了 哈哈


老兄,这不是解码程序是什么?
(226081410)

出0入0汤圆

发表于 2013-8-26 18:09:34 | 显示全部楼层
mark 一下  RFID。。。。。。
(226008475)

出0入0汤圆

发表于 2013-8-27 14:25:09 | 显示全部楼层
之前都是使用的延时的,可以看看
(225720297)

出0入0汤圆

发表于 2013-8-30 22:28:07 | 显示全部楼层
我的程序能读出卡,但是不能奇偶校验。还有  距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对  还是隔直电容要改呢分别是472    3.3V  103  电感345uH
(225713652)

出0入0汤圆

 楼主| 发表于 2013-8-31 00:18:52 | 显示全部楼层
dainqi10 发表于 2013-8-30 22:28
我的程序能读出卡,但是不能奇偶校验。还有  距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对   ...

这个电路读卡距离一般10cm左右,跟程序没太大关系。
(225662557)

出0入0汤圆

发表于 2013-8-31 14:30:27 | 显示全部楼层
谢谢楼上,那和线圈的大小有关系没?而且我用钥匙扣的话可以1.5cm,4100卡只有不到5mm,郁闷中,求助
(225403576)

出0入0汤圆

发表于 2013-9-3 14:26:48 | 显示全部楼层
125K 曼切斯特编码 mark
(225203469)

出0入0汤圆

发表于 2013-9-5 22:01:55 | 显示全部楼层
谢谢你了。
(225037580)

出0入0汤圆

发表于 2013-9-7 20:06:44 | 显示全部楼层
MARK.准备用上,谢楼主
(224889984)

出0入0汤圆

发表于 2013-9-9 13:06:40 | 显示全部楼层
mark!!!!!!!!!!!!!!!!!
(224812407)

出0入0汤圆

发表于 2013-9-10 10:39:37 | 显示全部楼层
这个帖子不错!
(220496089)

出0入0汤圆

发表于 2013-10-30 09:38:15 | 显示全部楼层
距离能做到多元?
(220456348)

出0入0汤圆

 楼主| 发表于 2013-10-30 20:40:36 | 显示全部楼层
huangyiting1990 发表于 2013-10-30 09:38
距离能做到多元?

我相信大家对这个距离要求不会太远
(220065364)

出0入0汤圆

发表于 2013-11-4 09:17:00 | 显示全部楼层
MARK!      
(219115120)

出0入0汤圆

发表于 2013-11-15 09:14:24 | 显示全部楼层
mark
(219072773)

出0入0汤圆

发表于 2013-11-15 21:00:11 | 显示全部楼层
我也在研究AGV。
(218165101)

出0入0汤圆

发表于 2013-11-26 09:08:03 | 显示全部楼层
好!!!
(217886343)

出0入0汤圆

发表于 2013-11-29 14:34:01 | 显示全部楼层
mark,挺详细的,收藏了!
(216131043)

出0入0汤圆

发表于 2013-12-19 22:09:01 | 显示全部楼层
fuccccccccccccccccccccccccccc
(215120951)

出0入0汤圆

发表于 2013-12-31 14:43:53 | 显示全部楼层
感谢楼主,mark
(214958675)

出0入0汤圆

发表于 2014-1-2 11:48:29 | 显示全部楼层
mark下。。
(213400908)

出0入0汤圆

发表于 2014-1-20 12:31:16 | 显示全部楼层
mark!这帖子真心不错!
(210295396)

出0入0汤圆

发表于 2014-2-25 11:09:48 | 显示全部楼层
好贴,顶一个!
(207925572)

出0入4汤圆

发表于 2014-3-24 21:26:52 | 显示全部楼层
好帖!            
(207833473)

出0入0汤圆

发表于 2014-3-25 23:01:51 | 显示全部楼层
悄悄的顶一下
(205507641)

出0入0汤圆

发表于 2014-4-21 21:05:43 | 显示全部楼层
RFID  MARK
(204073414)

出0入0汤圆

发表于 2014-5-8 11:29:30 | 显示全部楼层
迫不及待地把自己刚做好的RFID卡读卡解码程序同大家分享,带
(204058162)

出0入0汤圆

发表于 2014-5-8 15:43:42 | 显示全部楼层

125k 的 RFID卡读卡器解码程序
(193963084)

出0入0汤圆

发表于 2014-9-2 11:55:00 | 显示全部楼层
好贴啊,楼主有用单片机的比较器做过吗???
(193673933)

出0入0汤圆

发表于 2014-9-5 20:14:11 | 显示全部楼层
gentlerain 发表于 2012-12-5 22:04
下面上传我根据一块读卡头重画的读卡原理图,可用于读取125K的非接触式ID卡.
下图中,PWM输入125KHz的方波,34 ...

楼主好人啊,谢谢分享。
(193665211)

出0入0汤圆

发表于 2014-9-5 22:39:33 | 显示全部楼层

mark!!!!!!!!
(188876115)

出0入0汤圆

发表于 2014-10-31 08:57:49 | 显示全部楼层
mark!!!!!!!!!!
(187660582)

出0入0汤圆

发表于 2014-11-14 10:36:42 | 显示全部楼层
学习下,谢谢楼主分享
(187128372)

出0入0汤圆

发表于 2014-11-20 14:26:52 | 显示全部楼层
这个必须MARK。 移植到STM32上去。。
(186147657)

出0入0汤圆

发表于 2014-12-1 22:52:07 | 显示全部楼层
本帖最后由 wt19891114 于 2014-12-1 22:53 编辑

楼主还在吗? 请问一下:原理图中的R319是62欧 还是620欧 。 同理,R312 是10欧还是100欧 。  期待您的回复哈。
(186100456)

出0入0汤圆

 楼主| 发表于 2014-12-2 11:58:48 | 显示全部楼层
wt19891114 发表于 2014-12-1 22:52
楼主还在吗? 请问一下:原理图中的R319是62欧 还是620欧 。 同理,R312 是10欧还是100欧 。  期待您的回复 ...

分别是620欧和100欧.
(186084402)

出0入0汤圆

发表于 2014-12-2 16:26:22 | 显示全部楼层
gentlerain 发表于 2014-12-2 11:58
分别是620欧和100欧.

谢谢啦 有空DIY一个,玩玩。
(184774180)

出0入0汤圆

发表于 2014-12-17 20:23:24 | 显示全部楼层
mark 学习一下
(184773484)

出0入0汤圆

发表于 2014-12-17 20:35:00 | 显示全部楼层
楼主好人啦
(184765142)

出0入0汤圆

发表于 2014-12-17 22:54:02 | 显示全部楼层
不错,谢谢分享啊!
(183134150)

出0入0汤圆

发表于 2015-1-5 19:57:14 | 显示全部楼层
本帖最后由 wt19891114 于 2015-1-5 19:59 编辑

参考楼主的设计 用STM32 做主控。 现在测试阶段遇到问题烦请楼主帮个忙。。   125K方波产生后  不放ID卡  , 在电路输出端测的2V电平, 放上卡后出现电平跳变 ,这算正常吗?  用的是388uh电感.。。。。
。。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(181766041)

出0入0汤圆

发表于 2015-1-21 15:59:03 | 显示全部楼层
谢谢收藏了,学习一下
(171458656)

出0入0汤圆

发表于 2015-5-20 23:08:48 | 显示全部楼层
mark,有帮助,
(170274574)

出0入0汤圆

发表于 2015-6-3 16:03:30 | 显示全部楼层
参考一下,准备动手做一个试试。
(159133466)

出0入0汤圆

发表于 2015-10-10 14:48:38 | 显示全部楼层
mark!!!!


(156106785)

出0入0汤圆

发表于 2015-11-14 15:33:19 | 显示全部楼层
学习学习
(112585523)

出0入0汤圆

发表于 2017-4-1 08:47:41 | 显示全部楼层
感谢楼主分享。
(100546688)

出0入0汤圆

发表于 2017-8-18 16:54:56 | 显示全部楼层
mark!很不错
(99797907)

出0入0汤圆

发表于 2017-8-27 08:54:37 | 显示全部楼层
hkap 发表于 2011-11-16 11:44
我做的门禁用延时做的,很稳定,已经量产了

读卡函数里面用延时跳变,对吧?
(47772469)

出0入0汤圆

发表于 2019-4-21 12:25:15 | 显示全部楼层
距离再加大点就完美了
(47691805)

出0入0汤圆

 楼主| 发表于 2019-4-22 10:49:39 | 显示全部楼层
taojie 发表于 2019-4-21 12:25
距离再加大点就完美了

距离跟电路和天线有关系,我之前做到88mm的天线读28mm的卡,可做到20cm左右
(42746554)

出0入0汤圆

发表于 2019-6-18 16:30:30 | 显示全部楼层
本人小白一枚,最近在学习125KHZ的 RFID 解码,应用的和楼主是一样的用定时器来计数,因为没有输入捕获通道,我的QQ 408892434 希望向楼主请教点问题,或者论坛的大佬们 谁可以指点我一下
(42746498)

出0入0汤圆

发表于 2019-6-18 16:31:26 | 显示全部楼层
wt19891114 发表于 2015-1-5 19:57
参考楼主的设计 用STM32 做主控。 现在测试阶段遇到问题烦请楼主帮个忙。。   125K方波产生后  不放ID卡   ...

你现在弄出来了吗?
(42743194)

出0入0汤圆

 楼主| 发表于 2019-6-18 17:26:30 | 显示全部楼层
yueming 发表于 2019-6-18 16:30
本人小白一枚,最近在学习125KHZ的 RFID 解码,应用的和楼主是一样的用定时器来计数,因为没有输入捕获通道 ...

有问题直接在这里说吧
(42738615)

出0入0汤圆

发表于 2019-6-18 18:42:49 | 显示全部楼层
gentlerain 发表于 2019-6-18 17:26
有问题直接在这里说吧

按照楼主的做法,
void EXTI_Config(void)
{
  GPIO_DeInit(GPIOA);
  GPIO_Init(GPIOA,GPIO_Pin_2,GPIO_Mode_In_PU_IT);
  EXTI_DeInit();
TIM2_Config();                       ----------------------------------------------这个定时器在这里初始化对吗?
  EXTI_SetPinSensitivity(EXTI_Pin_2,EXTI_Trigger_Rising_Falling);
  
}

void TIM2_Config()
{
  CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1);
  TIM2_DeInit();
  CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, ENABLE);
  TIM2_TimeBaseInit(TIM2_Prescaler_64, TIM2_CounterMode_Up, 255);//定时单位4us
  TIM2_ARRPreloadConfig(ENABLE);
  TIM2_Cmd(ENABLE);
}

当触发了上升沿或者下降沿的时候就会进入到外部中断服务函数中,
INTERRUPT_HANDLER(EXTI2_IRQHandler, 10)


     unsigned short time;
     time= TIM2_GetCounter();
     unsigned char ucTemp;
     TIM2_SetCounter(0); ------------------------------------------------------------此时清0 了之后 计数器会不断的加  然后第二次进入中断的时候读取的值不就 不是电平的值了



这应该就是触发上升沿或者下降沿中断了,就会进入中断服务函数中,直接读取定时器的值,此时定时器的值应该是 128 或者64 左右的范围内,我通过串口打印定时器的计数值,只有一个符合,按理说此时的计数器值应该为一个周期或者半个周期时间。

(42680437)

出0入0汤圆

发表于 2019-6-19 10:52:27 | 显示全部楼层
dainqi10 发表于 2013-8-30 22:28
我的程序能读出卡,但是不能奇偶校验。还有  距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对   ...

你的程序用的是楼主的吗? 我这个定时器一直读不准确,弄了一天了,能指点下不
(42666346)

出0入0汤圆

发表于 2019-6-19 14:47:18 | 显示全部楼层
定时器还是不成功,换了几种方式了,大佬们 救命啊
(42665428)

出0入0汤圆

 楼主| 发表于 2019-6-19 15:02:36 | 显示全部楼层
yueming 发表于 2019-6-19 14:47
定时器还是不成功,换了几种方式了,大佬们 救命啊

这样很难帮你的,你先把定时器调好吧。
你要对读卡的数据波形有深刻的理解才能知道程序应该怎么写
(42663713)

出0入0汤圆

发表于 2019-6-19 15:31:11 | 显示全部楼层
gentlerain 发表于 2019-6-19 15:02
这样很难帮你的,你先把定时器调好吧。
你要对读卡的数据波形有深刻的理解才能知道程序应该怎么写 ...

感谢,我先去研究研究 不懂的在过来请教大佬
(42217352)

出0入0汤圆

发表于 2019-6-24 19:30:32 | 显示全部楼层
楼主,遇见了一个问题,不加行校验和列校验,就能读出数据来,但是只要靠近线圈就会读出数据,不贴着就会读出乱码,贴好才会读出正确的,如果加了校验,就读不出来数据。
(42169694)

出0入0汤圆

 楼主| 发表于 2019-6-25 08:44:50 | 显示全部楼层
yueming 发表于 2019-6-24 19:30
楼主,遇见了一个问题,不加行校验和列校验,就能读出数据来,但是只要靠近线圈就会读出数据,不贴着就会读 ...

读卡受距离影响,太近反而读不到的话,要检查你的电路,这跟软件没关系。
至于校验,你还是要认真研读数据格式,看是不是校验过程搞错了
(42066622)

出0入0汤圆

发表于 2019-6-26 13:22:42 | 显示全部楼层
gentlerain 发表于 2019-6-25 08:44
读卡受距离影响,太近反而读不到的话,要检查你的电路,这跟软件没关系。
至于校验,你还是要认真研读数 ...

校验过程 算数据中有几个1,然后偶数的为0 奇数的为1,和对应的校验位进行比较,相等的 flag==1 说明正确可以进行解码, flag==0 不正确 直接 return , 可以感觉还是不对,不是卡号的数据还是可以d
void check()
{
  unsigned char i,j,counter;
  unsigned char cache,cache_1;
  unsigned char c;
  
  for(i=2;i<10;i++)
  {
    counter=0;
    cache=g_ucData;
    cache_1=g_ucData;
    for(j=0;j<4;j++)
    {
      cache&=0x10;   //计算有几个1
      if(cache==0x10)
      {
        counter++;  
      }
      cache_1 <<=1;
      cache=cache_1;
   
    }
   
    if((counter==0) ||(counter==2) ||(counter==4))
    {
        check_bit=0;
    }
    else if((counter==1) || (counter ==3))
    {
        check_bit=1;
   
    }
    c=g_ucData;
    c&=0x01; //校验位
    if(c==0x01)
    {
      PC_bit=1;  //校验位是1的
    }
    else
    {
      PC_bit=0;
   
    }
    if(check_bit==PC_bit)   
    {
        flag= 1;  //表示检验正确
    }
    else
    {
        
        flag=0;
        LED_ON;
    }
    if(flag==0)
    {
      return;
    }
   
  }
}




这个是列校验


bool row()
{
// _Bool  result=TRUE;
  unsigned char i,j,counter;
  unsigned char cache,cache_1;
  cache_1=0x10;
    for(i=0;i<4;i++)
    {
      counter=0;
   
   
      for(j=0;j<10;j++)
      {
   
          cache=g_ucData;
          cache&=cache_1;
          if(cache==cache_1)
          {
            counter++;
        
          }
   
      }
     
      if((counter==0) ||(counter==2) || (counter==4) || (counter==6) || (counter==8) || (counter==10))
      {
        check_bit1=0;
   
      }
      else if((counter==1) || (counter==3) || (counter==5) || (counter==7) || (counter==9))
      {
        check_bit1=1;
      }
      cache=g_ucData[10];
      cache&=cache_1;
      if(cache==cache_1)
      {
        
        PC_bit1=1; //最后一位
   
      }
      else
      {
        PC_bit1=0;
      }
      if(check_bit1==PC_bit1)
      {
         
      }
      else
      {
        return FALSE;
      }
      cache_1 >>=1;
      
  
   }
   return TRUE;

}
(33062061)

出0入0汤圆

发表于 2019-10-8 18:38:43 | 显示全部楼层
先收藏了,慢慢学习
(15601174)

出0入0汤圆

发表于 2020-4-27 20:53:30 | 显示全部楼层
mark                                 
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-10-25 10:33

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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