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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-02-15T19:30:46+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=17631&amp;mode</id>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-02-15T19:30:46+01:00</updated>
<published>2017-02-15T19:30:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182739#p182739</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182739#p182739"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182739#p182739"><![CDATA[
Jesteśmy tutaj po to, by sobie pomagać. Za nic nie przepraszaj.<br />Człowiek się uczy całe życie, głupi się rodzi i głupi umrze. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 15 lut 2017, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danko91]]></name></author>
<updated>2017-02-15T19:20:30+01:00</updated>
<published>2017-02-15T19:20:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182738#p182738</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182738#p182738"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182738#p182738"><![CDATA[
Rzeczywiście mój błąd. Faktycznie nie dopatrzyłem, że wkradła się drobna literówka w nazwie przerwania. Wiem, wiem, że nie przypisałem tych wartości, bo to planowałem zrobić później. Zazwyczaj mam tak, że piszę kod, a w zasadzie jego część i kompiluję sprawdzając czy nie mam błędów. Jak nie ma to piszę dalej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> takie zboczenie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Na CTC mi śmigało elegancko a teraz w trybie normalnym też. Problem był banalny <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Wybaczcie mi za to zamieszanie. W końcu dopiero się uczę programowania:]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16216">danko91</a> — 15 lut 2017, o 19:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-02-15T18:38:05+01:00</updated>
<published>2017-02-15T18:38:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182733#p182733</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182733#p182733"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182733#p182733"><![CDATA[
<div class="quotetitle">danko91 napisał(a):</div><div class="quotecontent"><br />Ale Ty nigdzie nie masz przypisanej wartości do pwm1 i pwm2?<br />Wówczas wypełnienie jest równe 0<br /></div><br /><br />Dokładnie tak, przecież pwm1 i pwm2 to zmienne globalne, które są zainicjowane wartośćią 0.<br />Używasz timera 8 bitowego, więc te dwa pwm'y mogą przyjąć wartośći od 0 (diody nie świecą) do 255(maksymalna jasność). Oczywiście kwestia jak masz podłączone diody LED czy anodmi czy katodami do uC. Jeśli odwrotnie dla wartości 0 będą świeciły maksymalnie, a dla 255 nie będą świeciły.<br />Oczywiście jak pisałem wyżej wektor przerwania powinien wyglądać tak:<br />[syntax=c]ISR( TIMER2_OVF_vect )[/syntax]<br />Poniżej masz przykładowy program do naprzemiennego zapalania i gaszenia tych diod.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />volatile uint8_t pwm1, pwm2;         //deklaracja zmiennych pwm1, pwm2, pwm3<br /><br />int main( void ) {<br /><br />    DDRB |= ( 1 &lt;&lt; PB3 ) | ( 1 &lt;&lt; PB4 ); //ustawienie pinów PB3, PB4 jako wyjscia<br />    PORTB |= ( 1 &lt;&lt; PB3 ) | ( 1 &lt;&lt; PB4 );        //wylaczenie diod<br /><br />    TCCR2 &amp;= ~(( 1 &lt;&lt; WGM21 ) | ( 1 &lt;&lt; WGM20 ) ); //tryb NORMAL - zapisanie tej linijki nie jest konieczne bo ten tryb jest trybem domyslnym<br />    TCNT2 = 56;                          //inicjalizacja licznika wartoscia 56. (256-56=200)<br />    TCCR2 |= ( 1 &lt;&lt; CS20 );              //preskaler /1<br />    TIMSK |= ( 1 &lt;&lt; TOIE2 );             //zezwolenie na przerwanie od przepelnienia<br /><br />    sei();<br />    <br />    uint8_t i;<br /><br />    while ( 1 ) {  <br />        <br />        for(i=0; i&lt;255; i++) {<br />            pwm1 = i;<br />            pwm2 = 255 - i;   <br />            _delay_ms(10);<br />        }    <br />        for(i=255; i&gt;0; i--) {<br />            pwm1 = i;<br />            pwm2 = 255 - i;   <br />            _delay_ms(10);<br />        }<br /><br />    }<br /><br />}<br /><br />ISR( TIMER2_OVF_vect ) {<br /><br />    static uint8_t pwm;<br />    TCNT2 = 56;<br /><br />    if ( pwm &gt;= pwm1 ) PORTB |= ( 1 &lt;&lt; PB3 );<br />    else PORTB &amp;= ~( 1 &lt;&lt; PB3 );<br />    if ( pwm &gt;= pwm2 ) PORTB |= ( 1 &lt;&lt; PB4 );<br />    else PORTB &amp;= ~( 1 &lt;&lt; PB4 );<br /><br />    pwm++;<br />}[/syntax]<br /><br />Jak widzisz w pętli głównej programu napisałem dwie pętle for, które zmieniają wartości pwm1 i pwm2, pierwsza od 0 do 255, a druga od 255 do 0. Dzięki temu diody będą się naprzemian zapalały i gasły.<br />Przetestuj sobie i daj znać czy jest to dla ciebie jasne.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 15 lut 2017, o 18:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2017-02-15T17:50:54+01:00</updated>
<published>2017-02-15T17:50:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182728#p182728</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182728#p182728"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182728#p182728"><![CDATA[
<div class="quotetitle">danko91 napisał(a):</div><div class="quotecontent"><br />Kolego anshar. Poprawiłem kod zgodnie z twoimi wskazówkami, niby się skompilowało ale przy linijce z ISR jest wykrzyknik i podświetla mi to: 'TIMER_OVF_vect' appears to be a misspelled signal handler [enabled by default]<br /></div>No i dobrze podświetla bo w atmedze8A nie ma takiego wektora! Dla timera2 wektor przepełnienia to TIMER2_OVF_vect<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 15 lut 2017, o 17:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[michaeleagle]]></name></author>
<updated>2017-02-15T16:39:13+01:00</updated>
<published>2017-02-15T16:39:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182719#p182719</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182719#p182719"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182719#p182719"><![CDATA[
Ale Ty nigdzie nie masz przypisanej wartości do pwm1 i pwm2?<br />Wówczas wypełnienie jest równe 0<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16396">michaeleagle</a> — 15 lut 2017, o 16:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danko91]]></name></author>
<updated>2017-02-15T15:29:23+01:00</updated>
<published>2017-02-15T15:29:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182716#p182716</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182716#p182716"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182716#p182716"><![CDATA[
ATmega8A<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16216">danko91</a> — 15 lut 2017, o 15:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-02-15T14:46:18+01:00</updated>
<published>2017-02-15T14:46:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182711#p182711</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182711#p182711"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182711#p182711"><![CDATA[
Na jakim uC działasz?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />ISR (TIMER2_OVF_vect)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 15 lut 2017, o 14:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danko91]]></name></author>
<updated>2017-02-15T14:43:07+01:00</updated>
<published>2017-02-15T14:43:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182710#p182710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182710#p182710"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182710#p182710"><![CDATA[
Kolego worner - masz rację. Moje gapiostwo.<br />Kolego anshar. Poprawiłem kod zgodnie z twoimi wskazówkami, niby się skompilowało ale przy linijce z ISR jest wykrzyknik i podświetla mi to: 'TIMER_OVF_vect' appears to be a misspelled signal handler [enabled by default]<br /><br />A po wgraniu wsadu do procka diody są cały czas wyłączone. Zero reakcji :/<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16216">danko91</a> — 15 lut 2017, o 14:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-02-15T14:49:28+01:00</updated>
<published>2017-02-15T14:26:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182707#p182707</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182707#p182707"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182707#p182707"><![CDATA[
Procedura obsługi przerwania powinna znajdować się poza ciałem funkji int main(void). Musisz dać pętlę nieskończoną while(1) choćby pustą, bo inaczej program przestanie działać.<br />[syntax=c]int main(void)<br />{<br />        DDRB |= (1&lt;&lt;PB3) | (1&lt;&lt;PB4);         //ustawienie pinów PB3, PB4 jako wyjścia<br />        PORTB |= (1&lt;&lt;PB3) | (1&lt;&lt;PB4);        //wyłączenie diod<br /> <br />        TCCR2 &amp;= ~((1&lt;&lt;WGM21) | (1&lt;&lt;WGM20)); //tryb NORMAL - zapisanie tej linijki nie jest konieczne bo ten tryb jest trybem domyślnym<br />        TCNT2 = 56;                          //inicjalizacja licznika wartością 56. (256-56=200)<br />        TCCR2 |= (1&lt;&lt;CS20);                  //preskaler /1<br />        TIMSK |= (1&lt;&lt;TOIE2);                 //zezwolenie na przerwanie od przepełnienia<br /> <br />        sei();                               //globalne zezwolenie na przerwanie<br /><br />        while(1);<br /> }<br />    ISR (TIMER2_OVF_vect)<br />           {<br />               static uint8_t pwm;<br />               TCNT2=52;<br /> <br />               if (pwm&gt;=pwm1) PORTB |= (1&lt;&lt;PB3); else PORTB &amp;= ~(1&lt;&lt;PB3);<br />               if (pwm&gt;=pwm2) PORTB |= (1&lt;&lt;PB4); else PORTB &amp;= ~(1&lt;&lt;PB4);<br /> <br />               pwm++;<br />           }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 15 lut 2017, o 14:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[worner]]></name></author>
<updated>2017-02-15T14:25:39+01:00</updated>
<published>2017-02-15T14:25:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182706#p182706</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182706#p182706"/>
<title type="html"><![CDATA[Re: PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182706#p182706"><![CDATA[
A czasem klamra zamykająca funkcję main nie jest w złym miejscu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=150">worner</a> — 15 lut 2017, o 14:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danko91]]></name></author>
<updated>2017-02-15T14:21:22+01:00</updated>
<published>2017-02-15T14:21:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182705#p182705</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182705#p182705"/>
<title type="html"><![CDATA[PWM na przerwaniu OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17631&amp;p=182705#p182705"><![CDATA[
Witam kolejny raz. <br />Dalej idę w Bluebooka. Napotkałem problem przy PWMie. <br /><br />Na podstawie książki i tego projektu z płyty CD zapisałem taki oto kod. Męczę się z tym od rana ale nie mam pomysłu i niestety nie mogę go poprawnie skompilować bo wywala mi błąd przy linijce ISR:<br />- static declaration of 'TIMER_OVF_vect' follows non-static declaration<br />- previous declaration of 'TIMER_OVF_vect' was here<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />volatile uint8_t pwm1, pwm2;         //deklaracja zmiennych pwm1, pwm2, pwm3<br /><br />int main(void)<br />{<br />DDRB |= (1&lt;&lt;PB3) | (1&lt;&lt;PB4);         //ustawienie pinów PB3, PB4 jako wyjścia<br />PORTB |= (1&lt;&lt;PB3) | (1&lt;&lt;PB4);        //wyłączenie diod<br /><br />TCCR2 &amp;= ~((1&lt;&lt;WGM21) | (1&lt;&lt;WGM20)); //tryb NORMAL - zapisanie tej linijki nie jest konieczne bo ten tryb jest trybem domyślnym<br />TCNT2 = 56;                          //inicjalizacja licznika wartością 56. (256-56=200)<br />TCCR2 |= (1&lt;&lt;CS20);                  //preskaler /1<br />TIMSK |= (1&lt;&lt;TOIE2);                 //zezwolenie na przerwanie od przepełnienia<br /><br />sei();                               //globalne zezwolenie na przerwanie<br /><br />    ISR (TIMER_OVF_vect)<br />   {<br />       static uint8_t pwm;<br />       TCNT2=52;<br /><br />       if (pwm&gt;=pwm1) PORTB |= (1&lt;&lt;PB3); else PORTB &amp;= ~(1&lt;&lt;PB3);<br />       if (pwm&gt;=pwm2) PORTB |= (1&lt;&lt;PB4); else PORTB &amp;= ~(1&lt;&lt;PB4);<br /><br />       pwm++;<br />   }<br />}[/syntax]<br /><br />Wcześniej sprawdzałem kod w trybie Fast PWM i wszystko działa okej. Nie wiem gdzie popełniłem błąd.<br />Procesor to ATmega8A, diody LED podłączone katodami do pinów PB3 i PB4.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16216">danko91</a> — 15 lut 2017, o 14:21</p><hr />
]]></content>
</entry>
</feed>