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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-06-22T17:09:18+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=15630&amp;mode</id>
<entry>
<author><name><![CDATA[Scynk]]></name></author>
<updated>2016-06-22T17:09:18+01:00</updated>
<published>2016-06-22T17:09:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162763#p162763</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162763#p162763"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami, które się &quot;zawieszają&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162763#p162763"><![CDATA[
Dzięki wielkie! <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Tak, ten kod był oczywiście pisany dla zabawy, bo się dopiero uczę. Zawsze jak robię jakiś projekt z Bluebooka to potem sam wymyślam sobie co się jeszcze da z tego zrobić ciekawego, coś zmienić, ulepszyć itp. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><br /><br />Faktycznie to chodziło o to, bo jak sobie policzyłem moją Atmegę8 8Mhz i ten preskaler, to faktycznie żeby doliczyć do końca to mija jakieś 8s. I dokładnie na ten czas zmiana w wyświetlaczach się zatrzymywała.<br /><br />Teraz jak już wiem, co jest przyczyną, poprawiłem sobie swój kod i wszystko działa tak jak chciałem. Bo wrzuciłem sobie zmianę tego rejestru wewnątrz, do przerwania, o tak:<br /><br />[syntax=c]ISR(TIMER1_COMPA_vect)<br />{<br />        /* reszta kodu przerwania */<br />static int licznik2 = 0;<br /><br />++licznik2;<br />if (przyspiesz)<br />{<br />if (licznik2==10)<br />{<br /><br />if (OCR1A&gt;50) OCR1A -= (OCR1A&gt;500) ? 200 : 50;<br />licznik2 = 0;<br /><br />}<br />}<br />else<br />{<br />if (licznik2==10)<br />{<br /><br />if (OCR1A&lt;2000) OCR1A +=50;<br />licznik2 = 0;<br /><br />}<br />}<br /><br />}[/syntax]<br />i potem w pętli głównej mam tylko dwie linijki:<br />[syntax=c]while(1)<br />{<br />przyspiesz ^=1;<br />_delay_ms(10000);<br />}[/syntax]<br />które robią całą resztę. Także jeszcze raz dzięki wielkie i teraz czas na następny projekt <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=14271">Scynk</a> — 22 cze 2016, o 17:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2016-06-22T09:53:55+01:00</updated>
<published>2016-06-22T09:53:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162736#p162736</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162736#p162736"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami, które się &quot;zawieszają&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162736#p162736"><![CDATA[
<div class="quotetitle">Scynk napisał(a):</div><div class="quotecontent"><br />Po mojemu teoretycznie wszystko powinno działać. A dzieje się coś dziwnego, mianowicie wyświetlacze najpierw się faktycznie &quot;rozpędzają&quot; a potem nagle na jakieś 3-4s przerwanie tak jakby &quot;zawiesza się&quot;, tzn. że przez ten czas świeci się cały czas tylko jeden wyświetlacz np. cyfra 3 na drugim wyświetlaczu. I nic więcej się nie dzieje. A potem jak się &quot;odetnie&quot;, to wyświetlacze są już bardzo rozpędzone i zaczynają zwalniać. I potem znowu za jakiś czas staje na jednej cyfrze. 3-4s. i znowu się zmieniają tak jak powinny. Czy ktoś z was spotkał się kiedyś z czymś takimś? Co może być przyczyną?<br /></div><br />Wprawdzie ten kod jest tylko &quot;4fun&quot;, ale lubię ludzi dociekliwych, więc spróbuję odpowiedzieć.<br />Osobiście się z tym nie spotkałem, ale wiem co może być przyczyną <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Zacytuję datasheet:<br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />However,<br />changing the TOP to a value close to BOTTOM when the counter is running with none or a<br />low prescaler value must be done with care since the CTC mode does not have the double buffering<br />feature. If the new value written to OCR1A or ICR1 is lower than the current value of<br />TCNT1, the counter will miss the Compare Match. The counter will then have to count to its maximum<br />value (0xFFFF) and wrap around starting at 0x0000 before the Compare Match can occur.<br />In many cases this feature is not desirable.<br /></div><br />Ty wpisujesz wartość do OCR1A w dosyć przypadkowych, trudnych do przewidzenia momentach. Nie jest to w żaden sposób zsynchronizowane z pracą timera. Jeśli wpiszesz do OCR1A wartość niższą od aktualnej wartości rejestru TCNT1, to licznik będzie musiał doliczyć do maximum, czyli do 65535 i dopiero wtedy się wyzeruje. W tym czasie nie zdarzy się żadne przerwanie od porównania z przyczyn oczywistych (wartość OCR1A będzie cały czas mniejsza od TCNT1), a to przecież w procedurze obsługi tego przerwania jest kod, który wyświetla następną cyfrę. Nie znam częstotliwości taktowania Twojego mikrokontrolera, więc policz sam, ile czasu mu zajmie doliczenie do 65535 z preskalerem 1024.<br /><br />Pozdrawiam <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=14165">andrews</a> — 22 cze 2016, o 09:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Scynk]]></name></author>
<updated>2016-06-20T21:02:49+01:00</updated>
<published>2016-06-20T21:02:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162681#p162681</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162681#p162681"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami, które się &quot;zawieszają&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162681#p162681"><![CDATA[
Hehe <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Pisząc &quot;rozpędzanie&quot; i &quot;zwalnianie&quot; miałem na myśli że przełączanie (multipleksowanie) między wyświetlaczami odbywa się z coraz większą/mniejszą częstotliwością. Chodzi o to, że jak jest te 50Hz, to widzimy jakby wszystkie 3 wyświetlacze się świeciły. I chciałem zrobić programik, żeby efekt był taki, że wyświetlacze zmianiają się od powiedzmy sekundy, czyli świeci się cyfra na pierwszym wyświetlaczu -&gt; 1s -&gt; drugi wyświetlacz -&gt; 1s -&gt; trzeci itp. i stopniowo zwiększamy częstotliwość tak, żeby się zmieniały co powiedzmy 0,5s. potem np. 0.25s i ostatecznie dochodzimy do 50Hz. Chciałem zrobić tak, żeby obserwując te migotanie od bardzo wolnego tempa (1s) do tych 50Hz dało się zauważyć, jak w pewnym momencie ludzkie oko się poddaje i świecą się wszystkie trzy wyświetlacze. Mam nadzieję, że teraz już wszystko jasne <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 3 minutach ]</span></strong><br /><br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />zerknij na warunki.<br />przy OCR1A = od 51 do 1999, oba są spełnione.<br /></div><br /><br />Ale jeśli dobrze rozumiem, to nie wpływa na siebie, bo i tak przecież się wykonuje tylko jedna pętla na raz, nie? Czyli jak na samym początku programu mamy OCR1A = 2000; to jedzie pierwsza pętla, i ona dopiero wtedy się kończy jak OCR1A spadnie poniżej 50, a dopiero potem zaczyna się druga, tak? <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=14271">Scynk</a> — 20 cze 2016, o 21:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-06-20T20:59:40+01:00</updated>
<published>2016-06-20T20:59:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162680#p162680</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162680#p162680"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami, które się &quot;zawieszają&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162680#p162680"><![CDATA[
zerknij na warunki.<br />przy OCR1A = od 51 do 1999, oba są spełnione.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 20 cze 2016, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-06-20T20:47:51+01:00</updated>
<published>2016-06-20T20:47:51+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162678#p162678</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162678#p162678"/>
<title type="html"><![CDATA[Re: Problem z przerwaniami, które się &quot;zawieszają&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162678#p162678"><![CDATA[
Ja bym pomógł ale gdybym był w stanie zrozumieć co to oznacza &quot;rozpędzanie&quot; albo &quot;spowalnianie&quot; wyświetlaczy <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> a jeszcze gdyby z ciekawości dowiedzieć się po co takie rodeo ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> to byłoby fajnie<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 20 cze 2016, o 20:47</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Scynk]]></name></author>
<updated>2016-06-20T20:38:16+01:00</updated>
<published>2016-06-20T20:38:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162675#p162675</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162675#p162675"/>
<title type="html"><![CDATA[Problem z przerwaniami, które się &quot;zawieszają&quot;]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15630&amp;p=162675#p162675"><![CDATA[
Jako że jest to mój pierwszy post witam wszystkich serdecznie <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Jestem początkujący w temacie uC, i natknąłem się na moim zdaniem dziwny problem, z którym nie wiem jak sobie poradzić. Otóż mam Bluebooka i zabrałem się za projekt z multipleksowaniem wyświetlaczy. Mam Atmegę8, więc trochę musiałem się namęczyć z ustawieniem CTC na timerze, ale ostatecznie po zmianie wyszło mi coś takiego:  [syntax=c]//ustawienie timer 1<br />TCCR1B |= (1&lt;&lt;WGM12); //tryb CTC<br />TCCR1B |= (1&lt;&lt;CS12)|(1&lt;&lt;CS10); //preskaler = 1024<br />OCR1A = 2000; //dodatkowy podział przez 2000 (rejestr przepełnienia)<br />TIMSK |= (1&lt;&lt;OCIE1A); //przerwanie od comp. match[/syntax]<br />i działa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> . Reszta kodu jest identyczna jak w książce, tylko używam 3 wyświetlaczy a nie 4. A potem pojawił się pomysł, żeby te migające wyświetlacze się &quot;rozpędzały&quot; i &quot;zwalniały&quot;. Więc dokonałem takiej zmiany w pętli głównej programu: <br />[syntax=c]while(1)<br />{<br />while (OCR1A&gt;50)<br />{<br />OCR1A -=5;<br />_delay_ms(30);<br />}<br /><br />_delay_ms(2000);<br /><br />while (OCR1A&lt;2000)<br />{<br />OCR1A += 5;<br />_delay_ms(30);<br />}<br />_delay_ms(2000);<br /><br />}[/syntax]<br />Po mojemu teoretycznie wszystko powinno działać. A dzieje się coś dziwnego, mianowicie wyświetlacze najpierw się faktycznie &quot;rozpędzają&quot; a potem nagle na jakieś 3-4s przerwanie tak jakby &quot;zawiesza się&quot;, tzn. że przez ten czas świeci się cały czas tylko jeden wyświetlacz np. cyfra 3 na drugim wyświetlaczu. I nic więcej się nie dzieje. A potem jak się &quot;odetnie&quot;, to wyświetlacze są już bardzo rozpędzone i zaczynają zwalniać. I potem znowu za jakiś czas staje na jednej cyfrze. 3-4s. i znowu się zmieniają tak jak powinny. Czy ktoś z was spotkał się kiedyś z czymś takimś? Co może być przyczyną? Pozdrawiam <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=14271">Scynk</a> — 20 cze 2016, o 20:38</p><hr />
]]></content>
</entry>
</feed>