用任意的定时器都可以,只要定时器的Counter每个值等于4us即可.
不需要开任何中断.前提是不会溢出,因为此 ...
缺点:定时器4US的中断太频繁,还需要外部中断,没有行列校验。
解决:定时器定时打点采样的方式。 本帖最后由 gentlerain 于 2013-6-7 21:24 编辑
zyw19987 发表于 2013-6-7 20:35 static/image/common/back.gif
缺点:定时器4US的中断太频繁,还需要外部中断,没有行列校验。
解决:定时器定时打点采样的方式。 ...
我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了.
校验的工作不放在外部中断里.成功收到数据后志一个标志,在外部处理数据. gentlerain 发表于 2013-6-7 21:05 static/image/common/back.gif
我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了. ...
只需定时器,和一个普通IO。并非所有单片机都有边缘触发中断的IO,定时器可能溢出。刁难一下楼主,能否做到卡“长按”和“短按”效果啊?应该是放置,不是按。 gentlerain 发表于 2013-6-7 21:05 static/image/common/back.gif
我从来没有说过4us的定时器要开中断啊,只是用来采时间的.只要外部中断进入去读取定时器的计数值就可以了. ...
校验放在外面是正确的,我还嫌你现在在中断里做的事情已经够多的了。 路过学习! zyw19987 发表于 2013-6-8 05:00 static/image/common/back.gif
只需定时器,和一个普通IO。并非所有单片机都有边缘触发中断的IO,定时器可能溢出。刁难一下楼主,能否做 ...
长短按当然是可以的,跟按键的长短按没什么两样。 lZ,这个能读多远的卡?
jaskle 发表于 2013-6-9 10:01 static/image/common/back.gif
lZ,这个能读多远的卡?
十来厘米应该没有问题,没仔细测过。 MARK,学习了 试过可以实现,不错,个人觉得可以用定时器的捕获功能,操作简单还可以对管脚信号进行滤波 mark!!以后用到再来看! 记下了,有空再来详看 有没有做过远点的距离的? 要是有解码程序就好了 哈哈 dainqi10 发表于 2013-8-11 00:11 static/image/common/back.gif
要是有解码程序就好了 哈哈
{:sweat:}
老兄,这不是解码程序是什么? mark 一下RFID。。。。。。 之前都是使用的延时的,可以看看 我的程序能读出卡,但是不能奇偶校验。还有距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对还是隔直电容要改呢分别是472 3.3V103电感345uH dainqi10 发表于 2013-8-30 22:28 static/image/common/back.gif
我的程序能读出卡,但是不能奇偶校验。还有距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对 ...
这个电路读卡距离一般10cm左右,跟程序没太大关系。 谢谢楼上,那和线圈的大小有关系没?而且我用钥匙扣的话可以1.5cm,4100卡只有不到5mm,郁闷中,求助 125K 曼切斯特编码 mark 谢谢你了。 MARK.准备用上,谢楼主 mark!!!!!!!!!!!!!!!!!
这个帖子不错! 距离能做到多元? huangyiting1990 发表于 2013-10-30 09:38 static/image/common/back.gif
距离能做到多元?
我相信大家对这个距离要求不会太远 MARK! mark
{:smile:} 我也在研究AGV。 好!!! mark,挺详细的,收藏了! fuccccccccccccccccccccccccccc 感谢楼主,mark mark下。。 mark!这帖子真心不错! 好贴,顶一个! 好帖! 悄悄的顶一下 RFIDMARK 迫不及待地把自己刚做好的RFID卡读卡解码程序同大家分享,带
125k 的 RFID卡读卡器解码程序 好贴啊,楼主有用单片机的比较器做过吗??? gentlerain 发表于 2012-12-5 22:04
下面上传我根据一块读卡头重画的读卡原理图,可用于读取125K的非接触式ID卡.
下图中,PWM输入125KHz的方波,34 ...
楼主好人啊,谢谢分享。
mark!!!!!!!! mark!!!!!!!!!! 学习下,谢谢楼主分享 这个必须MARK。 移植到STM32上去。。 本帖最后由 wt19891114 于 2014-12-1 22:53 编辑
楼主还在吗? 请问一下:原理图中的R319是62欧 还是620欧 。 同理,R312 是10欧还是100欧 。期待您的回复哈。 wt19891114 发表于 2014-12-1 22:52
楼主还在吗? 请问一下:原理图中的R319是62欧 还是620欧 。 同理,R312 是10欧还是100欧 。期待您的回复 ...
分别是620欧和100欧. gentlerain 发表于 2014-12-2 11:58
分别是620欧和100欧.
谢谢啦 有空DIY一个,玩玩。 mark 学习一下{:smile:} 楼主好人啦 不错,谢谢分享啊! 本帖最后由 wt19891114 于 2015-1-5 19:59 编辑
参考楼主的设计 用STM32 做主控。 现在测试阶段遇到问题烦请楼主帮个忙。。 125K方波产生后不放ID卡, 在电路输出端测的2V电平, 放上卡后出现电平跳变 ,这算正常吗?用的是388uh电感.。。。。
。。
谢谢收藏了,学习一下 mark,有帮助, 参考一下,准备动手做一个试试。 mark!!!!
学习学习 感谢楼主分享。 mark!很不错 hkap 发表于 2011-11-16 11:44
我做的门禁用延时做的,很稳定,已经量产了
读卡函数里面用延时跳变,对吧? 距离再加大点就完美了 taojie 发表于 2019-4-21 12:25
距离再加大点就完美了
距离跟电路和天线有关系,我之前做到88mm的天线读28mm的卡,可做到20cm左右 本人小白一枚,最近在学习125KHZ的 RFID 解码,应用的和楼主是一样的用定时器来计数,因为没有输入捕获通道,我的QQ 408892434 希望向楼主请教点问题,或者论坛的大佬们 谁可以指点我一下 wt19891114 发表于 2015-1-5 19:57
参考楼主的设计 用STM32 做主控。 现在测试阶段遇到问题烦请楼主帮个忙。。 125K方波产生后不放ID卡 ...
你现在弄出来了吗? yueming 发表于 2019-6-18 16:30
本人小白一枚,最近在学习125KHZ的 RFID 解码,应用的和楼主是一样的用定时器来计数,因为没有输入捕获通道 ...
有问题直接在这里说吧 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 左右的范围内,我通过串口打印定时器的计数值,只有一个符合,按理说此时的计数器值应该为一个周期或者半个周期时间。
dainqi10 发表于 2013-8-30 22:28
我的程序能读出卡,但是不能奇偶校验。还有距离太短楼主能不能给点建议?是谐振电容不对 还是电压不对 ...
你的程序用的是楼主的吗? 我这个定时器一直读不准确,弄了一天了,能指点下不 定时器还是不成功,换了几种方式了,大佬们 救命啊 yueming 发表于 2019-6-19 14:47
定时器还是不成功,换了几种方式了,大佬们 救命啊
这样很难帮你的,你先把定时器调好吧。
你要对读卡的数据波形有深刻的理解才能知道程序应该怎么写 gentlerain 发表于 2019-6-19 15:02
这样很难帮你的,你先把定时器调好吧。
你要对读卡的数据波形有深刻的理解才能知道程序应该怎么写 ...
感谢,我先去研究研究 不懂的在过来请教大佬 楼主,遇见了一个问题,不加行校验和列校验,就能读出数据来,但是只要靠近线圈就会读出数据,不贴着就会读出乱码,贴好才会读出正确的,如果加了校验,就读不出来数据。 yueming 发表于 2019-6-24 19:30
楼主,遇见了一个问题,不加行校验和列校验,就能读出数据来,但是只要靠近线圈就会读出数据,不贴着就会读 ...
读卡受距离影响,太近反而读不到的话,要检查你的电路,这跟软件没关系。
至于校验,你还是要认真研读数据格式,看是不是校验过程搞错了 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;
} 先收藏了,慢慢学习 mark
页:
1
[2]