RFID Click example not working

General discussion on mikroC PRO for PIC.
Author
Message
Dxmaxim
Posts: 80
Joined: 30 Sep 2008 08:10
Location: South Africa
Contact:

Re: RFID Click example not working

#16 Post by Dxmaxim » 21 May 2014 10:22

Ok, I see . . .

So the power on / voltage rise time might be an issue . . .

Well, I should get my easyPic 7 today. But if these RFIDs are pedantic then using the RFID in the field as a click module might have its challenges . . . and I was hoping to pursue that route.

Anyway, ...
ZarDynamix | Fidelis et fortis semper
An embedded solutions company
Site | http://www.zardynamix.com

User avatar
filip
mikroElektronika team
Posts: 11874
Joined: 25 Jan 2008 09:56

Re: RFID Click example not working

#17 Post by filip » 23 May 2014 14:48

Hi,
1. BUT Why it does NOT read THE WHITE COLOUR CARD.
The RFid Click can read only blue tags, the RFID Reader board can read white cards.

Regards,
Filip.

saharul
Posts: 489
Joined: 08 Jul 2010 08:11

Re: RFID Click example not working

#18 Post by saharul » 25 May 2014 05:02

thanks filip :D :D :D :D

saharul
Posts: 489
Joined: 08 Jul 2010 08:11

Re: RFID Click example not working

#19 Post by saharul » 26 May 2014 00:53

final question is this click board can write to the blue tag?

if yes, is there any example of code in lib stock?

:? :? :?

User avatar
filip
mikroElektronika team
Posts: 11874
Joined: 25 Jan 2008 09:56

Re: RFID Click example not working

#20 Post by filip » 26 May 2014 13:30

Hi,

The blue tags cannot be written to.

Regards,
Filip.

tixmcprods
Posts: 103
Joined: 15 May 2012 12:30

Re: RFID Click example not working

#21 Post by tixmcprods » 05 Nov 2014 18:01

Hello,

I have that problem too... without MikroE board.
I work with a PIC18F46K22 and RFid Click.

My hardware is :

RFid Click => PIC18F46K22
--------------------------------
SI1 => RA2 (pin 4)
SI0 => RA3 (pin 5)
CS => RA0 (pin 2)
SCK => SCK2 (RD0, pin 19)
SDO => SDI2 (RD1, pin 20)
SDI => SDO2 (RD4, pin 27)
INI => RA1 (pin 3)

I'm stuck in EchoResponse(), just after MCU init...

Partial main code :

Code: Select all

InitMCU();

  [...]
  
  UART1_Write_Text("1\r\n");
  
  RFid_Init();
  
  UART1_Write_Text("2\r\n");
Init MCU code :

Code: Select all

void InitMCU() {
  IRCF2_bit = 1;
  IRCF1_bit = 1;
  IRCF0_bit = 1;
  PLLEN_bit = 1;

  ANSELA = 0;
  ANSELB = 0;
  ANSELC = 0;
  ANSELD = 0;
  ANSELE = 0;

  TRISA = 0b00000000;
  TRISB = 0b00000000;
  TRISC = 0b10011000;
  TRISD = 0b00000010;
  TRISE = 0b00000000;
  
  [...]
  
  UART1_Init(256000);
  delay_ms(100); // Stabilisation UART
}
RFid routines :

Code: Select all

#include "RFid.h"

sbit RFid_CS at LATA0_bit;
sbit RFid_CS_Direction at TRISA0_bit;
sbit RFid_IRQ_IN at LATA1_bit;
sbit RFid_IRQ_IN_Direction at TRISA1_bit;
sbit RFid_SSI_1 at LATA2_bit;
sbit RFid_SSI_1_Direction at TRISA2_bit;
sbit RFid_SSI_0 at LATA3_bit;
sbit RFid_SSI_0_Direction at TRISA3_bit;

unsigned char sdata[18];
unsigned char rdata[18];
unsigned short res = 0;
unsigned short dataNum = 0;
unsigned char RFid_ID[10] = {0};

void RFid_Write(unsigned char command, unsigned short length) {
  unsigned short i;
  
  RFid_CS = 0;
  
  SPI2_Write(0x00);
  SPI2_Write(command);
  SPI2_Write(length);
  while(length == 0) {
    RFid_CS = 1;
    break;
  }
  for(i = 0; i < length; i++) {
    SPI2_Write(sdata[i]);
  }
  
  RFid_CS = 1;
}

void RFid_Read() {
  unsigned short i;
  
  while(1) {
    RFid_CS = 0;
    SPI2_Write(0x03);
    res = SPI2_Read(0);
    RFid_CS = 1;
    
    if((res & 0x08) >> 3) {
      RFid_CS = 0;
      SPI2_Write(0x02);
      res = SPI2_Read(0);
      dataNum = SPI2_Read(0);
      for(i = 0; i < dataNum; i++) {
        rdata[i] = SPI2_Read(0);
      }
      RFid_CS = 1;
      break;
    }
    RFid_CS = 1;
    delay_ms(10);
  }
}

unsigned short RFid_Echo() {
  unsigned int tmp;
  unsigned char buffer[64];
  
  RFid_CS = 0;
  SPI2_Write(0x00);
  SPI2_Write(0x55);
  RFid_CS = 1;
  
  while(1) {
    RFid_CS = 0;
    SPI2_Write(0x03);
    tmp = SPI2_Read(1);
    RFid_CS = 1;
    
    UART1_Write_Text("1.1.1\r\n");
    
    sprintf(buffer, "tmp = %x\r\n", tmp);
    UART1_Write_Text(buffer);
    
    if((tmp & 0x08) >> 3) {
      RFid_CS = 0;
      SPI2_Write(0x02);
      tmp = SPI2_Read(1);
      RFid_CS = 1;
      
      UART1_Write_Text("1.1.2\r\n");
      
      sprintf(buffer, "tmp = %x\r\n", tmp);
      UART1_Write_Text(buffer);
      
      if(tmp == 0x55) {
        return 1;
      }
      return 0;
    }
    
    delay_ms(500);
  }
}

unsigned short RFid_GetNFCTag() {
  unsigned short i;
  unsigned char txt_hex[3];

  sdata[0] = 0x26;
  sdata[1] = 0x07;
  RFid_Write(0x04 , 2);
  RFid_Read();

  sdata[0] = 0x93;
  sdata[1] = 0x20;
  sdata[2] = 0x08;
  RFid_Write(0x04 , 3);
  RFid_Read();
  
  if(res == 0x80) {
    for(i = 1; i < dataNum - 3; i++) {
      ByteToHex(rdata[i], txt_hex);
      strcat(RFid_ID, txt_hex);
    }
    RFid_ID[10] = 0;
    return 1;
  }
  else
    return 0;
}

void RFid_Init() {
  unsigned short i;
  
  RFid_CS_Direction = 0;
  RFid_IRQ_IN_Direction = 0;
  RFid_SSI_1_Direction = 0;
  RFid_SSI_0_Direction = 0;
  
  RFid_IRQ_IN = 1;
  RFid_CS = 1;
  RFid_SSI_1 = 0;
  RFid_SSI_0 = 1;
  
  SPI2_Init_Advanced(_SPI_MASTER_OSC_DIV64, _SPI_DATA_SAMPLE_MIDDLE, _SPI_CLK_IDLE_LOW, _SPI_LOW_2_HIGH);
  
  delay_ms(1000);
  
  UART1_Write_Text("1.1\r\n");
  
  while(!RFid_Echo()) {
    RFid_IRQ_IN = 0;
    delay_ms(100);
    RFid_IRQ_IN = 1;
    delay_ms(100);
  }
  
  UART1_Write_Text("1.2\r\n");
  
  // Calibration
  sdata[0] = 0x03;
  sdata[1] = 0xA1;
  sdata[2] = 0x00;
  sdata[3] = 0xF8;
  sdata[4] = 0x01;
  sdata[5] = 0x18;
  sdata[6] = 0x00;
  sdata[7] = 0x20;
  sdata[8] = 0x60;
  sdata[9] = 0x60;
  sdata[10] = 0x00;
  sdata[11] = 0x00;
  sdata[12] = 0x3F;
  sdata[13] = 0x01;
  RFid_Write(0x07, 0x0E);
  RFid_Read();

  sdata[11] = 0xFC;
  RFid_Write(0x07, 0x0E);
  RFid_Read();

  sdata[11] = 0x7C;
  RFid_Write(0x07, 0x0E);
  RFid_Read();

  sdata[11] = 0x3C;
  RFid_Write(0x07, 0x0E);
  RFid_Read();

  sdata[11] = 0x5C;
  RFid_Write(0x07, 0x0E);
  RFid_Read();

  sdata[11] = 0x6C;
  RFid_Write(0x07, 0x0E);
  RFid_Read();

  sdata[11] = 0x74;
  RFid_Write(0x07, 0x0E);
  RFid_Read();

  sdata[11] = 0x70;
  RFid_Write(0x07, 0x0E);
  RFid_Read();
  
  UART1_Write_Text("1.3\r\n");
  
  // IndexMod & Gain
  sdata[0] = 0x09;
  sdata[1] = 0x04;
  sdata[2] = 0x68;
  sdata[3] = 0x01;
  sdata[4] = 0x01;
  sdata[5] = 0x50;
  RFid_Write(0x09, 6);
  RFid_Read();
  
  UART1_Write_Text("1.4\r\n");
  
  // Auto FDet
  sdata[0] = 0x09;
  sdata[1] = 0x04;
  sdata[2] = 0x0A;
  sdata[3] = 0x01;
  sdata[4] = 0x02;
  sdata[5] = 0xA1;
  RFid_Write(0x09, 6);
  RFid_Read();
  
  UART1_Write_Text("1.5\r\n");
  
  // RF communication protocol (ISO/IEC 14443-A)
  sdata[0] = 0x02;
  sdata[1] = 0x00;
  RFid_Write(0x02, 2);
  RFid_Read();

  // Effacer buffers
  for(i = 0; i < 18; i++){
    rdata[i] = 0;
    sdata[i] = 0;
  }
}
My UART debug :

Code: Select all

1

1.1

1.1.1

tmp = 0

1.1.1

tmp = 0

1.1.1

tmp = 0

1.1.1

tmp = 0

1.1.1

tmp = 0
... and so on !

Sometimes, "tmp = ff"...

Really don't know why...

Thanks for your help !

Best regards.

Post Reply

Return to “mikroC PRO for PIC General”