<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Lettore ID-12 Archives - Esperimenti con logiche programmabili</title>
	<atom:link href="https://logicaprogrammabile.it/tag/lettore-id-12/feed/" rel="self" type="application/rss+xml" />
	<link>https://logicaprogrammabile.it/tag/lettore-id-12/</link>
	<description>Tutorial in italiano per imparare a programmare usando Arduino, Raspberry PI, Netduino</description>
	<lastBuildDate>Mon, 13 Feb 2017 17:39:02 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>

<image>
	<url>https://logicaprogrammabile.it/wp-content/uploads/2017/11/cropped-logicaprogrammabile-logo-02-32x32.png</url>
	<title>Lettore ID-12 Archives - Esperimenti con logiche programmabili</title>
	<link>https://logicaprogrammabile.it/tag/lettore-id-12/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Come calcolare il crc del tag con Netduino e lettore RFID ID-12</title>
		<link>https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/</link>
					<comments>https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/#respond</comments>
		
		<dc:creator><![CDATA[Marco Lai]]></dc:creator>
		<pubDate>Thu, 13 Oct 2011 16:48:11 +0000</pubDate>
				<category><![CDATA[Tutorial Netduino]]></category>
		<category><![CDATA[ID-12]]></category>
		<category><![CDATA[Lettore ID-12]]></category>
		<category><![CDATA[Netduino]]></category>
		<category><![CDATA[RFID]]></category>
		<guid isPermaLink="false">https://logicaprogrammabile.it/?p=2080</guid>

					<description><![CDATA[<p>Utilizzare il Netduino per calcolare il crc del tag rfid Nell&#8217;articolo scritto qualche tempo, che mostrava come impiegare un Netduino ed un lettore rfid ID-12 della Innovations, ho descritto solamente la parte che acquisiva l&#8217;id del tag, senza analizzare come calcolare il crc indispensabile per...</p>
<p>The post <a href="https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/">Come calcolare il crc del tag con Netduino e lettore RFID ID-12</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h1>Utilizzare il Netduino per calcolare il crc del tag rfid</h1>
<p><a title="Netduino gestire lettore RFID ID-12" href="https://logicaprogrammabile.it/netduino-gestire-lettore-id-12/">Nell&#8217;articolo scritto qualche tempo</a>, che mostrava come impiegare un <strong>Netduino</strong> ed un lettore <strong>rfid ID-12</strong> della Innovations, ho descritto solamente la parte che acquisiva l&#8217;id del tag, senza analizzare come calcolare il crc indispensabile per avere la certezza che il dato letto fosse corretto.</p>
<p><img decoding="async" class="aligncenter size-full wp-image-1051" title="DataStructureID12" src="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DataStructureID12.gif" alt="" width="650" height="61" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/05/DataStructureID12.gif 650w, https://logicaprogrammabile.it/wp-content/uploads/2011/05/DataStructureID12-300x28.gif 300w" sizes="(max-width: 650px) 100vw, 650px" /></p>
<p>Riprendo questo argomento su segnalazione di una gentilissima visitatrice <a href="http://community.dotnetwork.it/Sabrina/default.aspx" target="_blank">Sabrina Cosolo</a>, che ringrazio per avermi fatto notare un errore nell&#8217;illustrazione del <a href="http://it.wikipedia.org/wiki/Cyclic_redundancy_check" target="_blank">calcolo del crc</a>, infatti scrissi che i due byte del crc fossero ottenuti ponendo in OR i 10 byte dell&#8217;id del tag.<br />
Questo non è vero in quanto bisogna mettere in XOR i valori esadecimali ottenuti dalla conversione in ASCII dei byte letti dal lettore.</p>
<p><span id="more-2080"></span>Mi spiego meglio impiegando l&#8217;illustrazione seguente</p>
<p style="text-align: center;"><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-2083" title="Calcolo CRC lettore tag RFFID ID-12" src="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ID12_CRC.gif" alt="calcolare il crc lettore Innovations ID-12" width="638" height="380" srcset="https://logicaprogrammabile.it/wp-content/uploads/2011/10/ID12_CRC.gif 638w, https://logicaprogrammabile.it/wp-content/uploads/2011/10/ID12_CRC-300x178.gif 300w" sizes="(max-width: 638px) 100vw, 638px" /></p>
<p>i 10 byte rappresentano l&#8217;id del tag, mentre i due byte rappresentano il valore di crc. Il calcolo viene eseguito convertendo i singoli byte in valori ASCII, per ottenere 5 valori esadecimali prendendo 2 byte alla volta, come visibile in figura. Eseguendo un calcolo XOR di questi valori esadecimali otteniamo il calore del CRC.</p>
<p>Ora la difficoltà che ho riscontrato è quella di convertire un byte in un valore esadecimale, semplicissimo da fare con il .Net framework ma non altrettanto con la versione micro (non sono riuscito a trovare delle risorse che svolgessero questo compito!), quindi ho scritto un po di codice per arrangiarmi, mi rendo conto che non è il massimo ma diciamo che per questo esempio funziona!!</p>
<p>Ho commentato il codice per spiegare meglio il funzionamento.</p>
<pre class="lang:c# decode:true ">using System;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.Netduino;

using System.IO.Ports;
using System.Text;

namespace Netduino_ID12Reader
{
public class Program
{
    public static Byte ConvHexToByte(String Value)
    {
      if (Value.Length == 2)
      {
        String str1 = Value.Substring(0, 1);
        String str2 = Value.Substring(1, 1);

        if (str1.ToUpper() == "A")
          str1 = "10";

        if (str1.ToUpper() == "B")
          str1 = "11";

        if (str1.ToUpper() == "C")
          str1 = "12";

        if (str1.ToUpper() == "D")
          str1 = "13";

        if (str1.ToUpper() == "E")
          str1 = "14";

        if (str1.ToUpper() == "F")
          str1 = "15";

        //###########################
        if (str2.ToUpper() == "A")
          str2 = "10";

        if (str2.ToUpper() == "B")
          str2 = "11";

        if (str2.ToUpper() == "C")
          str2 = "12";

        if (str2.ToUpper() == "D")
          str2 = "13";

        if (str2.ToUpper() == "E")
          str2 = "14";

        if (str2.ToUpper() == "F")
          str2 = "15";

        //converto i singoli caratteri in valori byte
        Byte b1 = Byte.Parse(str1);
        Byte b2 = Byte.Parse(str2);
        //onverto i duebyte in un valore hex
        Byte cv = (Byte)(b1 * 16 + b2);

        //Debug.Print(cv.ToString());

        return cv;

      }

      return 0;
    }

    public static void Main()
    {
      SerialPort sp = new SerialPort("COM1", 9600, Parity.None, 8);
      OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
      UTF8Encoding asen = new UTF8Encoding();

      //apro la oprta seriale per acquisire i dati dal lettore id-12
      sp.Open();

      while (true)
      {
        Thread.Sleep(200);
        led.Write(false);

        //controllo ciclicamente che arrivino tutti i
        //byte dal lettore
        if (sp.BytesToRead == 16)
        {
          Byte[] b = new Byte[sp.BytesToRead];
          Byte[] tag = new Byte[10];

          Byte Hex01, Hex02, Hex03, Hex04, Hex05, crc;

          //leggo tutti i byte provenienti dal lettore
          sp.Read(b, 0, b.Length);

          //copio i 10 byte dell'ID del tag in un array dedicato
          Array.Copy(b, 1, tag, 0, 10);

          //converto i byte in una stringa ASCII
          String ValoriAsc = new String(UTF8Encoding.UTF8.GetChars(tag));

          //ottengo i valori esadecimali dalla coppia di byte Ascii
          Hex01 = ConvHexToByte(ValoriAsc.Substring(0, 2));
          Hex02 = ConvHexToByte(ValoriAsc.Substring(2, 2));
          Hex03 = ConvHexToByte(ValoriAsc.Substring(4, 2));
          Hex04 = ConvHexToByte(ValoriAsc.Substring(6, 2));
          Hex05 = ConvHexToByte(ValoriAsc.Substring(8, 2));

          //calcolo il crc mettendo in xor i valori hex
          crc = (byte)(Hex01 ^ Hex02 ^ Hex03 ^ Hex04 ^ Hex05);

          //printo il valore di crc
          Debug.Print(crc.ToString());

          if (b[0] == 0x02 &amp;&amp; b[13] == 0xD &amp;&amp; b[14] == 0xA &amp;&amp; b[15] == 0x03)
            led.Write(true);

        }

      }

    }
}
}</pre>
<p>&nbsp;</p>
<p>Il calcolo del crc può risultare utile nel caso di applicazioni dove la certezza di aver letto bene l&#8217;id del tag è fondamentale, come, per esempio in applicazioni come alcune delle applicazioni illustrate <a href="http://it.wikipedia.org/wiki/Radio_Frequency_IDentification#Applicazioni_RFID">nella pagina di wikipedia</a> dedicata al sistema RFID.</p>
<p>Per considerazioni e spiegazioni aggiuntive vi invito a scrivermi nei commenti o tramite mail</p>
<p>al prossimo articolo&#8230;</p>
<p>The post <a href="https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/">Come calcolare il crc del tag con Netduino e lettore RFID ID-12</a> appeared first on <a href="https://logicaprogrammabile.it">Esperimenti con logiche programmabili</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://logicaprogrammabile.it/calcolare-il-crc-tag-netduino-lettore-rfid-id12/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
