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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-02-20T19:54:31+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=6013&amp;mode</id>
<entry>
<author><name><![CDATA[Syntezator]]></name></author>
<updated>2014-02-20T19:54:31+01:00</updated>
<published>2014-02-20T19:54:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71266#p71266</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71266#p71266"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71266#p71266"><![CDATA[
Napisze post pod postem ale chciałbym wstawić działający kod do generowania płynnego rozjaśniania i ściemniania diody jednocześnie generując sekwencje błysków. Poprawiłem również komentarze bo jednak było sporo w nich błędów.<br />Niestety nie jest to tak jak być powinno, jednak działa.<br />Może ktoś pokusi się o przedstawienie poprawnego sposobu generowania błysków dla diody podłączonej do PC5?<br /><br />[syntax=c]//Krótkie błyski diody podłączonej do PC3<br />//Płynne rozjasnianie i sciemnianie diody podłączonej do PC4<br />//Ciągłe wiecenie dioda podłączoną do PC5<br />//Tkatowanie procesora 8MHz<br />//Sterowane sprzetowym kanalem CTC<br />//Diody sa podlaczone katodą do pinu, anodą poprzez rezystor do VCC<br /><br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;//dołaczenie pliku nagłówkowego do obsługi przerwań<br />#include &lt;util/delay.h&gt;<br /><br />// definicje zmiennej do sterowania 1 kanałem programowym PWM<br />// zmienne typu uint8_t, rozdzielczość 8-bitowa<br />volatile uint8_t pwm1;<br /><br /><br />// definicje dla preprocesora<br /><br />#define LED_PIN1 (1&lt;&lt;PC3)// definicja pinu do którego podłączona jest dioda PC3 26<br />#define LED_PIN2 (1&lt;&lt;PC4)// definicja pinu do którego podłączona jest dioda PC4 27<br />#define LED_PIN3 (1&lt;&lt;PC5)// definicja pinu do którego podłączona jest dioda PC5 28<br /><br /><br />int main(void)<br />{<br /><br /><br /><br />//***** PROGRAMOWY PWM - 2 KANAŁÓW *******<br />// ustawienie pinów kanałów programowych PWM jako WYJŚCIA<br />DDRC |= LED_PIN1;// kierunek pinu PC3 – wyjściowy włączenie diody<br />DDRC |= LED_PIN2;// kierunek pinu PC4 – wyjściowy włączenie diody<br />DDRC |= LED_PIN3;// kierunek pinu PC5 – wyjściowy włączenie diody<br /><br /><br />// wyłączenie diod LED podłączonych katodami do wyjść<br />PORTC |= LED_PIN2;<br />//PORTC |= LED_PIN3;<br /><br /><br />//ustawienie CTC dla Timer2 PB3(wyjscie 8-bit)<br /><br />TCCR2 |= (1 &lt;&lt; WGM21) ; //ustawienie CTC<br />TCCR2 |= (1 &lt;&lt; CS21);//|(1 &lt;&lt; CS20)|(1 &lt;&lt; CS22); //preskaler 8&gt;&gt;1000000Hz<br />//99 częstotliwosć 10000Hz(0,0001s)&gt;&gt; (1000000/10000)-1=99<br />OCR2=99;<br />TIMSK |= (1&lt;&lt;OCIE2);//odblokowanie przerwania Compare Match<br /><br /><br />/*<br /> *<br />//ustawienie CTC dla Timer1A PB1(wyjscie 16-bit)<br /><br />//inicjalizacja przerwania<br /> *<br />TCCR1A |= (1 &lt;&lt; WGM12); //ustawienie CTC<br />TCCR1B |= (1 &lt;&lt; CS10);|(1&lt;&lt;CS12); //preskaler =1024&gt;&gt;(8000000/1024)=7812,5??<br />//przerwanie co 0,01s 100Hz??, (7812,5/100)-1=77<br />OCR1A=77;<br />TIMSK|=(1&lt;&lt;OCIE1A);//odblokowanie przerwania Compare Match<br /><br /><br />*/<br /><br />sei ();//włączenie globalnego zezwolenia na przerwania<br /><br />uint8_t i;// definicja zmiennej i na potrzeby pętli for()<br /><br /><br />while(1)<br />{<br />// pętla rozjaśniająca 6 diod LED<br />for(i=0;i&lt;255;i++)<br />{<br /><br />pwm1=i;<br /><br /><br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />if(i&gt;50) _delay_ms(3);<br />else _delay_ms(10);<br />}<br /><br />// rozświetlenie na maksimum przez 100ms<br />pwm1=255;<br /><br />_delay_ms(500);<br /><br />// pętla stopniowo ściemniająca 6 diod LED<br />for(i=255;i;i--)<br />{<br /><br />pwm1=i;<br />;<br /><br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />if(i&gt;50) _delay_ms(3);<br />else _delay_ms(10);<br />}<br /><br />// całkowite wygaszenie diod LED przez 100ms<br />pwm1=0;<br /><br />_delay_ms(500);<br />}<br /><br />}<br /><br /><br /><br /><br /><br />//Timer 2<br /><br />ISR(TIMER2_COMP_vect)<br />            {<br /><br />static uint16_t ms;<br />static uint8_t cnt;<br /><br />ms++;<br /><br /><br />if(ms&gt;=1 &amp;&amp; ms&lt;500) PORTC&amp;= ~(1&lt;&lt;PC3);//dioda włączona 0,05s<br />if(ms&gt;=500 &amp;&amp; ms&lt;2500) PORTC|= (1&lt;&lt;PC3);//dioda wyłączona 0,2s<br />if(ms&gt;=2500 &amp;&amp; ms&lt;3000) PORTC&amp;= ~(1&lt;&lt;PC3);//dioda włączona 0,05s<br />if(ms&gt;=3000 &amp;&amp; ms&lt;15000) PORTC|= (1&lt;&lt;PC3);//dioda wyłączona 1,2s<br />if(ms&gt;=15000) ms=0;//zerowanie ms<br /><br />if(cnt&gt;=pwm1) PORTC |= (1&lt;&lt;PC4); else PORTC &amp;= ~(1&lt;&lt;PC4);<br />cnt++;// zwiększanie licznika o 1<br />            }<br /><br />/*<br /><br />// Timer 1<br /><br />ISR( TIMER1_COMPA_vect )<br />{<br />static uint8_t mt;<br /><br />mt++;<br /><br /><br />if(mt&gt;=1 &amp;&amp; mt&lt;6) PORTC&amp;= ~(1&lt;&lt;PC4);//dioda włączona 0,05s<br />if(mt&gt;=6 &amp;&amp; mt&lt;26) PORTC|= (1&lt;&lt;PC4);//dioda wyłączona 0,2s<br />if(mt&gt;=26 &amp;&amp; mt&lt;31) PORTC&amp;= ~(1&lt;&lt;PC4);//dioda włączona 0,05s<br />if(mt&gt;=31 &amp;&amp; mt&lt;150) PORTC|= (1&lt;&lt;PC4);//dioda wyłączona 1,2s<br />if(mt&gt;=150) mt=0;//zerowanie mt<br />}<br />*/[/syntax]<br /><br />Gdyby ktoś chciał zmodyfikowałem lekko fragment związany z Timerem2 wielkość programu spadła z 424 do 382 baitów.<br />[syntax=c]ISR(TIMER2_COMP_vect)<br />            {<br /><br />static uint16_t ms;<br />static uint8_t cnt;<br /><br />ms++;<br />//dioda włączona 0,05s,wyłączona 0,2s,dioda włączona 0,05s<br /><br />if((ms&gt;=1 &amp;&amp; ms&lt;500) || (ms&gt;=2500 &amp;&amp; ms&lt;3000))<br />{<br />PORTC&amp;= ~(1&lt;&lt;PC3);<br />}<br />else PORTC|= (1&lt;&lt;PC3);<br />if(ms&gt;=15000) ms=0;//dioda wyłączona po 1,2s,zerowanie ms<br /><br /><br /><br /><br />if(cnt&gt;=pwm1) PORTC |= (1&lt;&lt;PC4); else PORTC &amp;= ~(1&lt;&lt;PC4);<br />cnt++;// zwiększanie licznika o 1<br />            }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2665">Syntezator</a> — 20 lut 2014, o 19:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Syntezator]]></name></author>
<updated>2014-02-20T18:12:52+01:00</updated>
<published>2014-02-20T18:12:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71253#p71253</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71253#p71253"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71253#p71253"><![CDATA[
Procesor to Atmega8 strona 97 noty.<br />Znalazłem jeden ale wszystko psujący błąd..<br />[syntax=c]&#91;TIMSK|=(1&lt;&lt;OCIE1A);//odblokowanie przerwania Compare Match[/syntax]<br />Po tej zmianie obie diody żyją, chociaż w przypadku Timera 1 preskaler musiałem przestawić na 1 aby było coś widać.<br />Jednak dalej nie wiem jak obliczać parametry dla Timera1.<br /><br />Uzyskanie zapalania i gaszenia diody znalazłem w wielu wątkach, niestety jak poprawnie uzyskać sekwencje aby nie zakłócać pozostałej części programu już nie.<br /><br />Masz racje nie do końca rozumiem ich idee, dlatego wrócę do przeanalizowania Poradników i książki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2665">Syntezator</a> — 20 lut 2014, o 18:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-20T17:28:27+01:00</updated>
<published>2014-02-20T17:28:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71252#p71252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71252#p71252"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71252#p71252"><![CDATA[
Chyba nie do końca zrozumiałeś ideę timerów programowych :/ To coś co w przerwaniu może wyglądać mniej więcej tak:<br />[syntax=c]ISR(vect...){<br />If (timer_prog) timer_prog--;<br />}[/syntax]<br /><br />Sporo na ten temat już napisano na forum...<br /><br />A czy Timer1 jeden może pracować w trybie CTC, bo nawet nie wiem na jakim procku działasz ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 20 lut 2014, o 17:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Syntezator]]></name></author>
<updated>2014-02-20T17:18:10+01:00</updated>
<published>2014-02-20T17:18:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71251#p71251</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71251#p71251"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71251#p71251"><![CDATA[
Wczoraj udało mi się zrealizować sekwencje błysków wykorzystując Timer2.<br />Niestety próba zrealizowania tego samego wykorzystując Timer1 już nie wypadła tak dobrze, w jaki sposób obliczyć taktowanie dla niego? <br />Dodatkowo próbując wykorzystać zarówno Timer1 jak i Timer2 realizowała się tylko część związana z Timerem1 dlaczego?<br />Poniżej podaje kod programu i ustawienia dla Timer1 oraz Timer2.<br /><br />[syntax=c]//Krótkie błyski diody podłączonej do PB3<br />//Tkatowanie procesora 8MHz<br />//Sterowane sprzetowym kanalem CTC<br />// diody sa podlaczone katodą do pinu, anodą poprzez rezystor do VCC<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;//dołaczenie pliku nagłówkowego do obsługi przerwań<br /><br />// definicje dla preprocesora<br /><br /><br />#define LED_PIN1 (1&lt;&lt;PC3)// definicja pinu do którego podłączona jest dioda PC3<br />#define LED_PIN2 (1&lt;&lt;PC4)// definicja pinu do którego podłączona jest dioda PB4 27<br /><br /><br />int main(void)<br />{<br /><br />// ****** inicjalizacja *********<br /><br /><br />DDRC |= LED_PIN1;// kierunek pinu PC3 – wyjściowy włączenie diody<br />DDRC |= LED_PIN2;// kierunek pinu PC4 – wyjściowy włączenie diody<br /><br /><br /><br />//ustawienie CTC dla Timer2 PB3(wyjscie 8-bit)<br /><br />TCCR2 |= (1 &lt;&lt; WGM21) ; //ustawienie CTC<br />TCCR2 |= (1 &lt;&lt; CS20)|(1 &lt;&lt; CS21)|(1 &lt;&lt; CS22); //preskaler =1024&gt;&gt;(8000000/1024)<br />OCR2=77;//częstotliwosc 100Hz(0,01s)<br />TIMSK |= (1&lt;&lt;OCIE2);//odblokowanie przerwania Compare Match<br />/*<br />//ustawienie CTC dla Timer1A PB1(wyjscie 16-bit)<br /><br />//inicjalizacja przerwania co 20ms<br /> *<br />TCCR1A |= (1 &lt;&lt; WGM12); //ustawienie CTC<br />TCCR1B |= (1 &lt;&lt; CS10);|(1&lt;&lt;CS12); //preskaler =1054&gt;&gt;(8000000/1024)<br />OCR1A=77;//przerwanie co 0,01s, 100Hz<br />TIMSK=(1&lt;&lt;OCIE1A);//odblokowanie przerwania Compare Match<br /><br /><br />*/<br /><br /><br />sei ();//włączenie globalnego zezwolenia na przerwania<br /><br /><br />while(1){}<br /><br />}<br /><br /><br /><br />//Timer 2<br /><br />ISR(TIMER2_COMP_vect)<br />            {<br /><br />static uint8_t ms;<br /><br />ms++;<br /><br /><br />if(ms&gt;=1 &amp;&amp; ms&lt;6) PORTC&amp;= ~(1&lt;&lt;PC3);//dioda włączona 0,05s<br />if(ms&gt;=6 &amp;&amp; ms&lt;26) PORTC|= (1&lt;&lt;PC3);//dioda wyłączona 0,2s<br />if(ms&gt;=26 &amp;&amp; ms&lt;31) PORTC&amp;= ~(1&lt;&lt;PC3);//dioda włączona 0,05s<br />if(ms&gt;=31 &amp;&amp; ms&lt;150) PORTC|= (1&lt;&lt;PC3);//dioda wyłączona 1,2s<br />if(ms&gt;=150) ms=0;//zerowanie ms<br />            }<br /><br />/*<br /><br />// Timer 1<br /><br />ISR( TIMER1_COMPA_vect )<br />{<br />static uint8_t mt;<br /><br />mt++;<br /><br /><br />if(mt&gt;=1 &amp;&amp; mt&lt;6) PORTC&amp;= ~(1&lt;&lt;PC4);//dioda włączona 0,05s<br />if(mt&gt;=6 &amp;&amp; mt&lt;26) PORTC|= (1&lt;&lt;PC4);//dioda wyłączona 0,2s<br />if(mt&gt;=26 &amp;&amp; mt&lt;31) PORTC&amp;= ~(1&lt;&lt;PC4);//dioda włączona 0,05s<br />if(mt&gt;=31 &amp;&amp; mt&lt;150) PORTC|= (1&lt;&lt;PC4);//dioda wyłączona 1,2s<br />if(mt&gt;=150) mt=0;//zerowanie mt<br />}<br />*/[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2665">Syntezator</a> — 20 lut 2014, o 17:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-20T11:49:13+01:00</updated>
<published>2014-02-20T11:49:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71196#p71196</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71196#p71196"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71196#p71196"><![CDATA[
<div class="quotetitle">Syntezator napisał(a):</div><div class="quotecontent"><br />Kolejnym krokiem jaki chciałbym zrobić to wygenerowanie dwóch krótkich błysków i dłuższej przerwy w oparciu o ten timer.<br /></div><br /><br />Osobiście do takich efektów wykorzystuję dwie różne metody przede wszystkim w zależności od sytuacji i potrzeb:<br /> - wykorzystująca (wg mnie najprostsza) switch-case gdzie w każdym przebiegu ustalasz dla timera konkretną wartość do odliczenia zanim znowu wejdzie w &quot;przełącznik&quot;,  a przy zadawaniu wartości wykonujesz też konkretne instrukcje, które sobie zaplanowałeś (tu można by znowu podzielić na kolejne metody, ale mieszał nie będę);<br /><br />- nieco trudniejsza - choć czy ja wiem czy trudniejsza...po prostu inina  <img src="https://forum.atnel.pl/images/smilies/icon_cool.gif" alt="8-)" title="Cool" />  - metoda oparta na matrycy bitowej i korzystająca z przesunięć bitowych. Ta również pozwoli na pojedyncze błyski, ale częściej ją wykorzystuje do generowania konkretnych serii zer i jedynek w ustalonym czasie.<br /><br />Są też i inne sposoby oparte na If...else (w sumie idealnie nadaje się jak mamy tylko dwa czasy), ale ja najbardziej lubię powyższe  <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=1922">SylwekK</a> — 20 lut 2014, o 11:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-02-19T21:17:27+01:00</updated>
<published>2014-02-19T21:17:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71176#p71176</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71176#p71176"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71176#p71176"><![CDATA[
Umieść kod w znacznikach &quot;synrax=c&quot;<br />bo teraz to nic nie widać <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=1044">Zaba</a> — 19 lut 2014, o 21:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Syntezator]]></name></author>
<updated>2014-02-19T21:23:38+01:00</updated>
<published>2014-02-19T20:57:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71175#p71175</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71175#p71175"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=71175#p71175"><![CDATA[
Dziękuję za podpowiedzi jednak muszę dalej prosić o pomoc. <br />Zgodnie z zaleceniami zabrałem się za same timery programowe, napisałem trzy funkcje mające za zadanie mrugać diodami.<br />Pierwsza zaczerpnięta jest w pewnym stopniu z Rozdziału &quot;Wstęp do systemów czasu rzeczywistego str.443, druga &quot;Sterowanie PWM&quot; str.249, trzecia w oparciu o Poradnik &quot;AVR Przerwania Cz.1&quot;.<br />Zgodnie z moim tokiem rozumowania obie powinny zapalać i gasić diodę co 1s, jednak występują zauważalne różnice między 2 a 1 i 3-dlaczego?<br />Kolejnym krokiem jaki chciałbym zrobić to wygenerowanie dwóch krótkich błysków i dłuższej przerwy w oparciu o ten timer.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;//dołaczenie pliku nagłówkowego do obsługi przerwań<br /><br />// definicje dla preprocesora<br /><br />#define LED_PIN3 (1&lt;&lt;PC5)// definicja pinu do którego podłączona jest dioda PC5 28<br />#define LED_TOG PORTC ^= LED_PIN3// makrodefinicja – zmiana stanu diody<br />#define LED_PIN2 (1&lt;&lt;PC4)// definicja pinu do którego podłączona jest dioda PC4<br />#define LED_PIN1 (1&lt;&lt;PC3)// definicja pinu do którego podłączona jest dioda PC3<br /><br />volatile uint8_t pwm1;<br />volatile uint16_t Timer1;<br /><br />int main(void)<br />{<br /><br />// ****** inicjalizacja *********<br /><br />DDRC |= LED_PIN3;// kierunek pinu PC5 – wyjściowy włączenie diody<br />DDRC |= LED_PIN2;// kierunek pinu PC4 – wyjściowy włączenie diody<br />DDRC |= LED_PIN1;// kierunek pinu PC4 – wyjściowy włączenie diody<br /><br /><br />//ustawienie CTM dla Timer2 PB3(wyjscie 8-bit)<br />//TCCR2 |= (1 &lt;&lt; COM20); //ustawienie set at TOP<br />TCCR2 |= (1 &lt;&lt; WGM21) ; //ustawienie CTC<br />TCCR2 |= (1 &lt;&lt; CS20)|(1 &lt;&lt; CS21)|(1 &lt;&lt; CS22); //preskaler =1024&gt;&gt;(8000000/1024)<br />OCR2=77;//częstotliwosc 100Hz(0,01s)<br />TIMSK |= (1&lt;&lt;OCIE2);<br /><br />sei ();//włączenie globalnego zezwolenia na przerwania<br /><br /><br />while(1)<br />{<br />if(!Timer1){<br />Timer1=100;   //zmiana stanu co 100*0,01s=1s<br />PORTC ^= LED_PIN3;<br />pwm1=100;//zmiana stanu co 100*0,01s=1s??<br />}<br />}<br />}<br /><br /><br /><br />ISR(TIMER2_COMP_vect)<br />            {<br />uint8_t x;<br />static uint8_t cnt;<br />static uint8_t ms;<br />ms++;<br /><br /><br />x=Timer1;<br />if (x) Timer1=--x;<br /><br /><br />if(cnt&gt;=pwm1) PORTC |= (1&lt;&lt;PC4); else PORTC &amp;= ~(1&lt;&lt;PC4);<br />cnt++;<br /><br />if(ms&gt;99)<br />{<br />ms=0;<br />PORTC^=(1&lt;&lt;PC3);<br />}<br /><br />            }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2665">Syntezator</a> — 19 lut 2014, o 20:57</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kila]]></name></author>
<updated>2014-02-15T14:26:31+01:00</updated>
<published>2014-02-15T14:26:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70556#p70556</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70556#p70556"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70556#p70556"><![CDATA[
Zobacz jak ja steruję diodami RGB przez PWM, link znajdziesz w moim podpisie. Na dniach będę modyfikował kod, ale ten co tam jest działa bez zarzutu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=699">kila</a> — 15 lut 2014, o 14:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SylwekK]]></name></author>
<updated>2014-02-15T13:18:07+01:00</updated>
<published>2014-02-15T13:18:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70547#p70547</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70547#p70547"/>
<title type="html"><![CDATA[Re: Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70547#p70547"><![CDATA[
Musisz wywalić wszystkie <strong>delay</strong>, zamiast pętli <strong>for</strong> zastosować inną pracę ze zmiennymi no i przede wszystkim musisz poczytać o <strong>timerach programowych</strong>, bo one są podstawą opóźnień przy nieblokujących programach.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1922">SylwekK</a> — 15 lut 2014, o 13:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Syntezator]]></name></author>
<updated>2014-02-19T21:23:11+01:00</updated>
<published>2014-02-15T13:00:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70546#p70546</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70546#p70546"/>
<title type="html"><![CDATA[Mruganie diodami+PWM Atmega 8]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=6013&amp;p=70546#p70546"><![CDATA[
Witam wszystkich jest to mój pierwszy post na forum oraz pierwszy program jaki staram się stworzyć. <br />Na wstępie chwiałbym podziękować Panu Mirkowi za tak wspaniałą książkę oraz poradniki, bez nich nie zdecydował bym się na rozpoczęcie nauki programowania.<br />Teraz przejdę do sedna sprawy, mam problem z odpowiednim napisaniem programu. Składa się z dwóch części, oddzielnie działają idealnie jednak razem już nie wychodzi to co sobie zaplanowałem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Program oparty jest w 99% na książce jednak przerobiłem go na Atmege 8(wiem źle zrobiłem ale tak to jest jak człowiek się nie słucha mądrzejszych..).<br />Pierwsza część odpowiada za szybkie mrugnięcia diodą pod kanałem PB1, druga opiera się na PWM i ma za zadanie płynnie rozjaśniać oraz przyciemniać diodę podłączoną do PB3. <br />Co trzeba zmienić aby wykonywanie drugiej części nie powodowało opóźnienia wykonywania pierwszej?<br />Jeśli brakuję jakiś informacji to bardzo przepraszam, postaram się odpowiedzieć na wszelkie pytania..jeśli je tylko zrozumiem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />[syntax=c]//Płynne rozjaśnianie oraz ściemnianie dwóch diod Led podłączonych pod wyjścia PB1 oraz PB3<br />//Sterowane sprzętowym kanałem PWM<br />// diody są podłączone katodą do pinu, anodą poprzez rezystor do VCC<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />// definicje dla preprocesora<br />#define LED_PIN1 (1&lt;&lt;PB1)// definicja pinu do którego podłączona jest dioda PB1 15<br />#define LED_ON PORTB &amp;= ~LED_PIN1// makrodefinicja – załączenie diody<br />#define LED_OFF PORTB |= LED_PIN1// makrodefinicja – wyłączenie diody<br />//#define LED_TOG PORTB ^= LED_PIN1// makrodefinicja – zmiana stanu diody<br /><br />#define LED_PIN2 (1&lt;&lt;PC4)// definicja pinu do którego podłączona jest dioda PB4 27<br />#define LED_PIN3 (1&lt;&lt;PC5)// definicja pinu do którego podłączona jest dioda PC5 28<br /><br />int main(void)<br />{<br /><br />// ****** inicjalizacja *********<br />DDRB |= (LED_PIN1) |(1&lt;&lt;PB3);// kierunek pinu PB1 – wyjściowy włączenie diody<br />DDRC |= LED_PIN2;// kierunek pinu PC4 – wyjściowy włączenie diody<br />DDRC |= LED_PIN3;// kierunek pinu PC5 – wyjściowy włączenie diody<br /><br />//DDRB |=(1&lt;&lt;PB3); // kierunek pinu PB3 – wyjściowy włączenie diody - pin 17<br /><br /><br />//DDRB |= (1&lt;&lt;PB1)|(1&lt;&lt;PB3); //ustawienie wyjć PB1-pin 15 oraz PB3 pin 17<br />/*<br />//ustawienie PWM dla PB1(wyjscie 16-bit)<br />TCCR1A |= (1 &lt;&lt; COM1A1); //ustawienie set at TOP<br />TCCR1A |= (1 &lt;&lt; WGM10)|(1 &lt;&lt; WGM12); //ustawienie Fast PWM na 8-bit<br />TCCR1B |= (1 &lt;&lt; CS10); //preskaler =1<br />*/<br />//ustawienie PWM dla PB3(wyjscie 8-bit)<br />TCCR2 |= (1 &lt;&lt; COM21); //ustawienie set at TOP<br />TCCR2 |= (1 &lt;&lt; WGM21) | (1 &lt;&lt; WGM20); //ustawienie Fast PWM<br />TCCR2 |= (1 &lt;&lt; CS20); //preskaler =1<br /><br /><br />uint8_t i;// definicja zmiennej i na potrzeby pętli for()<br /><br /><br />while(1)<br />{<br /><br />//pętla krótkich błysków dla wyjścia PB1<br />LED_ON;// zapal diodę 1<br />_delay_ms(100);// oczekiwanie 0.1s (100ms)<br />LED_OFF;// zgaś diodę<br />_delay_ms(50);// oczekiwanie 0.1s<br />LED_ON;// zapal diodę 1<br />_delay_ms(100);// oczekiwanie 0.1s (100ms)<br />LED_OFF;// zgaś diodę<br />_delay_ms(800);// oczekiwanie 1s<br /><br /><br />// pętla ściemniająca diody LED PB3<br /><br />for(i=0;i&lt;255;i++)<br />{<br />//OCR1A=i;<br />OCR2 =i;<br /><br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />//dla wartości 255 diody są wygaszone<br />if(i&gt;205) _delay_ms(10); // dla zakresu 190-255 krok 20ms(końcówka wygaszania)<br />else _delay_ms(3);<br />}<br /><br />// całkowite wygaszenie diody LED przez 200ms PB3<br />//OCR1A=255;<br />OCR2=255;<br /><br /><br />_delay_ms(300);<br /><br />// pętla stopniowo rozjaśniająca diody LED PB3<br />for(i=255;i;i--)<br />{<br />//OCR1A=i;<br />OCR2=i;<br /><br /><br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />if(i&gt;205) _delay_ms(10); //dla zakresu 220-255 krok 15ms(początek rozjaśniania)<br />else _delay_ms(3);<br />}<br /><br />// całkowite rozjaśnienie diody LED przez 100ms PB3<br />//OCR1A=0;<br />OCR2=0;<br /><br />_delay_ms(50);<br /><br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2665">Syntezator</a> — 15 lut 2014, o 13:00</p><hr />
]]></content>
</entry>
</feed>