wishu520 发表于 2012-2-18 11:25:46

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

使用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(uinttick)
{
    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=((decode<<7)|(decode<<6)|(decode<<5)|(decode<<4)|(decode<<3)|(decode<<2)|(decode<<1)|(decode));       
                                  databuf=((decode<<7)|(decode<<6)|(decode<<5)|(decode<<4)|(decode<<3)|(decode<<2)|(decode<<1)|(decode));
                                  databuf=((decode<<7)|(decode<<6)|(decode<<5)|(decode<<4)|(decode<<3)|(decode<<2)|(decode<<1)|(decode));
                                  databuf=((decode<<7)|(decode<<6)|(decode<<5)|(decode<<4)|(decode<<3)|(decode<<2)|(decode<<1)|(decode));
                                 
                                        sendChar(databuf);
                                        sendChar(databuf);
                                        sendChar(databuf);
                                        sendChar(databuf);
       
                                        jtemp++;
                                       
                                        if(jtemp>10){jtemp=0;return;}
                                }
                        }
                        else
                        {          
                                if((tcomp>65)&&(tcomp<90))
                                {       
                                  if (lastbit==1)
                                        {   
                                        checkin=1;
                                        i=0;
                                        }
                                }
                        }
                }
                lastbit=!lastbit;
   }
}

wishu520 发表于 2012-2-18 11:32:21

http://cache.amobbs.com/bbs_upload782111/files_52/ourdev_719838MOEBRC.jpg
分立元件结构 (原文件名:ourdev_705529MZL97C.jpg)

skynet 发表于 2012-2-22 08:33:10

分立元件不知道怎么弄
用U2270B折腾T5557倒是有见过,坛子里面有人放出过资料,请自行搜索

xiaobo768015 发表于 2012-3-5 14:33:56

http://cache.amobbs.com/bbs_upload782111/files_53/ourdev_724250QJMD2N.jpg
(原文件名:T5577读卡电路.jpg)

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

zyw19987 发表于 2012-3-5 16:36:48

楼上的主能否说说你这电路是怎么弄的,需要AD来检测?

mmiker 发表于 2012-4-3 15:34:22

那个AD应该是检测是否有卡接近的。

skyxjh 发表于 2012-4-21 10:16:35

ADC6是检测峰值电压变化的,有卡进场峰值变小,D3检波后,经两级低通滤波,两级放大后输出到M88的输入捕捉引脚,检测电平变化,用于解码。
这个读卡距离能达到15CM吗?

whimsyB 发表于 2012-4-22 19:38:45

to,4楼,你没有把Mega88PA用到极致啊,内部的比较器要是用上的话,电路可以更简洁

lichengqun85 发表于 2012-7-21 08:28:57

近距离的电路五花八门 ,不都原理都一样

wenson_Huang 发表于 2012-8-15 16:38:57

学习当中{:smile:}

dopmax 发表于 2013-3-15 21:15:47

mark 一下!可能用到

颖风 发表于 2013-8-6 02:12:37

mark一下!

boss2013 发表于 2013-9-29 17:42:44

电路无须改变,解码程序修改即可.   
具体怎么改,看看T5557的波形,再参考T5557的数据手册

justloong 发表于 2013-10-14 10:07:07

wishu520 发表于 2012-2-18 11:32 static/image/common/back.gif
分立元件结构 (原文件名:ourdev_705529MZL97C.jpg)

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

BG8CTZ 发表于 2013-12-24 20:03:57

没改过密码的就行

iamdais 发表于 2015-3-1 17:48:54

学习学习

luoyu510183 发表于 2015-3-4 12:17:01

学习学习

sml009 发表于 2015-11-16 20:20:03

学习了,

dswkl11 发表于 2016-2-23 23:11:04

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

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

kelian 发表于 2016-3-7 23:37:20

时序对吗?丢码
页: [1]
查看完整版本: 分立元件读卡模块读取4100卡成功,求酷!,但不能在改进下读取T5557,求助!谢谢!