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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2019-06-22T17:32:59+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=22350&amp;mode</id>
<entry>
<author><name><![CDATA[xentis]]></name></author>
<updated>2019-06-22T17:32:59+01:00</updated>
<published>2019-06-22T17:32:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22350&amp;p=219913#p219913</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22350&amp;p=219913#p219913"/>
<title type="html"><![CDATA[Re: Timer programowy + pwm]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22350&amp;p=219913#p219913"><![CDATA[
<div class="quotetitle">Tokio518 napisał(a):</div><div class="quotecontent"><br />Użyłem timerów programowych, ale gdy działa pwm nie działa timer i na odwrót.<br /></div>A ciekawe skąd czerpiesz takie informacje? Tryb pracy pwm absolutnie nie wyklucza wykonywania przerwań od przepełnienia czy porównania jeśli warunki ich wywołania są spełnione (a przy zwykłym fastPWM w którym to trybie licznik liczy do przepełnienia to zarówno występuje i porównanie i przepełnienie).<br />Natomiast używanie makra &quot;ISR_NOBLOCK&quot;  bez bardzo dobrej znajomości mechanizmu działania przerwań to proszenie się o kłopoty...<br />Zamiast rozbijania tego na dwa przerwania nie lepiej wszystko upchnąć do jednego, bez stosowania tego makra?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=6265">xentis</a> — 22 cze 2019, o 17:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tokio518]]></name></author>
<updated>2019-06-21T08:04:45+01:00</updated>
<published>2019-06-21T08:04:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=22350&amp;p=219874#p219874</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=22350&amp;p=219874#p219874"/>
<title type="html"><![CDATA[Timer programowy + pwm]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=22350&amp;p=219874#p219874"><![CDATA[
Buduje sterownik RGB przez bluetooth. Potrzebuje zrobić mruganie diody o określonej wartości pwm prze określoną wartości mrugania. Użyłbym delay, ale nie chce mieć opóźnienia w komunikacji. Użyłem timerów programowych, ale gdy działa pwm nie działa timer i na odwrót. W ustawianiu rejestrów i używaniu timerów jestem mało doświadczony, więc ustawiłem na tyle ile umiałem też trochę podpowiedzi z internetu wziąłem. Narazie program jest bardzo testowy nie ma komunikacji, pwm i timer mają stałe wartości. Używam timer0 i timer2, ale może być użyty także 16 bitowy timer1. Prosiłbym o rozwiązanie problemu z mruganiem diody przez timer programowy o określonej wartości pwm. Z góry dziękuję za pomoc.[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />volatile uint8_t pwm1;<br />volatile uint16_t Timer1;<br /><br />int main( void ) {<br /><br />TCCR0 |= (1&lt;&lt;WGM01)|(1&lt;&lt;WGM00);<br />TCCR0 |= (1&lt;&lt;COM01);<br />TCCR0 |= (1&lt;&lt;CS00);<br />OCR0 = 199;<br />TIMSK |= (1&lt;&lt;OCIE0);<br /><br /><br />TCCR2 |= (1&lt;&lt;WGM21);<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);<br />OCR2  = 108;<br />TIMSK |= (1&lt;&lt;OCIE2);<br /><br />DDRC |= (1&lt;&lt;PC6);<br /><br /><br /><br />sei();<br /><br />while(1) {<br /><br />if( !Timer1 ) {<br />        Timer1=50;<br />pwm1=20;<br />}<br /><br />}<br /><br />}<br /><br />ISR( TIMER0_COMP_vect, ISR_NOBLOCK ) {<br /><br />    static uint8_t cnt;<br /><br />    if(cnt&gt;=pwm1) PORTC |= (1&lt;&lt;PC6); else PORTC &amp;= ~(1&lt;&lt;PC6);<br /><br />    cnt++;<br /><br /><br />}<br /><br /><br />ISR( TIMER2_COMP_vect, ISR_NOBLOCK ) {<br /><br />    uint16_t n;<br /><br />    n = Timer1;<br />    if (n) Timer1 = --n;<br /><br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=20050">Tokio518</a> — 21 cze 2019, o 08:04</p><hr />
]]></content>
</entry>
</feed>