搜索
bottom↓
123
返回列表 发新帖
楼主: rainbow

MEGA8-T2-CTC产生125KHz方波,ICP中断方式读125KHz的RFID卡(EM4100系列)成功,发贴祝贺!

  [复制链接]

出0入0汤圆

发表于 2012-5-13 14:50:28 | 显示全部楼层
确实新论坛还不能下载

出0入0汤圆

发表于 2012-5-23 17:08:32 | 显示全部楼层
不能下载,就是不爽呀。

出0入0汤圆

发表于 2012-5-23 22:51:16 | 显示全部楼层
顶一下!!

出0入0汤圆

发表于 2012-6-1 02:14:08 | 显示全部楼层
按照楼主电路和程序做出来,串口只收到“RFID Card Reader”的字符,没有读出卡号,不懂哪里有问题 。单片机已经成功产生125K方波

出0入0汤圆

发表于 2012-6-2 01:09:04 | 显示全部楼层
LZ您好!为什么我完全按照你的电路和程序,用示波器观察已经输出一定的编码,但是就是单片机采样不到ID卡号呢?

出0入0汤圆

发表于 2012-6-3 18:32:39 | 显示全部楼层
本帖最后由 wjzh 于 2012-6-3 18:34 编辑

我完全按照楼主的电路和程序,串口不断收到以下信息,请教各位高手指点指点,为什么一直收到这行代码而已。我确定输入捕获引脚已经有返回的曼彻斯特码了(ID卡号)
程序如下
//包含所需头文件
#include <avr/io.h>
#include <avr/interrupt.h>

/*------宏定义------*/
#define BIT(x)        (1<<(x))

void put_c(unsigned char dat);
void put_s(unsigned char *dat,unsigned char enter);
void find_start(void);

volatile unsigned char bit_array[256];
volatile unsigned char test_end = 0;

//端口初始化
void port_init(void)
{
         PORTB = 0x00;
         DDRB  = 0x08;
         PORTC = 0x00;
         DDRC  = 0x00;
         PORTD = 0x03;
         DDRD  = 0x02;
}

//定时T1初始化
void timer1_init(void)
{
         TCCR1B = 0x00;//停止定时器
         TIMSK |= 0x20;//中断允许
         TCNT1H = 0xFF;
         TCNT1L = 0xF8;//初始值
         TCCR1A = 0x00;
         TCCR1B = 0xC5;//启动定时器
}


//定时器T1输入捕捉中断服务程序
ISR(TIMER1_CAPT_vect)
{
         volatile unsigned char tr = 0;
         static unsigned char bit_no = 0;
         static unsigned char one_time = 0;
         TCCR1B = 0;
         TCNT1 = 0;
         if(ICR1 > 6)
         {
                 bit_no = 0;
         }
         if(test_end == 0)
         {
                 if(tr == 1)
                 {
                         bit_array[bit_no] = 1;
                         bit_no++;
                         if(bit_no == 0)
                         {
                                 test_end = 1;
                         }
                         if(ICR1L > 4)
                         {
                                 bit_array[bit_no] = 1;
                                 bit_no++;
                                 if(bit_no == 0)
                                 {
                                         test_end = 1;
                                 }
                         }
                         TCCR1B = 0xC5;        //上升沿触发
                         tr = 0;
                 }
                 else
                 {
                         bit_array[bit_no] = 0;
                         bit_no++;
                         if(bit_no == 0)
                         {
                                 test_end = 1;
                         }
                         if(ICR1L > 4)
                         {
                                 bit_array[bit_no] = 0;
                                 bit_no++;
                                 if(bit_no == 0)
                                 {
                                         test_end = 1;
                                 }
                         }
                         TCCR1B = 0x85;        //下降沿触发
                         tr = 1;
                 }
         }
}

//定时器T2初始化
void timer2_init(void)
{
         TCCR2  = 0x00;//停止定时器
         ASSR   = 0x00;//异步时钟模式
         TCNT2  = 0x00;//初始值
         OCR2   = 0x2B;//匹配值
         TIMSK |= 0x00;//中断允许
         TCCR2  = 0x19;//启动定时器
}

//串口通信初始化
void usart_init(void)
{
         UCSRB = 0x00;//禁止中断
         UCSRA = 0x00;
         UCSRC = BIT(URSEL) | 0x06;
         UBRRL = 0x05;
         UBRRH = 0x00;
         UCSRB = 0x98;
}

void put_c(unsigned char dat)
{
         while(!(UCSRA & (1 << UDRE)));
         UDR = dat;
}

void put_s(unsigned char *dat,unsigned char enter)
{
         while(*dat)
         {
                 put_c(*dat);
                 dat++;
         }
         if(enter == 1)
         {
                 put_c(0x0d);
                 put_c(0x0a);
         }
}

void put_long(unsigned long dat)
{
         unsigned long temp = 1000000000;
         unsigned char i = 0;
         unsigned char out = 0;
         for(i = 0;i < 10;i++)
         {
                 out = dat / temp;
                 dat %= temp;
                 temp /= 10;
                 put_c(out + 48);
         }
//        out = dat % temp;
//        put_c(out + 48);
}

void init_devices(void)
{
         cli(); //禁止所有中断
         MCUCR  = 0x00;
         MCUCSR = 0x80;//禁止JTAG
         GICR   = 0x00;
         port_init();
         timer1_init();
         timer2_init();
         usart_init();
         sei();//开全局中断
}
//主函数
int main(void)
{
         unsigned char i = 0;
         init_devices();
         //在这继续添加你的代码
         put_s("RFID Card Reader",1);
         while(1)
         {
                 if(test_end == 1)
                 {
                         decode();
                         test_end = 0;
                 }
         }
         return 0;
}

void decode(void)
{
         unsigned char i,j,k;
         unsigned char id_code[11] = {0,0,0,0,0,0,0,0,0,0,0};
         unsigned char col_parity = 0;
         unsigned char row_parity = 0;
         unsigned char temp = 0;
         unsigned char start_data[20] = {1,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1};
         unsigned long rfid = 0;
         for(i = 0;i < 128;i++)
         {
                 for(j = 0;j < 20;j++)
                 {
                         if(bit_array[i+j] != start_data[j])
                         {
                                 break;
                         }
                 }
                 if(j == 20)
                 {
                         put_s("",1);
                         put_s("Find RFID Card.",1);
                         i += 20;
                         for(k = 0;k < 11;k++)
                         {
                                 row_parity = 0;
//                                读出五位数据
                                 temp = 0;
                                 for(j = 0;j < 5;j++)
                                 {
                                         temp <<= 1;
                                         if((bit_array == 0) && (bit_array[i+1] == 1))
                                         {
                                                 temp |= 0x01;
                                                 if(j < 4)
                                                 {
                                                         row_parity += 1;
                                                 }
                                         }
                                         else if((bit_array == 1) && (bit_array[i+1] == 0))
                                         {
                                                 temp &= 0xfe;
                                         }
                                         else
                                         {
                                                 return;
                                         }
                                         i += 2;
                                 }
                                 id_code[k] = (temp >> 1);
                                 temp &= 0x01;
                                 row_parity %= 2;
                                 if(k < 10)
                                 {
                                         if(row_parity != temp)
                                         {
                                                 return;
                                         }
                                 }
                                 else
                                 {
                                         if(temp != 0)
                                         {
                                                 return;
                                         }
                                 }
                         }
                         if(k == 11)
                         {
                                 put_s("ID Card :",0);
                                 for(j = 2;j < 10;j++)
                                 {
                                         rfid += (((unsigned long)(id_code[j])) << (4 * (9 - j)));
                                 }
                         }
                         put_long(rfid);
                         return;
                 }
         }
}

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-6-3 22:39:00 | 显示全部楼层
以上是因为看门狗忘了关了,导致单片机一直复位。现在关掉看门狗后现在ID卡靠近串口得到以下数据,暂时不懂什么原因没读出数据

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2012-6-4 02:08:32 | 显示全部楼层
请问以下代码功能是什么,谁能帮我解释一下。
for(k = 0;k < 11;k++)
                         {
                                 row_parity = 0;
//                                读出五位数据
                                 temp = 0;
                                 for(j = 0;j < 5;j++)
                                 {
                                         temp <<= 1;
                                         if((bit_array == 0) && (bit_array[i+1] == 1))
                                         {
                                                 temp |= 0x01;
                                                 if(j < 4)
                                                 {
                                                         row_parity += 1;
                                                 }
                                         }
                                         else if((bit_array == 1) && (bit_array[i+1] == 0))
                                         {
                                                 temp &= 0xfe;
                                         }
                                         /*else
                                         {
                                                return;
                                         }*/
                                         i += 2;
                                 }
                                 id_code[k] = (temp >> 1);
                                 temp &= 0x01;
                                 row_parity %= 2;
                                 if(k < 10)
                                 {
                                         if(row_parity != temp)
                                         {
                                                 return;
                                         }
                                 }
                                 else
                                 {
                                         if(temp != 0)
                                         {
                                                 return;
                                         }
                                 }
                         }
                         if(k == 11)
                         {
                                 put_s("ID Card :",0);
                                 for(j = 2;j < 10;j++)
                                 {
                                         rfid += (((unsigned long)(id_code[j])) << (4 * (9 - j)));
                                 }
                         }

出0入0汤圆

发表于 2012-6-14 16:48:55 | 显示全部楼层
楼上的好多菜鸟,虽然我也是菜鸟一枚,
不知道楼主每个元器件的参数是如何算出来的,
谁知道的讲解一下,这可是个大学问,
最近在研究这个。

出0入0汤圆

发表于 2012-6-14 16:51:11 | 显示全部楼层
不知道楼主每个元器件的参数是如何算出来的,
楼主能讲解下吗?特别是最后一个用作比较器的,怎么看不懂啊

出0入0汤圆

发表于 2012-7-11 10:41:54 | 显示全部楼层
好呀 学习下

出0入0汤圆

发表于 2012-7-15 00:02:37 | 显示全部楼层
这个读卡距离能够到5CM呀,太历害了。

出0入0汤圆

发表于 2012-7-29 18:07:21 | 显示全部楼层
学习中一下

出0入0汤圆

发表于 2012-7-30 11:18:20 | 显示全部楼层
mark,好东西

出0入0汤圆

发表于 2012-7-30 15:06:54 | 显示全部楼层
   mark!!!!

出0入135汤圆

发表于 2012-8-31 14:49:41 | 显示全部楼层
能否讲解一下检波电路,也就是lm358前面的电路?或者有各个点的波形供学习一下,非常感谢

出0入0汤圆

发表于 2012-11-10 19:42:33 | 显示全部楼层
老陈,你好。想请教你下,能私聊吗?

出0入0汤圆

发表于 2012-11-10 19:47:39 | 显示全部楼层
我加你QQ

出0入0汤圆

发表于 2012-12-20 15:41:09 | 显示全部楼层
RFID收录下

出0入0汤圆

发表于 2013-1-2 13:41:22 | 显示全部楼层
学习了,好东西!

出0入0汤圆

发表于 2013-4-19 14:18:11 | 显示全部楼层
好东西,学习学习! 125K ID卡

出0入0汤圆

发表于 2013-5-30 16:52:45 | 显示全部楼层
RFID! mark!

出0入0汤圆

发表于 2013-6-9 09:43:48 | 显示全部楼层
这个值得学习啊!!

出0入0汤圆

发表于 2013-6-17 18:02:57 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2013-8-6 03:02:47 | 显示全部楼层
好多人讨论啊!很好的资料,收藏了!

出0入0汤圆

发表于 2013-8-6 08:59:36 | 显示全部楼层
强大!顶一下。。

出0入0汤圆

发表于 2013-8-26 23:26:13 | 显示全部楼层
电感345uH,电容值在多大范围内可调?我的距离太短了

出0入0汤圆

发表于 2013-8-27 14:36:42 | 显示全部楼层
本帖最后由 673104326 于 2013-8-27 15:24 编辑

mark 一下, L1 应该就是 天线 了吧。。。。。。

出0入0汤圆

发表于 2013-8-30 22:08:11 | 显示全部楼层
线圈的发射功率除了谐振电容外,还有别的因素么?我用的是3.3V的电源,距离很近 几乎是挨着线圈了诶

出0入0汤圆

发表于 2013-10-12 17:36:25 | 显示全部楼层
按照这样的程序来做了,但是都不出卡号,做成功的大侠门,你们得程序是怎么样的?有改动的吗?

出0入0汤圆

发表于 2013-10-13 23:00:00 | 显示全部楼层
这个帖子不错 顶一下

出0入0汤圆

发表于 2013-10-14 09:16:23 | 显示全部楼层
mark
                                             

出0入0汤圆

发表于 2013-10-14 10:52:13 来自手机 | 显示全部楼层
chinamanzhong 发表于 2010-1-6 21:05
mark

手机记号一次哦

出0入0汤圆

发表于 2013-10-24 07:59:23 | 显示全部楼层
RFID,mark!

出0入0汤圆

发表于 2013-10-24 09:17:47 | 显示全部楼层
谢谢,学习一下。

出0入0汤圆

发表于 2013-11-9 18:42:35 | 显示全部楼层
MARK,太感谢了

出0入0汤圆

发表于 2013-11-18 09:53:00 | 显示全部楼层
特别想学这个

出0入0汤圆

发表于 2013-11-21 12:10:28 | 显示全部楼层
记号下,不错。

出0入0汤圆

发表于 2013-11-30 16:50:45 | 显示全部楼层
前两位应该是厂商ID吧?

出0入0汤圆

发表于 2013-12-1 11:58:35 | 显示全部楼层
不错啊 谢了

出0入0汤圆

发表于 2013-12-1 19:30:17 | 显示全部楼层
做个记号

出0入0汤圆

发表于 2013-12-3 02:42:36 | 显示全部楼层
andy 发表于 2011-2-5 16:35
//包含所需头文件
// ATMEGA8 16MHz
#include

还好你的程序有注释,容易看多了!!

出0入0汤圆

发表于 2013-12-7 17:06:00 | 显示全部楼层
我也来mark

出0入0汤圆

发表于 2013-12-18 17:33:13 | 显示全部楼层
严重感谢!

出0入0汤圆

发表于 2013-12-21 20:00:28 | 显示全部楼层
mARK MARK  MARK MARK再回来看看ICP

出0入0汤圆

发表于 2014-5-30 11:23:01 | 显示全部楼层
不错,谢谢分享

出0入0汤圆

发表于 2014-5-31 16:54:27 | 显示全部楼层
路过支持楼主。。。

出0入0汤圆

发表于 2014-6-29 11:01:49 | 显示全部楼层
谢谢,学习了。

出0入0汤圆

发表于 2014-6-29 11:19:37 | 显示全部楼层
myjnj 发表于 2008-9-7 22:14
楼主帮忙扫扫盲,就是读取的流程是什么:
发送125.673KHz信号-->RFID感应到电流--> ..............
用ICP1捕 ...

同感。。。。

出0入0汤圆

发表于 2014-6-29 19:27:21 | 显示全部楼层
学习,谢谢!

出0入0汤圆

发表于 2014-8-8 10:27:53 | 显示全部楼层
mark 学习了

出0入0汤圆

发表于 2014-8-9 22:52:02 | 显示全部楼层
老帖了,mark一下

出0入0汤圆

发表于 2014-8-15 10:27:40 | 显示全部楼层
whimsy 发表于 2008-12-31 09:35
13M的你要省钱,就用FM1702SL,比飞利浦的便宜,整个范例电路都有

今天看到一个电路没有用芯片,就是用分立元件弄了个13.56Mh的

出0入0汤圆

发表于 2014-10-26 14:16:38 | 显示全部楼层
看看学习下

出0入0汤圆

发表于 2014-10-26 16:38:55 | 显示全部楼层
mark。。。

出0入0汤圆

发表于 2014-10-30 11:22:15 来自手机 | 显示全部楼层
make一下

出0入0汤圆

发表于 2014-11-24 10:11:03 | 显示全部楼层
学习了。

出0入0汤圆

发表于 2014-11-25 08:08:12 | 显示全部楼层
对于线圈有要求吗?

出0入0汤圆

发表于 2014-12-2 12:29:05 | 显示全部楼层
厉害!学习了

出0入0汤圆

发表于 2014-12-5 09:08:24 | 显示全部楼层
mark~~~~~~~~~~~~

出0入0汤圆

发表于 2014-12-5 09:42:50 | 显示全部楼层
嗯,不错啊,收藏

出0入0汤圆

发表于 2015-4-24 09:29:16 | 显示全部楼层
好东西!mark!

出0入0汤圆

发表于 2015-5-20 15:58:28 | 显示全部楼层
好东西 学习

出0入0汤圆

发表于 2015-6-15 11:06:38 | 显示全部楼层
好东西,最近准备动手做了

出0入4汤圆

发表于 2015-9-10 17:01:51 来自手机 | 显示全部楼层
markmarkmark

出0入4汤圆

发表于 2015-9-10 17:12:45 来自手机 | 显示全部楼层
markmarkmark

出50入0汤圆

发表于 2015-9-23 11:21:13 | 显示全部楼层
这个方案可以写卡吗?

出0入0汤圆

发表于 2015-11-17 13:46:23 | 显示全部楼层
good  !               

出0入0汤圆

发表于 2018-4-12 15:50:47 | 显示全部楼层
mark!!!!

出0入0汤圆

发表于 2018-5-2 19:12:13 | 显示全部楼层
收藏 学习

出0入0汤圆

发表于 2018-5-2 20:27:20 | 显示全部楼层
这个属于高频调制么,我怎么感觉和硬件关系不大啊

出0入0汤圆

发表于 2018-5-7 15:50:19 | 显示全部楼层
门禁卡  哈哈

出0入0汤圆

发表于 2018-5-8 18:00:07 | 显示全部楼层
门禁卡,mark

出0入0汤圆

发表于 2018-6-4 15:16:02 | 显示全部楼层
好贴,有学习价值

出0入0汤圆

发表于 2018-9-19 22:46:44 | 显示全部楼层
谢谢楼主的分享!

出0入0汤圆

发表于 2019-4-17 16:52:20 | 显示全部楼层
MARK!谢谢分享

出0入0汤圆

发表于 2019-10-8 18:47:18 | 显示全部楼层
已收藏了,慢慢学习

出0入0汤圆

发表于 2019-10-9 10:19:00 | 显示全部楼层
记号,好东西,rfid,!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-25 20:02

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

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