element14 Community
element14 Community
    Register Log In
  • Site
  • Search
  • Log In Register
  • About Us
  • Community Hub
    Community Hub
    • What's New on element14
    • Feedback and Support
    • Benefits of Membership
    • Personal Blogs
    • Members Area
    • Achievement Levels
  • Learn
    Learn
    • Ask an Expert
    • eBooks
    • element14 presents
    • Learning Center
    • Tech Spotlight
    • STEM Academy
    • Webinars, Training and Events
    • Learning Groups
  • Technologies
    Technologies
    • 3D Printing
    • FPGA
    • Industrial Automation
    • Internet of Things
    • Power & Energy
    • Sensors
    • Technology Groups
  • Challenges & Projects
    Challenges & Projects
    • Design Challenges
    • element14 presents Projects
    • Project14
    • Arduino Projects
    • Raspberry Pi Projects
    • Project Groups
  • Products
    Products
    • Arduino
    • Avnet Boards Community
    • Dev Tools
    • Manufacturers
    • Multicomp Pro
    • Product Groups
    • Raspberry Pi
    • RoadTests & Reviews
  • Store
    Store
    • Visit Your Store
    • Choose another store...
      • Europe
      •  Austria (German)
      •  Belgium (Dutch, French)
      •  Bulgaria (Bulgarian)
      •  Czech Republic (Czech)
      •  Denmark (Danish)
      •  Estonia (Estonian)
      •  Finland (Finnish)
      •  France (French)
      •  Germany (German)
      •  Hungary (Hungarian)
      •  Ireland
      •  Israel
      •  Italy (Italian)
      •  Latvia (Latvian)
      •  
      •  Lithuania (Lithuanian)
      •  Netherlands (Dutch)
      •  Norway (Norwegian)
      •  Poland (Polish)
      •  Portugal (Portuguese)
      •  Romania (Romanian)
      •  Russia (Russian)
      •  Slovakia (Slovak)
      •  Slovenia (Slovenian)
      •  Spain (Spanish)
      •  Sweden (Swedish)
      •  Switzerland(German, French)
      •  Turkey (Turkish)
      •  United Kingdom
      • Asia Pacific
      •  Australia
      •  China
      •  Hong Kong
      •  India
      •  Korea (Korean)
      •  Malaysia
      •  New Zealand
      •  Philippines
      •  Singapore
      •  Taiwan
      •  Thailand (Thai)
      • Americas
      •  Brazil (Portuguese)
      •  Canada
      •  Mexico (Spanish)
      •  United States
      Can't find the country/region you're looking for? Visit our export site or find a local distributor.
  • Translate
  • Profile
  • Settings
Arduino
  • Products
  • More
Arduino
Arduino Forum Time for read a block
  • Blog
  • Forum
  • Documents
  • Quiz
  • Events
  • Polls
  • Files
  • Members
  • Mentions
  • Sub-Groups
  • Tags
  • More
  • Cancel
  • New
Join Arduino to participate - click to join for free!
Actions
  • Share
  • More
  • Cancel
Forum Thread Details
  • State Verified Answer
  • Replies 7 replies
  • Subscribers 392 subscribers
  • Views 483 views
  • Users 0 members are here
Related

Time for read a block

ritamüller
ritamüller over 10 years ago

Hello,

I have RFID 13.56 MHz / NFC Module for Arduino from Cooking Hacks , I want to know how much time need a full read in a block process ?

I tried with millis () function and I get this :


image

I get 2196 ms .  is that right ? I think it's so much


Rita

  • Sign in to reply
  • Cancel
Parents
  • Robert Peter Oakes
    0 Robert Peter Oakes over 10 years ago

    It does seem a little slow but I dont have one to try out so nothing to compare to

     

    What is the code your using to time the read, can you please provide in here

    Thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Reply
  • Robert Peter Oakes
    0 Robert Peter Oakes over 10 years ago

    It does seem a little slow but I dont have one to try out so nothing to compare to

     

    What is the code your using to time the read, can you please provide in here

    Thanks

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
Children
  • ritamüller
    0 ritamüller over 10 years ago in reply to Robert Peter Oakes

    /*
    *  RFID/NFC Modul for Arduino 
    *  Read a block 
    */
    
    
    uint8_t dataRX[35];//Receive buffer.
    uint8_t dataTX[35];//Transmit buffer.
    uint8_t _UID[4];// stores the UID (unique identifier) of a card.
    uint8_t keyAccess[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF } ;// stores the key or password.
    uint8_t address = 0x04;//Address to read.
    uint8_t ATQ[2];//Answer to request
    uint8_t state;//state of the process
    uint8_t aux[16];//Auxiliar buffer.
    unsigned long time;
    
    
    void setup()
    {
      //Start serial port 115200 bps:
      Serial.begin(115200);
      delay(100);
      Serial.print("RFID/NFC @ 13.56 MHz module started");
      delay(1000);
      //!It is needed to launch a simple command to sycnchronize
      getFirmware();
      configureSAM();
    }
    
    
    void loop()
    {
      Serial.print("\n");
            Serial.print("Ready to read...");
      /////////////////////////////////////////////////////////////
      //Get the UID Identifier
      init(_UID, ATQ);
      Serial.print("\n");
      Serial.print( "The UID : ");
      print(_UID , 4);
            time = millis();//prints time since program started
            Serial.print("Time:");
            Serial.print(time);
            Serial.print(" ");
            Serial.write("ms");
            ////////////////////////////////////////////////////////////
      //Auntenticate a block with his keyAccess
      state = authenticate(_UID, address, keyAccess);
      Serial.print("\n");
    
    
      if ( state == 0) {
      Serial.println("Authentication block OK");
                    time = millis();//prints time since program started
                    Serial.print("Time:");
                    Serial.print(time);
                    Serial.print(" ");
                    Serial.write("ms");
                    } else {
      Serial.println("Authentication failed");
          }
            /////////////////////////////////////////////////////////////
      //Read from address after authentication
      state = readData(address, aux);
      Serial.print("\n");
    
    
      if (state == 0) {
      Serial.println("Read block OK");
      } else {
      Serial.println("Read failed");
      }
    
    
      Serial.print("\n");
      Serial.print("Data readed : ");
      print(aux , 16);
      Serial.print("\n");
            time = millis();//prints time since program started
            Serial.print("Time:");
            Serial.print(time);
            Serial.print(" ");
            Serial.write("ms");
            delay(2000);
    }
    //**********************************************************************
    //!The goal of this command is to detect as many targets (maximum MaxTg)
    // as possible in passive mode.
    uint8_t init(uint8_t *UID , uint8_t *ATQ)   //! Request InListPassive
    {
      Serial.flush();
    
    
      dataTX[0] = 0x04; // Length
      lengthCheckSum(dataTX); // Length Checksum
      dataTX[2] = 0xD4;
      dataTX[3] = 0x4A; // Code
      dataTX[4] = 0x01; //MaxTarget
      dataTX[5] = 0x00; //BaudRate = 106Kbps
      dataTX[6] = 0x00; // Clear checkSum position
      checkSum(dataTX); 
    
    
      sendTX(dataTX , 7 ,23);
    
    
      for (int i = 17; i < (21) ; i++){
      _UID[i-17] = dataRX[i];
      UID[i-17] = _UID[i-17];
      }
    
    
      ATQ[0] = dataRX[13];
      ATQ[1] = dataRX[14];
    
    
      if ((dataRX[9]== 0xD5) & (dataRX[10] == 0x4B) & (dataRX[11] == 0x01)) {
      return 0;
      } else {
      return 1;
      }
    }
    //**********************************************************************
    //!A block must be authenticated before read and write operations
    uint8_t authenticate(uint8_t *UID, uint8_t blockAddress, uint8_t *keyAccess)
    {
      dataTX[0] = 0x0F;
      lengthCheckSum(dataTX);
      dataTX[2] = 0xD4;
      dataTX[3] = 0x40; // inDataEchange
      dataTX[4] = 0x01; //Number of targets
      dataTX[5] = 0x60; // Authentication code
      dataTX[6] = blockAddress;
      for (int i = 0; i < 6 ; i++) {
      dataTX[i + 7] = keyAccess[i];
      }
      dataTX[13] = UID[0];  dataTX[14] = UID[1];
      dataTX[15] = UID[2];  dataTX[16] = UID[3];
      dataTX[17] = 0x00;
      checkSum(dataTX);
      sendTX(dataTX , 18 ,14);
    
    
      if ((dataRX[9]== 0xD5) & (dataRX[10] == 0x41) & (dataRX[11] == 0x00)) {
      return 0;
      } else {
      return 1;
      }
    }
    //**********************************************************************
    //!Write 16 bytes in address .
    uint8_t writeData(uint8_t address, uint8_t *blockData)  //!Writing
    {
      Serial.print("                ");
      dataTX[0] = 0x15;
      lengthCheckSum(dataTX); // Length Checksum
      dataTX[2] = 0xD4;
      dataTX[3] = 0x40;//inDataEchange CODE
      dataTX[4] = 0x01;//Number of targets
      dataTX[5] = 0xA0;//Write Command
      dataTX[6] = address; //Address
    
    
      for (int i = 0; i < 16; i++) {
      dataTX[i+7] = blockData[i];
      }
    
    
      dataTX[23] = 0x00;
      checkSum(dataTX);
      sendTX(dataTX , 24 ,14);
    
    
      if ((dataRX[9]== 0xD5) & (dataRX[10] == 0x41) & (dataRX[11] == 0x00)) {
      return 0;
      } else {
      return 1;
      }
    }
    //**********************************************************************
    //!Read 16 bytes from  address .
    uint8_t readData(uint8_t address, uint8_t *readData) //!Reading
    {
      Serial.print("                ");
    
    
      dataTX[0] = 0x05;
      lengthCheckSum(dataTX); // Length Checksum
      dataTX[2] = 0xD4; // Code
      dataTX[3] = 0x40; // Code
      dataTX[4] = 0x01; // Number of targets
      dataTX[5] = 0x30; //ReadCode
      dataTX[6] = address;  //Read address
      dataTX[7] = 0x00;
      checkSum(dataTX);
      sendTX(dataTX , 8, 30);
      memset(readData, 0x00, 16);  
    
    
      if ((dataRX[9]== 0xD5) & (dataRX[10] == 0x41) & (dataRX[11] == 0x00)) {
      for (int i = 12; i < 28; i++) {
      readData[i-12] = dataRX[i];
      }
      return 0;
      } else {
      return 1;
      }
    }
    //**********************************************************************
    //!The PN532 sends back the version of the embedded firmware.
    bool getFirmware(void)  //! It is needed to launch a simple command to sycnchronize
    {
      Serial.print("                ");
    
    
      memset(dataTX, 0x00, 35);
      dataTX[0] = 0x02; // Length
      lengthCheckSum(dataTX); // Length Checksum
      dataTX[2] = 0xD4; // CODE
      dataTX[3] = 0x02; //TFI
      checkSum(dataTX); //0x2A; //Checksum   
    
    
      sendTX(dataTX , 5 , 17);
      Serial.print("\n");
      Serial.print("Your Firmware version is : ");
    
    
      for (int i = 11; i < (15) ; i++){
      Serial.print(dataRX[i], HEX);
      Serial.print(" ");
      }
      Serial.print("\n");
    }
    
    
    //**********************************************************************
    //!Print data stored in vectors .
    void print(uint8_t * _data, uint8_t length)
    {
      for (int i = 0; i < length ; i++){
      Serial.print(_data[i], HEX);
      Serial.print(" ");
      }
      Serial.print("\n");
    }
    //**********************************************************************
    //!This command is used to set internal parameters of the PN532,
    bool configureSAM(void)//! Configure the SAM
    {
      Serial.print("               ");
    
    
      dataTX[0] = 0x05; //Length
      lengthCheckSum(dataTX); // Length Checksum
      dataTX[2] = 0xD4;
      dataTX[3] = 0x14;
      dataTX[4] = 0x01; // Normal mode
      dataTX[5] = 0x14; // TimeOUT
      dataTX[6] = 0x00; // IRQ
      dataTX[7] = 0x00; // Clean checkSum position
      checkSum(dataTX);
    
    
      sendTX(dataTX , 8, 13);
    }
    //**********************************************************************
    //!Send data stored in dataTX
    void sendTX(uint8_t *dataTX, uint8_t length, uint8_t outLength)
    {
      Serial.print(char(0x00));
      Serial.print(char(0x00));
      Serial.print(char(0xFF)); 
    
    
      for (int i = 0; i < length; i++) {
      Serial.print(char(dataTX[i]));
      }
    
    
      Serial.print(char(0x00));
      getACK();
      waitResponse();// Receive response
      getData(outLength);
    }
    //**********************************************************************
    //!Wait for ACK response and stores it in the dataRX buffer
    void getACK(void)
    {
      delay(5);
      waitResponse();
      for (int i = 0; i < 5 ; i++) {
      dataRX[i] = Serial.read();
      }
    }
    //**********************************************************************
    //!Wait the response of the module
    void waitResponse(void)
    {
      int val = 0xFF;
      int cont = 0x00;
      while(val != 0x00) { //Wait for 0x00 response
      val = Serial.read();
      delay(5);
      cont ++;
      }
    }
    //**********************************************************************
    //!Get data from the module
    void getData(uint8_t outLength)
    {
      for (int i=5; i < outLength; i++) {
      dataRX[i] = Serial.read();//read data from the module.
      }
    }
    //**********************************************************************
    //!Calculates the checksum and stores it in dataTX buffer
    void checkSum(uint8_t *dataTX)
    {
      for (int i = 0; i < dataTX[0] ; i++) {
      dataTX[dataTX[0] + 2] += dataTX[i + 2];
      }
      byte(dataTX[dataTX[0] + 2]= - dataTX[dataTX[0] + 2]);
    }
    //**********************************************************************
    //!Calculates the length checksum and sotres it in the buffer.
    uint8_t lengthCheckSum(uint8_t *dataTX)
    {
      dataTX[1] = byte(0x100 - dataTX[0]);
    }

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 10 years ago in reply to ritamüller

    ok, try this

     

    /*
    *  RFID/NFC Modul for Arduino
    *  Read a block
    */
    
    uint8_t dataRX[35];//Receive buffer. 
    uint8_t dataTX[35];//Transmit buffer. 
    uint8_t _UID[4];// stores the UID (unique identifier) of a card. 
    uint8_t keyAccess[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };// stores the key or password. 
    uint8_t address = 0x04;//Address to read. 
    uint8_t ATQ[2];//Answer to request 
    uint8_t state;//state of the process 
    uint8_t aux[16];//Auxiliar buffer. 
    unsigned long time;
    unsigned long loop_time; // less the 2 second delay... dont forget
    unsigned long function_time;
    
    void setup()
    {
      //Start serial port 115200 bps: 
      Serial.begin(115200);
      delay(100);
      Serial.println("RFID/NFC @ 13.56 MHz module started");
      delay(1000);
      //!It is needed to launch a simple command to sycnchronize 
      getFirmware();
      configureSAM();
    }
    
    void loop()
    {
      Serial.print("\nReady to read..."); // optimise the prints by putting the new lines in the same print as the actual print
      loop_time = 0; // reset the loop timer
    
      ///////////////////////////////////////////////////////////// 
      //Get the UID Identifier 
      function_time = millis(); // we already had a one second delay in setup that is not part of the timeing so lets start with a clean count
      init(_UID, ATQ);
      time = millis() - function_time; //prints time to get the UID  
      loop_time += time;
      Serial.print("\nThe UID : ");
      print(_UID, 4);
      Serial.print("Time:");
      Serial.print(time);
      Serial.println(" ms"); // dont need the space and the ms on seperate prints, just do it in one, also by using println you get the new line at the end automatically
    
      //////////////////////////////////////////////////////////// 
      //Auntenticate a block with his keyAccess 
      function_time = millis();
      state = authenticate(_UID, address, keyAccess);
    time = millis() - function_time;//time the call 
      loop_time += time; // add this call to the overall time
      Serial.print("\n");
      if (state == 0) {
      Serial.println("Authentication block OK");
      Serial.print("Time:");
      Serial.print(time);
      Serial.println(" ms");
      }
      else {
      Serial.println("Authentication failed");
      }
      ///////////////////////////////////////////////////////////// 
      //Read from address after authentication 
      function_time = millis();
      state = readData(address, aux);
    time = millis() - function_time; // time the call
      loop_time += time; // add this call to the overall time
      Serial.print("\n");
    
    
    
    
      if (state == 0) {
      Serial.println("Read block OK");
      }
      else {
      Serial.println("Read failed");
      }
    
    
      Serial.print("\nData readed : ");
      print(aux, 16);
      Serial.print("\nTime:");
      Serial.print(time);
      Serial.println(" ms");
    
    
      Serial.print("\nTotal call time : ");
      Serial.print(loop_time);
      Serial.println(" ms");
      delay(2000); // wait 2 seconds before we loop again
    }
    //********************************************************************** 
    //!The goal of this command is to detect as many targets (maximum MaxTg) 
    // as possible in passive mode. 
    uint8_t init(uint8_t *UID, uint8_t *ATQ)   //! Request InListPassive 
    {
      Serial.flush();
    
    
    
    
      dataTX[0] = 0x04; // Length 
      lengthCheckSum(dataTX); // Length Checksum 
      dataTX[2] = 0xD4;
      dataTX[3] = 0x4A; // Code 
      dataTX[4] = 0x01; //MaxTarget 
      dataTX[5] = 0x00; //BaudRate = 106Kbps 
      dataTX[6] = 0x00; // Clear checkSum position 
      checkSum(dataTX);
    
    
    
    
      sendTX(dataTX, 7, 23);
    
    
    
    
      for (int i = 17; i < (21); i++) {
      _UID[i - 17] = dataRX[i];
      UID[i - 17] = _UID[i - 17];
      }
    
    
    
    
      ATQ[0] = dataRX[13];
      ATQ[1] = dataRX[14];
    
    
    
    
      if ((dataRX[9] == 0xD5) & (dataRX[10] == 0x4B) & (dataRX[11] == 0x01)) {
      return 0;
      }
      else {
      return 1;
      }
    }
    //********************************************************************** 
    //!A block must be authenticated before read and write operations 
    uint8_t authenticate(uint8_t *UID, uint8_t blockAddress, uint8_t *keyAccess)
    {
      dataTX[0] = 0x0F;
      lengthCheckSum(dataTX);
      dataTX[2] = 0xD4;
      dataTX[3] = 0x40; // inDataEchange 
      dataTX[4] = 0x01; //Number of targets 
      dataTX[5] = 0x60; // Authentication code 
      dataTX[6] = blockAddress;
      for (int i = 0; i < 6; i++) {
      dataTX[i + 7] = keyAccess[i];
      }
      dataTX[13] = UID[0];  dataTX[14] = UID[1];
      dataTX[15] = UID[2];  dataTX[16] = UID[3];
      dataTX[17] = 0x00;
      checkSum(dataTX);
      sendTX(dataTX, 18, 14);
    
    
    
    
      if ((dataRX[9] == 0xD5) & (dataRX[10] == 0x41) & (dataRX[11] == 0x00)) {
      return 0;
      }
      else {
      return 1;
      }
    }
    //********************************************************************** 
    //!Write 16 bytes in address . 
    uint8_t writeData(uint8_t address, uint8_t *blockData)  //!Writing 
    {
      Serial.print("                ");
      dataTX[0] = 0x15;
      lengthCheckSum(dataTX); // Length Checksum 
      dataTX[2] = 0xD4;
      dataTX[3] = 0x40;//inDataEchange CODE 
      dataTX[4] = 0x01;//Number of targets 
      dataTX[5] = 0xA0;//Write Command 
      dataTX[6] = address; //Address 
    
    
      for (int i = 0; i < 16; i++) {
      dataTX[i + 7] = blockData[i];
      }
    
      dataTX[23] = 0x00;
      checkSum(dataTX);
      sendTX(dataTX, 24, 14);
    
      if ((dataRX[9] == 0xD5) & (dataRX[10] == 0x41) & (dataRX[11] == 0x00)) {
      return 0;
      }
      else {
      return 1;
      }
    }
    //********************************************************************** 
    //!Read 16 bytes from  address . 
    uint8_t readData(uint8_t address, uint8_t *readData) //!Reading 
    {
      Serial.print("                ");
    
      dataTX[0] = 0x05;
      lengthCheckSum(dataTX); // Length Checksum 
      dataTX[2] = 0xD4; // Code 
      dataTX[3] = 0x40; // Code 
      dataTX[4] = 0x01; // Number of targets 
      dataTX[5] = 0x30; //ReadCode 
      dataTX[6] = address;  //Read address 
      dataTX[7] = 0x00;
      checkSum(dataTX);
      sendTX(dataTX, 8, 30);
      memset(readData, 0x00, 16);
    
      if ((dataRX[9] == 0xD5) & (dataRX[10] == 0x41) & (dataRX[11] == 0x00)) {
      for (int i = 12; i < 28; i++) {
      readData[i - 12] = dataRX[i];
      }
      return 0;
      }
      else {
      return 1;
      }
    }
    //********************************************************************** 
    //!The PN532 sends back the version of the embedded firmware. 
    bool getFirmware(void)  //! It is needed to launch a simple command to sycnchronize 
    {
      Serial.print("                ");
    
      memset(dataTX, 0x00, 35);
      dataTX[0] = 0x02; // Length 
      lengthCheckSum(dataTX); // Length Checksum 
      dataTX[2] = 0xD4; // CODE 
      dataTX[3] = 0x02; //TFI 
      checkSum(dataTX); //0x2A; //Checksum    
      sendTX(dataTX, 5, 17);
      Serial.print("Your Firmware version is : ");
    
    
      for (int i = 11; i < (15); i++) {
      Serial.print(dataRX[i], HEX);
      Serial.print(" ");
      }
      Serial.print("\n");
    }
    
    //********************************************************************** 
    //!Print data stored in vectors . 
    void print(uint8_t * _data, uint8_t length)
    {
      for (int i = 0; i < length; i++) {
      Serial.print(_data[i], HEX);
      Serial.print(" ");
      }
      Serial.print("\n");
    }
    //********************************************************************** 
    //!This command is used to set internal parameters of the PN532, 
    bool configureSAM(void)//! Configure the SAM 
    {
      Serial.print("               ");
      dataTX[0] = 0x05; //Length 
      lengthCheckSum(dataTX); // Length Checksum 
      dataTX[2] = 0xD4;
      dataTX[3] = 0x14;
      dataTX[4] = 0x01; // Normal mode 
      dataTX[5] = 0x14; // TimeOUT 
      dataTX[6] = 0x00; // IRQ 
      dataTX[7] = 0x00; // Clean checkSum position 
      checkSum(dataTX);
      sendTX(dataTX, 8, 13);
    }
    //********************************************************************** 
    //!Send data stored in dataTX 
    void sendTX(uint8_t *dataTX, uint8_t length, uint8_t outLength)
    {
      Serial.print(char(0x00));
      Serial.print(char(0x00));
      Serial.print(char(0xFF));
      for (int i = 0; i < length; i++) {
      Serial.print(char(dataTX[i]));
      }
      Serial.print(char(0x00));
      getACK();
      waitResponse();// Receive response 
      getData(outLength);
    }
    //********************************************************************** 
    //!Wait for ACK response and stores it in the dataRX buffer 
    void getACK(void)
    {
      delay(5);
      waitResponse();
      for (int i = 0; i < 5; i++) {
      dataRX[i] = Serial.read();
      }
    }
    //********************************************************************** 
    //!Wait the response of the module 
    void waitResponse(void)
    {
      int val = 0xFF;
      int cont = 0x00;
      while (val != 0x00) { //Wait for 0x00 response 
      val = Serial.read();
      delay(5);
      cont++;
      }
    }
    //********************************************************************** 
    //!Get data from the module 
    void getData(uint8_t outLength)
    {
      for (int i = 5; i < outLength; i++) {
      dataRX[i] = Serial.read();//read data from the module. 
      }
    }
    //********************************************************************** 
    //!Calculates the checksum and stores it in dataTX buffer 
    void checkSum(uint8_t *dataTX)
    {
      for (int i = 0; i < dataTX[0]; i++) {
      dataTX[dataTX[0] + 2] += dataTX[i + 2];
      }
      byte(dataTX[dataTX[0] + 2] = -dataTX[dataTX[0] + 2]);
    }
    //********************************************************************** 
    //!Calculates the length checksum and sotres it in the buffer. 
    uint8_t lengthCheckSum(uint8_t *dataTX)
    {
      dataTX[1] = byte(0x100 - dataTX[0]);
    }

     

    I took out some redundent print statements (Or not necessary as they can be optimised into single line), I hope this did not break the code

     

    The main mistake you where doing is this

    the main loop has a 2 second delay in it, you where not eliminating this from your timeing, second you had a one second delay in startup, this was also included in your time, then you also had all the print statements to the screen (Console) also included in your time

     

    What I did and the main change in your code is introduce a seperate timer value "function_time" that is set to millis() just before a call to read the chips, then I subtract it from the new mills() once done, this tells us how long the function call actually took. The "loop_time" simply adds up all the funcrtion_time values to see what the total is without having to keep track with a calculator after a run

     

    Hope this helps

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Reject Answer
    • Cancel
  • ritamüller
    0 ritamüller over 10 years ago in reply to Robert Peter Oakes

    It seems better

     

    image

     

    Thanks for reply.

     

    Rita

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • Robert Peter Oakes
    0 Robert Peter Oakes over 10 years ago in reply to ritamüller

    good, that first one still seems a little slow but that may be its nature

     

    Glad it helped

     

    Peter

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • ritamüller
    0 ritamüller over 10 years ago in reply to Robert Peter Oakes

    Hi Peter ,

    is the first Time just to get the  UID?

     

    what reason can I give,  that's the time so long is for UID ?

     

    Regards ,

     

    Rita

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • clem57
    0 clem57 over 10 years ago in reply to ritamüller

    See http://electronics.howstuffworks.com/near-field-communication.htm . This explains some of what NFC does. To protect the transmission, a handshake is made to verify and encrypt later transmissions that will be made resulting in a UID. I can write a book here, but just say encryption is not cheap to set up both in processor and communication.

    Clem

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
element14 Community

element14 is the first online community specifically for engineers. Connect with your peers and get expert answers to your questions.

  • Members
  • Learn
  • Technologies
  • Challenges & Projects
  • Products
  • Store
  • About Us
  • Feedback & Support
  • FAQs
  • Terms of Use
  • Privacy Policy
  • Legal and Copyright Notices
  • Sitemap
  • Cookies

An Avnet Company © 2025 Premier Farnell Limited. All Rights Reserved.

Premier Farnell Ltd, registered in England and Wales (no 00876412), registered office: Farnell House, Forge Lane, Leeds LS12 2NE.

ICP 备案号 10220084.

Follow element14

  • X
  • Facebook
  • linkedin
  • YouTube