0

关于投票
关于SEP4020

        觉得这个芯片比S3C44B0强不少,而且比9200多一个液晶显示接口,定位还是不错的。东南大学做的,算是国产吧。当然,ARM720T的内核,只能买了。

        不过,芯片的用户手册确实不怎么样,看得我云里雾里的,难道是因为我很久没有看芯片的用户手册了?不可能吧。想用它来做一个小东东,先试试所有的功能吧,再不济,就算做个开发板也成啊。反正这个芯片也很便宜,45元左右就能够买到。

        今天画了一下SEP4020的原理图,发现一个地方,有点意思,如图:

        注意那个串口1的管脚排序与其他3个串口的区别,唉……为啥不按照同样的次序呢?真是搞不懂那些个做IC设计的,搞这么莫名其妙。害得我还担心了一下,真是郁闷,还好,芯片手册是对的,呵呵。

系统分类: 嵌入式
用户分类: 折腾的东东
标签: SEP4020 UART
来源: 原创
发表评论 阅读全文(101) | 回复(3)

0

关于投票
C51与水仙花数

        昨天晚上看到了一段关于求水仙花数的C语言程序,其实我就是想知道100~999里面有几个水仙花数,然而在电脑里面又没有TC的编译器,不过,手头上刚好有个51的板子,于是,俺就用keil编译一下那段例程,下载到51里面,然后通过串口打印回来。哈,如果我没有记错的话,有4个。153,370,371,,后面那个我忘了,晚上回去再补上。

        唉,不知道现在还有多少人能用汇编折腾出这个程序,里面有a*a*a,应该算是比较麻烦了吧。晚上再详细说说,呵。

PS:一直没有时间来更新,算了,就这样吧。

系统分类: 单片机
用户分类: 折腾的东东
标签: 水仙花数,C51
来源: 原创
发表评论 阅读全文(200) | 回复(0)

0

关于投票
我的RFID阅读器开发过程[2]
    在[1]里面已经搞定了REQA,这时候卡片会处于ready的状态。在这个状态时,就可以读它的UID了。好像也只能按照这个次序来读。在这个读UID的阶段,得实现那个防冲突防碰撞的算法,叫什么二进制检索树什么的。至于该怎么写程序去实现它,我现在还没有详细去了解。先放一放。先把单张卡片的UID读回来。
    这时候的命令有两个字节。0x93+0x20。不需要CRC校验,但是需要奇偶校验。这都是标准里面的,可惜我还是没有找到详细的资料,只有把几份资料参对着看,然后试出来。所以很是郁闷。等我找到了,我就上传上来,见者有份。

#define PICC_ANTICOLL1  0x93   /*防冲撞*/
#define PICC_NVB1       0x20   //
#define PICC_NVB2       0x70

void test_anti(void)   //防碰撞,暂时没有实现
{   uint8 i,temp;
    Wr_Rd_PCD(0,RegCommand,PCD_IDLE); //清除上次的命令,可以不要
    Wr_Rd_PCD(0,RegChannelRedundancy,0x03); //发送奇校验位
    Wr_Rd_PCD(0,RegBitFraming,0x00);//根据标准, 发送8bit的数据
    Wr_Rd_PCD(0,RegFIFOData,PICC_ANTICOLL1);//先往FIF0写入防冲突命令 0x93
    Wr_Rd_PCD(0,RegFIFOData,PICC_NVB1);//0x93 + 0x20
    Wr_Rd_PCD(0,RegCommand,PCD_TRANSCEIVE);  //发送命令
    delay_50us(10000);                  //500ms
    temp=Wr_Rd_PCD(1,RegFIFOLength,RDONEBYTE);
    test(temp);
    if(temp>0){
        for(i=0;i
            anti[i]= Wr_Rd_PCD(1,RegFIFOData,RDONEBYTE);
        }
        for(i=0;i
    }   
}

     RegChannelRedundancy寄存器老得改变。还好SPI的速度很快。关于LPC2102这款单片机的SPI的使用,周立功的网站上有。我就不用多说啥了。

    当阅读器给卡片发出0x93+0x20后,卡片就会返回数据,有4个字节,也可以有更多的字节,有着更多的字节该怎么办,我暂时还不知道。
    UID0,UID1,UID2,UID3 分别等于anti[0],anti[1],anti[2],anti[3]。
    接着再把这个序列号发给卡片。
    命令序列如下:
    0x93+0x70+UID0+UID1+UID2+UID3+BCC+CRC16
    CRC16是硬件自动产生的,不需要软件计算。
    BCC需要通过软件来计算。BCC=UID0^UID1^UID2^UID3; 序列号的异或。
    于是往RegFIFOData写入7个字节后,启动发送接收,就会得到一个应答。这叫选择应答,至此,卡片才正儿八经给激活,可以交换数据。

void test_select(void)     //选择卡
{
    uint8 i,temp;
    Wr_Rd_PCD(0,RegCommand,PCD_IDLE);  
    Wr_Rd_PCD(0,RegChannelRedundancy,0x07);//发送奇校验位,CRC16
    Wr_Rd_PCD(0,RegBitFraming,0x00);//根据标准, 发送8bit的数据
    Wr_Rd_PCD(0,RegFIFOData,PICC_ANTICOLL1);//往FIF0写入防冲突
    Wr_Rd_PCD(0,RegFIFOData,0x70);           //0x93 + 0x70
    Wr_Rd_PCD(0,RegFIFOData,anti[0]);
    Wr_Rd_PCD(0,RegFIFOData,anti[1]);
    Wr_Rd_PCD(0,RegFIFOData,anti[2]);
    Wr_Rd_PCD(0,RegFIFOData,anti[3]);
    temp = (anti[0]^anti[1]^anti[2]^anti[3]);
    Wr_Rd_PCD(0,RegFIFOData,temp);
    Wr_Rd_PCD(0,RegCommand,PCD_TRANSCEIVE);       //发送命令
    delay_50us(10000);                  //500ms
    temp=Wr_Rd_PCD(1,RegFIFOLength,RDONEBYTE);
    test(temp);
    if(temp>0){
        for(i=0;i
            selsak[i]= Wr_Rd_PCD(1,RegFIFOData,RDONEBYTE);
        }
        for(i=0;i
    }   
}
    注意:RegChannelRedundancy=0x07了。

    到这里,已经进行了3步。在后面,软件的工作量还很大。我弄一部分就整理一部分上来。至于硬件原理图什么的,比较简单。照着文档做就可以。个人觉得,真地好麻烦,因为有模拟的部分。有时候真的很难判断是硬件还是软件的问题。毕竟没有这方面的经验,也没有相应的仪器。网络分析仪、频谱分析仪,又岂是俺能买得起的。再说了,也不划算嘛,还不如直接买个别人做的开发板呢。上面的天线都是调谐的。只是没有什么意思,以后还是得自个做的,嵌入式嘛,体积有要求,功能集成上有要求。另外我觉得,折腾折腾它的天线还是蛮有意思的,等我借到仪器再说。好了,今天就到这一步了,下线继续测试。
系统分类: RFID
用户分类: 折腾的东东
标签: rfid 阅读器
来源: 原创
发表评论 阅读全文(845) | 回复(2)

0

关于投票
我的RFID阅读器开发过程[1]
    单片机使用LPC2102,用ISP的方式开发。读卡芯片FM1702NL。SPI的方式。

    使用SPI接口时,有一个需要注意的地方。在FM1702NL的芯片资料上并没有详细的介绍,后来我还是从FM1702SL的资料看到的。就是SPI接口的确认过程,并口需要确认,SPI口也需要确认。

    文字描述就是:先在读卡芯片的RSTPD管脚产生个复位信号->读芯片的命令寄存器是否为0,不是0就不断检测->如果为0,往Page register里面写0x80->再判断命令寄存器是否为0->如果为0,往Page register里面写0x00。到这里,FM1702的SPI初始化就算完成了。

    接下来就去读type A的卡。如果天线调谐得很棒的话,设置一下几个寄存器就可以读到卡片的信息了。至于天线如何调谐,别问我,我也不清楚。运气好的话,你可以拎个示波器来看看波形,正弦波的波形非常好的话,就表示高次谐波的功率非常低。反正我是运气较好,调了一个1cm范围的天线,嘿嘿,高兴一会会。不过在那个什么防碰撞上面,可是遇到了麻烦。于是这部分的程序我留到以后再写。先按照一张卡片来吧。整个简单的流程先玩一遍。

    激活卡片有两个命令,如下:
    #define PICC_REQIDL  0x26 /*寻天线区内未进入休眠状态的卡*/
    #define PICC_REQALL  0x52  /*寻天线区内全部卡*/
    我当然用后面那个,至于这两者有多大区别,我还得试过才知道。我现在还不知道怎么样才能让卡片休眠呢。

    这个寻卡的命令仅由7个数字位组成。仅由7个   仅由7个   仅由7个
    次序如下,看以下函数,很简单的,猜都能猜出是啥意思。
void testATR(void) //做测试用的,通过串口返回数据,在串口
{                  //助手里面用hex的方式察看
    uint8 i,temp;
    Wr_Rd_PCD(0,RegTxControl,0x5b);     //发送载波,当然得先发送
           //调天线时也是这样,没有载波怎么调嘛。赋值的具体含义参看
           //芯片的pdf文档,我就不拷贝过来了
    delay_50us(10000); //500ms延时而已,或长或短,能看着办吗?
    Wr_Rd_PCD(0,RegCommand,PCD_IDLE);
    Wr_Rd_PCD(0,RegChannelRedundancy,0x00);   //不发送奇偶校验位
    Wr_Rd_PCD(0,RegBitFraming,0x07); //根据标准, 只发送7bit的数据
    Wr_Rd_PCD(0,RegFIFOData,PICC_REQALL); //先往FIF0写入读卡命令
    Wr_Rd_PCD(0,RegCommand,PCD_TRANSCEIVE);//命令寄存器写收发命令
    delay_50us(10000);  //500ms,延时,还是延时
    temp=Wr_Rd_PCD(1,RegFIFOLength,RDONEBYTE);//看看有多少数据
    test(temp);//串口上传一下结果,如0x03什么的
    if(temp>0){ //有数据,那就读出来吧
        for(i=0;i
            atqa[i]= Wr_Rd_PCD(1,RegFIFOData,RDONEBYTE);
        }
        for(i=0;i
    }
}

    简单点说,给卡片发0x52,卡片返回0x04,0x00。这时,RegFIFOLength=0x03。这就是请求所有,激活卡片吧。在这一步,发7个数据位就可以了,不用奇偶校验,不要CRC校验,不用发完整个字节,不然就收不到东西了。这就是第一步了。只要天线是调谐的,通过修改这几个寄存器,就可以跟卡片打招呼了。
系统分类: RFID
用户分类: 折腾的东东
标签: rfid 阅读器
来源: 原创
发表评论 阅读全文(761) | 回复(0)

0

关于投票
AT89C51/52&CAN

    整个系统由单片机AT89C51/52与CAN总线控制器SJA1000T构成。CAN总线驱动器可选为:82C250,TJA1040,TJA1050;使用跳线端子J1,J2来切换。这三种CAN驱动器的详细区别,在广州周立功的网站上可以找到,我就不再转摘过来了,免得浪费空间。本来我想使用0欧姆电阻来短接的,但后来比较一下,0805封装的电阻跟SIP2封装的跳线端子差不多大小,还不如直接用跳线端子,短接起来也比较方便,相信大家也都有过这样的经验。另外,这样或许会少打两个过孔,或许而已。

    原理图如附件的pdf文档。因为印制板还没有加工,所以尚未来得及调试,如有问题,本人概不负责。呵呵。如果有谁看了,觉得有问题,那就有劳您给我指出来,如果来得及,那我做起板子来就放心多了。

pdf

 

系统分类: 单片机
用户分类: 折腾的东东
标签: 51 CAN
来源: 原创
发表评论 阅读全文(319) | 回复(0)
总共 , 当前 /