zyw19987 发表于 2013-6-7 20:35:00

gentlerain 发表于 2013-5-28 12:15 static/image/common/back.gif
用任意的定时器都可以,只要定时器的Counter每个值等于4us即可.
不需要开任何中断.前提是不会溢出,因为此 ...

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

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

gentlerain 发表于 2013-6-7 21:05:51

本帖最后由 gentlerain 于 2013-6-7 21:24 编辑

zyw19987 发表于 2013-6-7 20:35 static/image/common/back.gif
缺点:定时器4US的中断太频繁,还需要外部中断,没有行列校验。

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

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

zyw19987 发表于 2013-6-8 05:00:19

gentlerain 发表于 2013-6-7 21:05 static/image/common/back.gif
我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了. ...

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

zyw19987 发表于 2013-6-8 05:02:36

gentlerain 发表于 2013-6-7 21:05 static/image/common/back.gif
我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了. ...

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

gfy200866 发表于 2013-6-8 10:15:35

路过学习!

gentlerain 发表于 2013-6-8 12:20:07

zyw19987 发表于 2013-6-8 05:00 static/image/common/back.gif
只需定时器,和一个普通IO。并非所有单片机都有边缘触发中断的IO,定时器可能溢出。刁难一下楼主,能否做 ...

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

jaskle 发表于 2013-6-9 10:01:49

lZ,这个能读多远的卡?

gentlerain 发表于 2013-6-9 13:13:00

jaskle 发表于 2013-6-9 10:01 static/image/common/back.gif
lZ,这个能读多远的卡?

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

kristy1212 发表于 2013-6-11 21:56:58

MARK,学习了

kavin_zhou 发表于 2013-7-8 18:04:21

试过可以实现,不错,个人觉得可以用定时器的捕获功能,操作简单还可以对管脚信号进行滤波

bendanemodong 发表于 2013-7-12 14:11:27

mark!!以后用到再来看!

357853730 发表于 2013-7-12 23:19:13

记下了,有空再来详看

颖风 发表于 2013-8-6 18:04:12

有没有做过远点的距离的?

dainqi10 发表于 2013-8-11 00:11:42

要是有解码程序就好了 哈哈

gentlerain 发表于 2013-8-11 16:17:51

dainqi10 发表于 2013-8-11 00:11 static/image/common/back.gif
要是有解码程序就好了 哈哈

{:sweat:}
老兄,这不是解码程序是什么?

673104326 发表于 2013-8-26 18:09:34

mark 一下RFID。。。。。。

flylosting 发表于 2013-8-27 14:25:09

之前都是使用的延时的,可以看看

dainqi10 发表于 2013-8-30 22:28:07

我的程序能读出卡,但是不能奇偶校验。还有距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对还是隔直电容要改呢分别是472    3.3V103电感345uH

gentlerain 发表于 2013-8-31 00:18:52

dainqi10 发表于 2013-8-30 22:28 static/image/common/back.gif
我的程序能读出卡,但是不能奇偶校验。还有距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对   ...

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

dainqi10 发表于 2013-8-31 14:30:27

谢谢楼上,那和线圈的大小有关系没?而且我用钥匙扣的话可以1.5cm,4100卡只有不到5mm,郁闷中,求助

nuncle 发表于 2013-9-3 14:26:48

125K 曼切斯特编码 mark

差点儿就帅了 发表于 2013-9-5 22:01:55

谢谢你了。

黄毛 发表于 2013-9-7 20:06:44

MARK.准备用上,谢楼主

电子三剑客 发表于 2013-9-9 13:06:40

mark!!!!!!!!!!!!!!!!!

602647310 发表于 2013-9-10 10:39:37

这个帖子不错!

huangyiting1990 发表于 2013-10-30 09:38:15

距离能做到多元?

gentlerain 发表于 2013-10-30 20:40:36

huangyiting1990 发表于 2013-10-30 09:38 static/image/common/back.gif
距离能做到多元?

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

捣蛋丶电工 发表于 2013-11-4 09:17:00

MARK!      

电子学习员 发表于 2013-11-15 09:14:24

mark
{:smile:}

rivita 发表于 2013-11-15 21:00:11

我也在研究AGV。

会思考的IC 发表于 2013-11-26 09:08:03

好!!!

345161974 发表于 2013-11-29 14:34:01

mark,挺详细的,收藏了!

kui_wang 发表于 2013-12-19 22:09:01

fuccccccccccccccccccccccccccc

haso2007 发表于 2013-12-31 14:43:53

感谢楼主,mark

speiwak 发表于 2014-1-2 11:48:29

mark下。。

602647310 发表于 2014-1-20 12:31:16

mark!这帖子真心不错!

mmy168 发表于 2014-2-25 11:09:48

好贴,顶一个!

sunliezhi 发表于 2014-3-24 21:26:52

好帖!            

oldmen 发表于 2014-3-25 23:01:51

悄悄的顶一下

lingfei 发表于 2014-4-21 21:05:43

RFIDMARK

songjie 发表于 2014-5-8 11:29:30

迫不及待地把自己刚做好的RFID卡读卡解码程序同大家分享,带

zxd08 发表于 2014-5-8 15:43:42


125k 的 RFID卡读卡器解码程序

lnso 发表于 2014-9-2 11:55:00

好贴啊,楼主有用单片机的比较器做过吗???

技术平原 发表于 2014-9-5 20:14:11

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

楼主好人啊,谢谢分享。

denjackson 发表于 2014-9-5 22:39:33


mark!!!!!!!!

zhangjifeng 发表于 2014-10-31 08:57:49

mark!!!!!!!!!!

hongbo3636 发表于 2014-11-14 10:36:42

学习下,谢谢楼主分享

wt19891114 发表于 2014-11-20 14:26:52

这个必须MARK。 移植到STM32上去。。

wt19891114 发表于 2014-12-1 22:52:07

本帖最后由 wt19891114 于 2014-12-1 22:53 编辑

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

gentlerain 发表于 2014-12-2 11:58:48

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

分别是620欧和100欧.

wt19891114 发表于 2014-12-2 16:26:22

gentlerain 发表于 2014-12-2 11:58
分别是620欧和100欧.

谢谢啦 有空DIY一个,玩玩。

yjdhqcc 发表于 2014-12-17 20:23:24

mark 学习一下{:smile:}

jiwx2011 发表于 2014-12-17 20:35:00

楼主好人啦

yzh 发表于 2014-12-17 22:54:02

不错,谢谢分享啊!

wt19891114 发表于 2015-1-5 19:57:14

本帖最后由 wt19891114 于 2015-1-5 19:59 编辑

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

zhongsandaoren 发表于 2015-1-21 15:59:03

谢谢收藏了,学习一下

plaman801123 发表于 2015-5-20 23:08:48

mark,有帮助,

Joyje 发表于 2015-6-3 16:03:30

参考一下,准备动手做一个试试。

无限幻想 发表于 2015-10-10 14:48:38

mark!!!!


sml009 发表于 2015-11-14 15:33:19

学习学习

signal10 发表于 2017-4-1 08:47:41

感谢楼主分享。

ziziy 发表于 2017-8-18 16:54:56

mark!很不错

tao2008 发表于 2017-8-27 08:54:37

hkap 发表于 2011-11-16 11:44
我做的门禁用延时做的,很稳定,已经量产了

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

taojie 发表于 2019-4-21 12:25:15

距离再加大点就完美了

gentlerain 发表于 2019-4-22 10:49:39

taojie 发表于 2019-4-21 12:25
距离再加大点就完美了

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

yueming 发表于 2019-6-18 16:30:30

本人小白一枚,最近在学习125KHZ的 RFID 解码,应用的和楼主是一样的用定时器来计数,因为没有输入捕获通道,我的QQ 408892434 希望向楼主请教点问题,或者论坛的大佬们 谁可以指点我一下

yueming 发表于 2019-6-18 16:31:26

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

你现在弄出来了吗?

gentlerain 发表于 2019-6-18 17:26:30

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

有问题直接在这里说吧

yueming 发表于 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 左右的范围内,我通过串口打印定时器的计数值,只有一个符合,按理说此时的计数器值应该为一个周期或者半个周期时间。

yueming 发表于 2019-6-19 10:52:27

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

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

yueming 发表于 2019-6-19 14:47:18

定时器还是不成功,换了几种方式了,大佬们 救命啊

gentlerain 发表于 2019-6-19 15:02:36

yueming 发表于 2019-6-19 14:47
定时器还是不成功,换了几种方式了,大佬们 救命啊

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

yueming 发表于 2019-6-19 15:31:11

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

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

yueming 发表于 2019-6-24 19:30:32

楼主,遇见了一个问题,不加行校验和列校验,就能读出数据来,但是只要靠近线圈就会读出数据,不贴着就会读出乱码,贴好才会读出正确的,如果加了校验,就读不出来数据。

gentlerain 发表于 2019-6-25 08:44:50

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

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

yueming 发表于 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()
{
// _Boolresult=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;
      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;

}

tangly2017 发表于 2019-10-8 18:38:43

先收藏了,慢慢学习

gao234 发表于 2020-4-27 20:53:30

mark                                 
页: 1 [2]
查看完整版本: 处女贴,看到这个版块的出现,迫不及待地把自己刚做好的RFID卡读卡解码程序同大家分享,带