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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-12-30T00:12:00+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=9902&amp;mode</id>
<entry>
<author><name><![CDATA[kaka0204]]></name></author>
<updated>2014-12-30T00:12:00+01:00</updated>
<published>2014-12-30T00:12:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111199#p111199</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111199#p111199"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111199#p111199"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />W przerwaniu nigdy static tylko volatile.<br /></div><br /><br />Volatile byloby wtedy, gdy zmienna licznik bylaby zmienna globalna.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=889">kaka0204</a> — 30 gru 2014, o 00:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-12-29T20:25:00+01:00</updated>
<published>2014-12-29T20:25:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111140#p111140</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111140#p111140"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111140#p111140"><![CDATA[
<div class="quotetitle">szopler napisał(a):</div><div class="quotecontent"><br />W przerwaniu nigdy static tylko volatile.<br /></div><br /><br />Niestety program nie działa jeśli zmienna w przerwaniu jest volatile zamiast static. <br />Zmienne statyczne w przerwaniach i funkcjach są tworzone w obszarze zmiennych globalnych i nie tracą swej wartości po wyjściu z przerwania lub funkcji. A oto właśnie w tym programie chodzi. Zmienna ma zliczyć 1000 przerwań dlatego musi &quot;pamiętać&quot; swą wartość po wyjściu z tego przerwania.<br /><br />No chyba że koledze chodziło o coś innego.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 29 gru 2014, o 20:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2014-12-29T20:11:36+01:00</updated>
<published>2014-12-29T20:11:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111134#p111134</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111134#p111134"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111134#p111134"><![CDATA[
[syntax=c]static uint16_t licznik = 0;[/syntax]<br /><br />W przerwaniu nigdy static tylko volatile.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 29 gru 2014, o 20:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elerbe]]></name></author>
<updated>2014-12-29T19:11:48+01:00</updated>
<published>2014-12-29T19:11:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111117#p111117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111117#p111117"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111117#p111117"><![CDATA[
Super, jednak głupia pomyłka w pisaniu <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Dzięki za rozwiązanie mojego problemu, okazuje się, że wszystko działa jak powinno- błąd był w kodzie, a nie w rozumieniu sprawy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dzięki. <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=5342">elerbe</a> — 29 gru 2014, o 19:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-12-29T18:25:30+01:00</updated>
<published>2014-12-29T18:25:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111111#p111111</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111111#p111111"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111111#p111111"><![CDATA[
Witam<br /><div class="quotetitle">elerbe napisał(a):</div><div class="quotecontent"><br />...jedyny błąd to dobranie złego preskalera<br /></div><br />Nie wiem czy mówisz o znalezionym błędzie czy ja nie łapię o co chodzi, bo rzeczywiście w linii:<br />[syntax=c]TCCR0 |= ((1&lt;&lt;CS01) | (1&lt;CS00));        // preskaler 64[/syntax]<br />masz błąd: (1<strong>&lt;</strong>CS00) zamiast (1<strong>&lt;&lt;</strong>CS00).<br />Z poprawny zapisem jest niemal dokładna sek.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 29 gru 2014, o 18:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2014-12-29T12:51:16+01:00</updated>
<published>2014-12-29T12:51:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111017#p111017</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111017#p111017"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111017#p111017"><![CDATA[
Szukanie wyjaśnienia bez sensu ? No przestań. Nigdy takiego problemu nie miałem, bo jakoś mi zapadło w pamięci to co napisałem wcześniej o tych 10 ms, i tego się trzymam przy zliczaniu czasu.<br />A zmień licznik == 1000; na licznik &gt;= 1000;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=758">Marcin_G</a> — 29 gru 2014, o 12:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elerbe]]></name></author>
<updated>2014-12-29T12:42:39+01:00</updated>
<published>2014-12-29T12:42:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111016#p111016</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111016#p111016"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111016#p111016"><![CDATA[
Nie, nie próbowałem... chodziło mi o to dlaczego to nie działa kiedy jest napisane tak a nie inaczej, a nie jak to zrobić <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> ale dobra, szukanie wyjaśnienia chyba jest bez sensu. Błąd to błąd. <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=5342">elerbe</a> — 29 gru 2014, o 12:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2014-12-29T12:10:16+01:00</updated>
<published>2014-12-29T12:10:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111014#p111014</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111014#p111014"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111014#p111014"><![CDATA[
No dobra, a nie jest problemem też to że przerwanie masz teraz co 1ms ? Jeżeli dobrze zapamiętałem to w BB Mirek pisał że nie poleca schodzić z timerami do zliczania czasu poniżej 10ms. Próbowałeś inne ustawienia preskalera, takie aby się zmieścić w tych 255 ? Z tego co sprawdzałem u siebie to preskaler 1024 i zliczanie do 77 daje prawie jedną sekundę. Piszę prawie bo nie wychodzi liczba całkowita.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=758">Marcin_G</a> — 29 gru 2014, o 12:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elerbe]]></name></author>
<updated>2014-12-29T11:08:07+01:00</updated>
<published>2014-12-29T11:08:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111012#p111012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111012#p111012"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111012#p111012"><![CDATA[
124, a nie 125 bo liczymy od zera- miałem świadomość tego błędu, było o tym w Książce, jednak częstotliwość zmiany stanu diody jest o wiele większa, dlatego to tak zostawiłem. <br /><br />Po prostu przerwania działa inaczej niż myślałem... i chciałem dowiedzieć się jak powinienem myśleć poprawnie <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=5342">elerbe</a> — 29 gru 2014, o 11:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yaiba83]]></name></author>
<updated>2014-12-29T10:33:49+01:00</updated>
<published>2014-12-29T10:33:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111009#p111009</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111009#p111009"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=111009#p111009"><![CDATA[
A duża jest różnica?<br />Wg MkAvrCalculatora powinno być 124 a nie 125<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">// 8-bit TimerX config<br />TCCRxn |= (1&lt;&lt;CSxn)|....  // set prescaler = 64 ---&gt; please check proper values in PDF<br />TCCRxn |= (1&lt;&lt;WGMxn)|.... // set CTC mode ---&gt; please check proper values in PDF<br />OCRxn  = 124;  // every  &#91; 1 ms &#93;<br />TIMSK  |= (1&lt;&lt;OCIExn);     // enable CompareX interrupt<br /><br /><br /><br />// TimerX compareX interrupt<br />ISR( TIMERx_COMPx_vect ) {<br /><br />    // ... interrupt code<br /><br />}</div><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2332">yaiba83</a> — 29 gru 2014, o 10:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elerbe]]></name></author>
<updated>2014-12-29T08:29:10+01:00</updated>
<published>2014-12-29T08:29:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110995#p110995</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110995#p110995"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110995#p110995"><![CDATA[
Tak tak kaka0204, dzięki za wyłapanie głupiej pomyłki <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Poprawiłem by inni czytający nie zwracali uwagi na błąd. <br /><br />yaiba83 dzięki za odpowiedź, jednak chciałbym się dowiedzieć dlaczego tak jest <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=5342">elerbe</a> — 29 gru 2014, o 08:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kaka0204]]></name></author>
<updated>2014-12-29T00:28:21+01:00</updated>
<published>2014-12-29T00:28:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110981#p110981</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110981#p110981"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110981#p110981"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Timer1 (32 bitowy)<br /></div><br />Male sprostowanie. Nie jest to timer 32 bitowy, a 16 bitowy. Zobacz jaka wartosc mozesz zapisac do OCR1 <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=889">kaka0204</a> — 29 gru 2014, o 00:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[yaiba83]]></name></author>
<updated>2014-12-29T00:11:38+01:00</updated>
<published>2014-12-29T00:11:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110978#p110978</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110978#p110978"/>
<title type="html"><![CDATA[Re: Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110978#p110978"><![CDATA[
Wg MkAvrCalculatora  nie jest możliwe uzyskanie takiego przerwania dla zadanych parametrów na Timerze0<br /><a href="http://forum.atnel.pl/_obrazki/o/2332/4af7ab02ee8d5986927844ad7705b7aa.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/2332/4af7ab02ee8d5986927844ad7705b7aa.png" alt="Obrazek" /></a><br /><br />Zainteresuj się tym programikiem - jest naprawdę pomocny.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2332">yaiba83</a> — 29 gru 2014, o 00:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elerbe]]></name></author>
<updated>2014-12-29T08:12:31+01:00</updated>
<published>2014-12-28T23:52:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110971#p110971</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110971#p110971"/>
<title type="html"><![CDATA[Proste przerwanie CTC- zmiana stanu diody co sekundę]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9902&amp;p=110971#p110971"><![CDATA[
Witam, jest to mój pierwszy post, więc mam nadzieję że nie umieszczam go w złym dziale. <br /><br />Zaczynając naukę przerwań chciałem zmienić stan diody co sekundę. Początkowo chciałem zrobić to na przykładzie z Bluebooka i próbowałem wykorzystać Timer0 (8 bitowy), moje podejście było takie: dobrać taki preskaler by dzieląc częstotliwość otrzymać liczbę całkowitą. Dodam, że testuję na Atmega16 z wewnętrznym taktowaniem 8 MHz. Zatem: 8 000 000 / 64 = 125 000, porównanie ustawiłem przy 125, zatem w wektorze przerwania dodałem licznik zliczający do 1000. Teoretycznie powinno działać, bo obliczenia chyba się zgadzają, jedyny błąd to dobranie złego preskalera- i to rozumiem, jednak wydawało mi się, że całość działa tak: timer zaczyna zliczać, kiedy dochodzi do wartości z OCR0 mamy przerwanie i później liczymy od nowa, więc teoretycznie(w mojej głowie) wszystko powinno działać pomimo &quot;błędu&quot;, jednak w praktyce dioda miga z większą częstotliwością. <br /><br />Listing &quot;złego&quot; programu: <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED1 (1&lt;&lt;PB0)<br />#define LED_TOG PORTB ^= LED1<br /><br />int main ( void ){<br /><br />// Ustawienie TIMER0<br />TCCR0 |= (1&lt;&lt;WGM01); // ustawienie tryby CTC<br />TCCR0 |= ((1&lt;&lt;CS01) | (1&lt;CS00)); // preskaler 64<br />OCR0 = 125; // porownanie przy 125<br />TIMSK |= ( 1&lt;&lt;OCIE0 ); // zezwolenie na przerwanie compare match<br />//<br /><br />DDRB |= LED1; // ustawienie portu jako wyjście<br /><br />sei();<br /><br />while(1){<br /><br />}<br />}<br /><br />// Procedura obsługi przerwania COMPARE MATCH<br />ISR (TIMER0_COMP_vect)<br />{<br />static uint16_t licznik = 0; //zmienna do zliczania cykli<br /><br />if ( licznik == 1000 )<br />{<br />LED_TOG;<br />licznik = 0;<br />}<br /><br />licznik++;<br /><br />}[/syntax]<br /><br />Z zadanie sobie poradziłem, używając Timer1 (16 bitowy) i dobierając odpowiedni preskaler: <br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />#define LED1 (1&lt;&lt;PB0)<br />#define LED_TOG PORTB ^= LED1<br /><br />int main ( void ){<br /><br />// Ustawienie TIMER1<br />TCCR1B |= (1&lt;&lt;WGM12); // ustawienie tryby CTC<br />TCCR1B |= (1&lt;&lt;CS12); // preskaler 256<br />OCR1A = 31250; // 8 000 000 /256 = 31250 &lt;--- przerwanie co sekunde<br />TIMSK |= (1&lt;&lt;OCIE1A);<br />//<br /><br />DDRB |= LED1; // ustawienie portu jako wyjście<br /><br />sei();<br /><br />while(1){<br /><br />}<br />}<br /><br />// Procedura obsługi przerwania COMPARE MATCH<br />ISR (TIMER1_COMPA_vect)<br />{<br />LED_TOG;<br />}[/syntax]<br /><br />I choć wszystko ładnie działa to mam pytanie- dlaczego pierwszy pomysł nie wypalił? Bo z tego, że nie działa łatwo wywnioskować, że czegoś nie wiem/ nie rozumiem... tylko czego?<br /><br />Dzięki za cierpliwość, i przepraszam za błędy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5342">elerbe</a> — 28 gru 2014, o 23:52</p><hr />
]]></content>
</entry>
</feed>