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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-10-08T20:25:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=27&amp;t=1387&amp;mode</id>
<entry>
<author><name><![CDATA[NIEBO!]]></name></author>
<updated>2012-08-22T07:32:21+01:00</updated>
<published>2012-08-22T07:32:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13269#p13269</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13269#p13269"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13269#p13269"><![CDATA[
<strong>Za nagrody bardzo dziękuję, szczególnie za ten dodatkowy pampersik <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /></strong> Z werdyktem całkowicie się zgadzam bo Bartek pokazał klasę - nie ma co:) Wykazał się znajomością nie tylko 1Wire jak w temacie, ale zaimplementował UART i RTC czego mi się nie udało. No i jeszcze ta aplikacja na PC... BRAWO!  A ja obie książki Mirka już posiadam więc nawet jakbym wygrał to przekazałbym je do następnego konkursu, albo jakby się dało &quot;zamienił&quot; u Mirka na konwerter ATmega8 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Jeszcze raz dziękuję! Mam nadzieję że wchodzenie do LOCHU będzie teraz przyjemnością <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Na PW odezwę się 5 września  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" />  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" />  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" /><br /><br /><br />----- Dodano:27.08.2012 23:10<br /><br />Wobec słów, gestów i czynów jakie dokonały się na Mini-Chacie przed paroma chwilami:<strong> oficjalnie i uroczyście zrzekam się nagrody za drugie miejsce ufundowanej przez <span style="text-decoration: underline">matołka</span> na rzecz kolegi, który zajął miejsce pierwsze</strong> i pozwolę sobie pozostawić tylko tytuł II miejsca i Największego Przynudzacza <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> oraz dodatek EXTRA od Największego Łotra <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> o który upomnę się za czas jakiś. Myślę, że Bartek więcej skorzysta na tej nagrodzie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=418">NIEBO!</a> — 22 sie 2012, o 07:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-21T22:06:15+01:00</updated>
<published>2012-08-21T22:06:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13251#p13251</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13251#p13251"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13251#p13251"><![CDATA[
Ależ to my dziękujemy za najzacniejszą z nagród Mirku.  <br /><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=58">SunRiver</a> — 21 sie 2012, o 22:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-21T22:01:26+01:00</updated>
<published>2012-08-21T22:01:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13250#p13250</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13250#p13250"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13250#p13250"><![CDATA[
No to przyłączam się do gratulacji wygranym <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i cieszę się, że WYSOKA komisja ogłosiła wyroki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Przy okazji bardzo bardzo dziękuję fundatorom tak zacnych nagród i w ogóle zorganizowania konkursu. Jak coś to jestem do waszej dyspozycji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 sie 2012, o 22:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Malutki_27]]></name></author>
<updated>2012-08-21T21:58:42+01:00</updated>
<published>2012-08-21T21:58:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13249#p13249</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13249#p13249"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13249#p13249"><![CDATA[
<div class="quotetitle">SunRiver napisał(a):</div><div class="quotecontent"><br />... bo zaiste nie znacie dnia ani godziny ...<img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />a Sun znowu wpuści Nas w maliny <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br /><br />Słuszny wybór i moje gratulacje Panowie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=225">Malutki_27</a> — 21 sie 2012, o 21:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-21T21:52:25+01:00</updated>
<published>2012-08-21T21:52:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13247#p13247</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13247#p13247"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13247#p13247"><![CDATA[
NO DOBRA PANOWIE !!! <br /><br />PO DŁUGIEJ I BURZLIWEJ DYSKUSJI, ZAKOŃCZONEJ KILKOMA SINIAKAMI I LIMAMI ... <br />ORAZ BÓLEM W TYLNYCH PARTIACH CIAŁA I PRZEMARSZU PRZEZ FORUMOWE LOCHY <br />NA ZNAK PROTESTU PRZECIW PROTESTOM.<br /> <br />WRAZ Z KOLEGĄ MATOŁEK DOSZLIŚMY DO POROZUMIENIA I NINIEJSZYM OGŁASZAMY<br />WYNIKI KONKURSU 1wire<br /><br />Niniejszym skorumpowana i stronnicza komisja głosująca zawsze na swoją korzyść<br />ustaliła sobie ... to co chciała <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />w związku iż startujących pretendentów było tylko dwóch  i oboje wykazali się zaiste<br />knowaniami na wysokim poziomie , zarówno sprzętowym jak też i merytorycznym.<br /><br />Wyłoniliśmy zwycięzców:<br /><br /><strong><span style="color: #FF0000">I miejsce</span></strong>  -- Kolega BARTEK  za całokształt pracy i spełnienie praktycznie wszystkich <br />                  założeń i wytycznych -- tym razem darujemy ci ten jeden switch <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />NAGRODA :<br /><br />NA mocy nadanego mi pełnomocnictwa ... do wyboru książka <br />autorstwa Mirosława Kardasia <br /><br />Język C Podstawy programowania. <br />lub<br />Język C Pasja programowania .<br /><br />-- ufundowaną przez samego autora i naszego naczelnego nadzorcę (podatkowego) <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />szacownego wielkiego mistrza  mirek36<br /><br />oraz <br /><br />DS9092L Touch Probe with LED - 1 szt<br />DS9093F Key Fob, Flanged - 2 szt<br />i oczywiście iButtony<br />DS1977 F5 <br />DS1904 F5<br /><br />---  ufundowane przez irytatora i szkodnika forumowego czyli mnie <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />---------------------------------------------------------<br /><br /><strong><span style="color: #FF0000">II miejsce</span></strong>  -- kolega Niebiański za estetykę wykonania , dbałość o szczegóły i doskonałą<br />                   publikację merytoryczną  -- nie chciało mi czytać całości ale kawał dobrej <br />                   roboty.<br /><br /><br />NAGRODA :<br /><br />DS1402D-DB8+ - Przedłużacz z rozdzielaczem <!-- m --><a class="postlink" href="http://datasheets.maxim-ic.com/en/ds/DS" >http://datasheets.maxim-ic.com/en/ds/DS</a><!-- m --> ... 2D-DR8.pdf<br />DS9093 - uchwyt do pastylek<br /><br />--- ufundowane przez kolegę MATOŁEK<br /><br />oraz dodatkowo :<br /><br />pampers do zaparzenia herbatki czyli moduł TEA5767 <br /><br />--- ufundowany przeze mnie  <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><br /><br />Wszystkim uczestnikom gratulujemy WYGRANYCH (czy czasem to zdanie nie brzmi jakoś dziwnie)<br />A wszystkich co z osądem naszym zgody nie mają oraz czci szacownych wybrańców chcą uchybić wyzywam na walkę konna lub pieszą ...<br /><br />Proszę o kontakt na PW.<br /><br />do następnego konkursu panowie , miejcie się na baczności bo kto wie jakie jeszcze diabelskie<br />sztuczki i pomysły się zrodzą na naszym forum .  Strzeżcie się i uczcie pilnie przez całe ranki ze swej pierwszej Atnelowskiej czytanki bo zaiste nie znacie dnia ani godziny ...<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=58">SunRiver</a> — 21 sie 2012, o 21:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-21T15:32:32+01:00</updated>
<published>2012-08-21T15:32:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13204#p13204</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13204#p13204"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13204#p13204"><![CDATA[
co mogę echhhhh.... powiedzieć ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 21 sie 2012, o 15:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2012-08-21T00:12:15+01:00</updated>
<published>2012-08-21T00:12:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13142#p13142</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13142#p13142"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13142#p13142"><![CDATA[
Nie zazdroszczę komisji konkursowej, bo wybór z zaprezentowanych projektów nie jest łatwy. Biorąc pod uwagę nie tylko założenia projektowe, które komisja z pewnością przedłoży nad inne &quot;wodotryski&quot;, ale także inne okoliczności, mianowicie: sposób wykonania, uniwersalność, możliwość dostosowania do warunków lokalnych (mam na myśli indywidualnego użytkownika), sprawa nie jest prosta. Zapoznałem się z projektami już wcześniej, ale smaruję tego posta  o godz. 1:11 - wiem, powinienem spać, ale ciśnienie było spore  <img src="https://forum.atnel.pl/images/smilies/icon_e_geek.gif" alt=":geek:" title="Świr" />  -  zaraz po ich prezentacji. Oczywiście nie zdradzam swoich sympatii, natomiast wierzę, że komisja dokona sprawiedliwego rozstrzygnięcia, czego im tylko życzę.<br /><br />Od razu gratuluję zwycięzcy. Z całego serca zazdroszczę wiedzy i umiejętności.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 21 sie 2012, o 00:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-20T22:00:00+01:00</updated>
<published>2012-08-20T22:00:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13137#p13137</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13137#p13137"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13137#p13137"><![CDATA[
heh niech jeszcze się kolega matołek zapozna z materiałem dowodowym (trochę to potrwa ... hihiiih)<br />ja na wypadek tylko tych 2ch prac już mam pewien osąd ... mam nadzieję że słuszny choć jeśli będą tylko te 2 projekty i nie będzie możliwości podjęcia jednomyślnego rozwiązania ogłoszę ankietę gdzie , <br />będą szanowni  forumowicze głosować ..  mając na względzie wytyczne i założenia wstępne <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Niemniej sprawa jest skomplikowana bowiem oba projekty zaiste ciekawe <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=58">SunRiver</a> — 20 sie 2012, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-20T21:40:51+01:00</updated>
<published>2012-08-20T21:40:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13132#p13132</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13132#p13132"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13132#p13132"><![CDATA[
No to Sun - powodzenia w wyborze zwycięzcy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo tu też widzę ostrą rywalizację <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... aż miło popatrzeć co koledzy konkursowicze powyczyniali. brawo!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 sie 2012, o 21:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-20T21:36:11+01:00</updated>
<published>2012-08-20T21:36:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13130#p13130</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13130#p13130"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13130#p13130"><![CDATA[
Uwaga panowie !!!!!<br /><br />O godzinie 0:00 upływa termin zgłaszania prac konkursowych !!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 20 sie 2012, o 21:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[NIEBO!]]></name></author>
<updated>2012-10-08T20:25:01+01:00</updated>
<published>2012-08-19T19:39:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13056#p13056</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13056#p13056"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13056#p13056"><![CDATA[
<strong>Witajcie!</strong> <br /><br />Podnoszę stalową rękawicę - domyślam się, że fragment zbroi naszego Wielkiego Rycerza (trochę w LOCHU przyrdzewiała) - i prezentuję poniżej moje wypociny. Brawo Bartek <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Wyczekałeś prawie do końca - myślałem że będę jedyny, ale nie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br /><a href="http://img834.imageshack.us/i/46030201.jpg/"  class="postlink"><img src="http://img834.imageshack.us/img834/2600/46030201.th.jpg" alt="Obrazek" /></a><a href="http://img267.imageshack.us/i/58623771.jpg/"  class="postlink"><img src="http://img267.imageshack.us/img267/8829/58623771.th.jpg" alt="Obrazek" /></a><br /><a href="http://img580.imageshack.us/i/77252571.jpg/"  class="postlink"><img src="http://img580.imageshack.us/img580/14/77252571.th.jpg" alt="Obrazek" /></a><a href="http://img163.imageshack.us/i/81314330.jpg/"  class="postlink"><img src="http://img163.imageshack.us/img163/4352/81314330.th.jpg" alt="Obrazek" /></a><br /><br />P.S. Wybaczcie że film surowy prosto z kamery i nie ma żadnych opisów co się dzieje i jak i tło dźwiękowe też nie zachwyca, ale żeby wyglądał tak jakbym chciał to jego edycja zajęłaby mi pewnie następne dwa tygodnie <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" />. Na szczęście mając nadzieję, że nie to będzie oceniane brałem to pod uwagę i nagrywając starałem się pokazać wszystko czytelnie co z czego wynika i poza znikającą ręką za tylną ściankę podczas rejestracji i usuwania kluczy wszystko jest chyba jasne. Dla pełnej czytelności podpowiem że ciemność na wyświetlaczu na filmie w 5:11 to odcięcie zasilania, aby pokazać że żółty kluczyk jest rzeczywiście w pamięci EEPROM<div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br />Kod nie jest optymalny &lt;wstyd&gt; Na pewno nie taki jak prezentuje Mirek (i Bartek - sqbany zawyżył poziom  <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" />  <img src="https://forum.atnel.pl/images/smilies/icon_redface.gif" alt=":oops:" title="Zawstydzony" /> ). Niestety nadal brakuje mi czasu aby doczytać książkę do końca i zrozumieć wszystko po kolei. Dodatkowo urządzenie nie spełnia wszystkich założeń konkursowych:<br />- Brak UART - nigdy jeszcze nie komunikowałem się z PC przez konsolę czy w jakikolwiek inny sposób, nie korzystałem z FTDI i innych tidididi - na to też potrzebuję czasu i jakby oddzielnego podejścia do tematu.<br />- Na pokładzie brak zegara - też jeszcze tematu RTC nie opanowałem do końca - spróbuję go zgłębić do końca w konkursie FreeStyle :&gt;<br />- Reszta warunków wydaje się być spełniona, ale jest też dużo dodane poza konkursem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Do rzeczy...<br /><br /><br /><br /><strong><span style="font-size: 150%; line-height: normal">Pliki programu:</span></strong><br /><ul><li><strong>1Wire.c</strong> – plik ten zawiera wszystkie funkcje niezbędne do poprawnej współpracy z magistralą 1-Wire, czyli miedzy innymi slot zapisu i odczytu wraz z właściwymi opóźnieniami czasowymi jak również pętlami powodującymi przepisanie całego odczytanego numeru seryjnego do bufora bit po bicie,<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;inttypes.h&gt;<br />#include &quot;1Wire.h&quot;<br />#include &quot;delay.h&quot;<br /><br /><br /><br />// ****************************************************<br />// ***waitus() Dla zegara 4MHz, funkcja odmierza***<br />// ***tyle mikrosekund, ile wynosi parametr tau   ***<br />// ****************************************************<br /><br /><br />void waitus(unsigned char tau){<br />do{<br />asm(&quot;nop&quot;);           //NOP<br />}<br />while(--tau!=0);<br />}<br /><br /><br />// ************************************************************<br />// ***_1WireInit Funkcja inicjalizująca 1Wire***<br />// ***funkcja zwraca:***<br />// ***- 0 gdy nic nie wykryto***<br />// ***- 1 gdy wykryto urządzenie iButton***<br />// ***- 2 gdy wykryto zwarcie magistrali ***<br />// ************************************************************<br /><br />uint8_t _1WireInit( void ){<br />uint8_t InitVal=0;<br /><br />_1W_SET_0();//stan 0 na magistrali 1-Wire<br />waitus(250);//opóźnienie 500us<br />waitus(250);<br />_1W_SET_1();//stan 1 na magistrali 1-Wire<br />waitus(65);<br />if(!(_1W_WE))//równoznaczne z if(!(PINB &amp; 0x01)), patrz makro w 1Wire.h<br />InitVal++;<br />waitus(220);<br />waitus(236);//czekaj 416us do końca inicjalizacji<br />if(!(_1W_WE))//jeśli nadal PinB.0 = 0, zwarcie<br />InitVal++;<br />return InitVal;//zwraca: 0-nic, 1-pastylka, 2-zwarcie<br />}<br /><br /><br />// ****************************************************************<br />// ***_1WireWriteSlot Slot zapisu bitu***<br />// ****************************************************************<br /><br />void _1WireWriteSlot(uint8_t bit){<br />if(bit){//zapisz 1<br />_1W_SET_0();<br />waitus(11);<br />_1W_SET_1();<br />waitus(60);<br />}<br />else {//zapisz 0<br />_1W_SET_0();<br />waitus(70);<br />_1W_SET_1();<br />}<br />}<br /><br />// ****************************************************************<br />// ***_1WireReadSlot Slot odczytu bitu***<br />// ****************************************************************<br />uint8_t _1WireReadSlot(void) {<br />uint8_t _bit=0;<br />_1W_SET_0();//ustaw 0<br />waitus(1);<br />_1W_SET_1();//zwolnij magistralę, stan H z rezystora PullUp<br />waitus(14);<br />_bit = (_1W_WE);//zwróć wartość PinB.0, 1 lub 0<br />waitus(60);<br />return _bit;<br />}<br /><br /><br />// ****************************************************************<br />// ***_1WireWriteByte funkcja wysyłająca ***<br />// ***      cały bajt danych na magistralę***<br />// ****************************************************************<br /><br />void _1WireWriteByte(uint8_t dana){<br />uint8_t i;<br />for(i=0; i&lt;8; i++){<br />_1WireWriteSlot( dana &amp; 0x01 );//wyślij 1 lub 0<br />dana &gt;&gt;= 1;<br />}<br />}<br /><br />// ****************************************************************<br />// ***_1WireReadByte Funkcja zwracająca odczytany***<br />// ***   bajt danych z magistrali***<br />// ****************************************************************<br />uint8_t _1WireReadByte(void){<br />uint8_t i;<br />uint8_t data=0;<br /><br />for(i=0x01; i!=0; i&lt;&lt;=1){//za każdym obiegiem, przesuń jedynkę w lewo odpowiada<br />//pozycjom zczytanej wartości (czytamy od LSB do MSB)<br />if( _1WireReadSlot() )//jeśli _1WireReadSlot() odczytał 1<br />data |= i;//umieść 1 na odpowiedniej pozycji<br />}<br />return data;<br />}<br /><br /><br />// ****************************************************************<br />// ***_1WCalcCRC Wyliczanie CRC danych***<br />// *** źródło: &quot;Mikrokontrolery AVR w praktyce&quot;***<br />// ***Jarosław Doliński wydanie 2  2004 str. 385***<br />// ****************************************************************<br /><br />void _1WCalcCRC(uint8_t bajt,uint8_t *CRC) {       //procedura wyliczania CRC<br />//wielomian generujący jest równy: x^8 + x^5 + x^4 + 1<br />uint8_t zp1,zp2,i;//zmienne pomocnicze<br />zp1=bajt;<br />for(i=0;i&lt;8;i++) {<br />bajt^=*CRC;//wskaźnik *CRC wyznacza aktualnie wyliczony CRC<br />zp2=bajt&amp;0x01;//wydzielenie bitu do obliczeń<br />bajt=*CRC;<br />if(zp2)  {<br />bajt^=0x18;<br />}<br />bajt=((uint8_t)(bajt)&gt;&gt;1)+0x80*zp2; //konwersja uch jest potrzebna do<br />//prawidłowego wykonania przesunięcia<br />*CRC=bajt;<br />zp1=(bajt=zp1&gt;&gt;1);<br />}<br />}<br /><br /><br />// ****************************************************************<br />// ***  _1WCheckCRC funkcja liczy CRC, argumenty:***<br />// ***  wskaźnik do tablicy z odczytanymi danymi***<br />// *** oraz wielkość tablicy, jeśli CRC się zgadza***<br />// *** funkcja zwróci 0x00***<br />// ****************************************************************<br />uint8_t _1WCheckCRC( uint8_t *ptr, uint8_t size ){<br />uint8_t CRC=0;<br /><br />for(uint8_t i=0; i&lt;size; i++){<br />_1WCalcCRC(ptr[i],&amp;CRC);<br />}<br />return CRC;<br />}<br />[/syntax]<br /></li><li><strong>1Wire.h</strong> – plik makro ułatwiający pracę ze zmiennymi dotyczącymi obsługi magistrali 1-Wire zawartymi w pliku 1Wire.c. Sprawia, iż program staje się czytelny i nie trzeba operować skomplikowanymi operacjami na rejestrach. Łatwiejsze jest również wprowadzanie zmian  w przypadku modyfikacji sprzętowych,<br /><br />[syntax=c]#ifndef IWIRE_H_INCLUDED<br />#define IWIRE_H_INCLUDED<br /><br />// ****************************************************<br />// ***Definicje portów dla pliku 1Wire.c***<br />// ****************************************************<br /><br /><br />#define _1WPORTB<br />#define _1WPINB<br />#define _1WSLOT(1&lt;&lt;0)<br />#define _1W_WE{ (PINB &amp; _1WSLOT); }<br /><br /><br />#define _1W_SET_0(){ DDRB |= 0x01; }//PB.0 jako wyjście,<br />//PB.0 = 0, stan na linii wynosi 0<br />#define _1W_SET_1(){ DDRB &amp;= 0xFE;}//PB.0 jako wejście,<br />//stan 1 pochodzi z rezystora PullUp<br />uint8_t_1WireInit( void );<br />void_1WireWriteByte(uint8_t dana);<br />uint8_t_1WireReadByte(void);<br />void _1WCalcCRC(uint8_t bajt,uint8_t *CRC);<br />uint8_t_1WCheckCRC( uint8_t *ptr, uint8_t size );<br />#endif<br />[/syntax]<br /></li><li><strong>delay.c</strong> – plik z funkcją opóźniającą wynoszącą 100μs wielokrotnie używaną do generacji opóźnień i tworzenia pętli tworzących opóźnienia rzędu ms,</li><li><strong>delay.h</strong> – plik zawiera funkcję zawierającą w swej strukturze wstawki asemblerowe i służy do wytworzenia elementarnych opóźnień w programie,</li><li><strong>hardware.h</strong>  - dzięki temu plikowi uzyskano całkowite odseparowanie części programowej od sprzętowej, ponieważ w programie głównym nie dokonuje się żadnych operacji na portach, a jedynie na zdefiniowanych w tym pliku zmiennych. Jakakolwiek zmiana sprzętowa powoduje tylko konieczność zmiany deklaracji zmiennej w obrębie tego pliku. Zastosowane nazwy zmiennych intuicyjnie wskazują sprzęt, którego dotyczą. <br /><br />[syntax=c]#ifndef HARDDEF_H_INCLUDED<br />#define HARDDEF_H_INCLUDED<br /><br />//*************************************************<br />//***Definicje wyprowadzeń ***<br />//*************************************************<br /><br />//*************************************************<br />//***PORT B***<br />//*************************************************<br /><br />#define IWIRE_PORTB<br />#define SPI_PORTB<br /><br />#define IWIRE_PIN(1&lt;&lt;0)//PortB.0 magistrala 1-Wire<br />#define SPI_MOSI(1&lt;&lt;3)//PortB.5 linia MOSI interfejsu do programowania ISP<br />#define SPI_MISO(1&lt;&lt;4)//PortB.5 linia MISO interfejsu do programowania ISP<br />#define SPI_SCK(1&lt;&lt;5)//PortB.5 linia SCK interfejsu do programowania ISP<br /><br />//*************************************************<br />//***PORT C***<br />//*************************************************<br /><br />#define LEDPORT C<br /><br />#define USUWANIE (1&lt;&lt;0)     //PortC.0 Otwieranie drzwi ze srodka<br />#define WEW_OTW (1&lt;&lt;1)     //PortC.1 USUWANIE kluczy<br />#define RELAYPIN (1&lt;&lt;2)     //PortC.2 Baza tranzystora sterującego przekaznikiem<br />#define BUZZERPIN (1&lt;&lt;3)     //PortC.3 Buzzer<br />#define LEDPING(1&lt;&lt;4)     //PortC.4 Dioda zielona<br />#define LEDPINR (1&lt;&lt;5)     //PortC.5 Dioda czerwona<br /><br />//*************************************************<br />//***PORT D***<br />//*************************************************<br /><br />#define LCD_EPORTD<br />#define LCD_DPORTD<br />#define LCD_RSPORTD<br />#define REJESTRACJA_PORT D<br /><br />#define REJESTRACJA (1&lt;&lt;0)      //PortD.0 REJESTRACJA kluczy<br />#define LCD_E1           //LCD ENABLE<br />#define LCD_RS2//ZAPIS DANEJ DO WYSWIETLACZA<br />#define LCD_D44//Linia danych D4 wyswietlacza<br />#define LCD_D55//Linia danych D5 wyswietlacza<br />#define LCD_D66//Linia danych D6 wyswietlacza<br />#define LCD_D77//Linia danych D7 wyswietlacza<br /><br />#endif<br />[/syntax]<br /></li><li><strong>lcd.c</strong> – plik zawiera funkcje sterujące wyświetlaczem alfanumerycznym zastosowanym w układzie takie jak czyszczenie, wyświetlanie znaku, wyświetlenie wartości dziesiętnej przesłanej zmiennej, sterowanie kursorem,</li><li><strong>lcd.h</strong> – podobnie jak plik hardware.h ten plik definiuje wszystkie zmienne użyte <br />w pliku lcd.c i w znaczący sposób przyspiesza pisanie funkcji. Dodatkowo zawiera deklarację typów zmiennych użytych do sterowania wyświetlaczem.</li><li><strong>main.c</strong> – jest głównym i najważniejszym zaraz po Makefile plikiem. Zawiera <br />w swojej strukturze inicjalizację wszystkich peryferii dołączonych do mikroprocesora, a komendy zawarte w jego wnętrzu sterują pracą całego modułu. W swej strukturze posiada nieskończoną pętlę główną według, której nieustannie działa program, . Program składa się w większości z instrukcji warunkowych, których spełnienie powoduje właściwą reakcję ze strony modułu na zaistniałe zdarzenie zewnętrzne. </li><li><strong>makra.h</strong> – kolejny z plików ułatwiający pracę. Tym razem sterowanie portami, czyli ułatwia korzystanie z funkcji PORTx, PINx oraz DDRx </li></ul><br /><br /><strong><span style="font-size: 150%; line-height: normal">Parametry układu elektronicznego:</span></strong><br />•napięcie zasilania:  12V DC<br />•pobór prądu:<br />    o w czasie spoczynku średnio 15mA <br />    oprzy podłączonym wyświetlaczu LCD w zależności od zastosowanego wyświetlacza ciekłokrystalicznego – w modelu prototypowym średnio 30mA<br />   oz załączoną diodą zieloną średnio 110mA<br />   oz załączona diodą czerwoną 112mA<br />   oz załączona diodą czerwoną i zieloną 190mA<br />   ozałączenie przekaźnika 235mA<br />   ozałączenie przekaźnika wraz z otwarciem blokady elektrozamka: 950mA<br />•możliwość kasowania i dodawania nowych kluczy<br />•dane kluczy zapisywane w nielotnej pamięci EEPROM<br />•element wykonawczy o obciążalności styków: 3A 250VAC; 3A 30VDC<br />•wymiary płytki:  95 x 58mm <br />•wymiary modułu: 95 x 58 x 28mm<br />•sygnalizacja stanu pracy:<br />   odwukolorowa czerwono-zielona dioda LED wbudowana w czytnik iButton<br />   ojednotonowy sygnalizator dźwiękowy<br />   owyświetlacz ciekłokrystaliczny LCD z podświetlaniem<br /><br /><br /><span style="font-size: 150%; line-height: normal"><strong>Spis elementów:</strong></span><br />Rezystory:<br />R1 – 4,7kΩ 0,25W 5% SMD 0805<br />R2 – 1,0kΩ 0,25W 5% THT <br />R3 – 47Ω 0,25W 5% SMD 0805 (opcjonalnie)<br />R4 – 330Ω 0,25W 5% SMD 0805<br />R5 – 2,0kΩ 0,25W 5% SMD 0805<br />PR1 – 10kΩ Potencjometr montażowy ACP serii CA6 SMD 0,1W <br />Kondensatory:<br />C1 – 470μF / 25V elektrolityczny THT<br />C2 – 100 μF / 16V elektrolityczny THT<br />C3, C4, C5 – 100nF / 50V SMD 0805<br />C6, C7 – 22pF / 50V SMD 0805<br />Półprzewodniki:<br />D1 – 1N4148 dioda prostownicza 75V 0,01A &lt;4ns SMD 0805 <br />T1 – BC847B tranzystor NPN bipolarny 50V 0,1A SMD SOT23<br />U1 – LM7805CV – Układ scalony stabilizator 5V 1,5A 4% THT TO-220 <br />U2 – Atmega8 16AU Układ scalony AVR ISP-MC 8k Flash 16MHz  SMD TQFP32  <br />U3 – DS9503P+ Układ scalony ochrona ESD 1-Wire Dallas<br />U4 – RC1602BB Wyświetlacz LCD 2×16 80×36×13,2mm niebiesko – biały (opcjonalnie) - zgodny oczywiście z HD44780<br />Inne: <br />X1 – 4,00MHz rezonator kwarcowy SMD w obudowie metalowej<br />REL1 – Przekaźnik elektromagnetyczny 12VDC 3A/250VAC 3A/30VDC typu SPST HF32F THT <br />BUZ1 – miniaturowy przetwornik piezoelektryczny wraz z generatorem 6VDC<br />Z1 – Gniazdo zasilające DC kątowe szpilka 2,5mm<br />Z3 – Adapter iButton Probe plus LED dwukolorowy czerwony i zielony, przewód 0,2 m<br />Z2, Z5, Z6, Z7, ZAMEK – Listwa zaciskowa raster 3,5mm 2pin szara.<br />Z4 – Listwa kątowa goldpin 1×6PIN<br />Elementy dodatkowe:<br />Gniazdo typu goldpin do druku kątowe 1×5PIN<br />Listwa typu goldpin do druku prosta 1×5PIN<br />Gniazdo typu goldpin do druku proste 1×16PIN<br />Listwa typu goldpin do druku prosta 1×16PIN<br />Tulejka dystansowa M3×12mm × 4szt<br />Śruba M3×4mm × 8szt<br />Płytka drukowana wg projektu × 1szt<br />Układ iButton DS1990A × wg uznania i pamięci EEPROM <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Pozdrawiam!<br /><strong>NIEBO!™</strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=418">NIEBO!</a> — 19 sie 2012, o 19:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-19T19:05:40+01:00</updated>
<published>2012-08-19T19:05:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13052#p13052</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13052#p13052"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13052#p13052"><![CDATA[
no to 1 pierwszy już jest <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />   Bardzo dobre opracowanie zgodne z założeniami itp, itd  czekamy na więcej panowie <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=58">SunRiver</a> — 19 sie 2012, o 19:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek]]></name></author>
<updated>2012-08-19T14:41:28+01:00</updated>
<published>2012-08-19T14:41:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13018#p13018</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13018#p13018"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=13018#p13018"><![CDATA[
<strong>Witam wszystkich.<br />Widzę, że nikt nie chce być pierwszy więc spróbuje ja.</strong><br /><br />Spełnienie wymagań projektowych<br /><br />1.<strong> Dowolne EVB </strong><br />Żeby nie robić reklamy żadnej firmie postanowiłem projekt wykonać na płytce stykowej.           Wg mnie jest to dobra EVB z uwagi, że nie ogranicza mnie w żaden sposób a jej „konfigurowalność” jest nieograniczona i daje ogromne możliwości.  Lecz oczywiście każdy może mieć inne zdanie.<br /> <br />2. <strong>Dowolna Atmega</strong><br />Wybrałem Atmega32 – nie było konkretnych powodów dlaczego.<br />UK skonfigurowana do pracy na wewnętrznym oscylatorze 8Mhz<br />Program zajmuje ok. 6kB lecz nie został on jeszcze zoptymalizowany.<br /><br />3. <strong>Wyświetlacz LCD 2x16 lub inny </strong><br />Wyświetlacz 2x16 HY-1602F6 zgodny z HD44780<br /><br /><br />4. <strong>Dioda LED</strong><br />Dioda LED czerwona sygnalizuje stan urządzenia<br /><br />5. <strong>Przekaźnik załączający </strong><br />Na płytce zamiast przekaźnika zastosowałem diodę sygnalizującą koloru zielonego <br /><br />6.<strong> 3 przyciski </strong><br />Zastosowałem 2 przyciski. Pierwszy z nich służy do wysyłania informacji na Terminal drugi do rejestrowania nowego klucza.<br /><br />7. <strong>Info na UARCIE</strong><br />Tutaj rozszerzyłem lekko funkcjonalność.  Za pomocą Terminala można usunąć pojedynczy klucz z pamięci urządzenia, usunąć wszystkie klucze, ustawić datę i godzinę i oczywiście wyświetlić informację na temat stanu urządzenia.<br /><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/159_580273af3872371733dc65010dcd8463.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/159_580273af3872371733dc65010dcd8463.jpg" alt="Obrazek" /></a><br /><em>Rys.1 - Fotografia płytki</em><br /><br /><a href="http://forum.atnel.pl/_obrazki/o/159_e971be5381c76b9f7574f5a02dbba70a.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/159_e971be5381c76b9f7574f5a02dbba70a.png" alt="Obrazek" /></a><br /><em>Rys.2 - Schemat połączeń</em><br /><br /><span style="font-size: 150%; line-height: normal"><strong>Założenia i realizacja:</strong></span><br />W wytycznych do projektu nie było za dużo założeń oraz wytycznych do projektu więc postanowiłem zrealizować to w poniżej opisany sposób.<br /><br /> - Jako RTC posłużył mi układ DS3231M z wbudowanym rezonatorem kwarcowym, godzinę i datę ustawia się za pomocą dowolnego terminala.<br /><br />- Z uwagi na brak w swoich zasobach pastylek iButton zgodnie z zaleceniem autora tematu zastosowałem układy DS1820 i podobne.<br /><br />- Klucze przechowywane są w pamięci EEPROM uK. W przypadku ATMega32 umożliwia to zapamiętać ok. 140 kluczy – w danym przypadku ograniczyłem tę liczbę do 35. Aby nie odczytywać za każdym razem pamięci EEPROM podczas włączenia zasilania klucze z pamięci EEPROM przepisywane są do dwuwymiarowej tablicy znajdującej się w ulotnej pamięci SRAM  o nazwie kody_dostepu[][]. <br />Wszelkie zmiany dokonywane na tablicy są natychmiast odwzorowywane w pamięci EEPROM (zapis nowego klucza, usunięcie klucza, usunięcie wszystkich kluczy).<br />Ilość zarejestrowanych kluczy przechowywana jest w zmiennej l_kodow która ma również odwzorowanie w pamięci EEPROM pod adresem 0 .<br />Dodatkowo z kluczami związane są jeszcze dwie zmienne tablicowe kody_autoryzujacy[7] i kody_bledny[7] które odpowiednio zawierają ostatnio zarejestrowany klucz poprawny oraz błędny którymi próbowano dokonać autoryzacji.  <br /><br />- Stan urządzenia prezentowany jest na 2 wierszowym wyświetlaczu alfanumerycznym. W Lewym rogu pierwszej linii wyświetlana jest aktualna godzina. W prawym rogu stan przekaźnika – „Dostęp doz.” – „Dostęp zab.”<br />W dolnej linii wyświetlane są komunikaty:<br /><em>Klucz błędny</em> – W przypadku próby autoryzacji kluczem nie zarejestrowanym <br /><em>Klucz poprawny</em> - W przypadku próby autoryzacji kluczem zarejestrowanym <br /><em>Oczekiwanie</em> - W oczekiwaniu na klucz<br /><em>Nowy klucz</em> - W momencie rozpoczęcia procedury zapisu nowego klucza (po naciśnięciu przycinku)<br /><em>Klucz zapisany</em> – W momencie zakończenia procedury dodania nowego klucza zakończonej powodzeniem  <br /><em>Klucz istnieje</em> – W momencie próby zarejestrowania klucza istniejącego już w bazie<br /><em>Błąd zapisu</em> – W momencie zakończenia procedury dodania nowego klucza zakończonej błędem. Następuje konieczność ponownego rozpoczęcia procedury rejestracji nowego klucza. <br /><br />Dodatkowo próby autoryzacji obrazowane są na diodzie czerwonej w następujący sposób:<br />- praca diody z częstotliwością 1 Hz – urządzeni oczekuje na klucz<br />- praca diody z częstotliwością 4 Hz – próba autoryzacji kluczem nie zarejestrowanym<br />- praca ciągła diody – próba autoryzacji kluczem zarejestrowanym<br /><br />Próba autoryzacji kluczem zarejestrowanym  zakończona powodzeniem skutkuje po czasie 1 sekundy przełączenie stanu przekaźnika co jest obrazowane diodą zieloną  oraz „przełączeniem” dostępu pomiędzy dozwolonym i niedozwolonym. <br /><br />Próba autoryzacji kluczem nie zarejestrowanym  skutkuje rozłączeniem styków  przekaźnika  - zabronieniem dostępu. <br /> <br /><br /><strong>Praca urządzenia:</strong><br /><br />Urządzenie rozpoczyna pracę od załadowania do zmiennej przechowującej klucze danymi z pamięci EEPROM. Następnie inicjalizowany jest wyświetlacz, UART.<br />Następnym krokiem jest wyświetlanie na wyświetlaczy informacji o urządzeniu.<br />Kolejnym krokiem jest inicjalizacja Timera uK który został skonfigurowany w taki sposób aby odmierzał czas 1uS.<br />Po czynnościach inicjalizujących uK przechodzi do nieskończonej pętli w której cyklicznie sprawdza wystąpienie jednego z 3 zdarzeń:<br />- przyłożenie pastylki do czytnika<br />- wciśniecie jednego z 2 przycisków<br />- otrzymanie rozkazu z Terminala.<br /><br /><br /><br />Jedna z głównych procedur jest procedura sprawdzania czy dany klucz znajduje się na liście kluczy autoryzowanych <br />Wygląda ona następująco:<br />[syntax=c]<br />/*<br />//<br />// Procedura sprawdzająca <br />// czy dany kod znajduje się <br />// na liście kluczy zarejestrowanych<br />//<br />*/<br /><br />uint8_t sprawdz_kod(){<br /><br />uint8_t traf;<br />for(uint8_t i=0; i&lt;l_kodow; i++)<br />{<br /><br />traf=0;<br />for (uint8_t j=0; j&lt;=6; j++)<br />{<br />if(kody_dostepu[i][j]==kod[j])<br />++traf;<br /><br /><br />if (traf==6)<br />return i+100;<br /><br />}<br />}<br />return 0;<br />}<br /><br />[/syntax]<br /><br />Funkcja przełączająca przekaźnik jest w głównej pętli i wygląda tak:<br />[syntax=c]<br />if ( ONE_WIRE_PRESENCE_PULSES())<br />{<br />if (ONE_WIRE_PRESENCE_PULSES()){<br />ONE_WIRE_SEND(0x33);<br /><br />tcrc=0;<br />for (uint8_t i=0; i&lt;=6; i++){<br />kod[i]=ONE_WIRE_READ();<br />tcrc=_crc_ibutton_update(tcrc, kod[i]);<br />}<br />tmp=ONE_WIRE_READ();<br /><br />if ((tcrc==tmp)&amp; (tmp!=0) &amp; (tmp!=0xff))<br /><br />if (sprawdz_kod()){<br />tryb=0;<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Klucz poprawny  &quot;);<br />for (uint8_t i=0; i&lt;=6 ;i++)<br />kody_autoryzujacy[i]=kod[i];<br />sek=0;<br />czas2=0;<br />while (sek&lt;1);<br />sek=255;<br />lcd_goto_x_y(6,0);<br />if (!dostep){<br />lcd_TransmitString(&quot;Dostep doz&quot;);<br />przekaznik_ON;<br />dostep=1;<br />}else{<br />lcd_TransmitString(&quot;Dostep zab&quot;);<br />przekaznik_OFF;<br />dostep=0;<br />}<br /><br /><br /><br /><br />}<br />else{<br />tryb=125;<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;  Klucz bledny  &quot;);<br />for (uint8_t i=0; i&lt;=6 ;i++)<br />kody_bledny[i]=kod[i];<br />lcd_goto_x_y(6,0);<br />lcd_TransmitString(&quot;Dostep zab&quot;);<br />dostep=0;<br />przekaznik_OFF;<br /><br />}<br /><br /><br />while (ONE_WIRE_PRESENCE_PULSES());<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;  Oczekiwanie   &quot;);<br />}<br />}<br />[/syntax]<br /><br />Uk po wykryciu, że w czytniku znajduje się klucz sprawdza czy dany klucz jest zarejestrowany, jeżeli tak przełącza przekaźnik, wyświetla odpowiednie komunikaty na wyświetlaczu i na koniec czeka aż klucz zostanie wyciągnięty z czytnika.<br /><br />Kolejna ważna procedurą jest dodawanie nowego klucza:<br /><br />[syntax=c]<br />/*<br />//<br />// Procedura zapisująca nowy klucz <br />//<br />*/<br /><br />void zapisz_kod(){<br /><br /><br />for (uint8_t j=0; j&lt;=6; j++){<br />kody_dostepu[l_kodow][j]=kod[j];<br />EEPROM_write((1+l_kodow*7+j),kody_dostepu[l_kodow][j]);<br />}<br />l_kodow++;<br />EEPROM_write(0,l_kodow);<br />}[/syntax]<br /><br />[syntax=c]if (!(PIND&amp;(1&lt;&lt;PD5)))<br />{<br /><br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;   Nowy klucz   &quot;);<br /><br /><br />sek=0;<br />while((!ONE_WIRE_PRESENCE_PULSES()) &amp; (sek&lt;5));<br /><br />if (sek&lt;5){<br />sek=255;<br />_delay_ms(200);<br />ONE_WIRE_SEND(0x33);<br />tcrc=0;<br />for (uint8_t i=0; i&lt;=6; i++){<br />kod[i]=ONE_WIRE_READ();<br />tcrc=_crc_ibutton_update(tcrc, kod[i]);<br />}<br />tmp=ONE_WIRE_READ();<br /><br />if ((tcrc==tmp) &amp; (tmp!=0) &amp; (tmp!=0xff)){<br />if (!sprawdz_kod())<br />{<br />zapisz_kod();<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Klucz zapisany &quot;);<br />} else{<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Klucz istnieje &quot;);<br />}<br /><br />}<br />else{<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Blad zapisu  &quot;);<br />}<br /><br />while (ONE_WIRE_PRESENCE_PULSES());<br />}<br />else{<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;Nie wykryto kl. &quot;);<br />_delay_ms(1000);<br />}<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;  Oczekiwanie   &quot;);<br /><br />}[/syntax]<br /><br />Program po wciśnięciu przycisku czeka na przyłożenie klucza który chcemy zapisać do czytnika, jeżeli to nie nastąpi w ciągu 5 sek program wychodzi z procedury.<br />Jeżeli przyłożony do czytnika klucz jest odczytany poprawnie i nie ma go na liście kluczy następuje wywołanie procedury zapisu klucza do pamięci EEPROM.<br /><br /><br />Poniżej przedstawiam cały kod. <br /><br />[syntax=c]<br />/*<br /> * zadanie5.c<br /> */ <br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &lt;avr/crc16.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;ds3231.h&quot;<br />#include &quot;EEPROM.h&quot;<br />#include &quot;UART_32.h&quot;<br />#include &quot;hd44780.h&quot;<br /><br /><br />#define LED_ON{DDRD|=(1&lt;&lt;PD6); PORTD&amp;=~(1&lt;&lt;PD6);}<br />#define LED_OFF{DDRD|=(1&lt;&lt;PD6); PORTD|=(1&lt;&lt;PD6);}<br />#define LED_TOGGLE{DDRD|=(1&lt;&lt;PD6); PORTD^=(1&lt;&lt;PD6);}<br /><br />#define przekaznik_ON{DDRD|=(1&lt;&lt;PD7); PORTD&amp;=~(1&lt;&lt;PD7);}<br />#define przekaznik_OFF{DDRD|=(1&lt;&lt;PD7); PORTD|=(1&lt;&lt;PD7);}<br />#define przekaznik_TOGGLE{DDRD|=(1&lt;&lt;PD7); PORTD^=(1&lt;&lt;PD7);}<br /><br />volatile uint16_t czas1, czas2, tryb, led;<br />volatile uint8_t flaga_t, l_kodow, kod[7], n_uart, sek, tcrc, dostep;<br />volatile uint8_t kody_dostepu[35][7], kody_autoryzujacy[7], kody_bledny[7];<br /><br /><br /><br />/*<br />//<br />// Procedura sprawdzająca <br />// czy dany kod znajduje się <br />// na liście kluczy zarejestrowanych<br />//<br />*/<br /><br />uint8_t sprawdz_kod(){<br /><br />uint8_t traf;<br />for(uint8_t i=0; i&lt;l_kodow; i++)<br />{<br /><br />traf=0;<br />for (uint8_t j=0; j&lt;=6; j++)<br />{<br />if(kody_dostepu[i][j]==kod[j])<br />++traf;<br /><br /><br />if (traf==5)<br />return i+100;<br /><br />}<br />}<br />return 0;<br />}<br /><br />/*<br />//<br />// Procedura zapisująca nowy klucz <br />//<br />*/<br /><br />void zapisz_kod(){<br /><br /><br />for (uint8_t j=0; j&lt;=6; j++){<br />kody_dostepu[l_kodow][j]=kod[j];<br />EEPROM_write((1+l_kodow*7+j),kody_dostepu[l_kodow][j]);<br />}<br />l_kodow++;<br />EEPROM_write(0,l_kodow);<br />}<br /><br />/*<br />//<br />// Procedura czyszcząca listę z kluczami<br />//<br />*/<br />void wyczysc_liste_kodow(){<br /><br />uint8_t odp;<br /><br /><br />USART_TransmitString(&quot;/r/nCzy napewno wyczyscic cala liste kluczy? (T//N)&quot;);<br />UCSRB &amp;=~(1&lt;&lt;RXCIE);<br />odp = USART_Receive();<br />UCSRB|=(1&lt;&lt;RXCIE);<br />if ((odp==&quot;T&quot;) |(odp=='t')){<br />for(uint8_t i=0; i&lt;l_kodow; i++)<br />{<br />for (uint8_t j=0; j&lt;=6; j++){<br />kody_dostepu[i][j]=0;<br />EEPROM_write((1+i*7+j),0);<br />}<br /><br />}<br />l_kodow=0;<br />EEPROM_write(0,l_kodow);<br /><br /><br />USART_TransmitString(&quot;/r/nLista kluczy wyczyszczona!&quot;);<br />}<br /><br />}<br /><br />/*<br />//<br />// Procedura usuwająca pojedynczy kod<br />//<br />*/<br /><br />void usun_kod(){<br /><br />uint8_t tmp, odp;<br /><br />USART_TransmitString(&quot;/r/nPrzyloz klucz ktory chcesz usunac z listy &quot;);<br /><br /><br />sek=0;<br />while((!ONE_WIRE_PRESENCE_PULSES()) &amp; (sek&lt;5));<br />if (sek&gt;=5)<br />{<br />sek=255;<br />USART_TransmitString(&quot;/r/nNie wykryto klucza &quot;);<br />return 0;<br />}<br />_delay_ms(200);<br />ONE_WIRE_SEND(0x33);<br />tcrc=0;<br />for (uint8_t i=0; i&lt;=6; i++){<br />kod[i]=ONE_WIRE_READ();<br />tcrc=_crc_ibutton_update(tcrc, kod[i]);<br />}<br />tmp=ONE_WIRE_READ();<br /><br />if ((tcrc==tmp) &amp; (tmp!=0) &amp; (tmp!=0xff)){<br />tmp=sprawdz_kod();<br />if (tmp)<br />{<br />USART_TransmitString(&quot;/r/nKlucz odnaleziony na liscie w pozycji &quot;);<br />USART_Transmit_int(tmp-100,0);<br />USART_TransmitString(&quot;/r/nCzy napewno chcesz usunac wybrany klucz z listy? (T//N)&quot;);<br />UCSRB &amp;=~(1&lt;&lt;RXCIE);<br />odp = USART_Receive();<br />UCSRB|=(1&lt;&lt;RXCIE);<br />if ((odp=='t') | (odp=='T'))<br />{<br /><br />if (((tmp-100)!=(l_kodow-1)))<br />for (uint8_t j=0; j&lt;=6; j++){<br />kody_dostepu[tmp-100][j]=kody_dostepu[l_kodow-1][j];<br />kody_dostepu[l_kodow-1][j]=0;<br />EEPROM_write((1+(tmp-100)*7+j),kody_dostepu[tmp-100][j]);<br />EEPROM_write((1+(l_kodow-1)*7+j),0);<br />}<br />else<br />for (uint8_t j=0; j&lt;=6; j++){<br />kody_dostepu[tmp-100][j]=0;<br />EEPROM_write((1+(tmp-100)*7+j),0);<br />}<br />l_kodow--;<br />EEPROM_write(0,l_kodow);<br />USART_TransmitString(&quot;/r/nKlucz usuniety z listy!&quot;);<br />}<br />else<br />return 0;<br /><br />} else{<br />USART_TransmitString(&quot;/r/nBrak klucza na liscie &quot;);<br />}<br /><br />}<br />while (ONE_WIRE_PRESENCE_PULSES());<br /><br /><br /><br />}<br /><br />/*<br />//<br />// Procedura wyświetlająca aktualną godzinę na wyświetlaczu LCD<br />//<br />*/<br /><br />void wyswietl_czas(uint8_t st)<br />{<br />ds3231_odczyt_czasu();<br />if (st==0){<br />lcd_goto_x_y(0,0);<br />lcd_Transmit_int(aktualny_czas.g,2);<br />lcd_TransmitString(&quot;:&quot;);<br />lcd_Transmit_int(aktualny_czas.m,2);<br />}<br />{<br />if (tmp_czas.g!=aktualny_czas.g)<br />{<br />lcd_goto_x_y(0,0);<br />lcd_Transmit_int(aktualny_czas.g,2);<br />}<br /><br />if (tmp_czas.m!=aktualny_czas.m)<br />{<br />lcd_goto_x_y(3,0);<br />lcd_Transmit_int(aktualny_czas.m,2);<br />}<br />tmp_czas=aktualny_czas;<br />}<br /><br /><br />}<br /><br /><br />/*<br />//<br />// Procedura ustawiania godziny i daty<br />//<br />*/<br /><br />void ustaw_date_godzine(){<br />uint8_t tmp;<br />USART_TransmitString(&quot;/n/rWpisz godzine w formacie 00/n/r&quot;);<br />UCSRB &amp;=~(1&lt;&lt;RXCIE);<br />ustaw_czas.g=0;<br />do{<br />if ((ustaw_czas.g)&gt;=25){<br />USART_TransmitString(&quot;/n/rLiczba blednie wprowadzona, sprobuj jeszcze raz/n/r&quot;);<br />USART_TransmitString(&quot;/n/rWpisz godzine w formacie 00/n/r&quot;);<br />}<br /><br />ustaw_czas.g=pobierz_liczbe_uart();<br />} while (ustaw_czas.g&gt;=24); <br /><br /><br />ustaw_czas.m=0;<br />USART_TransmitString(&quot;/n/rWpisz minuty w formacie 00/n/r&quot;);<br />do{<br />if ((ustaw_czas.m)&gt;=60){<br />USART_TransmitString(&quot;/n/rLiczba blednie wprowadzona, sprobuj jeszcze raz/n/r&quot;);<br />USART_TransmitString(&quot;/n/rWpisz minuty w formacie 00/n/r&quot;);<br />}<br />ustaw_czas.m=pobierz_liczbe_uart();<br />} while (ustaw_czas.m&gt;=60); <br /><br />ustaw_czas.d=0;<br />USART_TransmitString(&quot;/n/rWpisz dzien w formacie 00/n/r&quot;);<br />do{<br />if ((ustaw_czas.d)&gt;31){<br />USART_TransmitString(&quot;/n/rLiczba blednie wprowadzona, sprobuj jeszcze raz/n/r&quot;);<br />USART_TransmitString(&quot;/n/rWpisz dzien w formacie 00/n/r&quot;);<br />}<br />ustaw_czas.d=pobierz_liczbe_uart();<br />} while (ustaw_czas.d&gt;31); <br /><br /><br />ustaw_czas.mi=0;<br />USART_TransmitString(&quot;/n/rWpisz miesiac w formacie 00/n/r&quot;);<br />do{<br />if ((ustaw_czas.mi)&gt;=13){<br />USART_TransmitString(&quot;/n/rLiczba blednie wprowadzona, sprobuj jeszcze raz/n/r&quot;);<br />USART_TransmitString(&quot;Wpisz miesiac w formacie 00/n/r&quot;);<br />}<br />ustaw_czas.mi=pobierz_liczbe_uart();<br />} while (ustaw_czas.mi&gt;=13); <br /><br /><br /><br /><br />ustaw_czas.r=0;<br />USART_TransmitString(&quot;/n/rWpisz rok w formacie 00/n/r&quot;);<br />do{<br />if ((ustaw_czas.r)&gt;=100){<br />USART_TransmitString(&quot;/n/rLiczba blednie wprowadzona, sprobuj jeszcze raz/n/r&quot;);<br />USART_TransmitString(&quot;Wpisz rok w formacie 00/n/r&quot;);<br />}<br />ustaw_czas.r=pobierz_liczbe_uart();<br />} while (ustaw_czas.r&gt;=100); <br /><br />USART_TransmitString(&quot;/n/rUstawiona godzina /n/r&quot;);<br />USART_Transmit_int(ustaw_czas.g,2);<br />USART_TransmitString(&quot;:&quot;);<br />USART_Transmit_int(ustaw_czas.m,2);<br />USART_TransmitString(&quot;/n/rUstawiona data /n/r&quot;);<br />USART_Transmit_int(ustaw_czas.d,2);<br />USART_TransmitString(&quot;-&quot;);<br />USART_Transmit_int(ustaw_czas.mi,2);<br />USART_TransmitString(&quot;-&quot;);<br />USART_Transmit_int(ustaw_czas.r,2);<br />ds3231_zapis_czasu();<br />wyswietl_czas(0);<br />UCSRB|=(1&lt;&lt;RXCIE);<br />}<br /><br />/*<br />//<br />// Procedura wysyłająca na UART aktualny stan urządzenia<br />//<br />*/<br /><br />void stan_urzadzenia(void){<br />if (dostep)<br />{<br />USART_TransmitString(&quot;/n/rDostep dozwolony/n/r&quot;);<br />}<br />else{<br />USART_TransmitString(&quot;/n/rDostep zabroniony/n/r&quot;);<br />}<br />USART_TransmitString(&quot;Ostatni klucz autoryzujacy poprawnie: &quot;);<br />for (uint8_t i=0; i&lt;=6 ;i++){<br />USART_Transmit_int(kody_autoryzujacy[i],2);<br />USART_Transmit(32);<br />}<br />USART_TransmitString(&quot;/r/nOstatni klucz autoryzujacy blednie: &quot;);<br />for (uint8_t i=0; i&lt;=6 ;i++){<br />USART_Transmit_int(kody_bledny[i],2);<br />USART_Transmit(32);<br />}<br />}<br /><br />/*<br />//<br />// Procedura wysyłająca na UART menu<br />//<br />*/<br /><br /><br />void usart_menu(){<br /><br />USART_TransmitString(&quot;/r/n/n/n/n/nPanel uzytkownika/n/n/r&quot;);<br />USART_TransmitString(&quot;1. Stan urzadzenia/n/r&quot;);<br />USART_TransmitString(&quot;2. Wyswietl zarejestrowane klucze/n/r&quot;);<br />USART_TransmitString(&quot;3. Usun wybrany klucz/n/r&quot;);<br />USART_TransmitString(&quot;4. Wyczysc liste kluczy/n/r&quot;);<br />USART_TransmitString(&quot;5. Ustaw date i godzine/n/r&quot;);<br />}<br /><br />/*<br />//<br />// Procedura wysyłająca na UART listę wszystkich kodów<br />//<br />*/<br /><br />void wyswietl_liste_kodow(void){<br /><br />if (l_kodow){<br /><br />USART_TransmitString(&quot;/n/rLista kluczy:&quot;);<br /><br />for(uint8_t i=0; i&lt;l_kodow; i++)<br />{<br />USART_TransmitString(&quot;/r/n/&quot;);<br />USART_Transmit_int(i,2);<br />USART_TransmitString(&quot;: &quot;);<br />for (uint8_t j=0; j&lt;=6; j++)<br />{<br />USART_Transmit_int(kody_dostepu[i][j],2);<br />USART_Transmit(' ');<br />}<br />}<br />}else{<br /><br />USART_TransmitString(&quot;/r/nBrak zarejestrowanych kluczy&quot;);<br />}<br /><br />}<br /><br /><br /><br />/*<br />//<br />// Przerwanie od Timera<br />//<br />*/<br /><br />ISR (TIMER0_COMP_vect)<br />{<br /><br /><br />if (tryb!=0){<br /><br />if (czas1&gt;tryb){<br />czas1=0;<br />LED_TOGGLE;<br />}<br />czas1++;<br />}<br />else<br />LED_ON;<br /><br /><br />czas2++;<br /><br />if ((!(czas2%1000)) &amp; sek!=255)<br />sek++;<br /><br />if (czas2&gt;9000)<br />{<br />wyswietl_czas(1);<br />flaga_t=1;<br />czas2=0;<br />}<br /><br />} <br /><br />/*<br />//<br />// Przerwanie od UART<br />//<br />*/<br /><br />ISR(SIG_USART_RECV){<br />n_uart=1;<br />}<br /><br /><br /><br />int main(void)<br />{<br /><br />uint8_t   tmp;<br />l_kodow=EEPROM_read(0);<br />if ((l_kodow!=255) &amp; (l_kodow!=0))<br />{<br />for (uint8_t i=0; i&lt;l_kodow;  i++)<br />{<br />for (uint8_t j=0; j&lt;=6; j++)<br />{<br />kody_dostepu[i][j]=EEPROM_read(1+(i*7)+j);<br />}<br />}<br /><br />} else<br />l_kodow=0;<br /><br />tryb=250;<br /><br />USART_Init();<br />USART_TransmitString(&quot;/n/r&quot;);<br />USART_TransmitString(&quot;Zadanie nr 5&quot;);<br />lcd_init();<br />wyswietl_czas(0);<br />lcd_TransmitString(&quot; Dostep zab&quot;);<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;  Oczekiwanie   &quot;);<br /><br /><br />PORTD|=(1&lt;&lt;PD5)|(1&lt;&lt;PD4);<br /><br /><br />OCR0 = 8;<br />TCCR0|=(1&lt;&lt;WGM01)|(1&lt;&lt;CS00)|(1&lt;&lt;CS02);<br />TIMSK |=(1&lt;&lt;OCIE0);<br />sei();<br /><br /><br /><br /><br />    while(1)<br />    {<br />        if ( ONE_WIRE_PRESENCE_PULSES())<br />{<br />if (ONE_WIRE_PRESENCE_PULSES()){<br />ONE_WIRE_SEND(0x33);<br /><br />tcrc=0;<br />for (uint8_t i=0; i&lt;=6; i++){<br />kod[i]=ONE_WIRE_READ();<br />tcrc=_crc_ibutton_update(tcrc, kod[i]);<br />}<br />tmp=ONE_WIRE_READ();<br /><br />if ((tcrc==tmp)&amp; (tmp!=0) &amp; (tmp!=0xff))<br /><br />if (sprawdz_kod()){<br />tryb=0;<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Klucz poprawny  &quot;);<br />for (uint8_t i=0; i&lt;=6 ;i++)<br />kody_autoryzujacy[i]=kod[i];<br />sek=0;<br />czas2=0;<br />while (sek&lt;1);<br />sek=255;<br />lcd_goto_x_y(6,0);<br />if (!dostep){<br />lcd_TransmitString(&quot;Dostep doz&quot;);<br />przekaznik_ON;<br />dostep=1;<br />}else{<br />lcd_TransmitString(&quot;Dostep zab&quot;);<br />przekaznik_OFF;<br />dostep=0;<br />}<br /><br /><br /><br /><br />}<br />else{<br />tryb=125;<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;  Klucz bledny  &quot;);<br />for (uint8_t i=0; i&lt;=6 ;i++)<br />kody_bledny[i]=kod[i];<br />lcd_goto_x_y(6,0);<br />lcd_TransmitString(&quot;Dostep zab&quot;);<br />dostep=0;<br />przekaznik_OFF;<br /><br />}<br /><br /><br />while (ONE_WIRE_PRESENCE_PULSES());<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;  Oczekiwanie   &quot;);<br />}<br />}<br /><br /><br />if (!(PIND&amp;(1&lt;&lt;PD5)))<br />{<br /><br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;   Nowy klucz   &quot;);<br /><br /><br />sek=0;<br />while((!ONE_WIRE_PRESENCE_PULSES()) &amp; (sek&lt;5));<br /><br />if (sek&lt;5){<br />sek=255;<br />_delay_ms(200);<br />ONE_WIRE_SEND(0x33);<br />tcrc=0;<br />for (uint8_t i=0; i&lt;=6; i++){<br />kod[i]=ONE_WIRE_READ();<br />tcrc=_crc_ibutton_update(tcrc, kod[i]);<br />}<br />tmp=ONE_WIRE_READ();<br /><br />if ((tcrc==tmp) &amp; (tmp!=0) &amp; (tmp!=0xff)){<br />if (!sprawdz_kod())<br />{<br />zapisz_kod();<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Klucz zapisany &quot;);<br />} else{<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Klucz istnieje &quot;);<br />}<br /><br />}<br />else{<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot; Blad zapisu  &quot;);<br />}<br /><br />while (ONE_WIRE_PRESENCE_PULSES());<br />}<br />else{<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;Nie wykryto kl. &quot;);<br />_delay_ms(1000);<br />}<br />lcd_goto_x_y(0,1);<br />lcd_TransmitString(&quot;  Oczekiwanie   &quot;);<br /><br />}<br /><br />if (!(PIND&amp;(1&lt;&lt;PD4)))<br />{<br />_delay_ms(100);<br />if (!(PIND&amp;(1&lt;&lt;PD4))){<br />while (!(PIND&amp;(1&lt;&lt;PD4)));<br />stan_urzadzenia();<br />usart_menu();<br /><br />}<br />}<br /><br />if (n_uart)<br />{<br />switch(USART_Receive())<br />{<br />case 49: stan_urzadzenia(); break;<br />case 50: wyswietl_liste_kodow(); break;<br />case 51: usun_kod(); break;<br />case 52: wyczysc_liste_kodow(); break;<br />case 53: ustaw_date_godzine(); break;<br />}<br />usart_menu();<br />n_uart=0;<br />}<br />tryb=500;<br />    }<br /><br />}<br />[/syntax]<br /><br /><br />Jeżeli któryś z fragmentów wymaga dokładniejszego wyjaśnienia prosze pisać. <br /><br /><br /><strong>Proponowane kierunki modyfikacji</strong><br /><br />Proponował bym wprowadzenie klucza administratora bez którego nie można byłoby np dodanie nowego klucza.<br />Kolejnym elementem jest szyfrowanie danych zapisanych do EEPROM tak aby nie było można ich odczytać bez klucza szyfrującego.<br />Dodanie karty pamięci i tworzenie logów. Da nam to obraz kiedy  i kto miał dostęp.<br /><br /><br /><br /><br /><br /><br /><strong>No i na koniec klika filmików z pracy urządzenia. </strong><br /><br />Zacznijmy od dodawania nowego klucza:<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><br />Kolejny filmik to podstawowa praca urządzenia:<br /><br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><br />A teraz usuwanie listy z kluczami<br /><div style="width: 583px; height: 471px; margin: 0 auto; padding-left: 26px; padding-top: 48px; background: url('https://www.atnel.pl/download/atnel_tv.png') no-repeat;"> <strong>iframe</strong> </div><br /><br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=159">Bartek</a> — 19 sie 2012, o 14:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-09T14:37:06+01:00</updated>
<published>2012-08-09T14:37:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12189#p12189</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12189#p12189"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12189#p12189"><![CDATA[
No dobrze już sobie idę .... hlip...hlipp<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 9 sie 2012, o 14:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jachu]]></name></author>
<updated>2012-08-09T14:30:10+01:00</updated>
<published>2012-08-09T14:30:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12188#p12188</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12188#p12188"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12188#p12188"><![CDATA[
Znowu offtopujecie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Do lochu z Wami <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=110">jachu</a> — 9 sie 2012, o 14:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-09T14:17:58+01:00</updated>
<published>2012-08-09T14:17:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12184#p12184</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12184#p12184"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12184#p12184"><![CDATA[
ty do karnego szybu ....<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=58">SunRiver</a> — 9 sie 2012, o 14:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2012-08-09T14:09:08+01:00</updated>
<published>2012-08-09T14:09:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12180#p12180</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12180#p12180"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12180#p12180"><![CDATA[
Nie wyciągajcie tak od Mirka książek bo nam chłop zbankrutuje.<br /><br />Dobra, za spam zsyłam się w niższe piętra lochu.  <img src="https://forum.atnel.pl/images/smilies/icon_cry.gif" alt=":cry:" title="Płacze" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 9 sie 2012, o 14:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-08-09T12:49:28+01:00</updated>
<published>2012-08-09T12:49:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12176#p12176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12176#p12176"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12176#p12176"><![CDATA[
echhh koledzy szyszkownicy   ....<img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />To miała być przede wszystkim Zabawa i nauka dla każdego <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  dlatego podałem też link do tematu gdzie <br />opisałem podobna zabawkę , a kol. Kierlan napisał jak zrobić iButtona z DS18B20 do testu jak ktoś niema pstylki<br />to jest 1Wire więc nie trzeba od razu jej posiadać <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />W konkursie z maxem  kolego matołek <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />  było podejście teoretyczne i nie musiało działać chodziło o myślenie <br />przy pisaniu i nauczeniu się korzystania z DTR <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Mi się nader często zdarza oprogramowywć urządzenie , którego nie widzę na oczy dostaje tylko specyfikację <br />i dane wymagania - i jakoś idzie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Niemniej ----&gt;&gt; korzystam z pełnomocnictwa nadanego mi przez szacownego Wielkiego Mistrza Koła Różańcowego <br />(skoro kiedyś nas tak nazwano publicznie) i niniejszym zmieniam w pierwszym poście .. NAGRODY i TERMINY<br /><br />za dorzucenie się do puli nagród dziękuję ..  i Spokój panowie bo ześlę do lochu <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=58">SunRiver</a> — 9 sie 2012, o 12:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-09T08:58:03+01:00</updated>
<published>2012-08-09T08:58:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12151#p12151</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12151#p12151"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12151#p12151"><![CDATA[
Już kolega przewodniczący konkursu SunRiver dostał ode mnie pełnomocnictwa, pewnie jak się pojawi to coś ogłosi. Ja będę tylko fundatorem i obserwatorem - jeśli chodzi o ocenę prac to oczywiście kolega przewodniczący Sun tu rządzi <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=54">mirekk36</a> — 9 sie 2012, o 08:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matolek]]></name></author>
<updated>2012-08-09T08:40:34+01:00</updated>
<published>2012-08-09T08:40:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12149#p12149</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12149#p12149"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12149#p12149"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />A nie zauważyłem (podobnie jak ty, że to konkurs Sun'a) tego że w efekcie końcowym sam fundujesz dodatkową nagrodę.<br /><br />Po prostu wcześniej wydawało mi się, że wszedłeś tylko ponarzekać .... stąd takie moje pytanie.<br /><br />Ja tak na prawdę dopiero dzisiaj zobaczyłem ten konkurs - więc nawet nie miałem czasu pomyśleć o poszerzeniu puli nagród ale chętnie to zrobię. Skontaktuję się w tej sprawie z kolegą SunRiverem i jeśli się zgodzi to - dopisze jeszcze jedną nagrodę w swoim pierwszym poście <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Panie M. dorzuć ciekawą nagrodę a sam napisze program. <br /><br />Pozdrawiam<br />Matołek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=512">matolek</a> — 9 sie 2012, o 08:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jachu]]></name></author>
<updated>2012-08-09T08:37:57+01:00</updated>
<published>2012-08-09T08:37:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12148#p12148</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12148#p12148"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12148#p12148"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />A nie zauważyłem (podobnie jak ty, że to konkurs Sun'a) tego że w efekcie końcowym sam fundujesz dodatkową nagrodę.<br /><br />Po prostu wcześniej wydawało mi się, że wszedłeś tylko ponarzekać .... stąd takie moje pytanie.<br /><br />Ja tak na prawdę dopiero dzisiaj zobaczyłem ten konkurs - więc nawet nie miałem czasu pomyśleć o poszerzeniu puli nagród ale chętnie to zrobię. Skontaktuję się w tej sprawie z kolegą SunRiverem i jeśli się zgodzi to - dopisze jeszcze jedną nagrodę w swoim pierwszym poście <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /></div><br /><br />Brawo Mirku <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />To mamy 3 fundatorow <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />To juz komisja <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Wiec moze bedzie i komisyjne sprawdzanie efektow prac <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=110">jachu</a> — 9 sie 2012, o 08:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-09T08:35:23+01:00</updated>
<published>2012-08-09T08:35:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12147#p12147</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12147#p12147"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12147#p12147"><![CDATA[
A nie zauważyłem (podobnie jak ty, że to konkurs Sun'a) tego że w efekcie końcowym sam fundujesz dodatkową nagrodę.<br /><br />Po prostu wcześniej wydawało mi się, że wszedłeś tylko ponarzekać .... stąd takie moje pytanie.<br /><br />Ja tak na prawdę dopiero dzisiaj zobaczyłem ten konkurs - więc nawet nie miałem czasu pomyśleć o poszerzeniu puli nagród ale chętnie to zrobię. Skontaktuję się w tej sprawie z kolegą SunRiverem i jeśli się zgodzi to - dopisze jeszcze jedną nagrodę w swoim pierwszym poście <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=54">mirekk36</a> — 9 sie 2012, o 08:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jachu]]></name></author>
<updated>2012-08-09T08:33:20+01:00</updated>
<published>2012-08-09T08:33:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12146#p12146</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12146#p12146"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12146#p12146"><![CDATA[
<div class="quotetitle">matolek napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><div class="quotetitle">matolek napisał(a):</div><div class="quotecontent">Jak urządzenie będzie fajne dorzucimy coś ekstra może jaką dodatkową pastylkę?<br /><br />Pozdrawiam<br />Matołek<br /></div><br /><br />Trochę nie za ostro jedziesz panie kolego ? - tak chciałem się tylko zapytać spokojnie ? coś cię ugryzło ?</div><br /><br /><br />Za ostro? Czemuż tak sądzisz Panie M?<br />Koledzy chcieli żebym się dorzucił to czemu nie, to coś złego na tym forum?<br /><br />Pozdrawiam<br />Matołek<br /><br />PS. Komar w nocy.</div><br /><br />Matolek , spokojnie znowu z pozycji ataku <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Fajnie ze sie dorzuciles <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Tutaj na forum raczej staramy sie nie atakowac nikogo tylko spokojnie podchodzimy do tematu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Wiecej luzu a mysle ze wszystko da sie zalatwic i obgadac <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />aha i jeszcze jedno zaczynamy Sunowi robic offtop w watku moze sie chlop w lochach zdenerwowac  <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=110">jachu</a> — 9 sie 2012, o 08:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[matolek]]></name></author>
<updated>2012-08-09T08:29:08+01:00</updated>
<published>2012-08-09T08:29:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12145#p12145</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12145#p12145"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12145#p12145"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">matolek napisał(a):</div><div class="quotecontent">Jak urządzenie będzie fajne dorzucimy coś ekstra może jaką dodatkową pastylkę?<br /><br />Pozdrawiam<br />Matołek<br /></div><br /><br />Trochę nie za ostro jedziesz panie kolego ? - tak chciałem się tylko zapytać spokojnie ? coś cię ugryzło ?</div><br /><br /><br />Za ostro? Czemuż tak sądzisz Panie M?<br />Koledzy chcieli żebym się dorzucił to czemu nie, to coś złego na tym forum?<br /><br />Pozdrawiam<br />Matołek<br /><br />PS. Komar w nocy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=512">matolek</a> — 9 sie 2012, o 08:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-08-09T08:26:07+01:00</updated>
<published>2012-08-09T08:26:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12144#p12144</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12144#p12144"/>
<title type="html"><![CDATA[Re: Zadanie 5  --- 1Wire]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1387&amp;p=12144#p12144"><![CDATA[
<div class="quotetitle">matolek napisał(a):</div><div class="quotecontent"><br />Jak urządzenie będzie fajne dorzucimy coś ekstra może jaką dodatkową pastylkę?<br /><br />Pozdrawiam<br />Matołek<br /></div><br /><br />Trochę nie za ostro jedziesz panie kolego ? - tak chciałem się tylko zapytać spokojnie ? coś cię ugryzło ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 9 sie 2012, o 08:26</p><hr />
]]></content>
</entry>
</feed>