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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-11-13T23:08:40+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=9226&amp;mode</id>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-11-13T23:08:40+01:00</updated>
<published>2014-11-13T23:08:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103874#p103874</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103874#p103874"/>
<title type="html"><![CDATA[Re: Programowy PWM - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103874#p103874"><![CDATA[
Witam<br /><div class="quotetitle">antheri napisał(a):</div><div class="quotecontent"><br />...nie chciałem kopiować całej procedury tylko ...<br /></div><br />...a innym kolegom nie chce się zgadywać bądź też wróżyć  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .<br />Uzupełniłem Twój kod o prymitywnego delay'a dla pwm++ i u mnie (AT8 8MHz) działa.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile uint8_t pwm ;<br /><br />int main(void)<br />{<br /> DDRB |= (1&lt;&lt;PB0);<br />TCCR2 |= (1&lt;&lt;WGM21); // tryb ctc<br />TCCR2 |= (1&lt;&lt;CS21); // | (1&lt;&lt;CS21)| (1&lt;&lt;CS22); // preskaler 1024<br />OCR2 = 200; // dodatkowy dzielnik przez 108<br />TIMSK |= (1&lt;&lt;OCIE2); // zezwolenie na przerwanie<br /><br />sei();<br /><br />while(1)<br />{<br />pwm++;<br />_delay_ms(100);<br />if(pwm&gt;99)pwm=0;<br />}<br />}<br /><br /><br /><br /><br />ISR(TIMER2_COMP_vect) // 100Hz<br /><br />{<br />static uint8_t tic;<br />if(!tic)<br />  tic = 100;<br /><br />else<br />  tic--;<br /><br /> if(pwm&gt;=tic)  PORTB |=  (1&lt;&lt;PB0);<br />else           PORTB &amp;= ~(1&lt;&lt;PB0);<br /><br />}[/syntax]<br />Dlaczego tego Twojego &quot;tic'a&quot; ograniczasz do 100; gdybyś dał cały bajt miałbyś troszkę więcej odcieni jasności, a po drugie sam by się zerował ( p.BB  np.: str.235 ).<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 lis 2014, o 23:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[antheri]]></name></author>
<updated>2014-11-13T21:21:59+01:00</updated>
<published>2014-11-13T21:21:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103860#p103860</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103860#p103860"/>
<title type="html"><![CDATA[Re: Programowy PWM - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103860#p103860"><![CDATA[
Mój błąd ale po poprawieniu nie załatwia to sprawy, tj w kodzie mam dobrze tylko przy przepisywaniu tego tutaj się pomyliłem, nie chciałem kopiować całej procedury tylko przedstawić moje myślenie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1994">antheri</a> — 13 lis 2014, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2014-11-13T20:50:33+01:00</updated>
<published>2014-11-13T20:50:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103840#p103840</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103840#p103840"/>
<title type="html"><![CDATA[Re: Programowy PWM - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103840#p103840"><![CDATA[
Witam<br /><div class="quotetitle">antheri napisał(a):</div><div class="quotecontent"><br />Taktowanie 11059200 Hz ( 11059200/1024/108/100 = 100 Hz)<br /></div><br />Ja bym jeszcze raz zrobił te obliczenia  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .<br />Wgrałem to co podałeś i przy innym preskalerze działa.<br />Z drugiej strony po co to liczyć, przeważnie daje się bez podziału lub z małym podziałem i &quot;po ptokach&quot; <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 13 lis 2014, o 20:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gumeni]]></name></author>
<updated>2014-11-13T17:59:57+01:00</updated>
<published>2014-11-13T17:59:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103770#p103770</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103770#p103770"/>
<title type="html"><![CDATA[Re: Programowy PWM - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103770#p103770"><![CDATA[
Spróbuj tak: <br />  [syntax=c]ISR(TIMER2_COMP_vect) // 100Hz<br />    {<br />    static uint8_t tic;<br /><br />      tic--;<br />     <br />    if(pwm&gt;=tic)  PORTB |= (1&lt;&lt;PB0);<br />    else             PORTB &amp;= ~(1&lt;&lt;PB0);<br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3088">gumeni</a> — 13 lis 2014, o 17:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[antheri]]></name></author>
<updated>2014-11-13T17:05:08+01:00</updated>
<published>2014-11-13T17:05:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103760#p103760</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103760#p103760"/>
<title type="html"><![CDATA[Programowy PWM - pytanko]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=9226&amp;p=103760#p103760"><![CDATA[
Witam, mam pewien problem, którego nie potrafię sobie sam wyjaśnić. Otóż piszę sobie programowy PWM, oparty o np Timer2 Atmedze8:<br /><br />[syntax=c]TCCR2 |= (1&lt;&lt;WGM21); // tryb ctc<br />TCCR2 |= (1&lt;&lt;CS20) | (1&lt;&lt;CS21) | (1&lt;&lt;CS22); // preskaler 1024<br />OCR2 = 108; // dodatkowy dzielnik przez 108<br />TIMSK |= (1&lt;&lt;OCIE2); // zezwolenie na przerwanie[/syntax]<br /><br />Obsługa przerwania:<br /><br />[syntax=c]ISR(TIMER2_COMP_vect) // 100Hz<br />{<br />static uint8_t tic;<br />if(!tic)<br />  tic = 100;<br />else<br />  tic--;<br /><br />if(pwm&gt;=tic)  PORTB |= (1&lt;&lt;PB0);<br />else             PORTB &amp;= ~(1&lt;&lt;PB0);<br />}[/syntax]<br /><br />Taktowanie 11059200 Hz ( 11059200/1024/108/100 = 100 Hz)<br /><br />Ten kod oczywiście działa, lecz gdy zastosowałem go np do sterownika taśm rgb, pwm podawany na tranzystory sterujące ledami to widać stałe pulsacje kolorów średnio co ok 2s, jest to uciążliwe i po dłuższym czasie robi się nieprzyjemne. Zwiększenie częstotliwości PWM do nawet 100kHz nie niweluje tego efektu. Nie mam oscyloskopu aby się wpiąć i na żywo zobaczyć generowany przebieg prostokątny. Przy pwm = 0 identycznie zachowuje się sterowany mosfetem silnik DC, tzn on nie pracuje, ale słychać te &quot;przeskoki&quot;.<br /><br />Ma ktoś jakiś pomysł co robię nie tak albo czego nie uwzględniłem?<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1994">antheri</a> — 13 lis 2014, o 17:05</p><hr />
]]></content>
</entry>
</feed>