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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=14253&amp;mode</id>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-21T19:05:09+01:00</updated>
<published>2016-01-21T19:05:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151327#p151327</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151327#p151327"/>
<title type="html"><![CDATA[Re: Multipleksowanie -LED- pewien problem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151327#p151327"><![CDATA[
W ATOMIC_BLOCK wstawiaj jak najmniejsze ilości kodu. Tylko to co potrzeba, bo na czas wykonania tego bloku wstrzymywana jest możliwość obsłużenia przerwania to przerwania.<br />Dałeś tylko kawałek kodu switcha z tylko jednym case, więc ciężko jest powiedzieć czy zasadne jest dawanie całego switcha w ATOMIC_BLOCK czy nie.<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 21 sty 2016, o 19:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-20T23:43:23+01:00</updated>
<published>2016-01-20T23:43:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151260#p151260</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151260#p151260"/>
<title type="html"><![CDATA[Re: Multipleksowanie -LED- pewien problem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151260#p151260"><![CDATA[
Operujesz w pętli głównej, czy wykorzystywanej tam bibliotece, na zasobie PORTD (L_RGB_PORT). Odbywa się to w cytowanym ostatnio case (tego którego zahashowanie naprawia wyświetlanie segmentu G). Robisz tam dwukrotnie odczytanie wartości portu, dokonanie manipulacji na tej wartości i ponowny zapis.<br />A w przerwaniu timera TIMER0_OVF robisz podobne operacje na porcie D - dokujesz zmian stanu pinów.<br /><br />Co się według Ciebie stanie jak we wspominanym case nastąpiło już odczytanie PORTD i w tym momencie wystąpiło przerwanie TIMER0_OVF? Przerwanie ustawi sobie nowy stan dla pinów w PORTD (oczywiście zmieni tylko pin dla segmentu G). Ale po zakończeniu przerwania wrócisz do swojego case i tam masz dalsze operacje na odczytanej przed przerwaniem wartości PORTD. Więc po tej operacji nastąpi zapis do portu i .... bity które zostały zmienione w czasie przerwaniu zostaną odtworzone ze stanu przed przerwaniem.<br />Dlatego w takich wypadkach używa się sekcji ATOMIC_BLOCK, która uniemożliwia przerwanie wykonywania danego bloku.<br />Zrób w problematycznym case takie coś:<br />[syntax=c]switch (message-&gt;data&#91;0&#93;){<br />    case 0x00:<br />                  ATOMIC_BLOCK (ATOMIC_RESTORESTATE)<br />                 {<br />                      L_RGB_PORT |= L_G ; //odpoczynek<br />                      L_RGB_PORT &amp;= ~( L_R | L_B );<br />                 }<br />                 break;[/syntax]}<br /><br />Tylko musisz jeszcze dodać jednego include do tego pliku:<br />[syntax=c]#include &lt;util/atomic.h&gt;[/syntax]<br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 20 sty 2016, o 23:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-20T22:43:37+01:00</updated>
<published>2016-01-20T22:43:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151251#p151251</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151251#p151251"/>
<title type="html"><![CDATA[Re: Multipleksowanie -LED- pewien problem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151251#p151251"><![CDATA[
I tu pies pogrzebany <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Robisz zmiany w pętli głównej i na przerwaniu.<br />Daj ten kod w ATOMIC_BLOCK i będzie OK <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 20 sty 2016, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-20T21:30:46+01:00</updated>
<published>2016-01-20T21:30:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151235#p151235</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151235#p151235"/>
<title type="html"><![CDATA[Re: Multipleksowanie -LED- pewien problem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151235#p151235"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Nie umiem tego prościej wytłumaczyć<br /></div><br />Teraz już wiadomo o co chodzi.<br /><br />Pokaż jak masz zrobione definicje stałych typu PORT oraz fragment inicjalizacji portów.<br /><br />-- <br />Pozdrawiam,<br />Robert<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />No nic, za chwilę przełączę ten cholerny segment &quot;g&quot; do innego portu (choć nie mam już wolnego, ale w ramach eksperymentu).<br /></div><br />A na pewno nie mieszasz nigdzie w kodzie na PORTD i DDRD?<br />Zakomentuj wszystko oprócz wyświetlania i zobacz czy nadal będzie problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 20 sty 2016, o 21:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2016-01-20T21:10:39+01:00</updated>
<published>2016-01-20T21:10:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151228#p151228</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151228#p151228"/>
<title type="html"><![CDATA[Re: Multipleksowanie -LED- pewien problem.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14253&amp;p=151228#p151228"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Mimo to zawsze mryga on, gdy w cyfrze 2 segment &quot;g&quot; jest zapalony.<br />Kiedy w cyfrze 2 segment &quot;g&quot; zgaszony, to w cyfrze 1 segment &quot;g&quot; nie mryga.<br /><br />Analogicznie jak zamienię cyf1 z cyf2 tj. na stałe wygaszę &quot;g&quot; w cyfrze 2, to mryga z kolei &quot;g&quot; w cyfrze 1.<br /></div><br />Coś pokręciłeś w opisie ;( W drugim zdaniu sugerujesz miganie w cyfrze 1 a w trzecim zdaniu że jak zamienisz to z kolei w cyfrze 1 ... <br /><br />-- <br />Pozdrawiam,<br />Robert<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 20 sty 2016, o 21:10</p><hr />
]]></content>
</entry>
</feed>