搜索
bottom↓
回复: 19

分立元件读卡模块读取4100卡成功,求酷!,但不能在改进下读取T5557,求助!谢谢!

[复制链接]

出0入0汤圆

发表于 2012-2-18 11:25:46 | 显示全部楼层 |阅读模式
使用C51,读卡函数读取4100没问题,就是125K输出没问题,曼彻斯特解码没问题!而读写T5557又如何改进呢?以下是本人修改接收T5557的程序,请高手多给意见!谢谢!

void gap(uint titemp)
{                   
        WAKE_CLKO &= 0xf0;
        TR0=0;
        power=0;
        fctick=0;
        ET1 = 1;
        while(fctick<titemp);
        ET1 = 0;
        power=1;
        TR0=1;
        WAKE_CLKO |= 0x01;
}       
void fcdelay(uint  tick)
{
    fctick=0;
        ET1 = 1;
        while(fctick<tick);
        ET1 = 0;
}  

void WriCode(uchar SendVal,uchar len)
{         
    uchar i;
        for(i=0; i<len; i++)
        {               
            if((SendVal<<i)&0x80)
                {
                     fcdelay(bit1);          //发送数据“1”
                }
            else
                {
                     fcdelay(bit0);          //发送数据“0”
                }   
            gap(Tgap);     
        }
}

void resetCmd(void)                   // 00 reset
{        
        gap(Tstar);                //开始间隙 GAPS:50个场时钟   
        fcdelay(bit0);          //发送数据“0”
        gap(Tgap);
        fcdelay(bit0);          //发送数据“0”  
        gap(Tgap);                  
}  
void stopCmd(void)                   // 11 stop
{        
        gap(Tstar);                //开始间隙 GAPS:50个场时钟   
        fcdelay(bit1);          //发送数据“1”
        gap(Tgap);
        fcdelay(bit1);          //发送数据“1”  
        gap(Tgap);                  
}   
//操作码2+锁定位1+数据位32+地址位3=38
void Read_cmd(uchar opcode,uchar addr)
{         
         gap(Tstar);                //开始间隙 GAPS:50个场时钟
     WriCode(opcode,2);
     WriCode(0,1);          
//     WriCode(data1,8);   
//     WriCode(data2,8);  
//     WriCode(data3,8);  
//     WriCode(data4,8);
     WriCode((addr<<5),3);
}  
     
uchar jtemp=0;
void Read_Card(void)//读卡
{              
     uint i=0;
     uint bits=0;
//         uchar temp=0;
         
         for (i=0;i<33;i++)
         {
         decode=0;
         }   
         data1=0;data2=0;data3=0;data4=0;
         lastbit=0;
         checkin=0;
         half=0;
         i=0;

         if(page==0xc0)
         {
             if(addrtick>2)
                 {
                     addrtick=0;
                         page=0x80;
                 }
         }
         else
         {
             if(addrtick>7)
                 {
                     addrtick=0;
                         page=0xc0;
                 }                     
         }       
         Read_cmd(page,addrtick);     //写时序
         addrtick++;
         for (bits=0;bits<60000;bits++) //读取曼彻斯特_码
         {          
                ET1=1;
                fctick=0;
                while((!Manchester_IN)==lastbit)//   
                {
                        if(fctick>=TIME_OF)
                        {
                                break;//超时退出
                        }
                }
                tcomp=fctick;
                ET1=0;
                TL1 = 0xB8;//9600;
                TH1 = 0xB8;//9600;
                if(tcomp>15)
                {
                        if(checkin)
                        {          
                                if((tcomp>15)&&(tcomp<35))
                                {
                                if (half==1)
                                        {
                                        half=0;
                                            decode=lastbit;
                                            i++;                  
                                        }
                                    else
                                        half=1;       
                                }

                                if((tcomp>40)&&(tcomp<60))
                                {            
                                    if (half==1)
                                        {
                               if (lastbit==0)
                                           {
                                           decode=1;
                                           }
                                       else
                                       {
                                               decode=0;
                                           }
                            }
                                    else
                                        {
                                            i--;
                                        }
                                    i++;
                                    half=1;
                            }  
       
                                if(i>=32)
                                {
                                    i=0;                              
                                    databuf[jtemp*4]=((decode[1]<<7)|(decode[2]<<6)|(decode[3]<<5)|(decode[4]<<4)|(decode[5]<<3)|(decode[6]<<2)|(decode[7]<<1)|(decode[8]));       
                                    databuf[jtemp*4+1]=((decode[9]<<7)|(decode[10]<<6)|(decode[11]<<5)|(decode[12]<<4)|(decode[13]<<3)|(decode[14]<<2)|(decode[15]<<1)|(decode[16]));
                                    databuf[jtemp*4+2]=((decode[17]<<7)|(decode[18]<<6)|(decode[19]<<5)|(decode[20]<<4)|(decode[21]<<3)|(decode[22]<<2)|(decode[23]<<1)|(decode[24]));  
                                    databuf[jtemp*4+3]=((decode[25]<<7)|(decode[26]<<6)|(decode[27]<<5)|(decode[28]<<4)|(decode[29]<<3)|(decode[30]<<2)|(decode[31]<<1)|(decode[32]));
                                     
                                        sendChar(databuf[jtemp*4+0]);
                                        sendChar(databuf[jtemp*4+1]);
                                        sendChar(databuf[jtemp*4+2]);
                                        sendChar(databuf[jtemp*4+3]);
       
                                        jtemp++;
                                       
                                        if(jtemp>10){jtemp=0;return;}
                                }
                        }
                        else
                        {          
                                if((tcomp>65)&&(tcomp<90))
                                {         
                                    if (lastbit==1)
                                        {   
                                        checkin=1;  
                                        i=0;  
                                        }
                                }
                        }
                }
                lastbit=!lastbit;
     }
}

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

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

出0入0汤圆

 楼主| 发表于 2012-2-18 11:32:21 | 显示全部楼层

分立元件结构 (原文件名:ourdev_705529MZL97C.jpg)

出0入12汤圆

发表于 2012-2-22 08:33:10 | 显示全部楼层
分立元件不知道怎么弄
用U2270B折腾T5557倒是有见过,坛子里面有人放出过资料,请自行搜索

出0入0汤圆

发表于 2012-3-5 14:33:56 | 显示全部楼层

(原文件名:T5577读卡电路.jpg)

这是我在项目中用的分立元件做的.用的单片机是AVR的ATmega88PA.读卡距离15cm.有卡片入场自动识别功能.

出0入0汤圆

发表于 2012-3-5 16:36:48 | 显示全部楼层
楼上的主能否说说你这电路是怎么弄的,需要AD来检测?

出0入10汤圆

发表于 2012-4-3 15:34:22 | 显示全部楼层
那个AD应该是检测是否有卡接近的。

出0入0汤圆

发表于 2012-4-21 10:16:35 | 显示全部楼层
ADC6是检测峰值电压变化的,有卡进场峰值变小,D3检波后,经两级低通滤波,两级放大后输出到M88的输入捕捉引脚,检测电平变化,用于解码。
这个读卡距离能达到15CM吗?

出0入0汤圆

发表于 2012-4-22 19:38:45 | 显示全部楼层
to,4楼,你没有把Mega88PA用到极致啊,内部的比较器要是用上的话,电路可以更简洁

出0入0汤圆

发表于 2012-7-21 08:28:57 | 显示全部楼层
近距离的电路五花八门 ,不都原理都一样

出0入0汤圆

发表于 2012-8-15 16:38:57 | 显示全部楼层
学习当中

出0入0汤圆

发表于 2013-3-15 21:15:47 | 显示全部楼层
mark 一下!可能用到

出0入0汤圆

发表于 2013-8-6 02:12:37 | 显示全部楼层
mark一下!

出0入0汤圆

发表于 2013-9-29 17:42:44 | 显示全部楼层
电路无须改变,解码程序修改即可.   
具体怎么改,看看T5557的波形,再参考T5557的数据手册

出0入0汤圆

发表于 2013-10-14 10:07:07 | 显示全部楼层
wishu520 发表于 2012-2-18 11:32
分立元件结构 (原文件名:ourdev_705529MZL97C.jpg)

楼主,我是个RFID新人,想学习用分立元件做读卡器,能不能把你的原理图发我学习学习,谢谢。ontheway.lj@qq.com

出0入0汤圆

发表于 2013-12-24 20:03:57 | 显示全部楼层
没改过密码的就行

出0入0汤圆

发表于 2015-3-1 17:48:54 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2015-3-4 12:17:01 | 显示全部楼层
学习学习

出0入0汤圆

发表于 2015-11-16 20:20:03 | 显示全部楼层
学习了,

出0入0汤圆

发表于 2016-2-23 23:11:04 | 显示全部楼层
boss2013 发表于 2013-9-29 17:42
电路无须改变,解码程序修改即可.   
具体怎么改,看看T5557的波形,再参考T5557的数据手册 ...

我用 em4095 读 Page1,发现有时候读的数据不一样,不知道是为什么

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-25 09:22

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

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