Autor Tema: Comenzando con NFC  (Leído 19592 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Comenzando con NFC
« Respuesta #30 en: 07 de Agosto de 2014, 15:23:52 »
Bien, ya he terminado las pruebas con éxito. He conseguido implementar el protocolo ISO14443-A y leer el identificador (UID) de unos tags NFC.

Los tags que he utilizado son estos:



Lamentablemente, cuando he terminado de probarlo todo y me disponía a grabar un vídeo del dispositivo, al tirar de un cable he roto el prototipo. Se han levantado unas pistas que llegan al QFN y me es imposible repararlo sin fabricar otra PCB. Así que nos quedamos sin vídeo.

Pero aquí os dejo el código que he usado para probar el prototipo:
Código: C
  1. #include <16F876A.h>
  2. #device ADC=16
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES NOBROWNOUT               //No brownout reset
  6. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  7.  
  8. #use delay(crystal=20000000)
  9.  
  10. #define HAY_PUERTO_SERIE
  11.  
  12. #use rs232(baud=57600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=CR95HF)
  13.  
  14. #ifdef HAY_PUERTO_SERIE
  15. #use rs232(baud=9600,parity=N,xmit=PIN_B0,rcv=PIN_B1,bits=8,stream=SERIE)
  16. #endif
  17.  
  18. #define LONG_MAX_BUFFER 16
  19.  
  20. #define LED_ROJO  PIN_B2
  21. #define LED_VERDE PIN_B5
  22.  
  23. char buffer[LONG_MAX_BUFFER];
  24. unsigned int8 indice=0;
  25. unsigned int8 ModoHex=0;
  26. unsigned int8 HayRespuesta=0;
  27. unsigned int8 Detectada=0;
  28.  
  29. char UID[7]={0,0,0,0,0,0,0};
  30.  
  31. char const tarjeta_valida[7]= {0x04, 0x66, 0xC3, 0xDC, 0x36, 0x80, 0x28};
  32.  
  33. // Cada vez que se recibe un carácter del CR95HF se almacena en el buffer y
  34. // reseteamos el timer
  35. #INT_RDA
  36. void RecibeByteCR95HF() {
  37.    buffer[indice]=fgetc(CR95HF);
  38.    if (indice<LONG_MAX_BUFFER)
  39.       indice++;
  40.    set_timer1(0);
  41. }
  42.  
  43. // Si el timer desborda, es que hace "tiempo" que el CR95HF no envía nada, por
  44. // tanto entendemos que la trama ha terminado de llegar y la procesamos
  45. #INT_TIMER1
  46. void BufferCompleto() {
  47.    unsigned int8 i=0;
  48.  
  49.    disable_interrupts(INT_TIMER1);
  50.    if (indice) {
  51.       #ifdef HAY_PUERTO_SERIE
  52.          for (i=0;i<indice;i++) {
  53.             if ((i<2) || (ModoHex))
  54.                fprintf(SERIE,"%02X ",buffer[i]);
  55.               else
  56.                fprintf(SERIE,"%C",buffer[i]);
  57.          }
  58.       #endif  
  59.          indice=0;
  60.          HayRespuesta=1;
  61.          #ifdef HAY_PUERTO_SERIE
  62.          fprintf (SERIE,"\n\r");
  63.          #endif
  64.    }
  65.    set_timer1(0);
  66.    enable_interrupts(INT_TIMER1);
  67. }
  68.  
  69. void main()
  70. {
  71.    unsigned int8 i;
  72.    
  73.    setup_timer_1 (T1_INTERNAL | T1_DIV_BY_8);
  74.    set_timer1(0);
  75.    #ifdef HAY_PUERTO_SERIE
  76.    fprintf (SERIE,"\n\rLECTOR NFC\n\r\n\r");
  77.    #endif
  78.    enable_interrupts(INT_RDA);
  79.    enable_interrupts(INT_TIMER1);
  80.    enable_interrupts(GLOBAL);
  81.    
  82.    ModoHex=0;
  83.    
  84.    // IDN: identificación del CR95HF
  85.    #ifdef HAY_PUERTO_SERIE
  86.    fprintf (SERIE,">>01 00 --- ");
  87.    #endif
  88.    fprintf (CR95HF,"%c%c",1,0);
  89.    while (!HayRespuesta);
  90.    HayRespuesta=0;
  91.    
  92.    // Protocol Select: ISO14443-A
  93.    Buffer[1]=1;
  94.    ModoHex=1;
  95.    #ifdef HAY_PUERTO_SERIE
  96.    fprintf (SERIE,">>02 02 02 00 --- ");
  97.    #endif
  98.    fprintf (CR95HF,"%c%c%c%c",2,2,2,0);
  99.    while (!HayRespuesta);
  100.    HayRespuesta=0;
  101.    if (Buffer[0] || Buffer[1]) {// Si la respuesta es distinto a 0x00 0x00
  102.       #ifdef HAY_PUERTO_SERIE
  103.       fprintf (SERIE, "No se ha podido establecer el protocolo ISO14443-A\n\r");
  104.       #endif
  105.       while (1);
  106.    }
  107.    
  108.    // Una vez inicializado, entramos en un bucle de detección y lectura de tags
  109.    while (1) {
  110.       while (!Detectada) {
  111.          // REQA: detección de tarjeta
  112.          #ifdef HAY_PUERTO_SERIE
  113.          fprintf (SERIE,">>04 02 26 07 --- ");
  114.          #endif
  115.          fprintf (CR95HF,"%c%c%c%c",4,2,0x26,7);
  116.          while (!HayRespuesta);
  117.          HayRespuesta=0;
  118.          Detectada = !((Buffer[0]==0x87) && (Buffer[1]==0x00));
  119.       }
  120.       #ifdef HAY_PUERTO_SERIE
  121.       fprintf (SERIE, "Tarjeta detectada\n\r");
  122.       #endif
  123.       Detectada=0;
  124.      
  125.       // ANTICOL 1
  126.       #ifdef HAY_PUERTO_SERIE
  127.       fprintf (SERIE,">>04 03 93 20 08 --- ");
  128.       #endif
  129.       fprintf (CR95HF,"%c%c%c%c%c",4,3,0x93,0x20,0x08);
  130.       while (!HayRespuesta);
  131.       HayRespuesta=0;
  132.       if ((Buffer[0]==0x80) && (Buffer[1]==0x08)) {
  133.          #ifdef HAY_PUERTO_SERIE
  134.          fprintf (SERIE,"UID %02X%02X%02X%02X%02X\n\r",Buffer[2],Buffer[3],Buffer[4],Buffer[5],Buffer[6]);
  135.          #endif
  136.          UID[0]=Buffer[3];
  137.          UID[1]=Buffer[4];
  138.          UID[2]=Buffer[5];
  139.       } else
  140.          break;
  141.          
  142.       // SELECT 1  
  143.       #ifdef HAY_PUERTO_SERIE  
  144.       fprintf (SERIE,">>04 08 93 70 %02X%02X%02X%02X%02X %02X--- ",Buffer[2],Buffer[3],Buffer[4],Buffer[5],Buffer[6],Buffer[7]);
  145.       #endif
  146.       fprintf (CR95HF,"%c%c%c%c%c%c%c%c%c%c",0x04,0x08,0x93,0x70,Buffer[2],Buffer[3],Buffer[4],Buffer[5],Buffer[6],Buffer[7]);
  147.       while (!HayRespuesta);
  148.       HayRespuesta=0;  
  149.      
  150.       // ANTICOL 2
  151.       #ifdef HAY_PUERTO_SERIE
  152.       fprintf (SERIE,">>04 03 95 20 08 --- ");
  153.       #endif
  154.       fprintf (CR95HF,"%c%c%c%c%c",4,3,0x95,0x20,0x08);
  155.       while (!HayRespuesta);
  156.       HayRespuesta=0;
  157.       UID[3]=Buffer[3];
  158.       UID[4]=Buffer[4];
  159.       UID[5]=Buffer[5];
  160.       UID[6]=Buffer[6];
  161.      
  162.       #ifdef HAY_PUERTO_SERIE
  163.       fprintf (SERIE,"UID: %02X%02X%02X%02X%02X%02X%02X\n\r",UID[0],UID[1],UID[2],UID[3],UID[4],UID[5],UID[6]);
  164.       #endif
  165.      
  166.       // Comparamos el UID leído con el de nuestra tarjeta válida
  167.       Detectada=1;
  168.       for (i=0;i<7;i++)
  169.          if (UID[i]!=tarjeta_valida[i])
  170.             Detectada=0;
  171.      
  172.       if (Detectada)
  173.          output_high (LED_VERDE);
  174.         else
  175.          output_high (LED_ROJO);
  176.      
  177.       Detectada=0;
  178.       delay_ms(1000);
  179.       output_low(LED_VERDE);
  180.       output_low(LED_ROJO);
  181.    };
  182.    
  183. }

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Comenzando con NFC
« Respuesta #31 en: 09 de Agosto de 2014, 17:33:27 »
Hola Nocturno

Esta noticia no es tan mala,
mirándolo de distinta forma...

piensa que deberás de hacer otra pcb para no quedar entre dicho de que funcionaba  ;-)
y de paso la buena.. buena.. buena  noticia es que ahora si que puedes hacer un vídeo
para el vecino del tercero de como sueldas los componentes tan chicos  :D

asi que es una muy buena noticia y ademas de paso puedes mejorar la placa,
a mi pensar en una buena noticia mirándolo
desde otras perspectivas diferente  :mrgreen:

animo compañero...

que queremos verla...  :D


« Última modificación: 10 de Agosto de 2014, 07:53:54 por pajaro »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Comenzando con NFC
« Respuesta #32 en: 27 de Septiembre de 2014, 15:48:54 »
Os debía este vídeo

Desconectado Kid_Bengala

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 490
Re: Comenzando con NFC
« Respuesta #33 en: 16 de Noviembre de 2014, 12:58:46 »
COmo mola ¿Ya hiciste las pruebas con el android?

Es una pena no contar con los mismos conocimientos, con lo que me gustan estas cosas  :-/

saludos

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Comenzando con NFC
« Respuesta #34 en: 16 de Noviembre de 2014, 13:48:49 »
No fui capaz de conseguir que el Android emulase a un tag NFC, pero estoy seguro que se puede. En mi caso, ha sido mi cliente quien finalmente va a desarrollar la parte de Android así que me dediqué a otra cosa.

Que no te pare la falta de conocimientos. ¿A qué no sabes cuándo descubrí la existencia del NFC?

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Comenzando con NFC
« Respuesta #35 en: 16 de Noviembre de 2014, 14:39:35 »
 :mrgreen: joder macho como te divierte!!!!!

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Comenzando con NFC
« Respuesta #36 en: 15 de Enero de 2015, 16:57:12 »
No fui capaz de conseguir que el Android emulase a un tag NFC, pero estoy seguro que se puede. En mi caso, ha sido mi cliente quien finalmente va a desarrollar la parte de Android así que me dediqué a otra cosa.

Que no te pare la falta de conocimientos. ¿A qué no sabes cuándo descubrí la existencia del NFC?

me surge una duda, como es la comunicacion entre transeivers?, los dos tienen que tener alimentacion? un transeiver puede alimentar solo un dispositivo tipo tag? o puede alimentar otro transeiver? los tag son siempre comprados o hay CI que funcionan como tag's?

Saludos!
-
Leonardo Garberoglio

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Comenzando con NFC
« Respuesta #37 en: 16 de Enero de 2015, 02:48:49 »
La alimentación del transceiver puede obtenerse desde la propia antena.
De hecho, en este kit de evaluación que compré, el dispositivo esclavo no lleva alimentación y es capaz incluso de encender su LCD.
¿A qué llamas "funcionar como tag"?

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Comenzando con NFC
« Respuesta #38 en: 16 de Enero de 2015, 08:15:40 »
La alimentación del transceiver puede obtenerse desde la propia antena.
De hecho, en este kit de evaluación que compré, el dispositivo esclavo no lleva alimentación y es capaz incluso de encender su LCD.
¿A qué llamas "funcionar como tag"?


Que bien!!!

funcionar como tag sería poder fabricar (saber que hay adentro) de esos discos redondos que dicen "TAP HERE" en tu video. Yo tenía que esos discos se llamaban TAG's NFC.

Yo estoy por probar estos transeiver TRF7970A de TI. Y tambien estoy viendo este trasnponder que dice poder funcioanr como TAG RF430CL330H

saludos!
-
Leonardo Garberoglio

Desconectado AG1

  • PIC16
  • ***
  • Mensajes: 105
Re: Comenzando con NFC
« Respuesta #39 en: 06 de Octubre de 2015, 16:52:24 »
Tenía guardado un módulo NFC PN532 y me he decidido a probarlo. Había pensado hacerlo con un Arduino Mini Pro pero la idéa de tener tantos cables y módulos colgando(Modulo PN532, Arduino Mini Pro y Adaptador USB-RS232 TTL) no me convencía. Por otro lado pensé hacerlo con PIC, que prefiero antes que Arduino, pero tenia que montar una prototipo y programar el PIC.

Al final he decidido hacer un programa en C y comunicarme con el módulo desde el ordenador con con adaptador USB-RS232 TTL:


Conectando un módulo PN532 a un adapaptador USB-TTL RS232 podemos construir un lector para una rápida evaluación de este módulo RFID NFC.





En primer lugar configuraremos los jumper del módulo PN532 para que podamos comunicarnos con el a través de su UART, ya que por defecto suelen estar configurados para comunicación SPI:



A continuación realizaremos las conexiones entre el módulo PN532 y el adaptador USB-RS232, con cuatro cables:



Conectaremo el adaptador USB a una conexión USB del ordenador que vayamos a utilizar:

Tomaremos nota del número de puerto COM virtual que Windows asigna al adaptador USB-TTL RS232.

Lanzaremos el programa PN532_RD_Mifare con el parámetro del número de puerto COM que Windows haya asignado al adaptador USB-TTL RS232:



En caso de haberse realizado con exito la conexión con el módulo PN532, el programa quedará a la espera de el módulo PN532 detecte una tarjeta Mifare:



Aproximamos una tarjeta de transporte público Mifare Classic de 1K, cuyos 64 bloques están protegidos por claves, el programa visualizará el tipo de tarjeta, el UID de la misma y el número de bytes del UID:




El programa queda esperando la detección de tarjetas. Aproximamos al módulo una etiqueta Mifare Ultralight C:




El programa queda a la espera. Aproximamos otra tarjeta Mifare Classic 1K con algunos bloques protegidos:



Finalmente aproximamos al lector un llavero Mifare Classic 1K , sin protección alguna:



Salu2.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Comenzando con NFC
« Respuesta #40 en: 06 de Octubre de 2015, 17:32:16 »
Espetacular AG1, algun dia me voy a poner con eso...

Desconectado AG1

  • PIC16
  • ***
  • Mensajes: 105
Re: Comenzando con NFC
« Respuesta #41 en: 06 de Octubre de 2015, 18:01:58 »
 :) KILLERJC:
Con estos módulos es mucho más fácil de hacer un programa para PIC que con los RC522 (que además no son NFC) . Lo que si les hecho en falta es que no sean compatibles con el standard ISO15693.
Salu2.

Espetacular AG1, algun dia me voy a poner con eso...

Desconectado maisystems

  • PIC10
  • *
  • Mensajes: 8
Re:Comenzando con NFC
« Respuesta #42 en: 02 de Mayo de 2018, 15:23:49 »
https://www.youtube.com/watch?time_continue=3&v=8pMn6xoYqBc
Buenas, mira este video que a lo mejor te puede interesar.
Es de un proyecto que subí y el mensaje con el enlace aqui en todopic , en proyectos.
http://www.todopic.com.ar/foros/index.php?topic=48707.msg404692#msg404692
Espero que te sirva.


 

anything