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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-06-30T21:23:29+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=8&amp;t=7624&amp;mode</id>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-06-30T21:23:29+01:00</updated>
<published>2014-06-30T21:23:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86265#p86265</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86265#p86265"/>
<title type="html"><![CDATA[Re: Timer1 - przerwania OCR i OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86265#p86265"><![CDATA[
Jeśli ustawisz Timer w tryb Normal to możesz korzystać z przerwania od przepełnienia (Overflow) jak i z przerwania od porównania (Compare Match). Z tym, że obydwa przerwania będą wywoływane co taki sam odcinek czasu.<br />Krótki przykład: Atmega8, taktowanie 8MHz.<br />Timer1 ustawiony w tryb Normal, preskaler 256, odblokowane przerwania Overflow i Compare Match.<br />[syntax=c]//tryb Normal<br />TCCR1B |= (1&lt;&lt;CS12);//preskaler 256<br />OCR1A = 32768;<br />TIMSK |= (1&lt;&lt;OCIE1A) | (1&lt;&lt;TOIE1);//odblokowanie przerwań Compare Match i Overflow[/syntax]<br />W tym przypadku przerwanie Overflow będzie wywoływane co ok. 2 sekundy, ale przerwanie Compare Match też będzie wywoływane co 2 sekundy. Niezależnie od wartości w OCR1A. Zmiana wartości OCR1A będzie powodować to, że obydwa przerwania będą wywoływane w różnej odległości czasowej między sobą. <br />Czyli przy wartości OCR1A równej ok. 32768 (połowa pojemności Timera1) przerwanie Compare Match będzie wywoływane w połowie czasu między przerwaniem Overflow. <br />Przetestuj poniższy program z różnymi wartościami OCR1A a zobaczysz o co chodzi <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 />#define LED1 (1&lt;&lt;PC6)<br />#define LED2(1&lt;&lt;PC7)<br /><br /><br />int main(void)<br />{<br /><br />DDRC |= LED1 | LED2;//wyjścia<br />_delay_ms(500);<br />PORTC |= LED1 | LED2;//wygaszenie diod<br /><br />//tryb Normal<br />TCCR1B |= (1&lt;&lt;CS12);//preskaler 256<br />OCR1A = 32768;<br />TIMSK |= (1&lt;&lt;OCIE1A) | (1&lt;&lt;TOIE1);//odblokowanie przerwań Compare Match i Overflow<br /><br />sei();<br /><br />while(1)<br />{<br /><br />}<br />}<br /><br />//przerwanie wywoływane co ok. 2 sekundy<br />ISR(TIMER1_OVF_vect)<br />{<br />PORTC ^= LED1;<br />}<br /><br />//przerwanie wywoływane również co ok. 2 sekundy<br />//ale w różnej odległości czasowej od przerwania Overflow<br />ISR(TIMER1_COMPA_vect)<br />{<br />PORTC ^= LED2;<br />}[/syntax]<br /><br />Przy ustawieniu Timera w tryb CTC przerwanie Overflow nie będzie się wykonywać bo po zrównaniu się licznika z rejestrem OCR wartość licznika TCNT zostaje wyzerowana. A przerwanie Overflow jest wywoływane przy przejściu licznika z wartości MAX do zera.<br /><br />Z przerwania Overflow można również korzystać wtedy gdy Timer pracuje w trybie PWM.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 30 cze 2014, o 21:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Zaba]]></name></author>
<updated>2014-06-30T20:43:24+01:00</updated>
<published>2014-06-30T20:43:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86252#p86252</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86252#p86252"/>
<title type="html"><![CDATA[Re: Timer1 - przerwania OCR i OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86252#p86252"><![CDATA[
Na ile mój angielski jest (po prostu pisząc słaby <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />)<br /><br />to tutaj Cię informuje nota że do generowania<br />jakiś określonych przebiegów (waveform) nie jest<br />zalecane używanie trybu &quot;Normal&quot; ponieważ spowoduje to<br />zajmujcie zbyt dużo czasu uC.<br />Natomiast do generowania przerwań jak najbardziej Tak<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1044">Zaba</a> — 30 cze 2014, o 20:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Człowiek_Zlew]]></name></author>
<updated>2014-06-30T19:10:45+01:00</updated>
<published>2014-06-30T19:10:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86195#p86195</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86195#p86195"/>
<title type="html"><![CDATA[Re: Timer1 - przerwania OCR i OVF]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7624&amp;p=86195#p86195"><![CDATA[
Wy przerwaniu tworzysz dwie zmienne i każde zwiększasz o jeden, i musisz policzyć do ilu musi się zwiększyć zmienna aby twój warunek był spełniony.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2106">Człowiek_Zlew</a> — 30 cze 2014, o 19:10</p><hr />
]]></content>
</entry>
</feed>