搜索
bottom↓
回复: 227

原创:用Mega32通过U2270B读取H4001RFID卡号的范例

[复制链接]

出0入0汤圆

发表于 2006-9-10 21:13:10 | 显示全部楼层 |阅读模式
每间隔0.5秒扫描一次,如果有卡到,直接通过232向上位机发送RFID卡的号码(十六进制)

此代码是刚接触ICCAVR时写的,希望对想了解RFID卡的朋友有帮助。



点击此处下载armok01128556.rar

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2006-9-10 21:22:58 | 显示全部楼层
程序是从一个坏的硬盘中找到的,电路图不见了,只能用下面的图参考了

TK5552的卡,可读写,7个块,每个块4字节,MCU是mega8







点击此处下载armok01128558.rar

出0入0汤圆

发表于 2006-9-11 09:54:35 | 显示全部楼层
谢谢楼主!



我现在正在使用M48+EM4095作低频模块! 上面资料对我很有参考价值!



不知楼主是否研究过?

出0入0汤圆

 楼主| 发表于 2006-9-11 11:23:36 | 显示全部楼层
EM4095的模块我没用过,我用的是U2270B,此芯片价格大约10元,不知道em4095要多少钱?

U2270B也能读EM4100 64Bit卡,







U2270B数据文档:

http://www.atmel.com/dyn/resources/prod_documents/doc4684.pdf


-----此内容被whimsy于2006-09-11,11:41:48编辑过

出0入0汤圆

 楼主| 发表于 2006-9-11 14:31:48 | 显示全部楼层
我下载了Em4095的文档看了看,两种芯片差不多,



Em4095的12脚MOD,对应u2270B的第6脚CFE,

Em4095的13脚DEMOD_OUT,对应u2270B的第2脚OutPut

对应源程序中的脚定义:RFW,RFID_IN



在读EM4100,H4001等兼容的只读卡的系统中,不对卡进行写的操作

可以将 EM4095的12脚直接接地(U2270B的6脚接高电平),省略一根控制线,

外围元件焊接无误,当卡靠近天线(大约距离小于10cm),在output脚就会循环

输出卡的ID码(全部的64Bit,曼切斯特_码),送到MCU进行解调.

出0入0汤圆

发表于 2006-9-12 11:03:19 | 显示全部楼层
谢谢楼主指点啊!

EM4095的价格比U2270B的价格稍贵一点,但是不多

毕竟EM4095还具有写卡功能

我这几天在调试EM4095的时候,上电后,他的SHD引脚

始终为高电平,该引脚使用来控制EM4095工作模式的,

高电平为休眠模式,

低电平为工作模式,

是输入引脚,但是接到CPU上之后,造成CPU不能正常

工作,一直找不到是什么原因,是不是外围电路有影响???

出0入0汤圆

 楼主| 发表于 2006-9-12 13:54:59 | 显示全部楼层
U2270也是有写卡功能,就是控制CFE脚进行写操作



EM4095的SHD脚,你在测试芯片时,先不要联到MCU,直接接地

这时候芯片就是工作状态,先弄一张只读卡EM4100来测试

你搭建的读写电路,卡在有效区域时,用示波器查看13脚,

应该能看到连续的跳变电平(方波),有了这些外围的正常情况,

再写曼码解调程序。



至于SHD接到MCU上造成工作不正常,需要你的电路及源程序才能分析.

祝你成功。

出0入0汤圆

发表于 2006-9-12 15:48:38 | 显示全部楼层
谢谢楼主指点!

我也是这么想的,也这么进行了测试,

单独将SHD引脚接地,让EM4095处于工作状态,

用示波器观测到天线端有载频信号,频率大约128K,

并且在第二引脚有同步信号输出,说明是处于工作状态了,

当我测量13脚的时候,发现有方波输出,但我也没有卡在天线附近,

当放一张卡在天线附近时候,没有什么变化,仍然发出的是方波啊,

我测量电源和地的时候,有一些纹波干扰,不知是什么原因???



我的电路板没有进行铺地,对电路有影响吗?

初次作射频方面的,没什么经验,请多多指教!!!

出0入0汤圆

 楼主| 发表于 2006-9-12 17:05:04 | 显示全部楼层
EM4095的情况我不清楚,我的经验来至U2270B,



没有卡时,U2270B也会在输出端测到方波,不过方波是杂乱无章的,



当有卡到是,输出的方波相对来说比较有规律,并且位跳变的时间



与卡输出的位时间能够吻合.





电路板没有进行铺地,不会影响到,晚上会家,发个U2270B的PCB上来给你参考

很小尺寸,不含MCU

出0入0汤圆

 楼主| 发表于 2006-9-12 20:50:40 | 显示全部楼层
U2270B的PCB来了

点击此处下载armok01128656.rar





出0入0汤圆

 楼主| 发表于 2006-9-12 21:04:03 | 显示全部楼层
SCH参考2楼SCH中的U2270B射频电路部分,PCB中漏了一跟线:U2270B的10-11-14相连





J101接口定义:



1.RFW,接U2270B的第6脚CFE,载波允许,只读卡应用时保持高电平

  读写卡应用时为写指令调制输入

2.VCC,+5V

3.GND

4.RFID_OUT,曼切斯特_码输出到MCU解调
-----此内容被whimsy于2006-09-12,21:54:42编辑过

出0入0汤圆

 楼主| 发表于 2006-9-12 21:11:15 | 显示全部楼层
还有个高手设计的射频电路,用分立元件替代U2270B的,我不太懂工作过程,

在此想请高手分析.

出0入0汤圆

发表于 2006-9-13 08:41:25 | 显示全部楼层
谢谢楼主提供这么多资料!

楼主看一下我得波形图!

第一个是没放卡时的,



第二个是放卡时的,



楼主帮看一下,好像没有什么差别啊?

波形的宽度不一,根据4100/4001卡的数据结构,前面应该有9个下降沿(数据头是9个1)

对应的波形,但是观察很久,始终不能观测到,郁闷啊!想不出什么原因??

现在使用EM4095的人好像不多啊,资料相对的也很少,很棘手啊!
-----此内容被wch2002于2006-09-13,09:01:15编辑过

出0入0汤圆

 楼主| 发表于 2006-9-13 15:07:09 | 显示全部楼层
羡慕啊,你的示波器比我的好多了,我可是用15Mhz的模拟的调试出来的



看你的波形应该不正常,当RF/64时,位周期为512uS, 从你的图上看不到明显的

有1个位周期有512uS左右,正常情况下,有卡与没卡时,从输出脚上看到的方波

有非常明显的变化。



我估计你要先弄个采用EM4095成品的读写器,然后再自己开发,为何坚持用EM4095

U2270B不行吗,是要搞产品吗?

出0入0汤圆

发表于 2006-9-13 16:16:55 | 显示全部楼层
Em4095功耗也挺大

出0入0汤圆

发表于 2006-9-14 09:25:38 | 显示全部楼层
em4095读卡时的电流为100mA,睡眠模式的静态电流为5uA,这样的功耗应该可以吧!



我没有做过U2270 ,不知道它的功耗多少?



另外U2270B的外围元件太多,可能会给调试的时候带来很大的麻烦,所以最出的选责器件的时候选了EM4095!电路板也作出来了!既然选择了,没有必要在更改了!

我昨天问了我买器件的公司的技术人员了,他告诉我说可能是电源质量不好引起的干扰,的确我最初的时候用的是开关电源,我回来后加了一片78M05来供电,但是效果还是一样的!

硬件有问题,软件也就没有办法进行下去!

还可能是什么原因呢?

出0入0汤圆

 楼主| 发表于 2006-9-14 13:16:02 | 显示全部楼层
好好的查查EM4095的外围电路,板的布线都查过了?

我用模拟的示波器测的时候,没卡的时候output的波形无法同步到,

有卡时的波形可以被同步到。



我当时设计程序时的一些思路,创建数组,采集有卡时output的每个跳变时间,

连续采集几十到200个数据,通过232口传到PC分析位时间对不对,如果对,

射频电路就没问题了,我的程序中的,tcomp就是TCNT1计数器的值

半位时间取1500<tcomp<2500, 全位取 3000<tcomp<5000

中间值2000计算  2000/7.7328=258uS





11楼中给出的分离元件电路我在测试,已经有点希望了,

R10(82欧)上加用Timer1 OC1A 输出的127Khz,PD5输出高电平,这样当有卡时,

AN0上就能看到未整形的曼码波形,用MCU内部的比较器就可以实现整形,

这个电路更直观,无卡时没有波形



天线线圈的绕制你是怎么做的,有没有测电感量?



我的电路供电是7805的,后来用锂电池供电,用MC34063做升压到5V,也都用好好的



你还是先弄个成品或开发板。

出0入0汤圆

发表于 2006-9-14 14:52:17 | 显示全部楼层
好的!

楼主真的很厉害啊!祝贺你早日能调试出来!!

在调试11楼的电路,那大概的原理 理解的怎么样?

有高手指点吗?

我得天线是我自己绕制的,直径4cm,没有进行测量电感值(没有仪器啊)!

但是通过调节外围的电容能够得到125k的载波信号!



我再仔细检查我得外围电路,看一下我得电路PCB图,看有什么问题?



U1 :MEGA48

U2: EM4095

J1: 天线接口

J4: ISP下载线!

其他的为电阻,电容





至于购买成品或开发板,我现在还没有那个经济能力呢!呵呵!




-----此内容被wch2002于2006-09-14,15:01:18编辑过

出0入0汤圆

发表于 2006-9-14 15:12:56 | 显示全部楼层
这里有款开发板的,不过是2270B的,不知楼上是否用得着

http://sdkh.51.net/xfjch.htm

出0入0汤圆

发表于 2006-9-14 15:18:12 | 显示全部楼层
谢谢18楼提供信息!



小弟不胜感谢!

出0入0汤圆

发表于 2006-9-14 15:35:10 | 显示全部楼层
楼主帮忙看一下这个图,



是否数据头:





旁边有时间标注!



下面的波形是逻辑分析仪捕捉的!



捕捉到11个,而不是9个1


-----此内容被wch2002于2006-09-14,16:09:38编辑过

出0入0汤圆

 楼主| 发表于 2006-9-14 17:36:47 | 显示全部楼层
11个1???你的卡号是多少?如果CustomID的D00,D01是1,就有可能是11个1

现在这张图有点像,500uS/div,没卡的时候用逻辑分析仪应该捕捉不到这么有

规律的跳变吧。



你捕捉2个循环(64bitX2),找出重叠的头部,能找到就OK了

出0入0汤圆

发表于 2006-9-16 00:59:23 | 显示全部楼层
真羡慕你们有示波器啊,想当年做ID读头时,无示波器,无电路图,也没有有程序,正宗的三无.



我只好把市面上的读头,门禁机拆了几个,抄了电路图,参考网上的文章,终于把读头做出来了.



to wch2002 :

  建议你还是先买个成品,这样做程序就方便多了.我记得网上有人在卖十几块钱的模块:)



我也发了个图,见: http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=668043&bbs_id=1000
-----此内容被iccard于2006-09-16,01:15:33编辑过

出0入0汤圆

发表于 2006-9-18 08:46:06 | 显示全部楼层
这两天搞到一个U2270B的模块,连接好电路之后,2270BDE\\的2脚输出端也是有不规则的方波输出,但是当我放卡的时候输出的波形就能看到数据头,我将两个图贴上来,大家帮看一下,是否捕获的是一样的!!

第一个是U2270B捕获得放上卡时的波形:



这个时我EM4095捕获的放卡时候的波形:





我得卡号是: 2841237(十进制)

希望大家给予分析和帮助!!!!谢谢!!

出0入0汤圆

发表于 2006-9-18 14:55:11 | 显示全部楼层
我比较两个波形,应该能够确认图形是卡片的输出数据波形,数据头为11个"1",不知大家的观点怎样的???我认为象whimsy说的那样,可能是CustomID的D00,D01是1,我没有16进制的卡号,不能确认!问一下怎么能有10进制转换为16进制的卡号?

也是和进制转换的那样吗?

我在一篇文章中是这样对曼彻斯特_码进行解码的:

曼彻斯特_码解码方法

  根据曼彻斯特_码的特点,得知曼彻斯特_码中高电平持续的时间有两种情况:半个位周期和一个位周期。高电平持续一个位周期的情况是因为其中前面半个位周期高电平属于前一位逻辑“0”所有,后半个位周期高电平是属于后一位逻辑“1”所有。根据这个特点,我们分析图5示的波形,

首先找一个下跳,然后找一个上跳,目的是确认是否接收到信号(曼彻斯特_码)(原理?????。而后进入一个延时阶段t(延时t大于半个位周期,小于一个位周期)。接着读入信号,它必须是“1”。

那么这个“1”就肯定是数据序列中某一位(如果不是“1”,就从头再来)(为什么??)。

接下来就是找该位“1”的下跳,找到之后又延时t,继续读入下一位数据。重复找跳变和延时的操作,就可以正确地读出曼彻斯特_码序列。由于H4001在电磁场中是连续循环地输出它的信息的,为了确保完全读入卡上64位的信息,我们每张卡都读128位.

图5的波形:





请大家指教!!!!小弟不甚感激!!!

出0入0汤圆

发表于 2006-9-18 15:16:21 | 显示全部楼层
好东西!谢谢楼主共享。

出0入0汤圆

 楼主| 发表于 2006-9-18 16:10:13 | 显示全部楼层
卡号不对啊,没有CustomeID部分

总的因该是10位16进制数,

如果你已经有U2270B,改改我的程序,先测试

出0入0汤圆

发表于 2006-9-18 16:53:26 | 显示全部楼层
我查了一下低频卡号是4个字节的16进制的数据,我转换了一下,卡号是:002B5A95.

转换为10进制就是2841237(十进制) .

我得U2270B的模块是购买的,用2051作曼码的解调处理经串口按照指定额格式输出数据,

我得波形也是通过示波器连到U2270B的第二脚测到的!!

按照这样的话卡号分析,波形还是不对啊!相邻信号周期在460-520之间的!



可能还是硬件电路问题吧??//

出0入0汤圆

发表于 2006-9-18 16:58:56 | 显示全部楼层
找连续的9个"1",是为了检测到数据的头部.

如果没有得到9个"1",就重新检测.



"我们每张卡都读128位. "这个没什么必要的.

出0入0汤圆

发表于 2006-9-18 17:03:32 | 显示全部楼层
不错的,支持.

出0入0汤圆

 楼主| 发表于 2006-9-18 17:38:28 | 显示全部楼层
回27楼,如果的你卡是RF/64的,那么信号位周期在460-520之间是正确的,



EM4100卡根据技术手册上说明,有5种格式的,Manchester:RF/64,RF/32

BitPhase RF/64,RF32, PSK RF/16



Manchester:RF/64

1/125KHZ=8uS X 64 =512uS



你的u2270B波形捕获的太少了,全部的64bit都采集了才能分析出卡号,

不过你上的图看起来应该是头部了,上一张全部的。



用你的u2270B加上你的AVR电路,修改我的程序,看看读到的卡号是多少?
-----此内容被whimsy于2006-09-18,18:16:33编辑过

出0入0汤圆

 楼主| 发表于 2006-9-18 22:58:00 | 显示全部楼层
11楼的电路已经调试OK,AVR芯片我用ATMega8L,



已经能购读取H4001卡号了,写的功能未做。



这个电路不是我原创的,是我见过的最简单的读写头电路,经过摸索



大约的实现方法如下: 用timer2产生131Khz振荡源,通过L1发射出去,



D1,Q1等组成的检波放大电路将卡返回的曼码送入Mega8L内部比较器



进行整形,通过内部自行编制的曼码解调程序还源RFID码



用我前面给出的示例程序,稍做修改就可以正常工作了,



这个程序可能还有些商业价值,我就不能将源代码上传了。

出0入0汤圆

发表于 2006-9-19 09:52:09 | 显示全部楼层
祝贺楼主调试成功啊!那份喜悦心情一定很不错吧!!!

我也抓紧时间调试,早日很大家分享我得喜悦之情!

言归正传,贴一张捕获64位的图,从这张图上,可以找到重复的数据波形,我计算了一下

每一位周期大约为460-520之间,那么全部64为的时间为:

460*64=29440us. 520*64=33280us.

见图:这是用2270B读卡截的全部数据波形,可以看到重复的波形,



我分析了一下,前两条线之间 应该数据头,9个"1"加custmer ID的前两位"1"(我是这么分析的)!

大家帮助看一下,我分析的是否正确???

我再转换到EM4095,看能否检测到同样的波形,继续努力,这也算是小又收获吧!!!!

-----此内容被wch2002于2006-09-19,09:56:06编辑过



这是4095截图的波形!
-----此内容被wch2002于2006-09-19,10:15:47编辑过

出0入0汤圆

发表于 2006-9-19 16:50:11 | 显示全部楼层
to whimsy:



11楼的电路的读卡距离怎样?图中的三极管是用做反相么?

出0入0汤圆

 楼主| 发表于 2006-9-19 17:34:10 | 显示全部楼层
TO: ICCard,读卡距离不远,大约3-5cm,我觉得已经够可以了





TO: wch2002,你的图太小,你自己根据曼码分析一下,用手工计算的方法

先解出码,配合卡的头部,行、列检验位,就知道对不对了

出0入0汤圆

发表于 2006-9-19 18:47:41 | 显示全部楼层
TO:whimsy



我准备参考你的读卡程序进行测试一下!看看能否读出卡号!



初次接触这方面的知识,慢慢摸索中!!!

出0入0汤圆

发表于 2006-9-21 14:13:59 | 显示全部楼层
TO:whimsy 问一个很简单的问题??



TCNT1作为计数器的时候,可以直接在程序中使用吗?

在头文件中声明时没有定义TCNT1作为一个16位的整体寄存器,而是分为两个8位寄存器TCNT1H和TCNT1L,而在程序中直接这样使用吗??、

         while (((!(RFID_IN))==lastbit)& (TCNT1<20000)) { }                              tcomp=TCNT1;   // 保存计数值           

                 TCNT1=0;       // 计数器清零处理

编译的时候 提示有错误:

undefined symbol'TCNT1'



请问这是什么原因?????    恳请指教???

出0入0汤圆

 楼主| 发表于 2006-9-22 14:31:02 | 显示全部楼层
你的ICCAVR的版本?,我在6.28, 6.31A下编译都能通过

你是不是换了芯片?



注意:

#include <iom32v.h>



在iom32v.h文件中已经定义了TCNT1为integer



/* Timer/Counter 1 */

#define ICR1        (*(volatile unsigned int *)0x46)

#define ICR1L        (*(volatile unsigned char *)0x46)

#define ICR1H        (*(volatile unsigned char *)0x47)

#define OCR1B        (*(volatile unsigned int *)0x48)

#define OCR1BL        (*(volatile unsigned char *)0x48)

#define OCR1BH        (*(volatile unsigned char *)0x49)

#define OCR1A        (*(volatile unsigned int *)0x4A)

#define OCR1AL        (*(volatile unsigned char *)0x4A)

#define OCR1AH        (*(volatile unsigned char *)0x4B)

#define TCNT1        (*(volatile unsigned int *)0x4C)   <=====看这里

#define TCNT1L        (*(volatile unsigned char *)0x4C)

#define TCNT1H        (*(volatile unsigned char *)0x4D)

#define TCCR1B        (*(volatile unsigned char *)0x4E)





IccAVR6.31带的iom32v.h

点击此处下载armok01129418.rar
-----此内容被whimsy于2006-09-22,14:48:17编辑过

出0入0汤圆

发表于 2006-9-23 09:45:46 | 显示全部楼层
to: whimsy



谢谢楼主指点,我是用的芯片是M48,编译器使用的是 CodeVisionAVR,



在这M48的头文件中没有将TCNT1作为整体定义一个变量,下面的是头文件的一部分:



#define WDTCSR (*(unsigned char *) 0x60)

#define CLKPR (*(unsigned char *) 0x61)

#define PRR (*(unsigned char *) 0x64)

#define OSCCAL (*(unsigned char *) 0x66)

#define PCICR (*(unsigned char *) 0x68)

#define EICRA (*(unsigned char *) 0x69)

#define PCMSK0 (*(unsigned char *) 0x6b)

#define PCMSK1 (*(unsigned char *) 0x6c)

#define PCMSK2 (*(unsigned char *) 0x6d)

#define TIMSK0 (*(unsigned char *) 0x6e)

#define TIMSK1 (*(unsigned char *) 0x6f)

#define TIMSK2 (*(unsigned char *) 0x70)

#define ADCL (*(unsigned char *) 0x78)

#define ADCH (*(unsigned char *) 0x79)

#define ADCW (*(unsigned int *) 0x78) // 16 bit access

#define ADCSRA (*(unsigned char *) 0x7a)

#define ADCSRB (*(unsigned char *) 0x7b)

#define ADMUX (*(unsigned char *) 0x7c)

#define DIDR0 (*(unsigned char *) 0x7e)

#define DIDR1 (*(unsigned char *) 0x7f)

#define TCCR1A (*(unsigned char *) 0x80)

#define TCCR1B (*(unsigned char *) 0x81)

#define TCCR1C (*(unsigned char *) 0x82)

#define TCNT1L (*(unsigned char *) 0x84) 《==这里定义的两个8位的变量

#define TCNT1H (*(unsigned char *) 0x85)

#define ICR1L (*(unsigned char *) 0x86)

#define ICR1H (*(unsigned char *) 0x87)

#define OCR1AL (*(unsigned char *) 0x88)

#define OCR1AH (*(unsigned char *) 0x89)

#define OCR1BL (*(unsigned char *) 0x8a)

#define OCR1BH (*(unsigned char *) 0x8b)

#define TCCR2A (*(unsigned char *) 0xb0)

#define TCCR2B (*(unsigned char *) 0xb1)

#define TCNT2 (*(unsigned char *) 0xb2) 《== T2是8位的定义位整体的

#define OCR2A (*(unsigned char *) 0xb3)

#define OCR2B (*(unsigned char *) 0xb4)

#define ASSR (*(unsigned char *) 0xb6)

#define TWBR (*(unsigned char *) 0xb8)

#define TWSR (*(unsigned char *) 0xb9)

#define TWAR (*(unsigned char *) 0xba)

#define TWCR (*(unsigned char *) 0xbc)

#define TWDR (*(unsigned char *) 0xbb)

#define TWAMR (*(unsigned char *) 0xbd)

#define UCSR0A (*(unsigned char *) 0xc0)

#define UCSR0B (*(unsigned char *) 0xc1)

#define UCSR0C (*(unsigned char *) 0xc2)

#define UBRR0L (*(unsigned char *) 0xc4)

#define UBRR0H (*(unsigned char *) 0xc5)

#define UDR0 (*(unsigned char *) 0xc6)



我在头文件中进行定义:#define TCNT1        (*( unsigned int *)0x84)

编译能通过,但是不知硬件能否识别???



点击此处下载armok01129455.txt

出0入0汤圆

发表于 2006-9-23 09:59:37 | 显示全部楼层
请教各位,我是用89c2051通过U2270B读取EM卡,可以读取厚卡(EM)卡号,却读不出薄卡(EM)卡号,是不是薄卡的信号更弱,还是其他什么原因?还有如何提高灵敏度,现在我的实验板接触距离仅仅只有1CM?
-----此内容被enjoy16于2006-09-23,10:07:13编辑过

出0入0汤圆

发表于 2006-9-23 10:39:38 | 显示全部楼层
to:enjoy16

你好!问你一下,你的2270的2脚在没有卡的时候,有波形输出吗?



你的问题,薄卡的线圈少,电磁感应弱,所以不能进行读卡了!至于提高灵敏度,我也不没有进行测试呢!

我是用em4095作呢,但是出现一下问题,还在调试中!

出0入0汤圆

发表于 2006-9-23 10:53:58 | 显示全部楼层
to:wch2002

因为我没有使用示波器,所以不能观察到波形,我是通过串口接收的数据来推测波形的,没有卡的时候,也能收到数据,但和有卡的时候相比数据比较小且没有规律.

出0入0汤圆

 楼主| 发表于 2006-9-23 11:03:47 | 显示全部楼层
TO:wch2002



CodeVisionAVR的编译环境我没用过,按照语法,你改的应该可以

你在调试的时候注意I/O的管脚定义,方向等

如果读不出卡号,调整tcomp范围值,我的程序

半位: tcomp>1500 & tcomp<2500   

全位: tcomp>3000 & tcomp<5000

U2270B的频率大约在130Khz

出0入0汤圆

发表于 2006-9-23 14:09:11 | 显示全部楼层
to enjoy16

薄卡和异型卡的读卡距离比厚卡短得多,你可以先用厚卡测试,不断提高读卡距离,直到>10cm,那么其它卡就比较好读了

出0入0汤圆

发表于 2006-9-25 11:22:15 | 显示全部楼层
我在调试的时候,我将tcomp范围值给缩小了!



因为我的频率是126K,



在WHILE的死循环中直接调用void R_H4001()    函数!

我是一直让程序处于读卡状态,



但是还是没有读出数据!有什么问题吗???、/

出0入0汤圆

发表于 2006-9-25 12:39:06 | 显示全部楼层
先把校验的代码去掉试试.

不同的解码电路,曼码的跳变方向可能不一样,把输入端反向或在程序中把电位反向试一下.

出0入0汤圆

 楼主| 发表于 2006-9-25 17:19:03 | 显示全部楼层
TO: wch2002

你的频率126KHz,比我的低,tcomp的时间范围应该加大才对啊!

我的程序是配合U2270B的,它的内部输出就是反向的,

问题可能还是在天线,你的AVR与u2270B硬件是怎么接的,

我有空的时候给你改个程序测试





还有,你是怎么验证读卡是否成功?通过232传到PC?

还是像我的程序中用的Beep先做个提示?



如果用232,主程序开始部分加入上传个随便什么字符,

比如"OK",以确认通讯部分的代码设置是正确的



如果用beep,让程序开机时响几声.






-----此内容被whimsy于2006-09-25,17:32:25编辑过

出0入0汤圆

发表于 2006-9-26 09:16:43 | 显示全部楼层
有谁能告诉我,怎么提高读卡距离啊?

出0入0汤圆

发表于 2006-9-27 08:22:36 | 显示全部楼层
to: whimsy  



谢谢 指点,这两天在忙着划一个电路图了,还没有来得及调试呢!

还是直接在用我4095调试呢,没有用U2270B,

等划完这个电路图,在按你说那种方法调试一下!!



to:enjoy16

不知你的载频的频率是多少?



提高天线的载频的精度(125k),是一种提高读卡距离的方法!



还有现全的直径大小,根据理论分析,最佳的线圈直径应该与读卡距离相等!



你在试一试!!

出0入0汤圆

 楼主| 发表于 2006-9-28 21:37:03 | 显示全部楼层
TO:wch2002



根据U2270B的内部原理框图看得出,输出是反相的,EM4095看不到,

如果你用我的程序接EM4095测试,可能要注意高低电平的问题,

要将数组的比特流进行反相.

出0入0汤圆

发表于 2006-9-29 13:40:42 | 显示全部楼层
whimsy,用捕获功能做过读卡不?

出0入0汤圆

 楼主| 发表于 2006-9-29 19:43:02 | 显示全部楼层
TO:icecool,没有



目前对单片机的捕获功能的应用概念比较模糊,

不知道什么情况下用捕获功能比较好。

出0入0汤圆

发表于 2006-9-30 13:16:26 | 显示全部楼层
捕获用宽度来解manchester编码非常方便.就相当于不用定时器来计数了,还有问你一下,你代码里面用的定时器时钟是采用的RF芯片的同步时钟,还是自己估算的?

出0入0汤圆

 楼主| 发表于 2006-9-30 21:35:10 | 显示全部楼层
可能捕获功能对于多任务的时候比较好用,不用让程序花长时间的等候跳变



你说的定时器时钟,是不是说信号跳变时的周期值(TCNT1的计数值)?



因为没法用到RF芯片的同步时钟,只能通过跳变找到9个1的数据同步头,



才能确定后面的ID码,tcomp的中间值通过计算可以得到,范围取值通过



采样多个跳变信号或在测试过程中确定

出0入0汤圆

发表于 2006-10-14 07:56:43 | 显示全部楼层
请问,韦根通讯输出,他的通讯包结构是怎样的啊?

出0入0汤圆

 楼主| 发表于 2006-10-16 20:43:54 | 显示全部楼层
韦根码大致如下,硬件通讯上占用两个I/O线:



1 2             9 10                           25 26

X X X X X X X X X X X X X X X X X X X X X X X X X X        二进制         



第1位为2—13位的偶校验位

第2—9位对应与电子卡HID码的低8位

第10-25位对应电子卡的PID号码

第26位为14-25位的奇校验位



这26位数据在读出器的韦根输出线D0,D1上输出。

D0,D1在没有数据输出时都保持+5V高电平。若输出为0,则D0拉低一段时间,若输出为1,则D1拉低一段时间。如图:





具体的在网络上找,很多的。

出0入0汤圆

 楼主| 发表于 2006-10-16 20:45:39 | 显示全部楼层
To: 阿莫



    此贴如何在“非接触IC卡/条码/磁卡”分类中检索得到?

出0入0汤圆

发表于 2006-10-19 16:46:59 | 显示全部楼层
谢谢

出0入0汤圆

发表于 2007-1-15 14:31:06 | 显示全部楼层
我有U2270出售,售价7.5元一片,有兴趣联系我SDMTR@126.COM 13428734779

出0入0汤圆

 楼主| 发表于 2007-1-15 20:14:00 | 显示全部楼层
用Mega8,配合11楼的电路,还不到7.5元,直接从串口出来的就是解过的ID码

出0入0汤圆

发表于 2007-1-15 20:58:43 | 显示全部楼层
楼上的大虾有你说的完整电路没?我做毕业设计用到这个,2270b不好买,在线等。先谢谢了

出0入0汤圆

 楼主| 发表于 2007-1-15 22:35:04 | 显示全部楼层
好,上个PDF及protel sch文件

点击此处下载armok01141678.rar


-----此内容被whimsy于2007-01-15,22:36:04编辑过

出0入0汤圆

 楼主| 发表于 2007-3-14 20:44:25 | 显示全部楼层
用分立电路配合Mega8进行只读RFID卡的ID号读取,想做成范例板,不知道阿莫大哥有没有兴趣?

出0入0汤圆

发表于 2007-4-12 21:09:26 | 显示全部楼层
好主意啊!非常好!希望能够做出范例!!

出0入0汤圆

 楼主| 发表于 2007-4-12 22:26:40 | 显示全部楼层
板已经画好,正在等外壳,



PCB是从USBasp的PCB改过来的,增加RFID,MAX232



出0入0汤圆

发表于 2007-4-13 00:00:11 | 显示全部楼层
支持,楼主辛苦啊。

会公开代码吗?

出0入0汤圆

发表于 2007-4-13 06:57:01 | 显示全部楼层
一看pcb,怎么这么多元件,楼主辛苦

出0入0汤圆

 楼主| 发表于 2007-4-13 12:11:26 | 显示全部楼层
RFID部分的元件不多,拿到手你知道不元件不多了,主要是保留了USBasp的功能,

尽量不要浪费资源,为了在单面板上完成,花了点心思

既然是范例,当然是要考虑开放代码了,拿到手你知道不元件不多了

出0入0汤圆

 楼主| 发表于 2007-4-13 12:35:13 | 显示全部楼层
protel虚拟的3D效果,又高手说protel的3D图是垃圾,将就的看,



出0入0汤圆

发表于 2007-4-26 10:09:28 | 显示全部楼层
问一下61楼

天线接在哪里啊???

在图上看不到接天线的位置啊。

还有这个天线是怎么计算的?

谢谢了.

出0入0汤圆

 楼主| 发表于 2007-4-26 11:52:18 | 显示全部楼层
L1 1.35mH就是天线了,空心线圈就是天线了,收发共用

出0入0汤圆

发表于 2007-5-28 22:32:25 | 显示全部楼层
前辈们,有没有谁是用U2270B然后W26输出的啊?我想看看正确读卡时候的示波器波形,可以嘛?拜托拉~(最好还有晶振的波形)

出0入0汤圆

发表于 2007-6-2 00:34:29 | 显示全部楼层
好东西哦。收下。

出0入0汤圆

发表于 2007-6-3 08:31:32 | 显示全部楼层
to whimsy:

请问,作到什么进度了

出0入0汤圆

发表于 2007-6-4 15:14:05 | 显示全部楼层
关注中,怎么好象没了动静

出0入0汤圆

发表于 2007-6-5 07:24:54 | 显示全部楼层
网站上好像还没有这方面的范例,期待中~~~~~

出0入0汤圆

发表于 2007-6-16 11:25:14 | 显示全部楼层
顶。。

出0入0汤圆

发表于 2007-6-16 11:51:03 | 显示全部楼层
请问:用timer2产生131Khz振荡源  怎么实现啊???

出0入0汤圆

 楼主| 发表于 2007-6-17 15:31:25 | 显示全部楼层
我是这么实现的:

ATmega8@6MHz的情况,OC2输出通往分立电路天线



//TIMER2 initialize - prescale:1

// WGM: CTC

// desired value: 250.1KHz

// actual value: 250.000KHz (0.0%)

void timer2_init(void)

{

TCCR2 = 0x00; //stop

ASSR  = 0x00; //set async mode

TCNT2 = 0xE9; //setup

OCR2  = 0x17;

TCCR2 = 0x19; //start

}





读卡的电路都已经完成了,前段时间想用读写卡做签到之类的系统,

也做差不多,突然江苏的朋友叫我过去参与一个项目,前2天到江苏,

刚回来,现在这些东西都要暂停了,



其实玩这个范例,关键是动手去做,实现的方法在上面都讲的很白了,



签到的方案:

  射频部分采用分立电路,

  显示部分采用ST7920中文LCD

  RTC采用DS1302

  数据备份用AT24C256,每条记录暂定16字节,可以保存2048条记录

  远程通讯用SP490E, RS485全双工

  外壳用公模的

出0入0汤圆

发表于 2007-6-17 20:48:32 | 显示全部楼层
感谢 whimsy

顶。。。。

出0入0汤圆

发表于 2007-8-6 17:13:45 | 显示全部楼层
哈哈,都是高手啊,学习了,我这里可以长期供应 EM4095/U2270B的芯片,价格好说!

另也有高频的: MFRC500/MFRC530/MFRC531/CLRC632/SLRC400等射频芯片出售,

欢迎有需要的朋友联系!



  直线:0755-21969052 詹先生

  MSN/Email: ic273989784@hotmail.com

出0入0汤圆

发表于 2007-11-29 17:04:35 | 显示全部楼层
我在网上找到一个关于4095的程序,(网上的)我发出来大家可以看看,我还没有完全看懂。
点击此处下载ourdev_183894.zip(文件大小:4K)

出0入0汤圆

发表于 2007-11-30 09:49:33 | 显示全部楼层
采用捕获就行了

出0入0汤圆

发表于 2007-11-30 11:16:23 | 显示全部楼层
里面有些函数和变量没有好像没有定义比如:setup_ccp1(CCP_CAPTURE_RE)、T1_EXTERNAL \T1_DIV_BY_1   等等,不知道什么意思。请看了程序的,能不能稍稍讲解一下。


还有cocalli说的那个协议到底是指什么呢?曼码?还是其他什么?

出0入4汤圆

发表于 2007-11-30 12:52:35 | 显示全部楼层
不用基站的办法好,关注中,我也想做个这样的读卡器

出0入0汤圆

发表于 2007-11-30 18:50:50 | 显示全部楼层
采用捕获解曼码

出0入0汤圆

 楼主| 发表于 2007-12-1 23:04:26 | 显示全部楼层
TO: ICECOOL

用捕获解曼码,应该只能针对基站芯片输出的曼码进行解调,如果是分立的电路,就不行了,最起码分立电路要加个比较器

出0入0汤圆

发表于 2007-12-20 17:19:56 | 显示全部楼层
卡号是主动传回来的.若想读写卡内容,可以像无线通讯那样在载波上加信号来实现么?就只是用分立元件??

还有,用贴片的器件与分立的有什么区别?

出0入0汤圆

 楼主| 发表于 2007-12-22 11:06:07 | 显示全部楼层
有关写卡的,你可以查看TK5550卡的手册,

不是在载波上加信号,而是利用载波的通断间隔时间来确定指令是1,或0,对时隙有要求。

出0入0汤圆

发表于 2007-12-24 18:46:25 | 显示全部楼层
请问 读卡慢的问题要怎样解决??

EM4095和mega32做的读卡器,要好一会才能读出数据。

出0入0汤圆

 楼主| 发表于 2007-12-24 19:13:38 | 显示全部楼层
不会慢,一秒可以读多次,我倒是觉得太快了,程序中还要做延时处理.

你自己可以算一下,125KHz, RF/32或RF/64,不算慢.

出0入0汤圆

发表于 2007-12-27 22:06:53 | 显示全部楼层
我调试的时候在主循环的时候一直检测读卡,每次发出来的数据时间间隔不相等。还有就是在检测数据头的时候错误率比较高。不知道有没有解决方法,或者是本来就会出现那种情况??

出0入0汤圆

 楼主| 发表于 2007-12-27 23:14:44 | 显示全部楼层
先接收位数据到缓冲再进行解码,缓冲区存储2-3倍的位数据量,这样就可以避免误码,时间间隔比较接近。

出0入0汤圆

发表于 2008-1-21 16:59:07 | 显示全部楼层
在EM4095激活后30ms内就应该检测到数据,不知道为什么有时候很长时间都检测不到头(》60ms),这种情况应该是有问题的,不知道会是什么原因呢?还请大家指点一下。

出0入0汤圆

发表于 2008-1-21 17:00:56 | 显示全部楼层
在EM4095激活后30ms内就应该检测到数据,不知道为什么有时候很长时间都检测不到头(》60ms),这种情况应该是有问题的,不知道会是什么原因呢?还请大家指点一下。

出0入0汤圆

 楼主| 发表于 2008-1-25 14:08:17 | 显示全部楼层
用示波器或频率看看125KHz振荡是否正常,如果频率低,说明失锁

出0入0汤圆

发表于 2008-4-25 23:00:27 | 显示全部楼层
求救:
    EM4100我读出的卡号总是跟卡表面印的卡号不一致
   
请问各位谁能告诉我4100输出的卡号顺序是 9个1 ,后是 40位卡号 ,再后是 10位行偶校验 ,再是 4 位列校验 ,最后 1个停止位0吗???
    我拿示波器抓了波形,应该能确定是曼切斯特_码输出的
    周期是512us,中间跳变,能看了重复的波形,64位重复一次

出0入0汤圆

发表于 2008-5-2 17:58:43 | 显示全部楼层
求救:
   谁能帮我读下波形
   我读了32楼的波形

(原文件名:armok01129059.jpg)
   我读出来的是:111111111
                     11101
                     01111
                     11100
                     11111
                     11001
                     00010
                     11001
                     11000
                     00000
                     01110
                     00110
我的读法是:
                    256us
                    |---|____|  =>0

                    256us
                    |___|----|  =>1
大哥们指点下哪读错了??

出0入0汤圆

 楼主| 发表于 2008-5-3 20:30:43 | 显示全部楼层
11100 ,从第三行开始就错了

出0入0汤圆

 楼主| 发表于 2008-5-3 20:47:13 | 显示全部楼层
第四行,波形明显不符合协议要求
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 04:36

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

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