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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-05-19T12:18:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=5&amp;t=22230&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-19T12:18:15+01:00</updated>
<published>2019-05-19T12:18:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219100#p219100</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219100#p219100"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219100#p219100"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />... że procesor jest jak niefrasobliwa, rozrzutna żona, która pożycza, nie wiedząc, czy będzie z czego oddać.<br /></div><br /><br /><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_lol.gif" alt=":lol:" title="Śmieje się" /> <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> no tego jeszcze nie słyszałem ! <img src="https://forum.atnel.pl/images/smilies/icon_lol.gif" alt=":lol:" title="Śmieje się" /> dobre<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 19 maja 2019, o 12:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-05-19T09:59:18+01:00</updated>
<published>2019-05-19T09:59:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219091#p219091</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219091#p219091"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219091#p219091"><![CDATA[
Dobrze, że jesteś dociekliwy i zadajesz pytania. Nie sposób jednak napisać takiej odpowiedzi (przynajmniej w formie postu na forum), aby zawierała całą wiedzę potrzebną do jej zrozumienia. Dlatego też, aby zrozumieć odpowiedź, należy już jakąś wiedzę i znajomość pewnych terminów posiadać. W innym przypadku odpowiedź na jedno pytanie rodzi kolejne pytania i tak w kółko.<br /><br />Jeśli bardzo Ci zależy, żeby to dogłębnie zrozumieć, powinieneś najpierw poznać następujące tematy:<ul><li>co to są pozycyjne systemy liczbowe</li><li>co to jest binarny system liczbowy,</li><li>jakie są sposoby reprezentacji liczb w systemie binarnym (przynajmniej liczby całkowite bez znaku, liczby całkowite ze znakiem, kod uzupełnień do 2),</li><li>w jaki sposób procesor (a konkretnie jego jednostka arytmetyczno-logiczna) wykonuje operacje arytmetyczne na liczbach binarnych,</li><li>jakie instrukcje asemblera dany procesor ma do realizacji takich obliczeń, jaki jest efekt ich działania i czym się od siebie różnią,</li><li>nie zaszkodziłoby też zapoznać się z terminem z dziedziny matematyki o nazwie odejmowanie modularne.</li></ul>To dość obszerne tematy i nie sposób ich szczegółowych opisów zawrzeć w odpowiedzi. Niektóre z nich być może znasz, niektórych nie znasz, a niektóre znasz niezbyt dobrze. Wydaje mi się, że gdybyś znał dobrze wszystkie powyższe tematy, nie miałbyś problemu ze zrozumieniem mojego opisu (prawdopodobnie nawet nie musiałbyś zadawać tego pytania).<br /><br />Myślę, że tymczasem wystarczyłoby, gdybyś rozumiał to tak (w dużym uproszczeniu), że procesor jest jak niefrasobliwa, rozrzutna żona, która pożycza, nie wiedząc, czy będzie z czego oddać. To mąż (czytaj: programista) musi się o to martwić. Kiedy więc procesor odejmuje liczbę większą od mniejszej (mowa o zmiennych <em><strong>uint16_t</strong></em>), najpierw pożycza sobie &quot;jeszcze nie wiadomo skąd&quot; 2^16 (czyli 2 do potęgi takiej, jak rozmiar zmiennej w bitach) i dodaje do mniejszej liczby. Dopiero później wykonuje operację odejmowania. Wynik oczywiście jest nieprawidłowy, bo zostajemy z debetem, którego nie mamy czym pokryć.<br /><br />Jednak w przypadku timera, jeśli obecnie odczytana wartość wynosi przykładowo 200, a poprzednio odczytana wartość była większa i wynosiła przykładowo 64 200, to oznacza, że timer musiał się przepełnić. Jego faktyczna nowa wartość w rzeczywistości nie będzie więc wynosiła 200, tylko będzie większa o pojemność licznika, czyli o 2^16. Licznik doliczył bowiem do 65536 (2^16) i potem jeszcze do 200, jednak nie zostało to policzone, bo zabrakło bitów w liczniku/timerze. I to jest ta wartość, która dokładnie pokrywa nam debet przy odejmowaniu (200-64200), dzięki czemu w tym przypadku okazuje się, że wynik odejmowania liczby większej od mniejszej będzie prawidłowy, <strong>cnd</strong>. Należy przy tym pamiętać o pewnych <strong>ograniczeniach</strong>, o których pisałem wcześniej, pod koniec tego <a href="https://forum.atnel.pl/topic22230.html#p218945"  class="postlink"><strong>postu</strong></a>.<br /><br />Lepiej już chyba nie potrafię. Jeśli nadal nie rozumiesz, zapoznaj się z tematyką podaną powyżej, a na pewno wszystko się rozjaśni. Ewentualnie może ktoś inny wytłumaczy Ci to lepiej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 19 maja 2019, o 09:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-18T23:27:59+01:00</updated>
<published>2019-05-18T23:27:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219085#p219085</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219085#p219085"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219085#p219085"><![CDATA[
<div class="quotetitle">11jacekj napisał(a):</div><div class="quotecontent"><br />Tylko że ja jestem taki typ że będzie mnie to gryzło do puki nie zrozumiem tego, może nawet do &quot;grobowej deski&quot;.<br /></div><br />ale co cię będzie gryzło - jeśli dostałeś już wyjaśnienia.<br /><br />Widzę że nadal nie rozumiesz jakby do czego są TYPY danych w C.<br /><br />Po to m.in powołujesz zmienną uint16_t żeby kompilator właśnie dokonywał na niej obliczenia na dwóch jej bajtach - rozumiesz ? <br /><br />A andrews wyjaśnił ci od podszewki pokazując nawet jak te obliczenia binarnie wyglądają - tylko, że z kolei pewnie też musisz jeszcze sobie gdzieś doczytać o prostych operacjach binarnych jak dodawanie i odejmowanie - bo to takie absolutne podstawy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 18 maja 2019, o 23:27</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-18T21:38:13+01:00</updated>
<published>2019-05-18T21:38:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219084#p219084</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219084#p219084"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219084#p219084"><![CDATA[
Z tego wnioskuję że nie mam się czym martwić i że kompilator w takim przypadku jak dekodowanie RC5 z przykładu z BB zrobi wszystko za mnie. Jeżeli tak to bardzo fajnie. Tylko że ja jestem taki typ że będzie mnie to gryzło do puki nie zrozumiem tego, może nawet do &quot;grobowej deski&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 18 maja 2019, o 21:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-05-18T09:41:51+01:00</updated>
<published>2019-05-18T09:41:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219072#p219072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219072#p219072"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219072#p219072"><![CDATA[
<div class="quotetitle">11jacekj napisał(a):</div><div class="quotecontent"><br />Czy w przypadku odejmowania wartości licznika 16 bitowego odejmujemy najpierw młodszy bajt a później starszy?<br /></div><br />Mój opis to tylko próba wytłumaczenia, dlaczego w tej konkretnej sytuacji odejmowanie liczby większej od mniejszej daje prawidłowy wynik. Jeśli piszesz w języku C, to nie musisz się martwić o kolejność odejmowania bajtów. Wystarczy zdefiniować zmienne jako typ <em>uint16_t</em> i odjąć je od siebie, a kompilator dobierze odpowiednią sekwencję poleceń asemblera, żeby tę operację wykonać. Niczego nie musisz rozbijać na bajty, to tylko miało służyć wyjaśnieniu pewnych mechanizmów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 18 maja 2019, o 09:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-17T23:57:22+01:00</updated>
<published>2019-05-17T23:57:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219066#p219066</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219066#p219066"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219066#p219066"><![CDATA[
<div class="quotetitle">11jacekj napisał(a):</div><div class="quotecontent"><br />Czy w przypadku odejmowania wartości licznika 16 bitowego odejmujemy najpierw młodszy bajt a później starszy?<br /></div><br /><br />Nie kombinuj - wczytaj się w to co andrews opisał - bo tego już lepiej wyjaśnić się nie da<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 17 maja 2019, o 23:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-17T21:20:29+01:00</updated>
<published>2019-05-17T21:20:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219063#p219063</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219063#p219063"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=219063#p219063"><![CDATA[
Czy w przypadku odejmowania wartości licznika 16 bitowego odejmujemy najpierw młodszy bajt a później starszy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 17 maja 2019, o 21:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-05-13T11:22:57+01:00</updated>
<published>2019-05-13T11:22:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218972#p218972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218972#p218972"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218972#p218972"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />kto jak kto ale Ty byś takiego błędu nie popełnił<br /></div><br />Nie żartuj sobie ze mnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Faktycznie dokładam wszelkich starań, aby błędów nie popełniać (lub może  raczej, żeby popełniać ich jak najmniej), ale nie jestem nieomylny.<br />Dlatego cieszę się, kiedy ktoś czyta ze zrozumieniem to, co napisałem i zwraca uwagę na poprawność, bo zawsze jednak najtrudniej jest zauważyć błędy we własnym tekście.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 13 maja 2019, o 11:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-13T10:42:01+01:00</updated>
<published>2019-05-13T10:42:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218969#p218969</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218969#p218969"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218969#p218969"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Już lepiej pewnie byłoby np. 65436, bo ta 4 jest mniej do 5 podobna niż 3<br /></div><br />Dokładnie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> ja nawet w pierwszym momencie napisałem post, że coś mi się nie zgadza z tym 400 - ale no kurczę mówię sobie, kto jak kto ale Ty byś takiego błędu nie popełnił, więc wpatruję się znowu w to wszystko jak sroka w kość <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i nagle olśnienie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> - 3 zamiast 5 które moje oczy sobie jednak tylko wyobraziły <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> — 13 maja 2019, o 10:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-05-13T10:21:11+01:00</updated>
<published>2019-05-13T10:21:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218966#p218966</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218966#p218966"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218966#p218966"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Ja bym tylko podkreślił na czerwono że chodzi o 65336 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> bo przyznam, że jak pierwszy raz czytałem to widziałem 65536 no i mi się nie zgadzało<br /></div><br />Masz rację. W sumie mogłaby to być (prawie) dowolna liczba, ale skoncentrowałem się na tym, żeby wynik był okrągły. Nie pomyślałem o tym, że taka subtelna różnica pomiędzy 65536 a 65336 będzie mało zauważalna. Już lepiej pewnie byłoby np. 65436, bo ta 4 jest mniej do 5 podobna niż 3 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Teraz zmieniłem nieco obliczenia, może będzie czytelniej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 13 maja 2019, o 10:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-13T07:57:52+01:00</updated>
<published>2019-05-13T07:57:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218962#p218962</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218962#p218962"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218962#p218962"><![CDATA[
<div class="quotetitle">andrews napisał(a):</div><div class="quotecontent"><br />Jeśli odczytane przez nas aktualne wskazanie licznika (zapamiętane w ICR1) jest mniejsze od poprzednio zapamiętanego wskazania, to musi oznaczać, że licznik się przepełnił. Możemy więc przyjąć, że jego faktyczna wartość jest większa o 65536. Zakładając więc, że obecne wskazanie jest równe 200, a poprzednie było 65336, nie odejmujemy 200-65<strong><span style="color: #FF0000">3</span></strong>36 tylko de facto musimy odjąć (65536+200)-65<span style="color: #FF0000"><strong>3</strong></span>36:<br /></div><br />Ja bym tylko podkreślił na czerwono że chodzi o <span style="color: #FF0000">65336 </span>;) bo przyznam, że jak pierwszy raz czytałem to widziałem <span style="color: #0080FF"><strong>65536 </strong></span>no i mi się nie zgadzało <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> — 13 maja 2019, o 07:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2019-05-13T07:34:34+01:00</updated>
<published>2019-05-13T07:34:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218960#p218960</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218960#p218960"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218960#p218960"><![CDATA[
Super wytłumaczenie.<br />Ale ósma rano to za wcześnie na takie dokładne opisy... trzeci raz czytam, a i tak nie do końca rozumiem<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 13 maja 2019, o 07:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2019-05-13T10:14:02+01:00</updated>
<published>2019-05-12T11:41:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218945#p218945</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218945#p218945"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218945#p218945"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Nie rozumiem jak mam to policzyć<br />65000 + 10000<br />Licznik TCNT jest 16 bitowy więc zliczy do 65535, przepełni się i zacznie liczyć od 0.<br /></div><br />Czyli 65000+10000=75000. Na przedstawienie tej liczby potrzeba już 17 bitów, a licznik ma tylko 16 bitów. Bit o wadze 65536 nie mieści się już w tym liczniku, więc zostanie pominięty, co oznacza, że wartość licznika będzie mniejsza o wartość tego bitu:<br />65000+10000-65536=9464<br /><br />Trochę trudno to wszystko zrozumieć, nie znając sposobów reprezentacji liczb w systemie binarnym oraz zasad wykonywania przez procesor obliczeń na liczbach całkowitych bez znaku.<br />Kiedy odejmujesz pisemnie dwie liczby, przykładowo:<div class="codetitle"><b>Code:</b></div><div class="codecontent">  63<br />-  5<br />-----<br />  58</div>W tym przykładzie najpierw musimy odjąć 5 od 3, ale 5 jest większe od trzech, więc musimy dokonać tzw. pożyczki z liczby dziesiątek, czyli pożyczamy 1 dziesiątkę dodajemy do 3 i od tego odejmujemy 5 (13-5=8). Oczywiście liczba dziesiątek zmniejsza się o jeden, czyli będzie teraz równa 5. W efekcie otrzymujemy 58.<br /><br />Procesor liczy podobnie, tylko (w przypadku procesora 8-bitowego) odejmuje bajtami, np.:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">  0010 0110  (38)<br />- 0001 1001  (25)<br />------------------<br />  0000 1101  (13)</div><br />Może się jednak zdarzyć, że odjemnik jest większy od odjemnej (jak w powyższym przykładzie 5 było większe od 3). Procesor w tej chwili nie wie jeszcze, jaka będzie wartość kolejnego odejmowanego bajtu i czy w ogóle jakiś bajt będzie odejmowany, po prostu pożycza sobie 1*256 z kolejnego bajtu (ponieważ najmniej znaczący bit kolejnego bajtu ma wagę 256), sygnalizując to flagą przeniesienia (flaga <strong>C</strong> w rejestrze <strong>SREG</strong>, nie mylić z flagą przepełnienia licznika). W efekcie wykonywana operacja wygląda tak:<div class="codetitle"><b>Code:</b></div><div class="codecontent">  1 0001 1001  (25+256=281)<br />-   0010 0110  (38)<br />--------------------<br />    1111 0011  (243) + flaga C ustawiona</div><br />Odejmując kolejny bajt należy tę ustawioną flagę odjąć od wyniku odejmowania i wszystko będzie OK, przykładowo:<div class="codetitle"><b>Code:</b></div><div class="codecontent">  0000 0001<br />- 0000 0000<br />-         1 (C =1 = wartość flagi przeniesienia)<br />------------<br />  0000 0000</div>Jeśli jednak nie odejmujemy więcej bajtów (np. odejmowane liczby są jednobajtowe) lub wyższe bajty są równe 0 i nie ma od czego tej flagi odjąć, otrzymujemy wynik <strong>nieprawidłowy</strong>.<br /><br /><strong><em>Dlaczego w przypadku operacji na wskazaniach licznika zignorowanie flagi przeniesienia (C) nie jest błędem?</em></strong><br /><br />Jeśli odczytane przez nas aktualne wskazanie licznika (zapamiętane w ICR1) jest mniejsze od poprzednio zapamiętanego wskazania, to <strong>musi oznaczać, że licznik się przepełnił</strong>. Możemy więc przyjąć, że jego faktyczna wartość jest większa o 65536. Zakładając więc, że obecne wskazanie jest równe 200, a poprzednie było 64200, nie odejmujemy 200-64200 tylko de facto musimy odjąć (65536+200)-64200:<div class="codetitle"><b>Code:</b></div><div class="codecontent">  1 0000 0000 1100 1000  (200+65536)<br />-   1111 1010 1100 1000  (64200)<br />--------------------------------<br />    0000 0110 0000 0000  (1536)</div><br />W kodzie wprawdzie nie dodajemy tych 65536 impulsów, odejmując pozornie liczbę większą od mniejszej (dzięki temu obliczenia, które procesor musi wykonać, są nieco krótsze), w zamian za to ignorujemy flagę przeniesienia, której waga - w przypadku liczb 16-bitowych - będzie równa także 65536. Taki mały trick.<br /><br />Nie rozumiejąc powyższych mechanizmów można faktycznie dojść do wniosku, że wynik odejmowania 200-64200=1536 jest nielogiczny i niepoprawny.<br /><br /><strong><em>Ważne:</em></strong><br />Powyższy mechanizm sprawdza się tylko wtedy, gdy odstęp pomiędzy impulsami na pinie ICP1 nie jest dłuższy niż 65536 impulsów taktujących licznik. Jeśli przykładowo zapisaliśmy wskazanie licznika równe 250, a licznik przed następnym impulsem na ICP1 policzy np. 65936, to wystąpi przepełnienie, licznik się wyzeruje i zdąży policzyć jeszcze do 650. Nowe wskazanie będzie większe od poprzedniego, jednak wynik odejmowania (650-250=400) nie będzie odzwierciedlał faktycznego odstępu czasowego między odczytami. Jeśli istnieje taka możliwość, że odstępy na pinie ICP1 będą dłuższe od cyklu zliczania licznika, należy np. wprowadzić dodatkową zmienną zliczającą przerwania od przepełnienia licznika, która rozszerzy pojemność licznika.<br /><br />Takie rozwiązanie nie zda również egzaminu w przypadku konfiguracji licznika w trybie CTC i Fast PWM, w których regulujemy okres zliczania poprzez rejestr OCR1A, a także w trybach Phase Correct, ale zwykle nie używa się tych trybów, jeśli chcemy korzystać z Input Capture.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 12 maja 2019, o 11:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-12T08:37:08+01:00</updated>
<published>2019-05-12T08:37:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218943#p218943</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218943#p218943"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218943#p218943"><![CDATA[
Nie rozumiem jak mam to policzyć <div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />65000 + 10000<br /></div> Licznik TCNT jest 16 bitowy więc zliczy do 65535, przepełni się i zacznie liczyć od 0.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 12 maja 2019, o 08:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-12T01:58:34+01:00</updated>
<published>2019-05-12T01:58:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218942#p218942</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218942#p218942"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218942#p218942"><![CDATA[
będzie ok - postaraj się obliczyć np wynik<br /><br />65000 + 10000<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 12 maja 2019, o 01:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-11T21:03:38+01:00</updated>
<published>2019-05-11T21:03:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218939#p218939</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218939#p218939"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218939#p218939"><![CDATA[
I mam kolejne pytanie. Co się stanie kiedy w którymś przerwaniu TCNT będzie miało wartość 65000 i wystąpi kolejne przerwanie po 889us? Licznik się przepełni a długość próbki nie zmieści się granicy tolerancji.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 11 maja 2019, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-07T11:39:09+01:00</updated>
<published>2019-05-07T11:39:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218870#p218870</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218870#p218870"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218870#p218870"><![CDATA[
<div class="quotetitle">11jacekj napisał(a):</div><div class="quotecontent"><br />A co jeżeli długość próbki jest równa 889us? W tej sytuacji długość połówki bitu też chyba jest poprawna a mimo to dekodowanie ramki nie powinno zadziałać.<br /></div><br />i zadziała - zwróć uwagę w kodzie i w opisie w książce przede wszystkim, jak zrealizowane są TOLERANCJE pomiarów dla czasów półbitów itp<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 maja 2019, o 11:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-07T15:54:45+01:00</updated>
<published>2019-05-07T10:54:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218868#p218868</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218868#p218868"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218868#p218868"><![CDATA[
Hmmm głupio pytam czy nikt nie wiee o co chodzi?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 7 maja 2019, o 10:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-05T21:36:31+01:00</updated>
<published>2019-05-05T21:36:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218829#p218829</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218829#p218829"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218829#p218829"><![CDATA[
Mam kolejne pytanie do piliku ir_decode.c, a dokładnie chodzi mi o dwie pierwsze linijki po sprawdzeniu zakłóceń. Jeżeli sprawdzenie poprawności rami przebrnie przez pierwszy bit startu i wystąpi zbocze narastające na początku drugiego bitu startu rc5cnt jest równe 1 o ile się nie mylę. Nie wystąpiły żadne zakłócenia to wyrażenie [syntax=c]f (frame_status == FRAME_OK)[/syntax] jest  prawdziwe. To kolejny warunek if sprawdza czy długość próbki jest większa niż maksymalny czas połowy bitu+tolerancja, jeżeli jest, to rc5cnt powinno przyjąć 2 i dopiero wtedy kolejny warunek (rc5cnt&gt;1) jest prawdziwy i mogą zostać wykonane instrukcje potrzebne do dekodowania ramki. A co jeżeli długość próbki jest równa 889us? W tej sytuacji długość połówki bitu też chyba jest poprawna a mimo to dekodowanie ramki nie powinno zadziałać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 5 maja 2019, o 21:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-05T06:22:22+01:00</updated>
<published>2019-05-05T06:22:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218810#p218810</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218810#p218810"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218810#p218810"><![CDATA[
nie, ICR1 nie zwiększa się o jeden, to jest pomiar czasu impulsu w mikrosekundach, a zatem zwiększa się o tyle ile czasu upłynęło pomiędzy dwoma przerwaniami - a nie o jeden.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 5 maja 2019, o 06:22</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-04T23:17:13+01:00</updated>
<published>2019-05-04T23:17:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218809#p218809</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218809#p218809"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218809#p218809"><![CDATA[
Może nie jasno napisałem. Chodziło mi o to że każdy impuls wywołuje przerwanie, i przy każdym odebranym impulsie zwiększa wartość ICR1 o jeden. Jeżeli w całej odebranej ramce było by impulsów 19 to ramka spowoduje zwiększenie ICR1 o 19.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 4 maja 2019, o 23:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-04T23:12:31+01:00</updated>
<published>2019-05-04T23:12:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218808#p218808</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218808#p218808"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218808#p218808"><![CDATA[
a dlaczego defakto o jeden ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> skąd taki pomysł ?<br /><br />o tyle ile zliczy timer1 impulsów - przecież ma mierzyć czas<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 maja 2019, o 23:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-04T23:01:50+01:00</updated>
<published>2019-05-04T23:01:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218807#p218807</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218807#p218807"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218807#p218807"><![CDATA[
Czyli defakto jest zwiększany o jeden przy każdym wywołaniu przerwania.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 4 maja 2019, o 23:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2019-05-04T22:44:26+01:00</updated>
<published>2019-05-04T22:44:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218806#p218806</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218806#p218806"/>
<title type="html"><![CDATA[Re: Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218806#p218806"><![CDATA[
<div class="quotetitle">11jacekj napisał(a):</div><div class="quotecontent"><br />A jaką wartość ma ICR1?<br /></div><br />No przecież to jest licznik Timera1 <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> zliczone impulsy<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 4 maja 2019, o 22:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[11jacekj]]></name></author>
<updated>2019-05-04T22:01:30+01:00</updated>
<published>2019-05-04T22:01:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218805#p218805</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218805#p218805"/>
<title type="html"><![CDATA[Nie rozumiem fragmentu kodu dekodowania RC5]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22230&amp;p=218805#p218805"><![CDATA[
Witam. Czytam właśnie rozdział z BB o dekodowaniu RC5 i utknąłem na w pliku ir_decode.c na fragmencie obliczania długości bitu[syntax=c]PulseWidth = ICR1 - LastCapture;<br />LastCapture = ICR1;[/syntax] O ile dobrze rozumiem to zmienna LastCapture zadeklarowana jako static przyjmuje wartość 0, przy pierwszym wejściu w przerwanie, później LastCapture = ICR1. Do PulseWidth jest przypisana wyliczona wartość. A jaką wartość ma ICR1?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12856">11jacekj</a> — 4 maja 2019, o 22:01</p><hr />
]]></content>
</entry>
</feed>