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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-07-14T19:32:02+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=7769&amp;mode</id>
<entry>
<author><name><![CDATA[tobiasz256]]></name></author>
<updated>2014-07-14T19:32:02+01:00</updated>
<published>2014-07-14T19:32:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87592#p87592</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87592#p87592"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87592#p87592"><![CDATA[
Nową kartę dostaniesz w dobrym kiosku najtańsza za 9zł. Są kolekcjonerzy co sprzedają po 1zł za sztukę jeśli byłbyś zainteresowany to mógłbym ci dać numer do Pana od którego sam brałem karty. Każda karta posiada inne id, wysyłasz jej 48 bitowe pytanie i na jego podstawie karta odpowiada ci 16bitowym id. Pytanie może być dowolne. Podczas testów dostałem identyczną maskę z dwóch kart ale zmieniłem pytanie i teraz każda karta daje inną maskę.<br /><br />Do <strong>OdeOn</strong> Ja bym wykorzystał tylko styki od wewnętrznego switcha, VCC, GND, RST, I/O, CLK i tyle, nic więcej do szczęścia nie potrzeba <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4878">tobiasz256</a> — 14 lip 2014, o 19:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2014-07-14T19:28:13+01:00</updated>
<published>2014-07-14T19:28:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87590#p87590</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87590#p87590"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87590#p87590"><![CDATA[
Wygląda Ciekawie. Dostęp do kart tez jest taki łatwy? Czy każda kart jest unikalna?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 14 lip 2014, o 19:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tobiasz256]]></name></author>
<updated>2014-07-14T19:25:37+01:00</updated>
<published>2014-07-14T19:25:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87588#p87588</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87588#p87588"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87588#p87588"><![CDATA[
Mówimy o kartach telefonicznych do automatów tych z chipem. Proszę link a allegro pierwszy lepszy <!-- m --><a class="postlink" href="http://allegro.pl/gniazdo-smart-card-styk-rozwarty-i4347465444.html" >http://allegro.pl/gniazdo-smart-card-st ... 65444.html</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4878">tobiasz256</a> — 14 lip 2014, o 19:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[OdeOn]]></name></author>
<updated>2014-07-14T19:18:20+01:00</updated>
<published>2014-07-14T19:18:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87587#p87587</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87587#p87587"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87587#p87587"><![CDATA[
Zainteresował mnie temat kart i jak je sprzęgnąć za pomocą czytnika z echostar z AVR.<br />Jako że posiadam się taki walający tuner na szybko znalazłem jakie są sygnały na złączu czytnika. Ale które wykorzystać to nie wiem.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/1407/b95115fb964994c7de50525e17eac202.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1407/b95115fb964994c7de50525e17eac202.jpg" alt="Obrazek" /></a><br /><br />Czy może cala elektronika czytnika z układem ST8004C jest zbędna i same 4 styki wykorzystać?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1407">OdeOn</a> — 14 lip 2014, o 19:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Wilu88]]></name></author>
<updated>2014-07-14T19:09:07+01:00</updated>
<published>2014-07-14T19:09:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87586#p87586</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87586#p87586"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87586#p87586"><![CDATA[
A mógłby kolega dokładniej podrzucić jakeis linki jak wyglada sam czytnik? mówimy tu o kratach sim czy starych kartach telefonicznych do automatów? <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=743">Wilu88</a> — 14 lip 2014, o 19:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tobiasz256]]></name></author>
<updated>2014-07-14T18:54:55+01:00</updated>
<published>2014-07-14T18:54:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87585#p87585</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87585#p87585"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87585#p87585"><![CDATA[
Tak jak kolega wyżej napisał, można z dekoderów wyciągnąć, zamówić na znanym portalu aukcyjnym. Ja swoje kupiłem w sklepie w Elektra w Łodzi, chyba prowadzą też sprzedaż wysyłkową. Cena to jakieś 3,5zł.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4878">tobiasz256</a> — 14 lip 2014, o 18:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektronik]]></name></author>
<updated>2014-07-14T17:40:42+01:00</updated>
<published>2014-07-14T17:40:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87582#p87582</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87582#p87582"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87582#p87582"><![CDATA[
Dzięki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=858">Elektronik</a> — 14 lip 2014, o 17:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[BIGjack]]></name></author>
<updated>2014-07-14T17:19:42+01:00</updated>
<published>2014-07-14T17:19:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87580#p87580</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87580#p87580"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87580#p87580"><![CDATA[
Ja pozyskałem z dekodera polsatu DBS-616, często walają się po domach stare dekodery <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=1249">BIGjack</a> — 14 lip 2014, o 17:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Elektronik]]></name></author>
<updated>2014-07-14T16:27:13+01:00</updated>
<published>2014-07-14T16:27:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87578#p87578</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87578#p87578"/>
<title type="html"><![CDATA[Re: Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87578#p87578"><![CDATA[
Witam<br /><br />Mam takie pytanie w jaki sposób wykonałeś bądź wykonasz interfejs do podłączania karty telefonicznej. Bo mam taki właśnie problem gdzie takie coś kupić .<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=858">Elektronik</a> — 14 lip 2014, o 16:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[tobiasz256]]></name></author>
<updated>2014-07-14T15:46:09+01:00</updated>
<published>2014-07-14T15:46:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87577#p87577</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87577#p87577"/>
<title type="html"><![CDATA[Czytnik kart telefonicznych (chip)]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7769&amp;p=87577#p87577"><![CDATA[
Cześć wszystkim. Jestem początkujący w programowaniu avr'ów, chciałbym przedstawić Wam swój projekt, czytnika kart telefonicznych. Chciałem mieć urządzenie, które za pomocą karty otworzy mi elektrozamek w furtce, oraz da możliwość otwarcia bramy z opcją zablokowania jej auto-zamknięcia. Pierwsze testy na płytce testowej program przeszedł doskonale, teraz czas na prace w terenie ale na razie z tym muszę poczekać aż znajdę czas i zjadę do domu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Kod nie jest idealny, prosiłbym o sprawdzenie i uwagi, czego nie robić co poprawić. W programie pozostało zmienić porty od diod led, dokonam tego jak już wytrawię płytkę i zmontuję cały układ.<br />Pozdrawiam serdecznie. <br /><br /><br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 07-07-2014<br /> *      Author: Tobiasz<br /> */<br /><br />#include&lt;avr/io.h&gt;<br />#include&lt;util/delay.h&gt;<br />#include&lt;stdlib.h&gt;<br />#include&lt;stdbool.h&gt;<br />#include&lt;math.h&gt;<br />#include&lt;avr/eeprom.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define VCC (1&lt;&lt;PC0)  //zasilanie<br />#define RST (1&lt;&lt;PC5) //reset<br />#define CLK (1&lt;&lt;PC4) //zegar<br />#define IO  (1&lt;&lt;PC3) //wejscie/wysci<br />#define KEY (1&lt;&lt;PB0)  //button<br />#define KSAVE (1&lt;&lt;PD7) //przycisk do zapisu<br />#define BRAMA (1&lt;&lt;PD2)     // sygnal do fotokomorki<br />#define BRAMA_IN (1&lt;&lt;PD3)<br />#define BRAMA_SW (1&lt;&lt;PD4) //przycisk otwierajacy brame<br />#define LED_OK (1&lt;&lt;PD0)  // wpisz odpowiednie<br />#define LED_BAD (1&lt;&lt;PD5) // wpisz odpowiednie<br />#define CZAS 20  //w sekundach!<br />//------------------------------------------------------------------------------------------------------------//<br />#define FOSC 8000000 // taktowanie<br />#define BAUD 9600 // prędkość transmisji<br />#define MYUBRR FOSC/16/BAUD-1 //wyliczenie ustawienia prędkości<br /><br />//-------------------------------PROTOTYPY-FUNKCJI-------------------------------------------------------------//<br />void initUSART(uint16_t ubrr);   //Inicjalizacja USARTa<br />void sendSign(uint8_t sign);     //Wysłanie znaku przez USART<br />void sendText(const char *text); //Wysyłanie tekstu przez USART<br />_Bool card_switch();   //sprawdza czy kata jest w gniezdzie<br />void reset();// resetuje karte<br />void incadd();//zwieksza adres w pamieci karty<br />void get_code();// pobiera id karty i zapisuje w tablicy<br />void wrbit();//zapisuje bit na karcie (bez tego nie dziala odczyt)<br />uint8_t mask();// oblicza maske na podstawie id<br />void add_card_to_struc();// dodaje karte do struktury<br />void copy_ram_to_eeprom();//zapisuje strukture w pamieci eeprom<br />void copy_eeprom_to_ram();//zapisuje strukture z eeprom do ram<br />_Bool compare_card(uint8_t id);//porownuje karty po masce<br />void delete_card(uint8_t id);//usuwa karte z struktury i aktualizuje eeprom<br />void save();//zapisuje karte w eeprom<br />void delete(uint8_t k);//usuwa karte z eeprom<br />void relay_on();//zalacza przekaznik<br />void czujnik();//otwiera i blokuje zamkniecie bramy<br />void delete_all();//kasuje wszystkie zapisane karty<br /><br />//-----------------------------------------------------------------------------------------------------------//<br />//------------------------------TABLICA-ZAWIERAJACA-PYTANIE-DO-KARTY----------------------------------------//<br />unsigned int tab&#91;48&#93;={1,1,1,1,0,0,1,0,1,0,<br />          0,0,1,1,1,0,1,1,0,1,<br />          0,0,1,1,0,1,0,1,1,0,<br />          1,1,1,0,1,0,0,1,0,1,<br />          0,1,1,0,0,1,1,1};<br />//--------------------------------------------------------------------------------------------------------//<br />//-----------------------------deklaracja-struktury-na-karty---------------------------------------------//<br /><br />typedef struct<br />{<br />uint8_t karta;<br />}Karty;<br />//-----------------------------------------------------------------------------------------------------//    //<br /><br />Karty card_eep&#91;6&#93; EEMEM;<br />Karty card_ram&#91;6&#93;;<br /><br /><br />uint8_t Tab2&#91;16&#93;;  //tablica na odpowiedz<br /><br />volatile uint8_t stn;<br />volatile uint8_t cstn;<br /><br />_Bool flaga;<br />//----------------------------------------------MAIN--------------------------------------------------//<br /><br />int main(void)<br />{<br /><br /><br /><br />    TCCR1B |= (1&lt;&lt;WGM12);                           //tryb CTC<br />    TCCR1B |= (1&lt;&lt;CS11);                            //preskaler = 8<br />    OCR1A = 9999;                                   //100Hz 10ms (8000000/8/100Hz=10000)<br />    TIMSK |= (1&lt;&lt;OCIE1A);                           //zezwolenie na przerwanie CompareMatch<br /><br />    sei();                                         //zezwolenie na globalne przerwania<br /><br />//------------------------------------------------------------------------------------------------//<br />    DDRB &amp;= ~KEY;<br />PORTB |= KEY;<br />DDRC |= RST | CLK | VCC |(1&lt;&lt;PC1);<br />PORTC &amp;= ~(RST | CLK);<br />PORTC |= VCC;<br />DDRD &amp;= ~(KSAVE | BRAMA_IN);<br />PORTD |= (KSAVE | BRAMA_IN);<br />DDRD |= (BRAMA | BRAMA_SW);<br />PORTD &amp;= ~(BRAMA | BRAMA_SW);<br /><br /><br /><br />initUSART(MYUBRR);<br />//=================================PETLA=GŁÓWNA================================================//<br />uint8_t k=0;<br />_Bool stan=0;<br />while(1)<br />{<br />stn=0;<br />if(stn)<br />{<br />_delay_ms(5000);<br />if(stn)<br />{<br />delete_all();<br />copy_ram_to_eeprom();<br /><br />for(uint8_t i=0; i&lt;2; i++)<br />{<br />PORTC |= (1&lt;&lt;PC1);<br />_delay_ms(500);<br />PORTC &amp;= ~(1&lt;&lt;PC1);<br />_delay_ms(500);<br />}<br />continue;<br />}<br />}<br />if(!card_switch())<br />stan=1;<br />if(stan)<br />if(card_switch())<br />{<br />stan=0;<br />get_code();<br />k=mask(Tab2);<br />char bufor&#91;16&#93;;<br />    itoa(k, bufor, 10);<br />sendText(bufor);<br /><br />if(k!=136)<br />{<br />        sendText(&quot;  POPRAWNIE ODCZYTANO DANE&quot;);<br /><br />        if(compare_card(k))<br />        {<br />        sendText(&quot;Karta w bazie&quot;);<br />        flaga=0;<br />        _delay_ms(1000);<br />        delete(k);    //obsluga przycisku usuwania karty z bazy<br />        if(flaga) continue;<br />        relay_on();<br />        czujnik();<br />        }<br />        else<br />        {<br />        sendText(&quot;Brak karty w bazie&quot;);<br />        save();  //obsluga przcisku dodania karty do bazy<br />        }<br />}<br /><br />}<br />}<br /><br />}<br /><br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />stn=0;<br />if(!(PIND &amp; KSAVE))<br />{<br />stn=1;<br />}<br /><br />}<br /><br />void save()  //sprawdzanie przycisku zapisu karty<br />{<br />while(1)<br />    {<br />if(stn)<br />{<br />sendText(&quot;Przycisk save wcisniety&quot;);<br />add_card_to_struc();<br />copy_ram_to_eeprom();<br />return;<br />}<br />if(!card_switch())<br />return;<br />    }<br /><br />}<br />void delete(uint8_t k)  //sprawdzenie przycisku kasowania karty<br />{<br /><br />while(1)<br />{<br />if(stn)<br />{<br />flaga=1;<br />sendText(&quot;Przycisk kasuj wcisniety&quot;);<br />delete_card(k);<br />copy_ram_to_eeprom();<br />return;<br />}<br />return;<br />//if(!card_switch())<br />//return;<br />}<br />}<br />_Bool card_switch()  //sprawdza czy karta jest w czytniku, jesli jest to zwraca 1 true<br />{<br />if(!(PINB &amp; KEY))<br />{<br />    _delay_ms(60);<br />        if(!(PINB &amp; KEY))<br />    {<br />        return 0;<br />}<br />}<br />return 1;<br />}<br />void reset()  //funkcja restujaca karte<br />{<br />PORTC |= RST;<br />_delay_us(20);<br />PORTC |= CLK;<br />_delay_us(20);<br />PORTC &amp;= ~CLK;<br />_delay_us(20);<br />PORTC &amp;= ~RST;<br />_delay_us(20);<br />}<br />void wrbit(void)// funkcja zapisujaca bit<br />{<br />    PORTC |= RST;<br />_delay_us(20);<br />PORTC &amp;= ~RST;<br />_delay_us(20);<br />PORTC |= CLK;<br />_delay_us(20);<br />PORTC &amp;= ~CLK;<br />_delay_us(20);<br />}<br />void incadd()  //funkcja zwiekszajaca adres na karcie<br />{<br />    PORTC &amp;= ~RST;<br />_delay_us(20);<br />PORTC |= CLK;<br />_delay_us(20);<br />PORTC &amp;= ~CLK;<br />_delay_us(20);<br />}<br /><br />void get_code()   //funkcja pobiera id karty<br />{<br />DDRC |= IO;<br />PORTC &amp;= ~IO;<br /><br />reset();<br /><br /> for(uint8_t i=0; i&lt;110; i++)<br /> {<br /> incadd();<br /> }<br /> wrbit();<br /> for(uint8_t j=0; j&lt;177; j++)<br /> {<br /> incadd();<br /> }<br /> for(uint8_t k=0; k&lt;48; k++)   //wyslanie 48 bitowego pytania<br /> {<br />   if(tab&#91;k&#93;==1)<br />   PORTC |= IO;<br />   else<br />    PORTC &amp;= ~IO;<br />   incadd();<br /><br /> }<br /> DDRC &amp;= ~IO;   //ustawienie IO jako wejscia<br /> PORTC |= IO;//podciągnięcie do jedynki<br /><br /> for(uint8_t q=0; q&lt;16; q++)<br /> {<br /> for(uint8_t l=0; l&lt;160; l++)<br /> {<br /> incadd();<br /> }<br /><br /> if(!(PINC &amp; IO))<br /> {<br />  Tab2&#91;q&#93;=0;<br />   sendSign('0');<br /> }<br /> else<br />   {<br />     Tab2&#91;q&#93;=1;<br />     sendSign('1');<br /><br />   }<br /><br /> }<br /><br />}<br /><br />void initUSART(uint16_t ubrr)<br />{<br />//ustawienie prędkości<br />UBRRH = (uint8_t) (ubrr&gt;&gt;8);<br />UBRRL = (uint8_t) ubrr;<br />//odblokowanie nadawania<br />UCSRB = (1&lt;&lt;TXEN);<br />//ustawienie parametrów 8bit data, no parity 1bit stop<br />UCSRC =(1&lt;&lt;URSEL)| (1&lt;&lt;UCSZ1)|(1&lt;&lt;UCSZ0);<br /><br />}<br /><br /><br />void sendSign(uint8_t sign)<br />{<br />//Sprawdzenie czy bufor pusty<br />while(!(UCSRA &amp; (1&lt;&lt;UDRE)));<br />//Jeśli tak to wysłanie znaku<br />UDR=sign;<br /><br />}<br /><br />void sendText(const char *text)<br />{<br />while(*text){<br />sendSign(*text++);<br />}<br />}<br /><br />//----------------------------------------------------------------------------//<br />uint8_t mask(uint8_t T&#91;&#93;) //oblicza maske z odpowiedzi karty czyli zamienia na liczbe na<br />                         //zasadzie ilosc jedynek plus indeksy w ktorych jedynki wystapily<br />{<br />uint8_t wynik=0;<br />uint8_t l=0;<br />uint8_t static ind;<br />ind=0;<br />for(uint8_t i=0; i&lt;16; i++)<br />{<br />if(T&#91;i&#93;==1)<br />{<br />l+=1;<br />ind+=i;<br />}<br />else wynik=0;<br /><br />wynik=ind+l;<br />}<br />return wynik;<br />}<br /><br />void copy_ram_to_eeprom()   //kopiuje strukture z ram do eeprom<br />{<br />eeprom_write_block(&amp;card_ram, &amp;card_eep, sizeof(card_ram));<br />}<br />void copy_eeprom_to_ram() //kopiuje strukture z eeprom do ram<br />{<br />eeprom_read_block(&amp;card_ram, &amp;card_eep, sizeof(card_ram));<br />}<br /><br />void relay_on()<br />{<br />PORTC |= (1&lt;&lt;PC1);<br />for(uint8_t i=0; i&lt;CZAS; i++)<br />{<br />_delay_ms(1000);<br />if(!(PIND &amp; BRAMA_IN))<br />{<br />PORTC &amp;= ~(1&lt;&lt;PC1);<br />czujnik();<br />return;<br />}<br />}<br />PORTC &amp;= ~(1&lt;&lt;PC1);<br />return;<br />}<br /><br />void czujnik()        //funkcja wystawia stan wysoki na pinie, dzieki czemu brama mysli ze fotokomorka<br />{ // cos wykryla i nie zamknie bramy<br />while(1)<br />{<br />if(!(PIND &amp; BRAMA_IN))<br />{<br />PORTD |= BRAMA;<br />PORTD |= BRAMA_SW;<br />_delay_ms(500);<br />PORTD &amp;=~BRAMA_SW;<br />}<br />if(!card_switch())<br />{<br />_delay_ms(60);<br />if(!card_switch())<br />{<br />PORTD &amp;= ~BRAMA;<br />return;<br />}<br />}<br />}<br />}<br />void add_card_to_struc()   //sprawdza czy w strukturze sa wolne miejsca jesli tak to w najblizsze miejsce wstawi maske karty<br />{<br />copy_eeprom_to_ram(); //zczytaj dane z eeprom<br />for(uint8_t i=0; i&lt;6; i++)<br />{<br />if(card_ram&#91;i&#93;.karta==0)<br />{<br />card_ram&#91;i&#93;.karta=mask(Tab2);<br />return;<br />}<br />}<br />return;<br />}<br /><br />_Bool compare_card(uint8_t id)<br />{<br />copy_eeprom_to_ram();<br />for(uint8_t i=0; i&lt;6; i++)<br />{<br />if(card_ram&#91;i&#93;.karta==id)<br />return 1;<br />}<br />return 0;<br />}<br />void delete_card(uint8_t id)<br />{<br />copy_eeprom_to_ram();<br />for(uint8_t i=0; i&lt;6; i++)<br />{<br />if(card_ram&#91;i&#93;.karta==id)<br />{<br />card_ram&#91;i&#93;.karta=0;<br />return;<br />}<br />}<br />return;<br />}<br /><br />void delete_all()<br />{<br />for(uint8_t i=0; i&lt;6; i++)<br />{<br />card_ram&#91;i&#93;.karta=0;<br />}<br />return;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4878">tobiasz256</a> — 14 lip 2014, o 15:46</p><hr />
]]></content>
</entry>
</feed>