<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=8155&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-03-19T13:28:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=8155&amp;mode</id>
<entry>
<author><name><![CDATA[ElektroTME]]></name></author>
<updated>2017-03-19T13:28:58+01:00</updated>
<published>2017-03-19T13:28:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=185151#p185151</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=185151#p185151"/>
<title type="html"><![CDATA[Re: nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=185151#p185151"><![CDATA[
Jak ktoś jeszcze potrzebuje, to lekko poprawiona biblioteka dla układu NFC PN532, komunikacja SPI, testowane na ATmega328P pod MkCLIPSE'm:<br /><br />[syntax=c]/**<br />    File Name: nfc_pn532.c<br />         <br />    C Library for the PN532 written for the A Mega644.<br />    Adapted from pn532.cpp written by Adafruit Industries<br /><br />    Author: Renato Amez<br /><br />    Poprawki biblioteki dla ATmega328P i testy pod MkCLIPSE: ElektroTME<br /><br />*/<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &quot;nfc_pn532.h&quot;<br /><br />char pn532ack&#91;&#93; = {0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00};<br />char pn532response_firmwarevers&#91;&#93; = {0x00, 0xFF, 0x06, 0xFA, 0xD5, 0x03};<br /><br />#define PN532_PACKBUFFSIZ    64<br />char pn532_packetbuffer&#91;PN532_PACKBUFFSIZ&#93;;<br /><br />// SET THE ACTUAL VALUE OF THE PINS BEFORE USING<br />#define PN532_CLK        PINB5    // SPI clock pin<br />#define PN532_MISO        PINB4    // SPI MISO pin<br />#define PN532_MOSI        PINB3     // SPI MOSI pin<br />#define PN532_CS        PINB2    // SPI chip select pin (CS/SSEL)<br /><br />// CURRENT SETUP AT PORT B. SUBJECT TO CHANGE AT FINAL IMPLEMENTATION<br />#define DDRX            DDRB<br />#define PORTX           PORTB<br />#define PINX            PINB<br /><br />void setupPins( void ) {<br />    // Change desired port DDRx and set MISO to INPUT, others to OUTPUT<br />    DDRX = ( 1 &lt;&lt; PN532_MOSI ) | ( 1 &lt;&lt; PN532_CLK ) | ( 1 &lt;&lt; PN532_CS );<br /><br />    SPCR = ( 1 &lt;&lt; MSTR ) | ( 1 &lt;&lt; SPR0 ) | ( 1 &lt;&lt; SPE ) | ( 1 &lt;&lt; DORD );<br />}<br /><br />void begin( void ) {<br />    PORTX &amp;= ~( 1 &lt;&lt; PN532_CS );<br /><br />    _delay_ms( 1000 );<br /><br />    // send dummy command to get it synched up<br />    pn532_packetbuffer&#91;0&#93; = PN532_FIRMWAREVERSION;<br />    //uint8_t check= sendCommandCheckAck(pn532_packetbuffer, 1, 1000);<br />}<br /><br />uint32_t getFirmwareVersion( void ) {<br />    uint32_t response;<br /><br />    pn532_packetbuffer&#91;0&#93; = PN532_FIRMWAREVERSION;<br /><br />    if ( 0 == sendCommandCheckAck( pn532_packetbuffer, 1, 1000 ) ) return 0;<br /><br />    // read data packet<br />    readspidata( pn532_packetbuffer, 12 );<br /><br />    // check some basic stuff<br />    if ( 0 != strncmp(( char* )pn532_packetbuffer,<br />                      ( char* )pn532response_firmwarevers, 6 ) )<br />        return 0;<br /><br />    response = pn532_packetbuffer&#91;6&#93;;<br />    response &lt;&lt;= 8;<br />    response |= pn532_packetbuffer&#91;7&#93;;<br />    response &lt;&lt;= 8;<br />    response |= pn532_packetbuffer&#91;8&#93;;<br />    response &lt;&lt;= 8;<br />    response |= pn532_packetbuffer&#91;9&#93;;<br /><br />    return response;<br /><br />}<br /><br />// default timeout of one second<br />uint8_t sendCommandCheckAck( char *cmd, uint8_t cmdlen, uint16_t timeout ) {<br />    uint16_t timer = 0;<br /><br />    // write the command<br />    spiwritecommand( cmd, cmdlen );<br /><br />    // wait for the chip to say it's ready<br />    while ( readspistatus() != PN532_SPI_READY ) {<br />        if ( timeout != 0 ) {<br />            timer += 10;<br />            if ( timer &gt; timeout ) {<br />                return 0;<br />            }<br />        }<br />        _delay_ms( 10 );<br />    }<br /><br />    // read acknowledgement<br />    if ( 0 == spi_readack() ) {<br />        return 0;<br />    }<br /><br />    timer = 0;<br />    // wait for the chip to say it's ready<br />    while ( readspistatus() != PN532_SPI_READY ) {<br />        if ( timeout != 0 ) {<br />            timer += 10;<br />            if ( timer &gt; timeout ) {<br />                return 0;<br />            }<br />        }<br />        _delay_ms( 10 );<br />    }<br /><br />    return 1;<br />}<br /><br />uint8_t SAMConfig( void ) {<br />    pn532_packetbuffer&#91;0&#93; = PN532_SAMCONFIGURATION;<br />    pn532_packetbuffer&#91;1&#93; = 0x01; // normal mode<br />    pn532_packetbuffer&#91;2&#93; = 0x14; // timeout 50ms * 20 = 1 second<br />    pn532_packetbuffer&#91;3&#93; = 0x01; // use IRQ pin!<br /><br />    if ( 0 == sendCommandCheckAck( pn532_packetbuffer, 4, 1000 ) ) return 0;<br /><br />    // read data packet<br />    readspidata( pn532_packetbuffer, 8 );<br /><br />    return ( pn532_packetbuffer&#91;5&#93; == 0x15 ? 1 : 0 );<br />}<br /><br />uint8_t authenticateBlock( uint8_t cardnumber, uint32_t cid, uint8_t blockaddress,<br />                           uint8_t authtype, uint8_t* keys ) {<br />    pn532_packetbuffer&#91;0&#93; = PN532_INDATAEXCHANGE;<br />    pn532_packetbuffer&#91;1&#93; = cardnumber;<br /><br />    if ( authtype == KEY_A ) {<br />        pn532_packetbuffer&#91;2&#93; = PN532_AUTH_WITH_KEYA;<br />    } else {<br />        pn532_packetbuffer&#91;2&#93; = PN532_AUTH_WITH_KEYB;<br />    }<br />    pn532_packetbuffer&#91;3&#93; = blockaddress; // Address can be 0-63 for MIFARE 1K card<br /><br />    pn532_packetbuffer&#91;4&#93; = keys&#91;0&#93;;<br />    pn532_packetbuffer&#91;5&#93; = keys&#91;1&#93;;<br />    pn532_packetbuffer&#91;6&#93; = keys&#91;2&#93;;<br />    pn532_packetbuffer&#91;7&#93; = keys&#91;3&#93;;<br />    pn532_packetbuffer&#91;8&#93; = keys&#91;4&#93;;<br />    pn532_packetbuffer&#91;9&#93; = keys&#91;5&#93;;<br /><br />    pn532_packetbuffer&#91;10&#93; = (( cid &gt;&gt; 24 ) &amp; 0xFF );<br />    pn532_packetbuffer&#91;11&#93; = (( cid &gt;&gt; 16 ) &amp; 0xFF );<br />    pn532_packetbuffer&#91;12&#93; = (( cid &gt;&gt; 8 ) &amp; 0xFF );<br />    pn532_packetbuffer&#91;13&#93; = (( cid &gt;&gt; 0 ) &amp; 0xFF );<br /><br />    if ( 0 == sendCommandCheckAck( pn532_packetbuffer, 14, 1000 ) ) return 0;<br /><br />    // read data packet<br />    readspidata( pn532_packetbuffer, 2 + 6 );<br /><br />    if (( pn532_packetbuffer&#91;6&#93; = 0x41 ) &amp;&amp; ( pn532_packetbuffer&#91;7&#93; == 0x00 ) ) {<br />        return 1;<br />    } else {<br />        return 0;<br />    }<br />}<br /><br />uint8_t readMemoryBlock( uint8_t cardnumber, uint8_t blockaddress, uint8_t* block ) {<br />    pn532_packetbuffer&#91;0&#93; = PN532_INDATAEXCHANGE;<br />    pn532_packetbuffer&#91;1&#93; = cardnumber;<br />    pn532_packetbuffer&#91;2&#93; = PN532_MIFARE_READ;<br />    pn532_packetbuffer&#91;3&#93; = blockaddress;<br /><br />    if ( 0 == sendCommandCheckAck( pn532_packetbuffer, 4, 1000 ) ) return 0;<br /><br />    // read data packet<br />    readspidata( pn532_packetbuffer, 18 + 6 );<br />    for ( uint8_t i = 8; i &lt; 18 + 6; i++ ) {<br />        block&#91;i-8&#93; = pn532_packetbuffer&#91;i&#93;;<br />    }<br /><br />    if (( pn532_packetbuffer&#91;6&#93; == 0x41 ) &amp;&amp; ( pn532_packetbuffer&#91;7&#93; == 0x00 ) ) {<br />        return 1; // read successful<br />    } else {<br />        return 0;<br />    }<br />}<br /><br />// Do not write to Sector Trailer Block unless you know what you are doing<br />uint8_t writeMemoryBlock( uint8_t cardnumber, uint8_t blockaddress, uint8_t* block ) {<br />    pn532_packetbuffer&#91;0&#93; = PN532_INDATAEXCHANGE;<br />    pn532_packetbuffer&#91;1&#93; = cardnumber;<br />    pn532_packetbuffer&#91;2&#93; = PN532_MIFARE_WRITE;<br />    pn532_packetbuffer&#91;3&#93; = blockaddress;<br /><br />    for ( uint8_t byte = 0; byte &lt; 16; byte++ ) {<br />        pn532_packetbuffer&#91;4+byte&#93; = block&#91;byte&#93;;<br />    }<br /><br />    if ( 0 == sendCommandCheckAck( pn532_packetbuffer, 4 + 16, 1000 ) ) return 0;<br /><br />    // read data packet<br />    readspidata( pn532_packetbuffer, 2 + 6 );<br /><br />    if (( pn532_packetbuffer&#91;6&#93; == 0x41 ) &amp;&amp; ( pn532_packetbuffer&#91;7&#93; == 0x00 ) ) {<br />        return 1; // write successful<br />    } else {<br />        return 0;<br />    }<br />}<br /><br />uint32_t readPassiveTargetID( uint8_t cardbaudrate ) {<br />    uint32_t cid;<br /><br />    pn532_packetbuffer&#91;0&#93; = PN532_INLISTPASSIVETARGET;<br />    pn532_packetbuffer&#91;1&#93; = 1; // max 1 card at once<br />    pn532_packetbuffer&#91;2&#93; = cardbaudrate;<br /><br />    if ( 0 == sendCommandCheckAck( pn532_packetbuffer, 3, 1000 ) ) return 0x00; // no cards read<br /><br />    // read data packet<br />    readspidata( pn532_packetbuffer, 20 );<br /><br />    if ( pn532_packetbuffer&#91;7&#93; != 1 ) return 0;<br /><br />    uint16_t sens_res = pn532_packetbuffer&#91;9&#93;;<br />    sens_res &lt;&lt;= 8;<br />    sens_res |= pn532_packetbuffer&#91;10&#93;;<br /><br />    cid = 0;<br />    for ( uint8_t i = 0; i &lt; pn532_packetbuffer&#91;12&#93;; i++ ) {<br />        cid &lt;&lt;= 8;<br />        cid |= pn532_packetbuffer&#91;13+i&#93;;<br />    }<br /><br />    return cid;<br />}<br /><br />// high level SPI<br />uint8_t spi_readack( void ) {<br />    char ackbuff&#91;6&#93;;<br /><br />    readspidata( ackbuff, 6 );<br /><br />    return ( 0 == strncmp(( char* ) ackbuff, ( char* ) pn532ack, 6 ) ) ? 1 : 0;<br />}<br /><br />// mid level SPI<br />uint8_t readspistatus( void ) {<br />    PORTX &amp;= ~( 1 &lt;&lt; PN532_CS ); // write LOW to CS pin<br />    _delay_us( 2000 );<br /><br />    spiwrite( PN532_SPI_STATREAD );<br />    // read byte<br />    uint8_t x = spiread();<br /><br />    PORTX |= ( 1 &lt;&lt; PN532_CS ); // write HIGH to CS pin<br />    return x;<br />}<br /><br />void readspidata( char* buff, uint8_t n ) {<br />    PORTX &amp;= ~( 1 &lt;&lt; PN532_CS ); // write LOW to CS pin<br />    _delay_us( 2000 );<br />    spiwrite( PN532_SPI_DATAREAD );<br /><br />    for ( uint8_t i = 0; i &lt; n; i++ ) {<br />        _delay_us( 1000 );<br />        buff&#91;i&#93; = spiread();<br />    }<br /><br />    PORTX |= ( 1 &lt;&lt; PN532_CS ); // write HIGH to CS pin<br />}<br /><br />void spiwritecommand( char* cmd, uint8_t cmdlen ) {<br />    uint8_t checksum;<br /><br />    cmdlen++;<br /><br />    PORTX &amp;= ~( 1 &lt;&lt; PN532_CS ); // write LOW to CS pin<br />    _delay_us( 2000 );<br />    spiwrite( PN532_SPI_DATAWRITE );<br /><br />    checksum = PN532_PREAMBLE + PN532_PREAMBLE + PN532_STARTCODE2;<br />    spiwrite( PN532_PREAMBLE );<br />    spiwrite( PN532_PREAMBLE );<br />    spiwrite( PN532_STARTCODE2 );<br /><br />    spiwrite( cmdlen );<br />    uint8_t cmdlen_1 = ~cmdlen + 1;<br />    spiwrite( cmdlen_1 );<br /><br />    spiwrite( PN532_HOSTTOPN532 );<br />    checksum += PN532_HOSTTOPN532;<br /><br />    for ( uint8_t i = 0; i &lt; cmdlen - 1; i++ ) {<br />        spiwrite( cmd&#91;i&#93; );<br />        checksum += cmd&#91;i&#93;;<br />    }<br /><br />    uint8_t checksum_1 = ~checksum;<br />    spiwrite( checksum_1 );<br />    spiwrite( PN532_POSTAMBLE );<br />    PORTX |= ( 1 &lt;&lt; PN532_CS ); // write HIGH to CS pin<br />}<br /><br />// low level SPI<br />void spiwrite( uint8_t c ) {<br />    SPDR = c;<br />    //wait until SPIF is set (SPI done)<br />    while ( !( SPSR &amp; ( 1 &lt;&lt; SPIF ) ) ) ;<br />    //uint8_t junk = SPDR;<br />}<br /><br />uint8_t spiread( void ) {<br />    SPDR = 0;<br />    //wait until SPIF is set (SPI done)<br />    while ( !( SPSR &amp; ( 1 &lt;&lt; SPIF ) ) ) ;<br /><br />    return SPDR;<br />}[/syntax]<br /><br /><br />[syntax=c]/**<br />    File name: nfc_pn532.h<br /><br />    Header file for pn532 library written for A Mega644.<br />    Adapted from pn532.h written by Adafruit Industries<br /><br />    Author: Renato Amez<br /><br />    Poprawki biblioteki dla ATmega328P i testy pod MkCLIPSE: ElektroTME<br />    <br />*/<br /><br />#define PN532_PREAMBLE 0x00<br />#define PN532_STARTCODE1 0x00<br />#define PN532_STARTCODE2 0xFF<br />#define PN532_POSTAMBLE 0x00<br /><br />#define PN532_HOSTTOPN532 0xD4<br /><br />#define PN532_FIRMWAREVERSION 0x02<br />#define PN532_GETGENERALSTATUS 0x04<br />#define PN532_SAMCONFIGURATION  0x14<br />#define PN532_INLISTPASSIVETARGET 0x4A<br />#define PN532_INDATAEXCHANGE 0x40<br />#define PN532_MIFARE_READ 0x30<br />#define PN532_MIFARE_WRITE 0xA0<br /><br />#define PN532_AUTH_WITH_KEYA 0x60<br />#define PN532_AUTH_WITH_KEYB 0x61<br /><br /><br />#define PN532_WAKEUP 0x55<br /><br />#define  PN532_SPI_STATREAD 0x02<br />#define  PN532_SPI_DATAWRITE 0x01<br />#define  PN532_SPI_DATAREAD 0x03<br />#define  PN532_SPI_READY 0x01<br /><br />#define PN532_MIFARE_ISO14443A 0x0<br /><br />#define KEY_A    1<br />#define KEY_B    2<br /><br />void setupPins( void );<br /><br />void begin( void );<br /><br />uint8_t SAMConfig( void );<br />uint32_t getFirmwareVersion( void );<br />uint32_t readPassiveTargetID( uint8_t cardbaudrate );<br />uint8_t authenticateBlock( uint8_t cardnumber /* 1 or 2 */,<br />                           uint32_t cid /* Card NUID */,<br />                           uint8_t blockaddress /* 0 to 63 */,<br />                           uint8_t authtype /* Either KEY_A or KEY_B */,<br />                           uint8_t* keys );<br /><br />uint8_t readMemoryBlock( uint8_t cardnumber /* 1 or 2 */,<br />                         uint8_t blockaddress /* 0 to 63 */,<br />                         uint8_t* block );<br />uint8_t writeMemoryBlock( uint8_t cardnumber /* 1 or 2 */,<br />                          uint8_t blockaddress /* 0 to 63 */,<br />                          uint8_t* block );<br />uint8_t sendCommandCheckAck( char *cmd, uint8_t cmdlen, uint16_t timeout );<br /><br />uint8_t spi_readack( void );<br />uint8_t readspistatus( void );<br />void readspidata( char* buff, uint8_t n );<br />void spiwritecommand( char* cmd, uint8_t cmdlen );<br />void spiwrite( uint8_t c );<br />uint8_t spiread( void );[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1828">ElektroTME</a> — 19 mar 2017, o 13:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[corey]]></name></author>
<updated>2014-08-26T06:14:51+01:00</updated>
<published>2014-08-26T06:14:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=92901#p92901</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=92901#p92901"/>
<title type="html"><![CDATA[Re: nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=92901#p92901"><![CDATA[
Zakupilem shielda od seedstudio na NFC. <br /><br />Otaki o:<br /><!-- m --><a class="postlink" href="http://www.seeedstudio.com/wiki/NFC_Shield_V2.0" >http://www.seeedstudio.com/wiki/NFC_Shield_V2.0</a><!-- m --><br /><br />wg. specu jest kompatybilny z adafruit i ma ponadto mozliwosc komunikacji P2P.<br /><br />Masz moze jakis przykladowy,podstawowy kod uzywajacy twoich bibliotek?<br /><br />Chodzi mi o inicjalizacje i o to jak podac warunek odnosnie otrzymanego tagu.<br /><br />Z gory dziekowac.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1961">corey</a> — 26 sie 2014, o 06:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2014-08-17T18:37:21+01:00</updated>
<published>2014-08-17T18:37:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91795#p91795</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91795#p91795"/>
<title type="html"><![CDATA[Re: nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91795#p91795"><![CDATA[
no cóż ja używam od lady Ady .. na spi .. ale na uarcie masz prościej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 17 sie 2014, o 18:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[corey]]></name></author>
<updated>2014-08-17T16:55:05+01:00</updated>
<published>2014-08-17T16:55:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91785#p91785</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91785#p91785"/>
<title type="html"><![CDATA[Re: nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91785#p91785"><![CDATA[
<div class="quotetitle">SunRiver napisał(a):</div><div class="quotecontent"><br />jak uporządkuję stronę to chętnie opiszę całość <br />puki co .. musisz poczekać<br /></div><br /><br />chodze od okna do okna,gryze paznokcie i czekam  na Ciebie jak na zbawienie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />czwarty dzien z tym siedze i nic sie nie urodzilo.<br /><br />modul z dfrobot ma wyprowadzone zasilanie, mase i tx, rx. takze spi raczej nie pojdzie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1961">corey</a> — 17 sie 2014, o 16:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2014-08-17T15:45:09+01:00</updated>
<published>2014-08-17T15:45:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91783#p91783</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91783#p91783"/>
<title type="html"><![CDATA[Re: nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91783#p91783"><![CDATA[
jak uporządkuję stronę to chętnie opiszę całość <br />puki co .. musisz poczekać<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 17 sie 2014, o 15:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[corey]]></name></author>
<updated>2014-08-17T14:54:46+01:00</updated>
<published>2014-08-17T14:54:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91780#p91780</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91780#p91780"/>
<title type="html"><![CDATA[Re: nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91780#p91780"><![CDATA[
dzieki wielkie.<br /><br />bardzo bogata ta biblioteka i z tego co widze bez uarta tylko spi.<br /><br />Masz moze jakis kawalek kodu z glownego programu jak sie inicjalizuje polaczenie za pomoca tych bibliotek?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1961">corey</a> — 17 sie 2014, o 14:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2014-08-16T09:08:00+01:00</updated>
<published>2014-08-16T09:08:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91670#p91670</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91670#p91670"/>
<title type="html"><![CDATA[Re: nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91670#p91670"><![CDATA[
Dlaczego można przecież tak :<br /><br />plik np: nfc_pn532.c<br /><br />[syntax=c]// Na podstawie biblioteki arduino<br />// by AdaFruit  -- pn532.cpp<br />// Konwersja bezpośrednia -- testowane na ATmega644<br /><br />// -- dla forum Atnel<br />// -- do użytku prywatnego  :P<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &quot;pn532_spi.h&quot;<br /><br />char pn532ack&#91;&#93; = {0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00};<br />char pn532response_firmwarevers&#91;&#93; = {0x00, 0xFF, 0x06, 0xFA, 0xD5, 0x03};<br /><br />#define PN532_PACKBUFFSIZ64<br />char pn532_packetbuffer&#91;PN532_PACKBUFFSIZ&#93;;<br /><br />// Ustawienie Pinów SPI<br />#define PN532_CLKPINB7    // SPI CLK<br />#define PN532_MISOPINB6    // SPI MISO <br />#define PN532_MOSIPINB5    // SPI MOSI <br />#define PN532_CSPINB4    // SPI (CS/SSEL)<br /><br />// Konfiguracja portu A  -- <br />#define DDRXDDRB<br />#define PORTXPORTB<br />#define PINXPINB<br /><br />void setupPins(void) {<br />// Ustawiamy piny  MISO jako INPUT, a inne jako wyjścia<br />DDRX = (1 &lt;&lt; PN532_MOSI) | (1 &lt;&lt; PN532_CLK) | (1 &lt;&lt; PN532_CS);<br /><br />SPCR = (1 &lt;&lt; MSTR) | (1 &lt;&lt; SPR0) | (1 &lt;&lt; SPE) | (1 &lt;&lt; DORD);<br />}<br /><br />void begin(void) {<br />PORTX &amp;= ~(1 &lt;&lt; PN532_CS);<br /><br />_delay_ms(1000);<br /><br /><br />pn532_packetbuffer&#91;0&#93; = PN532_FIRMWAREVERSION;<br />uint8_t check = sendCommandCheckAck(pn532_packetbuffer, 1, 1000);<br />}<br /><br />uint32_t getFirmwareVersion(void) {<br />uint32_t response;<br /><br />pn532_packetbuffer&#91;0&#93; = PN532_FIRMWAREVERSION;<br /><br />if (0 == sendCommandCheckAck(pn532_packetbuffer, 1, 1000)) return 0;<br /><br />// Odcztt pakietów<br />readspidata(pn532_packetbuffer, 12);<br /><br />// check some basic stuff<br />if (0 != strncmp((char*)pn532_packetbuffer, <br />(char*)pn532response_firmwarevers, 6)) <br />return 0;<br /><br />response = pn532_packetbuffer&#91;6&#93;;<br />response &lt;&lt; 8;<br />        response |= pn532_packetbuffer&#91;7&#93;;<br />        response &lt;&lt;= 8;<br />        response |= pn532_packetbuffer&#91;8&#93;;<br />        response &lt;&lt;= 8;<br />        response |= pn532_packetbuffer&#91;9&#93;;<br /><br />    return response;<br /><br />}<br /><br />// Domyślny czas 1s.<br />uint8_t sendCommandCheckAck(uint8_t *cmd, uint8_t cmdlen, uint16_t timeout) {<br />uint16_t timer = 0;<br /><br />// Zapis komendy<br />spiwritecommand(cmd, cmdlen);<br /><br />// Oczekiwanie na odpowiedź z układu ..<br />while(readspistatus() != PN532_SPI_READY) {<br />if (timeout != 0) {<br />timer += 10;<br />if (timer &gt; timeout) {<br />return 0;<br />}<br />}<br />_delay_ms(10);<br />}<br /><br />// odczyt potwierdzenia<br />if (0 == spi_readack()) {<br />return 0;<br />}<br /><br />timer = 0;<br />// Oczekiwanie na ready z układu<br />while(readspistatus() != PN532_SPI_READY) {<br />if (timeout != 0) {<br />timer += 10;<br />if (timer &gt; timeout) {<br />return 0;<br />}<br />}<br />_delay_ms(10);<br />}<br /><br />return 1;<br />}<br /><br />uint8_t SAMConfig(void) {<br />pn532_packetbuffer&#91;0&#93; = PN532_SAMCONFIGURATION;<br />pn532_packetbuffer&#91;1&#93; = 0x01; // tryb normalny<br />pn532_packetbuffer&#91;2&#93; = 0x14; // timeout 50ms * 20 = 1 second<br />pn532_packetbuffer&#91;3&#93; = 0x01; // użycie przerwania <br /><br />if (0 == sendCommandCheckAck(pn532_packetbuffer, 4, 1000)) return 0;<br /><br />// odczyt pakietów<br />readspidata(pn532_packetbuffer, 8);<br /><br />return (pn532_packetbuffer&#91;5&#93; == 0x15 ? 1 : 0);<br />}<br /><br />uint8_t authenticateBlock(uint8_t cardnumber, uint32_t cid, uint8_t blockaddress,<br />uint8_t authtype, uint8_t* keys) {<br />pn532_packetbuffer&#91;0&#93; = PN532_INDATAEXCHANGE;<br />pn532_packetbuffer&#91;1&#93; = cardnumber;<br /><br />if (authtype == KEY_A) {<br />pn532_packetbuffer&#91;2&#93; = PN532_AUTH_WITH_KEYA;<br />} else {<br />pn532_packetbuffer&#91;2&#93; = PN532_AUTH_WITH_KEYB;<br />}<br />pn532_packetbuffer&#91;3&#93; = blockaddress; // Adresw zakresie 0-63 dla standardu MIFARE i kart o pojemności 1K<br /><br />pn532_packetbuffer&#91;4&#93; = keys&#91;0&#93;;<br />pn532_packetbuffer&#91;5&#93; = keys&#91;1&#93;;<br />pn532_packetbuffer&#91;6&#93; = keys&#91;2&#93;;<br />    pn532_packetbuffer&#91;7&#93; = keys&#91;3&#93;;<br />    pn532_packetbuffer&#91;8&#93; = keys&#91;4&#93;;<br />    pn532_packetbuffer&#91;9&#93; = keys&#91;5&#93;;<br /><br />pn532_packetbuffer&#91;10&#93; = ((cid &gt;&gt; 24) &amp; 0xFF);<br />pn532_packetbuffer&#91;11&#93; = ((cid &gt;&gt; 16) &amp; 0xFF);<br />pn532_packetbuffer&#91;12&#93; = ((cid &gt;&gt; 8) &amp; 0xFF);<br />pn532_packetbuffer&#91;13&#93; = ((cid &gt;&gt; 0) &amp; 0xFF);<br /><br />if (0 == sendCommandCheckAck(pn532_packetbuffer, 14, 1000)) return 0;<br /><br />// odczyt danych<br />readspidata(pn532_packetbuffer, 2+6);<br /><br />if ((pn532_packetbuffer&#91;6&#93; = 0x41) &amp;&amp; (pn532_packetbuffer&#91;7&#93; == 0x00)) {<br />return 1;<br />} else {<br />return 0;<br />}<br />}<br /><br />uint8_t readMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block) {<br />pn532_packetbuffer&#91;0&#93; = PN532_INDATAEXCHANGE;<br />pn532_packetbuffer&#91;1&#93; = cardnumber;<br />pn532_packetbuffer&#91;2&#93; = PN532_MIFARE_READ;<br />pn532_packetbuffer&#91;3&#93; = blockaddress;<br /><br />if (0 == sendCommandCheckAck(pn532_packetbuffer, 4, 1000)) return 0;<br /><br />        //odczyta danych<br />readspidata(pn532_packetbuffer, 18+6);<br />for (uint8_t i = 8; i &lt; 18+6; i++) {<br />block&#91;i-8&#93; = pn532_packetbuffer&#91;i&#93;;<br />}<br /><br />if ((pn532_packetbuffer&#91;6&#93; == 0x41) &amp;&amp; (pn532_packetbuffer&#91;7&#93; == 0x00)) {<br />return 1; // odczyt udany ....<br />} else {<br />return 0;<br />}<br />}<br /><br />// Lepiej nie wykonuj zapisu do bloku Trailera chyba ze naprawdę wiesz co robisz.<br />// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<br />uint8_t writeMemoryBlock(uint8_t cardnumber, uint8_t blockaddress, uint8_t* block) {<br />pn532_packetbuffer&#91;0&#93; = PN532_INDATAEXCHANGE;<br />pn532_packetbuffer&#91;1&#93; = cardnumber;<br />pn532_packetbuffer&#91;2&#93; = PN532_MIFARE_WRITE;<br />pn532_packetbuffer&#91;3&#93; = blockaddress;<br /><br />for (uint8_t byte = 0; byte &lt; 16; byte++) {<br />pn532_packetbuffer&#91;4+byte&#93; = block&#91;byte&#93;;<br />}<br /><br />if (0 == sendCommandCheckAck(pn532_packetbuffer, 4+16, 1000)) return 0;<br /><br />// odczyt pakietów<br />readspidata(pn532_packetbuffer, 2+6);<br /><br />if ((pn532_packetbuffer&#91;6&#93; == 0x41) &amp;&amp; (pn532_packetbuffer&#91;7&#93; == 0x00)) {<br />return 1; // Zapis udany....<br />} else {<br />return 0;<br />}<br />}<br /><br />uint32_t readPassiveTargetID(uint8_t cardbaudrate) {<br />uint32_t cid;<br /><br />pn532_packetbuffer&#91;0&#93; = PN532_INLISTPASSIVETARGET;<br />pn532_packetbuffer&#91;1&#93; = 1; // max 1 karta na raz<br />pn532_packetbuffer&#91;2&#93; = cardbaudrate;<br /><br />if (0 == sendCommandCheckAck(pn532_packetbuffer, 3, 1000)) return 0x00; // karta nie odczytana<br /><br />// odczyt danych<br />readspidata(pn532_packetbuffer, 20);<br /><br />if (pn532_packetbuffer&#91;7&#93; != 1) return 0;<br /><br />uint16_t sens_res = pn532_packetbuffer&#91;9&#93;;<br />sens_res &lt;&lt;= 8;<br />sens_res |= pn532_packetbuffer&#91;10&#93;;<br /><br />cid = 0;<br /> for (uint8_t i = 0; i &lt; pn532_packetbuffer&#91;12&#93;; i++) {<br />cid &lt;&lt;= 8;<br />cid |= pn532_packetbuffer&#91;13+i&#93;;<br />}<br /><br />return cid;<br />}<br /><br />// SPI ------------------ SPI -- HI LEVEL<br />uint8_t spi_readack(void) {<br />uint8_t ackbuff&#91;6&#93;;<br /><br />readspidata(ackbuff, 6);<br /><br />return (0 == strncmp((char*) ackbuff, (char*) pn532ack, 6)) ? 1 : 0;<br />}<br /><br />// SPI ----------------- SPI -- MID LEVEL<br />uint8_t readspistatus(void) {<br />PORTX &amp;= ~(1 &lt;&lt; PN532_CS); // LOW na CS <br />_delay_us(2000);<br /><br />spiwrite(PN532_SPI_STATREAD);<br />// odczyt <br />uint8_t x = spiread();<br /><br />PORTX |= (1 &lt;&lt; PN532_CS); // HIGH na CS<br />return x;<br />}<br /><br />void readspidata(uint8_t* buff, uint8_t n) {<br />PORTX &amp;= ~(1 &lt;&lt; PN532_CS); //  LOW na CS<br />_delay_us(2000);<br />spiwrite(PN532_SPI_DATAREAD);<br /><br />for (uint8_t i = 0; i &lt; n; i++) {<br />_delay_us(1000);<br />buff&#91;i&#93; = spiread();<br />}<br /><br />PORTX |= (1 &lt;&lt; PN532_CS); //  HIGH na CS <br />}<br /><br />void spiwritecommand(uint8_t* cmd, uint8_t cmdlen) {<br />uint8_t checksum;<br /><br />cmdlen++;<br /><br />PORTX &amp;= ~(1 &lt;&lt; PN532_CS); // LOW na CS <br />_delay_us(2000);<br />spiwrite(PN532_SPI_DATAWRITE);<br /><br />checksum = PN532_PREAMBLE + PN532_PREAMBLE + PN532_STARTCODE2;<br />spiwrite(PN532_PREAMBLE);<br />spiwrite(PN532_PREAMBLE);<br />spiwrite(PN532_STARTCODE2);<br /><br />spiwrite(cmdlen);<br />uint8_t cmdlen_1 = ~cmdlen + 1;<br />spiwrite(cmdlen_1);<br /><br />spiwrite(PN532_HOSTTOPN532);<br />checksum += PN532_HOSTTOPN532;<br /><br />for (uint8_t i=0; i&lt;cmdlen-1; i++) {<br />spiwrite(cmd&#91;i&#93;);<br />checksum += cmd&#91;i&#93;;<br />}<br /><br />uint8_t checksum_1 = ~checksum;<br />spiwrite(checksum_1);<br />spiwrite(PN532_POSTAMBLE);<br />PORTX |= (1 &lt;&lt; PN532_CS); // HIGH na CS<br />}<br /><br />// LOW Level SPI<br /><br />void spiwrite(uint8_t c) {<br />SPDR = c;        <br />//oczekiwanie na ustawienie SPIF jeśli tak  SPI done<br />    while (!(SPSR &amp; (1&lt;&lt;SPIF))) ;<br />uint8_t junk = SPDR;<br />}<br /><br />uint8_t spiread(void) {<br />SPDR = 0;        <br />//oczekiwanie na ustawienie SPIF jeśli tak  SPI done<br />    while (!(SPSR &amp; (1&lt;&lt;SPIF))) ;<br /> <br />return SPDR;<br />}[/syntax]<br /><br />plik nfc_pn532.h<br /><br />[syntax=c]# define PN532_PREAMBLE 0x00<br /># define PN532_STARTCODE1 0x00<br /># define PN532_STARTCODE2 0xFF<br /># define PN532_POSTAMBLE 0x00<br /><br /># define PN532_HOSTTOPN532 0xD4<br /><br /># define PN532_FIRMWAREVERSION 0x02<br /># define PN532_GETGENERALSTATUS 0x04<br /># define PN532_SAMCONFIGURATION 0x14<br /># define PN532_INLISTPASSIVETARGET 0x4A<br /># define PN532_INDATAEXCHANGE 0x40<br /># define PN532_MIFARE_READ 0x30<br /># define PN532_MIFARE_WRITE 0xA0<br /><br /># define PN532_AUTH_WITH_KEYA 0x60<br /># define PN532_AUTH_WITH_KEYB 0x61<br /><br /><br /># define PN532_WAKEUP 0x55<br /><br /># define PN532_SPI_STATREAD 0x02<br /># define PN532_SPI_DATAWRITE 0x01<br /># define PN532_SPI_DATAREAD 0x03<br /># define PN532_SPI_READY 0x01<br /><br /># define PN532_MIFARE_ISO14443A 0x0<br /><br /># define KEY_A 1<br /># define KEY_B 2<br /><br />void setupPins (void);<br /><br />void begin (void);<br /><br />uint8_t SAMConfig (void);<br />uint32_t getFirmwareVersion (void);<br />uint32_t readPassiveTargetID (uint8_t cardbaudrate);<br />uint8_t authenticateBlock (uint8_t CardNumber       / * 1 lub 2 * /,<br />uint32_t cid              / * Id katry * /,<br />uint8_t blockaddress   / * 0 do 63 * /,<br />uint8_t AuthType       / * KEY_A lub KEY_B * /,<br />uint8_t * keys);<br /><br />uint8_t readMemoryBlock (uint8_t CardNumber      / * 1 lub 2 * /,<br />uint8_t blockaddress / * 0 do 63 * /,<br />uint8_t * blok);<br />uint8_t writeMemoryBlock (uint8_t CardNumber       / * 1 lub 2 * /,<br />uint8_t blockaddress   / * 0 do 63 * /,<br />uint8_t * blok);<br />uint8_t sendCommandCheckAck (uint8_t * cmd, uint8_t cmdlen, uint16_t limitu czasu);<br /><br />spi_readack uint8_t (void);<br />readspistatus uint8_t (void);<br />void readspidata (uint8_t * buff, uint8_t n);<br />void spiwritecommand (uint8_t * cmd, uint8_t cmdlen);<br />void spiwrite (uint8_t c);<br />spiread uint8_t (void);[/syntax]<br /><br />miłej zabawy z tagami NFC w standardzie MIAFARE<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 16 sie 2014, o 09:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[corey]]></name></author>
<updated>2014-08-16T02:55:49+01:00</updated>
<published>2014-08-16T02:55:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91663#p91663</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91663#p91663"/>
<title type="html"><![CDATA[nfc na pn532 i atmega. transfer z arduino.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8155&amp;p=91663#p91663"><![CDATA[
hej!<br /><br />Kupilem sobie modul nfc oparty na pn532 z firmy df robot, o taki o:<br /><br /><a href="http://www.dfrobot.com/wiki/index.php/NFC_Module_for_Arduino_(SKU:DFR0231)"  class="postlink">http://www.dfrobot.com/wiki/index.php/NFC_Module_for_Arduino_(SKU:DFR0231)</a><br /><br />jest tam gotowy kod z wywolaniem tagu dla arduino :<br /><br />[syntax=cpp] <br />const unsigned char wake&#91;24&#93;={<br />  0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \<br />0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0xfd, 0xd4, 0x14, 0x01, 0x17, 0x00};//wake up NFC module<br />const unsigned char firmware&#91;9&#93;={<br />  0x00, 0x00, 0xFF, 0x02, 0xFE, 0xD4, 0x02, 0x2A, 0x00};//<br />const unsigned char tag&#91;11&#93;={<br />  0x00, 0x00, 0xFF, 0x04, 0xFC, 0xD4, 0x4A, 0x01, 0x00, 0xE1, 0x00};//detecting tag command<br />const unsigned char std_ACK&#91;25&#93; = {<br />  0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0C, \<br />0xF4, 0xD5, 0x4B, 0x01, 0x01, 0x00, 0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x4b, 0x00};<br />unsigned char old_id&#91;5&#93;;<br /> <br />unsigned char receive_ACK&#91;25&#93;;//Command receiving buffer<br />//int inByte = 0;               //incoming serial byte buffer<br /> <br />#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100<br />#include &quot;Arduino.h&quot;<br />#define print1Byte(args) Serial1.write(args)<br />#define print1lnByte(args)  Serial1.write(args),Serial1.println()<br />#else<br />#include &quot;WProgram.h&quot;<br />#define print1Byte(args) Serial1.print(args,BYTE)<br />#define print1lnByte(args)  Serial1.println(args,BYTE)<br />#endif<br /> <br />void setup()<br />{<br />  Serial.begin(9600);   // open serial with PC<br />  Serial1.begin(115200);    //open serial1 with device<br />  //Serial2.begin(115200);<br />  wake_card();<br />  delay(100);<br />  read_ACK(15);<br />  delay(100);<br />  display(15);<br /> <br /> <br />}<br /> <br />void loop()<br />{<br />  send_tag();<br />  read_ACK(25);<br />  delay(100);<br />  if (!cmp_id ()) {<br />    if (test_ACK ()) {<br />      display (25);<br />      delay (100);<br />    }<br />  }<br />  copy_id ();<br />}<br /> <br /> <br />void copy_id (void)<br />{//save old id<br />  int ai, oi;<br />  for (oi=0, ai=19; oi&lt;5; oi++,ai++) {<br />    old_id&#91;oi&#93; = receive_ACK&#91;ai&#93;;<br />  }<br />}<br /> <br />  <br />char cmp_id (void)<br />{//return true if find id is old<br />  int ai, oi;<br />  for (oi=0,ai=19; oi&lt;5; oi++,ai++) {<br />    if (old_id&#91;oi&#93; != receive_ACK&#91;ai&#93;)<br />      return 0;<br />  }<br />  return 1;<br />}<br /> <br /> <br />int test_ACK (void)<br />{// return true if receive_ACK accord with std_ACK<br />  int i;<br />  for (i=0; i&lt;19; i++) {<br />    if (receive_ACK&#91;i&#93; != std_ACK&#91;i&#93;)<br />      return 0;<br />  }<br />  return 1;<br />}<br /> <br /> <br />void send_id (void)<br />{//send id to PC<br />  int i;<br />  Serial.print (&quot;ID: &quot;);<br />  for (i=19; i&lt;= 23; i++) {<br />    Serial.print (receive_ACK&#91;i&#93;, HEX);<br />    Serial.print (&quot; &quot;);<br />  }<br />  Serial.println ();<br />}<br /> <br /> <br />void UART1_Send_Byte(unsigned char command_data)<br />{//send byte to device<br />  print1Byte(command_data);<br />#if defined(ARDUINO) &amp;&amp; ARDUINO &gt;= 100<br />  Serial1.flush();// complete the transmission of outgoing serial data<br />#endif<br />}<br /> <br /> <br />void UART_Send_Byte(unsigned char command_data)<br />{//send byte to PC<br />  Serial.print(command_data,HEX);<br />  Serial.print(&quot; &quot;);<br />}<br /> <br /> <br />void read_ACK(unsigned char temp)<br />{//read ACK into reveive_ACK&#91;&#93;<br />  unsigned char i;<br />  for(i=0;i&lt;temp;i++) {<br />    receive_ACK&#91;i&#93;= Serial1.read();<br />  }<br />}<br /> <br /> <br />void wake_card(void)<br />{//send wake&#91;&#93; to device<br />  unsigned char i;<br />  for(i=0;i&lt;24;i++) //send command<br />    UART1_Send_Byte(wake&#91;i&#93;);<br />}<br /> <br /> <br />void firmware_version(void)<br />{//send fireware&#91;&#93; to device<br />  unsigned char i;<br />  for(i=0;i&lt;9;i++) //send command<br />    UART1_Send_Byte(firmware&#91;i&#93;);<br />}<br /> <br /> <br />void send_tag(void)<br />{//send tag&#91;&#93; to device<br />  unsigned char i;<br />  for(i=0;i&lt;11;i++) //send command<br />    UART1_Send_Byte(tag&#91;i&#93;);<br />}<br /> <br /> <br />void display(unsigned char tem)<br />{//send receive_ACK&#91;&#93; to PC<br />  unsigned char i;<br />  for(i=0;i&lt;tem;i++) //send command<br />    UART_Send_Byte(receive_ACK&#91;i&#93;);<br />  Serial.println();<br />}<br /> <br /> <br />//*********** end *************[/syntax]<br /><br /><br />wklepalem to w eclipse i tak paczam w to i paczam. Obejzalem filmik instruktazowy jak importowac z arduino potrzebne rzeczy, niby mam mlotek ale boje sie tego znieczulenia.<br /><br />Nie bardzo to wyglada aby dalo sie bezposrednio zaimportowac. Przerabiac tego chyba nie ma sensu. <br />Calosc zprowadza sie chyba tylko do wyslania znakow z tablicy wake i urzadzonko powinno wyslac swoj tag  - mam racje? ktos probowal laczyc sie z pn532?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1961">corey</a> — 16 sie 2014, o 02:55</p><hr />
]]></content>
</entry>
</feed>