<?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=8&amp;t=17164&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-12-30T12:10:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=17164&amp;mode</id>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2016-12-30T12:10:22+01:00</updated>
<published>2016-12-30T12:10:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178606#p178606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178606#p178606"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178606#p178606"><![CDATA[
Spoko ... Jedyny sposób pokraczny i całkowicie z d*py, gdzie to jakkolwiek działa &quot;razem&quot; jest taki:<br /><br />[syntax=c]int main( void )<br />        {<br />                uint8_t mifare=1; //dodatkowa zmienna do przyłączania układów<br /><br /><br />                i2c_init(); // inicjalizacja I2C<br />                spi_init();// inicjalizacja SPI<br />                MFRC522_Init();// inicjalizacja MIFARE<br />     <br />     <br />                 //rfm69 init - 433MHz, with own net_id, use addr and broadcast addr<br />                rfm69_init( FREQ(433), 0, ADDR_FILTER_OFF, 0, 0 );<br />         <br />                // register your own callback function &quot;rfm_rx&quot;<br />                rfm69_rx_event_callback( rfm_rx );<br />               <br />                sei();<br />         <br />                while(1) {<br /><br />               if(mifare){<br />                        RFM69_RX_EVENT( in_buf );                       // rfm69 receive event<br />                                if( !Timer1 ) {<br />                                        if( can_send == 1) {<br />                                                if(ustaw_alarm==1)rfm69_transmit( 1, out2_buf, 0 );<br />                                                if(ustaw_alarm==0)rfm69_transmit( 1, out3_buf, 0 );<br />                                               <br />                                                answer_timeout=2;<br />                                                can_send=0;<br />                                                TIMEOUT_LED_OFF;<br />                                        }<br />         <br />                                        if(( can_send == 0) &amp;&amp; !answer_timeout ) {<br />                                                TIMEOUT_LED_ON;<br />                                                rfm69_rxon();<br />                                                can_send=1;<br />                                        }<br />         <br />                                        if(( can_send == 0) &amp;&amp; answer_timeout ) answer_timeout--;<br />         <br />                                        Timer1 = 100;           // Wysyłaj stany do centralki co 1 sekundy<br />                                        }<br />   mifare=0;<br />                   }  <br />   <br />                   if(!mifare){<br />MFRC522_Init(); // BEZ PONOWNEJ INICJALIZACJI MIFARE NIE DZIAŁA <br />                         if ( (MFRC522_Request( PICC_REQIDL, card_num ) == MI_OK)) {<br />                                    if ( ((MFRC522_Anticoll( card_num ) == MI_OK)) ) {<br />         <br />                                     // następuje obsługa odczytanych wartości<br />                                    }<br />                         }<br />    mifare=1;<br />            }<br />                }<br />        }[/syntax]<br /><br />Chociaż i tak to nie działa idealnie bo po pierwsze RFM69 nadal &quot;pada&quot; ale tylko jak nie działa drugi układ z RFM (odbiornik) jak przyłoży się kartę do MIFARE. A druga sprawa jest taka że i tak tracą się &quot;pakiety&quot; dużo bardziej niż w przypadku gdy MIFARE jest odłączony ... więc i tak nadal się gryzą mimo tego pokracznego sposobu...Ehhhh<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 30 gru 2016, o 12:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[43kuku]]></name></author>
<updated>2016-12-29T17:57:09+01:00</updated>
<published>2016-12-29T17:57:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178542#p178542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178542#p178542"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178542#p178542"><![CDATA[
Wybacz, nie zauważyłem tego i byłem pewien, że chodzi o sprzętowe SPI <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3190">43kuku</a> — 29 gru 2016, o 17:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2016-12-29T15:09:29+01:00</updated>
<published>2016-12-29T15:09:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178526#p178526</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178526#p178526"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178526#p178526"><![CDATA[
Co ma do tego pin SS procesora jak to PROGRAMOWE SPI a ustawienie kierunku pinów CS dla MIFARE I RFM69C jest w void spi_init(void) na górze<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 29 gru 2016, o 15:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[43kuku]]></name></author>
<updated>2016-12-29T15:03:16+01:00</updated>
<published>2016-12-29T15:03:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178525#p178525</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178525#p178525"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178525#p178525"><![CDATA[
Nie wiem czy dobrze widzę, ale nie masz chyba ustawionego pinu SS procesora jako wyjście, a chyba powinno być ustawione do poprawnego działania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3190">43kuku</a> — 29 gru 2016, o 15:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2016-12-29T13:46:29+01:00</updated>
<published>2016-12-29T13:46:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178507#p178507</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178507#p178507"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178507#p178507"><![CDATA[
dokładnie też wyświetla się 1 ... więc nie czaje ... chyba że to sprawdzenie błędnie działa ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 29 gru 2016, o 13:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2016-12-29T13:42:45+01:00</updated>
<published>2016-12-29T13:42:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178506#p178506</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178506#p178506"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178506#p178506"><![CDATA[
Mogę się mylić, ale wygląda na to, że procek cały czas &quot;gada&quot; z odbiornikiem kart. Czyli nie działa makro MIFARE_DEACTIVATE? A przed użyciem karty, kiedy działa komunikacja z RFM69C, co się wyświetla? Wtedy też 1?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 29 gru 2016, o 13:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2016-12-29T13:13:46+01:00</updated>
<published>2016-12-29T13:13:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178499#p178499</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178499#p178499"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178499#p178499"><![CDATA[
Nie wiem czy to dobrze robię ale umyśliłem taki sposób na sprawdzenie tego:<br /><br />[syntax=c]if(MSEL_PORT &amp; MSEL){<br />mifare=1;<br />}<br /><br />else if(!(MSEL_PORT &amp; MSEL)){<br />mifare=0;<br />}[/syntax]<br /><br />Wyświetlam ją na lcd i efekt jest taki ze cały czas widać 1 .. hmm nie zależnie czy to jest przed przyłożeniem karty czy już po.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 29 gru 2016, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2016-12-29T12:38:57+01:00</updated>
<published>2016-12-29T12:38:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178489#p178489</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178489#p178489"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178489#p178489"><![CDATA[
A sprawdź, czy po odczycie karty zwalniane jest SPI. Może tu być problem. Ale to tylko sugestia<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 29 gru 2016, o 12:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2016-12-29T12:27:42+01:00</updated>
<published>2016-12-29T12:27:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178486#p178486</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178486#p178486"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178486#p178486"><![CDATA[
Sprawdzałem to przed chwilę kolejny raz jeszcze czy fizycznie jest napewno dobrze i jest dokładnie tak:<br /><br />[syntax=c]#define NSEL_PORTPORTB<br />#define NSEL(1&lt;&lt;0)<br />#define NSEL_DIRDDRB<br /><br />#define MSEL_PORTPORTD<br />#define MSEL(1&lt;&lt;7)<br />#define MSEL_DIRDDRD[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 29 gru 2016, o 12:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[43kuku]]></name></author>
<updated>2016-12-29T12:24:24+01:00</updated>
<published>2016-12-29T12:24:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178485#p178485</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178485#p178485"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178485#p178485"><![CDATA[
Nie, no wystarczy w bibliotece. Po prostu wcześniej nie widziałem tego.<br />A jak masz podłączone urządzenia? W sensie port i pin<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3190">43kuku</a> — 29 gru 2016, o 12:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2016-12-29T12:17:18+01:00</updated>
<published>2016-12-29T12:17:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178483#p178483</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178483#p178483"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178483#p178483"><![CDATA[
Wiadomo że to procesor musi sterować tymi liniami i tak jest ... To co nie wystarcza sterowanie tymi pinami w samych bibliotekach w tych podstawowych funkcjach &quot;wysyłania i odczytu&quot; i trzeba tym sterować gdzieś mainie jeszcze ? Próbowałem coś takiego zrobić i efektu brak :/<br /><br />W plikach nagłówkowych MIFARE I RFM mamy:<br /><br />Dla Mifare:<br />[syntax=c]#define MIFARE_ACTIVATEMSEL_PORT&amp;=~MSEL<br />#define MIFARE_DEACTIVATEMSEL_PORT|= MSEL[/syntax]<br /><br />Dla RFM:<br />[syntax=c]#define RFM_ACTIVATENSEL_PORT&amp;=~NSEL<br />#define RFM_DEACTIVATENSEL_PORT|= NSEL[/syntax]<br /><br />Próbowałem chociażby czegoś takiego i kompletnie to niczego nie zmienia...<br />[syntax=c]int main( void )<br />    {<br />     <br />            i2c_init(); // inicjalizacja I2C<br />            spi_init();// inicjalizacja SPI<br />            MFRC522_Init();// inicjalizacja MIFARE<br /><br /><br />             //rfm69 init - 433MHz, with own net_id, use addr and broadcast addr<br />            rfm69_init( FREQ(433), 0, ADDR_FILTER_OFF, 0, 0 );<br />     <br />            // register your own callback function &quot;rfm_rx&quot;<br />            rfm69_rx_event_callback( rfm_rx );<br />           <br />            sei();<br />     <br />            while(1) {<br />      RFM_ACTIVATE;<br />                    RFM69_RX_EVENT( in_buf );                       // rfm69 receive event<br />                            if( !Timer1 ) {<br />                                    if( can_send == 1) {<br />                                            if(ustaw_alarm==1)rfm69_transmit( 1, out2_buf, 0 );<br />                                            if(ustaw_alarm==0)rfm69_transmit( 1, out3_buf, 0 );<br />                                           <br />                                            answer_timeout=2;<br />                                            can_send=0;<br />                                            TIMEOUT_LED_OFF;<br />                                    }<br />     <br />                                    if(( can_send == 0) &amp;&amp; !answer_timeout ) {<br />                                            TIMEOUT_LED_ON;<br />                                            rfm69_rxon();<br />                                            can_send=1;<br />                                    }<br />     <br />                                    if(( can_send == 0) &amp;&amp; answer_timeout ) answer_timeout--;<br />     <br />                                    Timer1 = 100;           // Wysyłaj stany do centralki co 1 sekundy<br />                                    }<br />                    RFM_DEACTIVATE;               <br />                    MIFARE_ACTIVATE;        <br />                     if ( (MFRC522_Request( PICC_REQIDL, card_num ) == MI_OK)) {<br />                                if ( ((MFRC522_Anticoll( card_num ) == MI_OK)) ) {<br />     <br />                                 // następuje obsługa odczytanych wartości<br />                                }<br />                     }<br />                     MIFARE_DEACTIVATE;        <br />            }<br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 29 gru 2016, o 12:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[43kuku]]></name></author>
<updated>2016-12-29T10:13:43+01:00</updated>
<published>2016-12-29T10:13:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178470#p178470</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178470#p178470"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178470#p178470"><![CDATA[
Musisz oddzielnie ( z poziomu programu) sterować liniami CS. Czyli &quot;ręcznie&quot; aktywować i dezaktywować urządzenie, z którym w ty momencie chcesz się porozumieć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3190">43kuku</a> — 29 gru 2016, o 10:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2016-12-29T09:29:34+01:00</updated>
<published>2016-12-29T09:29:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178464#p178464</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178464#p178464"/>
<title type="html"><![CDATA[Re: Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178464#p178464"><![CDATA[
cześć<br />Z tego co piszesz to wynika, że źle sterujesz pinami CS.<br />To nie moduły pracujące jako &quot;slave&quot; mają dezaktywować swoje wejścia tylko procesor ma nimi sterować i decydować w którym momencie rozmawia z danym modułem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 29 gru 2016, o 09:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[faber33]]></name></author>
<updated>2016-12-29T00:12:54+01:00</updated>
<published>2016-12-29T00:12:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178450#p178450</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178450#p178450"/>
<title type="html"><![CDATA[Konflikt na SPI Programowym]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17164&amp;p=178450#p178450"><![CDATA[
Witam. Ciągle walczę z ujarzmieniem &quot;zwierza&quot; zwanego MIFARE+RFM69C na wspólnym programowym SPI. Problem jest mianowicie taki że komunikacja procesora (ATMEGA8) z RFM69C działa do puki nie przyłożę karty MIFARE do czytnika. Następuje wtedy zonk, czyli &quot;blokada&quot; komunikacji z RFM69C, natomiast czytnik ciągle działa i bez problemu odczytuje kartę (w każdej chwili). Wygląda na to jakby był problem z sterowaniem wyjściami CS, biblioteka do RFM69C pochodzi z książki Pana Mirka więc tam sterowanie CS RFM69C jest zrobione. Natomiast bibliotekę do MIFARE zapożyczyłem gdzieś z internetu, i tam też jest zrobione sterowanie wyjściem CS dla MIFARE. No chyba że ja nie rozumiem idei sterowania tymi CS-ami ... RFM69C prześle co tam trzeba dezaktywuje CS, MIFARE zrobi swoje i też dezaktywuje swoje CS no więc w czym problem ? Moim zdaniem nie powinno tutaj być konfliktu a jednak coś się ta komunikacja sypie że po przyłożeniu karty kontakt z RFM69C pada na amen :/   Mógłby mi ktoś wyoślić jak to powinno prawidłowo wyglądać, no chyba że popełniam gdzieś indziej błąd ? Na koniec dodam że każdy z osobno układów działa więc niema mowy o zamienionych pinach czy coś.<br /><br />Inicjalizacja programowego SPI:<br />[syntax=c]void spi_init(void){<br /><br />// Configure SPI inputs and outputs<br />MISO_DIR &amp;= ~MISO;<br />MOSI_DIR |= MOSI;<br />SCK_DIR |= SCK;<br />NSEL_DIR|= NSEL; // ustawienie CS --&gt; RFM69C<br />MSEL_DIR|= MSEL;// ustawienie CS --&gt; MIFARE<br /><br />NSEL_PORT|= NSEL; // ustawienie CS --&gt; RFM69C<br />MSEL_PORT|= MSEL; // ustawienie CS --&gt; MIFARE<br />MISO_PORT|= MISO;<br />}[/syntax]<br /><br />Najważniejsze fukcje z bibioteki MIFARE:<br />[syntax=c]void Write_MFRC522(uchar addr, uchar val){<br /><br />MIFARE_ACTIVATE;<br />//address format:0XXXXXX0<br />rfm69_spi_transfer((addr &lt;&lt; 1) &amp; 0x7E);<br />rfm69_spi_transfer(val);<br />MIFARE_DEACTIVATE;<br />}<br /><br />/*<br />* Function:Read_MFRC522<br />* Description:read a byte data into one register of MR RC522<br />* Input parameter:addr--register address<br />* Return:return the read value<br />*/<br />uchar Read_MFRC522(uchar addr){<br />uchar val;<br />MIFARE_ACTIVATE;<br />//address format:1XXXXXX0<br />rfm69_spi_transfer(((addr &lt;&lt; 1) &amp; 0x7E) | 0x80);<br />//spi_send_byte(0x00);<br />val = rfm69_spi_transfer(0x00);//val = SPI.transfer(0x00);<br />MIFARE_DEACTIVATE;<br />return val;<br />}<br /><br />void MFRC522_Reset(void){<br />Write_MFRC522(CommandReg, PCD_RESETPHASE);<br />}<br /><br />void MFRC522_Init(void){<br /><br />// Setup the Pins<br />MIFARE_ACTIVATE; // Activate the RFID reader<br />pinReset_OUTPUT; // Set digital pin 10 , Not Reset and Power-down<br />pinReset_LOW;<br />_delay_ms(1);<br />// activate<br />pinReset_HIGH;<br /><br />MFRC522_Reset();<br /><br />//Timer: TPrescaler*TreloadVal/6.78MHz = 24ms<br />Write_MFRC522(TModeReg, 0x8D);//Tauto=1; f(Timer) = 6.78MHz/TPreScaler<br />Write_MFRC522(TPrescalerReg, 0x3E);//TModeReg&#91;3..0&#93; + TPrescalerReg<br />Write_MFRC522(TReloadRegL, 30);<br />Write_MFRC522(TReloadRegH, 0);<br />Write_MFRC522(TxAutoReg, 0x40);//100%ASK<br />Write_MFRC522(ModeReg, 0x3D);//CRC initilizate value 0x6363 ???<br /><br />MFRC522_AntennaOn();//turn on antenna<br /><br /><br />}<br /><br /><br />/*<br />* Function:MFRC522_Request<br />* Description:Searching card, read card type<br />* Input parameter:reqMode--search methods,<br />* TagType--return card types<br />* 0x4400 = Mifare_UltraLight<br />* 0x0400 = Mifare_One(S50)<br />* 0x0200 = Mifare_One(S70)<br />* 0x0800 = Mifare_Pro(X)<br />* 0x4403 = Mifare_DESFire<br />* return:return MI_OK if successed<br />*/<br />unsigned char MFRC522_Request(uchar reqMode, uchar *TagType){<br />uchar status;<br />uint backBits;//the data bits that received<br />Write_MFRC522(BitFramingReg, 0x07);//TxLastBists = BitFramingReg&#91;2..0&#93; ???<br />TagType&#91;0&#93; = reqMode;<br />status = MFRC522_ToCard(PCD_TRANSCEIVE, TagType, 1, TagType, &amp;backBits);<br />if ((status != MI_OK) || (backBits != 0x10)){<br />status = MI_ERR;<br />}<br /><br />return status;<br />}<br /><br /><br />/*<br />* Function:MFRC522_ToCard<br />* Description:communicate between RC522 and ISO14443<br />* Input parameter:command--MF522 command bits<br />* sendData--send data to card via rc522<br />* sendLen--send data length<br />* backData--the return data from card<br />* backLen--the length of return data<br />* return:return MI_OK if successed<br />*/<br />uchar MFRC522_ToCard(uchar command, uchar *sendData, uchar sendLen,uchar *backData, uint *backLen){<br />uchar status = MI_ERR;<br />uchar irqEn = 0x00;<br />uchar waitIRq = 0x00;<br />uchar lastBits;<br />uchar n;<br />uint i;<br />switch (command){<br />case PCD_AUTHENT://verify card password<br />{<br />irqEn = 0x12;<br />waitIRq = 0x10;<br />break;<br />}<br />case PCD_TRANSCEIVE://send data in the FIFO<br />{<br />irqEn = 0x77;<br />waitIRq = 0x30;<br />break;<br />}<br />default:<br />break;<br />}<br /><br />Write_MFRC522(CommIEnReg, irqEn | 0x80);//Allow interruption<br />MFRC522_ClearBitMask(CommIrqReg, 0x80);//Clear all the interrupt bits<br />MFRC522_SetBitMask(FIFOLevelReg, 0x80);//FlushBuffer=1, FIFO initilizate<br />Write_MFRC522(CommandReg, PCD_IDLE);//NO action;cancel current command ???<br /><br />//write data into FIFO<br />for (i = 0; i &lt; sendLen; i++){<br />Write_MFRC522(FIFODataReg, sendData&#91;i&#93;);<br />}<br /><br />//procceed it<br />Write_MFRC522(CommandReg, command);<br />if (command == PCD_TRANSCEIVE){<br />MFRC522_SetBitMask(BitFramingReg, 0x80);//StartSend=1,transmission of data starts<br />}<br /><br />//waite receive data is finished<br />i = 2000;//i should adjust according the clock, the maxium the waiting time should be 25 ms???<br />do{<br />//CommIrqReg&#91;7..0&#93;<br />//Set1 TxIRq RxIRq IdleIRq HiAlerIRq LoAlertIRq ErrIRq TimerIRq<br />n = Read_MFRC522(CommIrqReg);<br />i--;<br />}<br />while ((i != 0) &amp;&amp; !(n &amp; 0x01) &amp;&amp; !(n &amp; waitIRq));<br /><br />MFRC522_ClearBitMask(BitFramingReg, 0x80);//StartSend=0<br />if (i != 0) {<br />if (!(Read_MFRC522(ErrorReg) &amp; 0x1B)){ //BufferOvfl Collerr CRCErr ProtecolErr<br />status = MI_OK;<br />if (n &amp; irqEn &amp; 0x01){<br />status = MI_NOTAGERR;//??<br />}<br /><br />if (command == PCD_TRANSCEIVE){<br />n = Read_MFRC522(FIFOLevelReg);<br />lastBits = Read_MFRC522(ControlReg) &amp; 0x07;<br />if (lastBits){<br />*backLen = (n - 1) * 8 + lastBits;<br />}else{<br />*backLen = n * 8;<br />}<br /><br />if (n == 0){<br />n = 1;<br />}<br /><br />if (n &gt; MAX_LEN){<br />n = MAX_LEN;<br />}<br /><br />//read the data from FIFO<br />for (i = 0; i &lt; n; i++){<br />backData&#91;i&#93; = Read_MFRC522(FIFODataReg);<br />}<br />}<br />}else{<br />status = MI_ERR;<br />}<br />}<br /><br />//SetBitMask(ControlReg,0x80); //timer stops<br />//Write_MFRC522(CommandReg, PCD_IDLE);<br />return status;<br />}<br /><br /><br />/*<br />* Function:MFRC522_Anticoll<br />* Description:Prevent conflict, read the card serial number<br />* Input parameter:serNum--return the 4 bytes card serial number, the 5th byte is recheck byte<br />* return:return MI_OK if successed<br />*/<br />uchar MFRC522_Anticoll(uchar *serNum){<br />uchar status;<br />uchar i;<br />uchar serNumCheck = 0;<br />uint unLen;<br />//ClearBitMask(Status2Reg, 0x08); //TempSensclear<br />//ClearBitMask(CollReg,0x80); //ValuesAfterColl<br />Write_MFRC522(BitFramingReg, 0x00);//TxLastBists = BitFramingReg&#91;2..0&#93;<br />serNum&#91;0&#93; = PICC_ANTICOLL;<br />serNum&#91;1&#93; = 0x20;<br />status = MFRC522_ToCard(PCD_TRANSCEIVE, serNum, 2, serNum, &amp;unLen);<br />if (status == MI_OK){<br />//Verify card serial number<br />for (i = 0; i &lt; 4; i++){<br />serNumCheck ^= serNum&#91;i&#93;;<br />}<br />if (serNumCheck != serNum&#91;i&#93;){<br />status = MI_ERR;<br />}<br />}<br />//SetBitMask(CollReg, 0x80); //ValuesAfterColl=1<br />return status;<br />}<br /><br />uchar MFRC522_Read(uchar blockAddr, uchar *recvData){<br />uchar status;<br />uint unLen;<br />recvData&#91;0&#93; = PICC_READ;<br />recvData&#91;1&#93; = blockAddr;<br />MFRC522_CalulateCRC(recvData, 2, &amp;recvData&#91;2&#93;);<br />status = MFRC522_ToCard(PCD_TRANSCEIVE, recvData, 4, recvData, &amp;unLen);<br />if ((status != MI_OK) || (unLen != 0x90)){<br />status = MI_ERR;<br />}<br />return status;<br />}<br /><br />/*<br />* Function:MFRC522_Write<br />* Description:write block data<br />* Input parameters:blockAddr--block address;writeData--Write 16 bytes data into block<br />* return:return MI_OK if successed<br />*/<br />uchar MFRC522_Write(uchar blockAddr, uchar *writeData){<br />uchar status;<br />uint recvBits;<br />uchar i;<br />uchar buff&#91;18&#93;;<br />buff&#91;0&#93; = PICC_WRITE;<br />buff&#91;1&#93; = blockAddr;<br />MFRC522_CalulateCRC(buff, 2, &amp;buff&#91;2&#93;);<br />status = MFRC522_ToCard(PCD_TRANSCEIVE, buff, 4, buff, &amp;recvBits);<br />if ((status != MI_OK) || (recvBits != 4) || ((buff&#91;0&#93; &amp; 0x0F) != 0x0A)){<br />status = MI_ERR;<br />}<br />if (status == MI_OK){<br />for (i = 0; i &lt; 16; i++){//Write 16 bytes data into FIFO<br />buff&#91;i&#93; = *(writeData + i);<br />}<br /><br />MFRC522_CalulateCRC(buff, 16, &amp;buff&#91;16&#93;);<br />status = MFRC522_ToCard(PCD_TRANSCEIVE, buff, 18, buff, &amp;recvBits);<br />if ((status != MI_OK) || (recvBits != 4) || ((buff&#91;0&#93; &amp; 0x0F) != 0x0A)){<br />status = MI_ERR;<br />}<br />}<br /><br />return status;<br />}[/syntax]<br /><br />Na koniec plik main.c w skrócie:<br />[syntax=c]int main( void )<br />{<br /><br />uchar card_num&#91;5&#93;= {};<br /><br />TIMEOUT_LED_DIR |= TIMEOUT_LED;<br />TIMEOUT_LED_OFF;<br /><br />DATA_LED_DIR |= DATA_LED;<br />DATA_LED_OFF;<br /><br />i2c_init(); // inicjalizacja I2C<br />spi_init();// inicjalizacja SPI<br /> MFRC522_Init();// inicjalizacja MIFARE<br /><br />_delay_ms(50);<br />lcd_init(); //inicjalizacja LCD<br /><br />   lcd_locate(0,3);<br />   lcd_str(&quot;RFID Reader&quot;);<br /><br /><br /> lcd_cls();<br /><br /> //rfm69 init - 433MHz, with own net_id, use addr and broadcast addr<br />rfm69_init( FREQ(433), 0, ADDR_FILTER_OFF, 0, 0 );<br /><br />// register your own callback function &quot;rfm_rx&quot;<br />rfm69_rx_event_callback( rfm_rx );<br /><br />        sei();<br /><br />while(1) {<br /><br />RFM69_RX_EVENT( in_buf );// rfm69 receive event<br />if( !Timer1 ) {<br />if( can_send == 1) {<br />if(ustaw_alarm==1)rfm69_transmit( 1, out2_buf, 0 );<br />if(ustaw_alarm==0)rfm69_transmit( 1, out3_buf, 0 );<br /><br />answer_timeout=2;<br />can_send=0;<br />        TIMEOUT_LED_OFF;<br />}<br /><br />if(( can_send == 0) &amp;&amp; !answer_timeout ) {<br />TIMEOUT_LED_ON;<br />rfm69_rxon();<br />can_send=1;<br />}<br /><br />if(( can_send == 0) &amp;&amp; answer_timeout ) answer_timeout--;<br /><br />Timer1 = 100;// Wysyłaj stany do centralki co 1 sekundy<br />}<br /><br /> <br />if ( (MFRC522_Request( PICC_REQIDL, card_num ) == MI_OK)) {<br />  if ( ((MFRC522_Anticoll( card_num ) == MI_OK)) ) {<br /><br />                                      // następuje obsługa odczytanych wartości<br />                                        }<br />        }<br />                        <br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=976">faber33</a> — 29 gru 2016, o 00:12</p><hr />
]]></content>
</entry>
</feed>