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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-02-07T22:43:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14452&amp;mode</id>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-02-07T22:43:47+01:00</updated>
<published>2016-02-07T22:43:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14452&amp;p=153033#p153033</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14452&amp;p=153033#p153033"/>
<title type="html"><![CDATA[Dziwny problem z PWM]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14452&amp;p=153033#p153033"><![CDATA[
Witam.<br />Próbuję ustawić na Timerze 2 programowy pwm do diody. Chcę, żebyczęstotliwość pwm wynosiła ok 50Hz, więc wyliczam:<br />f=11059200/8/28/1024=48 Hz. <br />Gdy wpisuje to w programie to dioda miga tylko pojedynczym błyśnięciem mniej więcej raz na minutę. Wie ktoś może o co chodzi? Wstawiam kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />volatile uint16_t pwm;<br /><br />int main(void){<br /><br />//ustawienie pinów timera programowego jako wyjscia<br />DDRD |= (1&lt;&lt;PD5);<br />PORTD &amp;= ~(1&lt;&lt;PD5);<br /><br />//Inicjalizacja Timer2<br />TCCR2 |= (1&lt;WGM21);//tryb CTC<br />TCCR2 |= (1&lt;&lt;CS21);//preskaler 8<br />OCR2 = 27;//dodatkowy podzial przez 28<br />TIMSK |= (1&lt;&lt;OCIE2); //zezwolenie na rzerwanie Compare Match<br />// przerwanie z częstotliwością 49371 Hz<br />sei();//globalne przerwania<br /><br />pwm = 10;<br /><br />while(1){<br /><br />}<br />}[/syntax]<br />[syntax=c]ISR(TIMER2_COMP_vect){<br />static uint16_t cnt;//rozdzielczosc 10 bit - 50 Hz<br />if(cnt &gt;= pwm) PORTD |= (1&lt;&lt;PD5); else PORTD &amp;= ~(1&lt;&lt;PD5);<br />cnt++;<br />        if(cnt &gt; 1023) cnt = 0;<br />}[/syntax]<br /><br />Być może problem jest banalny, proszę o pomoc.<br /><br />Edit:<br />Dodam jeszcze, że zmiana rejestru OCR2 z 1 na 255 nie powoduje żadnej zmiany częstotliwości.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 43 minutach ]</span></strong><br /><br />Problem rozwiązany. W linijce z ustawieniem trybu pracy timera dałem o jeden znaczek mniej:<br />[syntax=c]TCCR2 |= (1&lt;WGM21);[/syntax]<br />Powinno być:<br />[syntax=c]TCCR2 |= (1&lt;&lt;WGM21);[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 7 lut 2016, o 22:43</p><hr />
]]></content>
</entry>
</feed>