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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-01-08T19:36:21+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=5472&amp;mode</id>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-08T19:36:21+01:00</updated>
<published>2014-01-08T19:36:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64307#p64307</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64307#p64307"/>
<title type="html"><![CDATA[Re: Dalsze pytania o przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64307#p64307"><![CDATA[
No jakbyś miał taktowanie 1MHz to bym powiedział, że 50 rozkazów od przerwania do przerwania to mało, ale masz 8*50, więc nie widzę problemu. Piszesz, że zmienna i przestaje być inkrementowana w równych odcinkach czasu, ale to się dzieje w przerwaniu od porównania timera. Tylko inne długo wykonujące się przerwanie mogło by wpłynąć na ten czas (przykładowo wejście INT nie jest podciągnięte a sterowane jest przez tranzystor transoptora). A czy zmienna i jest odpowiednio duża i się nie przekręca czy ma modyfikator volatile? Co robisz ze zmienną i w pętli głównej, bo też należy do tego podchodzić w specjalny sposób. Skoro i ma co najmniej rozmiar 2 bajtów to w pętli głównej sprawdzanie jej wartości powinno być zawarte w bloku <a href="http://www.nongnu.org/avr-libc/user-manual/group__util__atomic.html"  class="postlink">ATOMIC_BLOCK</a>. Może pokaż cały kod.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 8 sty 2014, o 19:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[niemy]]></name></author>
<updated>2014-01-08T10:04:14+01:00</updated>
<published>2014-01-08T10:04:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64273#p64273</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64273#p64273"/>
<title type="html"><![CDATA[Re: Dalsze pytania o przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64273#p64273"><![CDATA[
No właśnie o to też chciałem zapytać. Bo wszystkie te kalkulatory wyliczaja 49 a według tego wzoru wychodzi 50.<br />Dzieki za potwierdzenie.<br /><br />A co z głównym problemem ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=675">niemy</a> — 8 sty 2014, o 10:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-08T00:03:40+01:00</updated>
<published>2014-01-08T00:03:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64257#p64257</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64257#p64257"/>
<title type="html"><![CDATA[Re: Dalsze pytania o przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64257#p64257"><![CDATA[
Super dokładnie to tak powinno być:<br />[syntax=c]OCR0A = (uint8_t)(F_CPU / 8 / 20000 - 1);      // 0,05 ms[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 8 sty 2014, o 00:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[niemy]]></name></author>
<updated>2014-01-07T23:37:20+01:00</updated>
<published>2014-01-07T23:37:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64252#p64252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64252#p64252"/>
<title type="html"><![CDATA[Re: Dalsze pytania o przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64252#p64252"><![CDATA[
Sorry za screeny tam po prostu jest podziałka i widać jak druga szpilka &quot;wędruje&quot;<br /><br />Ale nic to.<br />Procesor taktuje 8 MHz<br />Tak inicjalizuję przerwania:<br /><br />[syntax=c]// Przerwanie INT0<br />MCUCR |= (1 &lt;&lt; ISC01); // opadające zbocze<br />GIMSK |= (1 &lt;&lt; INT0); // odblokowanie INT0<br /><br />       // Timer<br />TCCR0B |= (1 &lt;&lt; CS01);  // 8 x preskaler<br />TCCR0A |= (1 &lt;&lt; WGM01);  // tryb CTC<br />TIMSK0 |= (1 &lt;&lt; OCIE0A); // odblokowanie przerwania COMPARE MATCH<br />OCR0A = (uint8_t)(F_CPU / 8 / 20000 );      // 0,05 ms[/syntax]<br /><br />Potem obsługa przerwań tak:<br /><br />[syntax=c]// Przerwanie INT0<br /><br />ISR(INT0_vect) {<br />GIMSK &amp;= ~(1 &lt;&lt; INT0);<br /><br />TEST2_OFF;<br />zal=0;<br />i=0;<br />}<br /><br />// Przerwanie timera co 0,05 ms<br /><br />ISR( TIM0_COMPA_vect ) {       //,ISR_NOBLOCK<br /><br />i++;<br /><br />if(i==380)GIMSK |= (1 &lt;&lt; INT0);<br /><br />if (i== k1 || i== k2){<br />TEST2_ON;<br />zal=1;<br />}<br /><br />static uint8_t przer_1ms;<br />przer_1ms++;<br />if (przer_1ms==20)<br />{<br />przer_1ms=0;<br />flaga1ms=1;<br />}<br /><br />}[/syntax]<br /><br />Sęk w tym, że kiedy i==k1 to jest w miarę OK problem jest kiedy i==k2. Tak jakby w miarę upływu czasu dana &quot;i&quot; przestaje być inkrementowana w równych odcinkach czasu.Pozostała część kodu to zaledwie dziesięć linijek w których właśnie ustalam wartości k1 i k2.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=675">niemy</a> — 7 sty 2014, o 23:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-01-07T23:02:58+01:00</updated>
<published>2014-01-07T23:02:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64240#p64240</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64240#p64240"/>
<title type="html"><![CDATA[Re: Dalsze pytania o przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64240#p64240"><![CDATA[
Bez kodu ciężko cokolwiek powiedzieć <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=1044">Zaba</a> — 7 sty 2014, o 23:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2014-01-07T23:00:24+01:00</updated>
<published>2014-01-07T23:00:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64238#p64238</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64238#p64238"/>
<title type="html"><![CDATA[Re: Dalsze pytania o przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64238#p64238"><![CDATA[
<div class="quotetitle">niemy napisał(a):</div><div class="quotecontent"><br />timera sprzętowego co 0,05 ms<br /></div><br />Na pewno 0,05ms = 50us to zbyt często.<br />Jak taktujesz mikrokontroler? Jakiego przerwania używasz? Może podasz kod konfiguracji i obsługi przerwania od timera.<br />Te zrzuty nic mi niestety nie mówią. Nie lepiej w Eagle w edytorze schematów z włączoną siatką to narysować i podpisać.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 7 sty 2014, o 23:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[niemy]]></name></author>
<updated>2014-01-07T22:25:42+01:00</updated>
<published>2014-01-07T22:25:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64226#p64226</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64226#p64226"/>
<title type="html"><![CDATA[Dalsze pytania o przerwania]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=5472&amp;p=64226#p64226"><![CDATA[
Witam<br /><br />Nawet się mi zrymował ten tytuł, ale do rzeczy.<br /><br />Mam przerwanie sprzętowe INT0 zsynchronizowane z siecią oraz przerwanie od timera sprzętowego co 0,05 ms.<br />Program działa tak, że gdy wystąpi przerwanie INT0 to jest zerowana zmienna &quot;i&quot; a w przerwaniu od timera jest ona inkrementowana i jeżeli osiągnie jakąś wartość to ma wystawić stan wysoki na pin uC.<br />Sprawdzam wartość &quot;i&quot; dwa razy pomiędzy wystąpieniem przerwania INT0 (bo zdążam ewentualnie zdanżam <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";-)" title="Puszcza oko" /> tzn. nie ja tylko mikrokontroler).<br />Wszystko jest OK z tym, że dzieje się to w nierównych odcinkach czasu (bardzo nierównych).<br />Tzn. pierwsze sprawdzenie jest w spodziewanym czasie a drugie się waha i to o całą 1ms. Załączam screeny z osc.<br /><br /><a href="http://forum.atnel.pl/_obrazki/o/675/c4443ff5d3f59e0a26a8e4ffeec32569.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/675/c4443ff5d3f59e0a26a8e4ffeec32569.JPG" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/675/ef28cba2e4e0414ef1874e5153eb40e1.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/675/ef28cba2e4e0414ef1874e5153eb40e1.JPG" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/675/c7e78d354c9841228eb99006795ee200.JPG"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/675/c7e78d354c9841228eb99006795ee200.JPG" alt="Obrazek" /></a><br /><br />Dodam, że taktuje procesor wew. rezonatorem, ale takich odchyłek chyba nie ma?<br />Proszę jakiś trop. Lub Pana Mirka o kolejną część poradnika o przerwaniach dla średnio-zaawansowanych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=675">niemy</a> — 7 sty 2014, o 22:25</p><hr />
]]></content>
</entry>
</feed>