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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-10-19T16:20:53+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13202&amp;mode</id>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-19T16:20:53+01:00</updated>
<published>2015-10-19T16:20:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142836#p142836</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142836#p142836"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142836#p142836"><![CDATA[
No ciekawie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Być może trzeba będzie właśnie tym układem się zainteresować <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Dzięki!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 19 paź 2015, o 16:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-10-18T21:30:46+01:00</updated>
<published>2015-10-18T21:30:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142814#p142814</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142814#p142814"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142814#p142814"><![CDATA[
Jeśli chcesz obsłużyć aż tyle serw to może zainteresuj się tym <a href="http://www.sunduino.pl/wordpress/992-kanalowy-sterownik-serw/"  class="postlink">992-kanałowy sterownik serwomechanizmów</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 18 paź 2015, o 21:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-17T14:38:31+01:00</updated>
<published>2015-10-17T14:38:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142681#p142681</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142681#p142681"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142681#p142681"><![CDATA[
Sprawdzam dla kwarcu 16Mhz i przerwań co 100kHz<br />[syntax=c]//testy dla 16Mhz<br />//TIMER 0<br />TCCR0 |=(1&lt;&lt;WGM01);//tryb ctc<br />TCCR0 |=(1&lt;&lt;CS01);//prescaler 8<br />OCR0 = 19;//100kHz<br /><br />TIMSK |= (1&lt;&lt;OCIE0);//wlaczenie przerwania <br /><br />//TIMER 1<br /><br />TCCR1B |= (1&lt;&lt;WGM12);   //Tryb CTC<br />TCCR1B |= (1&lt;&lt;CS11);//prescaler8<br />    OCR1B = 19;<br />    OCR1A = 19;//preskalera 8<br /><br />    TIMSK |= (1&lt;&lt;OCIE1A) | (1&lt;&lt;OCIE1B);       // zezwolenie na przerwanie CompareMatch<br /><br />//TIMER 2<br />TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />TCCR2 |= (1&lt;&lt;CS21);<br />OCR2=19;<br />TIMSK |= (1&lt;&lt;OCIE2);<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />static uint16_t cnt;<br />if(++cnt &gt;= 100000)//zerowanie licznika<br />{<br />PORTC ^= LED1;<br />cnt = 0;<br />}<br />}<br /><br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint16_t cnt;<br />if(++cnt &gt;= 100000)//zerowanie licznika<br />{<br />PORTC ^= LED2;<br />cnt = 0;<br />}<br />}<br /><br />ISR(TIMER1_COMPB_vect)<br />{<br />static uint16_t cnt;<br />if(++cnt &gt;= 100000)//zerowanie licznika<br />{<br />PORTC ^= LED3;<br />cnt = 0;<br />}<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />static uint16_t cnt;<br />if(++cnt &gt;= 100000)//zerowanie licznika<br />{<br />PORTC ^= LED4;<br />cnt = 0;<br />}<br />}[/syntax]<br /><br />I co widzę, dla prescalera /8 coś idzie wyciągnąć (max dla 60kHz - działały wszystkie przerwania, dla prescalera/1 już praktycznie nic nie działa.<br /><br />Zastanawiam się czy nie dałoby się tego jakoś inaczej rozwiązać. Dla 60kHz osiągnę około 70 możliwych pozycji dla serw. Mało troszkę.<br />W tygodniu będę mógł sprawdzić działanie dla kwarców 14,7 oraz 18,4 MHz- tym sprzyjającym UARTowi - tylko czy przetaktowanie procka wchodzi w grę?<br /><br /><div class="quotetitle">jacekk232 napisał(a):</div><div class="quotecontent"><br />Ale najlepiej będzie jak napiszesz co chcesz osiągnąć, że ci jest potrzebna taka duża częstotliwość przerwań. Może wtedy się okaże, że nie tędy droga.<br /></div><br />Może rzeczywiście nie tędy droga i można to ruszyć w jakiś inny sposób. Ale jak na razie nic lepszego nie wymyśliłem ;p<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 17 paź 2015, o 14:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-17T11:07:55+01:00</updated>
<published>2015-10-17T11:07:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142675#p142675</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142675#p142675"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142675#p142675"><![CDATA[
Bingo. Do tego doszedłem wczoraj wieczorem.<br />Sprawdziłem to sobie na diodach - po prostu timer w przerwaniu zwiększał licznik do danej wartości i po doliczeniu zmieniał stan diody i zerował licznik.<br />Sprawdziłem dla przerwania 10kHz, 20kHz oraz 30kHz - wszystko działało. Natomiast dla większych - już nie. Wtedy zapaliłą się lampka i domyśliłem się o co chodzi.<br />Planuję wrzucić kwarc 16Mhz, powinien dać radę.<br />A do czego mi ta częstotliwość przerwań?<br />Do sterowania serw.<br />Każdy z timerów (odmierzający 100kHz) ma za zadanie obsłużyć 6 serwomechanizmów.<br />Większa częstotliwośc przerwań pozwala mi uzyskać większą dokładność ustawiania tych serw. W przypadku 100kHz otrzymam około 130-150 możliwych do uzyskania pozycji. (dla przykładu dla częstotliwości przerwań 200KHz liczba możliwych pozycji to 260-300) Ostatni timer ma odmierzać czas który pozwala na &quot;wybór&quot; obsługiwanego serwa. Tym sposobem w ciągu okresu dla działania serw (20ms) obsłużę 6 serw -przerwanie co 20ms/6=3,333ms. (możliwe jest max 8 może 9 serw dla każdego timera - czyli dla atmegi 16 mogę tym sposobem obsłużyć do 24serw lub nawet 27 dla 24 serw przerwanie na ostatnim timerze wykonywałoby się co 2,5ms (bo 20ms/8=2,5ms)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 17 paź 2015, o 11:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2015-10-16T23:10:56+01:00</updated>
<published>2015-10-16T23:10:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142665#p142665</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142665#p142665"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142665#p142665"><![CDATA[
Wypróbowałem ten program na Atmedze32<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED1 (1&lt;&lt;PC2)<br />#define LED2 (1&lt;&lt;PC3)<br />#define LED3 (1&lt;&lt;PC4)<br />#define LED4 (1&lt;&lt;PC5)<br /><br />int main(void)<br />{<br />DDRC |= LED1 | LED2 | LED3 | LED4;<br /><br />      //ustawienie stanu wysokiego<br />      PORTC |= LED1 | LED2 | LED3 | LED4;<br /><br /><br />      //2,5ms<br />      //TIMER 0 400Hz<br />      TCCR0 |=(1&lt;&lt;WGM01);//tryb ctc<br />      TCCR0 |=(1&lt;&lt;CS02);//prescaler 256<br />      OCR0 = 77;<br />      TIMSK |= (1&lt;&lt;OCIE0);//wlaczenie przerwania<br /><br />      //TIMER 1 100.000Hz<br />      TCCR1B |= (1&lt;&lt;WGM12);   //Tryb CTC<br />      TCCR1B |= (1&lt;&lt;CS10);//1<br />      OCR1A = 80;<br />      OCR1B = 79;<br />      TIMSK |= (1&lt;&lt;OCIE1A) | (1&lt;&lt;OCIE1B);       // zezwolenie na przerwanie CompareMatch<br /><br />      //TIMER 2 100.000Hz<br />      TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />      TCCR2 |= (1&lt;&lt;CS20);//clk=8 000 000 ,PRESKALER 1<br />      OCR2=79;<br />      TIMSK |= (1&lt;&lt;OCIE2);//zezwolenie na przerwanie<br /><br />      sei();<br />      while(1);<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />      PORTC ^= LED1;//to tylko do testów<br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />      PORTC ^= LED2;//to tylko do testów<br />}<br /><br />ISR(TIMER1_COMPB_vect)<br />{<br />      PORTC ^= LED3;//to tylko do testów<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />      PORTC ^= LED4;//to tylko do testów<br />}[/syntax]<br /><br />Przerwanie Timer2_COMP, które posiada najwyższy priorytet, wykonuje się prawie w równych odcinkach czasu. Prawie bo co kilka przerwań następuje wydłużenie czasu zgłoszenia następnego przerwania.<br /><br />Przerwanie Timer1_COMPA (niższy priorytet niż Timer2_COMP) wykonuje się mniej regularnie, przerwanie Timer1_COMPB jeszcze mniej regularnie i z dużo mniejszą częstotliwością.<br />Natomiast przerwanie Timer0_COMP (najmniejszy priorytet) wcale się nie wykonuje.<br /><br />Ale wystarczyło zwiększyć preskaler Timera2 i Timera1 z 1 na 8 i wszystkie przerwania zaczęły ładnie się wykonywać.<br /><br />Z tego wynika, że trochę przesadziłeś z tymi 100kHz. Może gdybyś zwiększył taktowanie np. do 20MHz to miałoby to szansę zadziałać. <br /><br />Ale najlepiej będzie jak napiszesz co chcesz osiągnąć, że ci jest potrzebna taka duża częstotliwość przerwań. Może wtedy się okaże, że nie tędy droga.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 16 paź 2015, o 23:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-10-16T17:36:37+01:00</updated>
<published>2015-10-16T17:36:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142637#p142637</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142637#p142637"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142637#p142637"><![CDATA[
<div class="quotetitle">grochal7 napisał(a):</div><div class="quotecontent"><br />Wydaje się ok?<br /></div><br />Ty zadajesz pytania na forum? czy zagadki ?<br /><br />Proponuję zadawać pytania - czyli najpierw SAM sprawdź a później zadaj pytanie a nie odwrotnie ... bo później będziesz się dziwił, dlaczego nikt mi nie odpisuje ....<br /><br />szanuj swój czas i czas innych ok ?<br /><br />Jak sprawdzisz to wtedy napisz ....<br /><br />a jak chcesz więcej timerów sprzętowych to nie mówi mi, że nie wiesz co się robi ? .... bierze się procek , który ma ich więcej - np ATmega128 albo nawet ATmega1284P jeśli ma być w obudowie takiej jak ATmega16<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 paź 2015, o 17:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-16T17:11:32+01:00</updated>
<published>2015-10-16T17:11:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142635#p142635</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142635#p142635"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142635#p142635"><![CDATA[
Ok, wróciłem do siebie, niestety nie mam w tej chwili możliwości sprawdzenia działania - nie mam oscyloskopu ;/<br />Poniżej kod konfiguracji 3 timery kanały A w CTC:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED1 (1&lt;&lt;PC2)<br />#define LED2 (1&lt;&lt;PC3)<br />#define LED3 (1&lt;&lt;PC4)<br /><br />int main(void)<br />{<br />        //ustawienie kanałów pwm jako wyjcia<br />DDRC |= LED1 | LED2 | LED3 | LED4;<br /><br />//ustawienie stanu wysokiego<br />PORTC |= LED1 | LED2 | LED3 | LED4;<br />sei();// globalne odblokowanie przerwań<br /><br />//TIMER 0 400Hz<br />TCCR0 |=(1&lt;&lt;WGM01);//tryb ctc<br />TCCR0 |=(1&lt;&lt;CS02);//prescaler 256<br />OCR0 = 79;<br />TIMSK |= (1&lt;&lt;OCIE0);//wlaczenie przerwania<br /><br />//TIMER 1 100.000Hz<br />TCCR1B |= (1&lt;&lt;WGM12);   //Tryb CTC<br />TCCR1B |= (1&lt;&lt;CS10);//1<br />OCR1A = 79;<br /><br />        TIMSK |= (1&lt;&lt;OCIE1A);       // zezwolenie na przerwanie<br /><br />//TIMER2 100.000Hz<br />TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />TCCR2 |= (1&lt;&lt;CS20);//clk=8 000 000 ,PRESKALER 1<br />OCR2=79;<br /><br />TIMSK |= (1&lt;&lt;OCIE2); //wlaczenie przerwania <br /><br />while(1){}<br />}<br />ISR(TIMER0_COMP_vect)<br />{<br />PORTC ^= LED1;<br />}<br /><br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />PORTC ^= LED2;<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />PORTC ^= LED3;<br />}[/syntax]<br /><br />Wydaje się ok?<br /><br />3 timery nie wystarczą, zdecydowanie potrzebuję - tak jak pisałem wcześniej - 3x przerwanie co 100 000Hz oraz jedno co 400 Hz.<br />W jaki sposób dodać kolejny kanał do timera 1?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 16 paź 2015, o 17:11</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-10-16T15:05:27+01:00</updated>
<published>2015-10-16T15:05:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142626#p142626</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142626#p142626"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142626#p142626"><![CDATA[
zrozum - w KAŻDYM timerze kanały A i B są od siebie zależne i nie można w pełni wykorzystać kanału B<br /><br />Więc na spokojnie - jak ci pasują 3 timery z kanałem A w CTC to przygotuj najprostszy kod <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> i go pokaż a nie opisuj ....<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 paź 2015, o 15:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-16T14:29:16+01:00</updated>
<published>2015-10-16T14:29:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142623#p142623</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142623#p142623"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142623#p142623"><![CDATA[
Ok, każdy z timerów konfigurowałem pojedynczo. Osobno timer0 osobno timer1 (kanały A i B) i osobno timer2. Działają prawidłowo- każdy z osobna. Także timer1, którego kanały a i b są wzgledem siebie zależne. Problem polega na tym, że gdy łącze kod z konfiguracji timerów (ten działający) w jeden - coś nie trybi. Jak wroce do siebie wstawie raz jeszcze cały kod, który umieszczony jest też wyżej.<br />Napisane z fona<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Połączyłem też timer 0 i timer 1. Działają prawidłowo. Dopiero po dołączeniu timera2 zaczynają się problemy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 16 paź 2015, o 14:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-10-16T13:37:19+01:00</updated>
<published>2015-10-16T13:37:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142620#p142620</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142620#p142620"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142620#p142620"><![CDATA[
Panie - nie ma w procku ATmega16 czterech niezależnych timerów sprzętowych i nigdy ich nie uzyskasz ... tak sobie myślę, że może coś ci się pomyliło ?<br /><br />Dlatego zrewiduj swoje założenia<br /><br /><div class="quotetitle">grochal7 napisał(a):</div><div class="quotecontent"><br />Podkreślam, że np gdy uruchamiam timer0 lub timer2 oddzielnie to działa - gdy uruchamiam oba timery razem to nie dziala. Działa/nie działa znaczy, ze dioda nie świeci we właściwy sposób. jedna z nich po prostu gaśnie.<br /></div><br /><br />Ja ci proponuję działać SPOKOJNIE i po kolei - a nie rzucasz kod do sterowania milionem timerów a pytasz o problem z dwoma które ci jak mówisz nie działają ....<br /><br />Zacznij od TYLKO tych dwóch, pokaż co robisz - prosty przejrzysty kod - a nie takie jak wyżej jakieś (sorki masakry <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... ) gdzie pełno pokomentowanych rzeczy i weź tu się domyślaj co jest dobrze a co nie<br /><br />przy dwóch timerach Timer0 i Timer2 WSZYSTKO MUSI działać <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> od tego zacznij jak mówię i rozwiązuj problem po kolei<br /><br />Później pójdziesz po Timer1 - tylko doczytaj sobie nawet na tym forum, było już po stokroć poruszane zagadnienie związane z kanałem B, którego ty próbujesz używać jako niezależnego CTC ... nie zaglądając przy okazji też do noty o co chodzi w tym przypadku. Ale jak mówię po kolei a nie wszystko naraz bo tylko się bałagan robi w wątku i nikt nie wie o co chodzi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 16 paź 2015, o 13:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-16T11:37:37+01:00</updated>
<published>2015-10-16T11:37:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142602#p142602</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142602#p142602"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142602#p142602"><![CDATA[
<div class="quotetitle">KoreX napisał(a):</div><div class="quotecontent"><br />Masz zdefiniowany dobry procesor w ustawieniach projektu?<br /></div><br />Oczywiście.<br /><br />Teraz ustawiłem timer2 w ten sposób:<br />[syntax=c]//TIMER 2<br />TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />//TCCR2 |= (1&lt;&lt;CS20) | (1&lt;&lt;CS21) | (1&lt;&lt;CS22);//clk=8 000 000 ,PRESKALER 1024<br />TCCR2 |= (1&lt;&lt;CS20);//clk=8 000 000 ,PRESKALER 1<br />//OCR2=79;//dla 2000 mam 130 pozycji prawdopodobnie od 70 do 200<br />OCR2 |= 01001111;<br />//Przerwanie wykonuje się co 10ms=0.00001s czyli z częstotliwościa 100.000Hz<br />TIMSK |= (1&lt;&lt;OCIE2);[/syntax]<br />Troszkę się pozmieniało...<br />Wszystkie przerwania działają, jednak częstotliwości trochę nie tak jak trzeba..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 16 paź 2015, o 11:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[KoreX]]></name></author>
<updated>2015-10-16T11:26:26+01:00</updated>
<published>2015-10-16T11:26:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142601#p142601</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142601#p142601"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142601#p142601"><![CDATA[
Masz zdefiniowany dobry procesor w ustawieniach projektu?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=229">KoreX</a> — 16 paź 2015, o 11:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-16T11:00:07+01:00</updated>
<published>2015-10-16T11:00:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142599#p142599</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142599#p142599"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142599#p142599"><![CDATA[
Opadają ręce, wciąż ten timer ;/<br />Jak włączam przerwania timera2 to timer0 przestaje działać...<br />Jak nie mam uruchomionego timera2 to timer0 oraz 1 działają bez zarzutu..<br />Czyżbym źle je konfigurował?<br />[syntax=c]//2,5ms<br />//konfiguracja timerów<br />//TIMER 0 400Hz<br />TCCR0 |=(1&lt;&lt;WGM01);//tryb ctc<br />TCCR0 |=(1&lt;&lt;CS02);//prescalerr 256<br />OCR0 = 77;<br />TIMSK |= (1&lt;&lt;OCIE0);//wlaczenie przerwania <br /><br />//TIMER1 100.000Hz<br /><br />TCCR1B |= (1&lt;&lt;WGM12);   //Tryb CTC<br />TCCR1B |= (1&lt;&lt;CS10);//1<br />        OCR1B = 79;<br />        OCR1A = 80;<br /><br />        TIMSK |= (1&lt;&lt;OCIE1A) | (1&lt;&lt;OCIE1B);       // zezwolenie na przerwanie <br /><br /><br />//TIMER 2 100.000Hz<br />TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />TCCR2 |= (1&lt;&lt;CS20);//clk=8 000 000 ,PRESKALER 1<br />OCR2=79;<br />//Przerwanie wykonuje się co 10ms=0.00001s czyli z częstotliwościa 100.000Hz<br />TIMSK |= (1&lt;&lt;OCIE2);<br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />PORTC ^= LED1;//to tylko do testów<br />}<br /><br /><br />ISR(TIMER1_COMPA_vect)<br />{//odmierza czas 2,5ms<br />PORTC ^= LED2;//to tylko do testów<br />}<br /><br />ISR(TIMER1_COMPB_vect)<br />{//obsluguje serwa 7-12<br />PORTC ^= LED3;//to tylko do testów<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{//obsluguje serwa 13-18<br />PORTC ^= LED4;//to tylko do testów<br />}[/syntax]<br /><br />Przebiegi sprawdzam na oscyloskopie..<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 16 paź 2015, o 11:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-14T15:02:00+01:00</updated>
<published>2015-10-14T15:02:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142400#p142400</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142400#p142400"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142400#p142400"><![CDATA[
Dość ciekawa sytuacja spotkała mnie podczas ustawiania timerów.<br />Miałem dziś dostęp do oscyloskopu i sprawdzałem czasy jakie generują timery.<br />I zaskok, bo zdarzały się takie sytuacje- gdy ustawiałem timer1 zmieniały się czasy timera 0 czy też timera2.<br /><br />Może tak, potrzebuję ustawić 3 przerwania na 100kHz oraz jedno na około 400Hz.<br />poniżej mój kod (który nie do końca działą, ten timer 1...)<br />konfiguracja timerów:<br />[syntax=c]//TIMER 0<br />TCCR0 |=(1&lt;&lt;WGM01);//tryb ctc<br />TCCR0 |=(1&lt;&lt;CS00);//prescaler 1<br />OCR0 = 79;//100kHz<br /><br />//TIMER 1<br /><br />TCCR1B |= (1&lt;&lt;WGM12);   //Tryb CTC<br />TCCR1B |= (1&lt;&lt;CS10);//1<br />OCR1A = 19999; //400Hz<br />OCR1B = 79;//100kHz<br /><br />//TIMER 2<br />TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />TCCR2 |= (1&lt;&lt;CS20);//clk=8 000 000 ,PRESKALER 1<br />OCR2=79;//dla 2000 mam 130 pozycji prawdopodobnie od 70 do 200<br /><br />        //wlaczenie przerwań<br />TIMSK |= (1&lt;&lt;OCIE0) | (1&lt;&lt;OCIE1A) | (1&lt;&lt;OCIE1B) | (1&lt;&lt;OCIE2);[/syntax]<br /><br />przerwania:<br />[syntax=c]ISR(TIMER0_COMP_vect)<br />{<br />PORTC ^= LED1;<br /><br />}<br /><br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />PORTC ^= LED2;<br /><br />}<br /><br />ISR(TIMER1_COMPB_vect)<br />{<br />PORTC ^= LED3;<br />}<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />PORTC ^= LED4;<br /><br />}[/syntax]<br /><br />Podkreślam, ze sprawdzałem to na oscyloskopie a nie na diodach ^^<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 10 minutach ]</span></strong><br /><br />Wiem, że sporo osób ma problem z tym timerem1.<br />Wiem, że OCRA1 powinno być większe od OCRB1.<br />W sumie to nie do końca tak byłoby... <br />Skoro licznik timera1 liczy to po jakimś tam czasie wykona się jedno przerwanie(dajmy t1), on liczy dalej i wykona sie drugie przerwanie(dajmy t2 od poprzedniego przerwania - więc w sumie t1+t2). Więc pierwsze przerwanie nie wykona się po czasie t1 tylko również po czasie t1+t2? (oczywiście t1, t2 to czas 1, czas 2)<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 15 minutach ]</span></strong><br /><br /><a href="https://obrazkiforum.atnel.pl/5293/6029221db55e7a25ced4e68c510f0258.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/5293/6029221db55e7a25ced4e68c510f0258.png" alt="Obrazek" /></a><br />W sensie coś takiego?<br />A może inaczej zrobić...<br />Na timerze 1 zrobić dwa przerwania 100kHz, na tiumerze 0 kolejne 100kHz a na timerze 2 400Hz?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 14 paź 2015, o 15:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-12T20:54:44+01:00</updated>
<published>2015-10-12T20:54:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142241#p142241</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142241#p142241"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142241#p142241"><![CDATA[
Ups...<br />Liczę tu jeszcze raz a tu błędzik!<br />Zamiast preskalera 1024 wrzuciłem 1 i oto problem...<br />Czyli to już rozwiązane.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 12 paź 2015, o 20:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anonimowy]]></name></author>
<updated>2015-10-12T20:43:18+01:00</updated>
<published>2015-10-12T20:43:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142238#p142238</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142238#p142238"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142238#p142238"><![CDATA[
Ale tak na logikę, ustalasz prescaler na 1, ładujesz wartość 3 do rejestru OCR. Policz, z jaką częstotliwością będzie wywoływane przerwanie? Teraz zastanów się, ile będzie trwała Twoja procedura obsługi przerwania? Czy widzisz coś nie tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3542">anonimowy</a> — 12 paź 2015, o 20:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elsat1]]></name></author>
<updated>2015-10-12T20:33:02+01:00</updated>
<published>2015-10-12T20:33:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142237#p142237</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142237#p142237"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142237#p142237"><![CDATA[
Wydaje mi się, że chodzi o jakieś priorytety (priorytety to raczej w przerwaniach zewnętrznych).<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=151">elsat1</a> — 12 paź 2015, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-12T19:40:28+01:00</updated>
<published>2015-10-12T19:40:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142229#p142229</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142229#p142229"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142229#p142229"><![CDATA[
To tylko testy, potem wykorzystam to do innego celu, gdzie konieczne będą 4 niezależne timery.<br /><br />No to pokazuję całość: (chociaż szczerze wątpię że akurat tam jest coś nie tak)<br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;ctc.h&quot;<br /><br />int main(void)<br />{<br />sei();// globalne odblokowanie przerwań<br />OSCCAL = 166;//kalibracja<br /><br />init();<br /><br />while(1)<br />{<br />pwm1=50;<br />pwm2=50;<br />pwm3=50;<br />pwm4=50;<br /><br />}<br />}[/syntax]<br /> ctc.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;ctc.h&quot;<br /><br />void init( void )<br />{<br />//ustawienie kanałów pwm jako wyjcia<br />DDRC |= LED1 | LED2 | LED3 | LED4;<br />//ustawienie stanu wysokiego<br />PORTC |= LED1 | LED2 | LED3 | LED4;<br /><br /><br />//TIMER 0<br />TCCR0 |=(1&lt;&lt;WGM01);//tryb ctc<br />TCCR0 |=(1&lt;&lt;CS00);//prescaler 1<br />//OCR0 = 79;<br />OCR0 = 3;//testowo<br /><br />TIMSK |= (1&lt;&lt;OCIE0);//wlaczenie przerwania Output Compare Match Interrupt Enable<br /><br />//TIMER 1<br />/*<br />TCCR1B |= (1&lt;&lt;WGM12);   //Tryb CTC<br />TCCR1B |= (1&lt;&lt;CS10);<br />    OCR1A = ?<br />    TIMSK |= (1&lt;&lt;OCIE1A);       // zezwolenie na przerwanie CompareMatch<br />*/<br /><br />//TIMER 2<br />TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />TCCR2 |= (1&lt;&lt;CS20);//clk=8 000 000 ,PRESKALER 1<br />OCR2=3;<br />TIMSK |= (1&lt;&lt;OCIE2);<br /><br />}<br /><br /><br />ISR(TIMER0_COMP_vect)<br />{<br />static uint16_t cnt;//licznik kanalow PWM<br />if(cnt&gt;=pwm1) PORTC &amp;= ~LED1; else PORTC |= LED1;<br />if(++cnt &gt;= 2000)<br />{<br />cnt = 0;<br />}<br />}<br /><br />/*<br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint16_t cnt;//,cnt1b;//licznik kanalow PWM<br />if(cnt&gt;=pwm2) PORTC &amp;= ~LED2; else PORTC |= LED2;<br /><br />if(++cnt &gt;= 2000)<br />{<br />cnt = 0;<br />}<br />}<br />*/<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />static uint16_t cnt;//licznik kanalow PWM<br /><br />if(cnt&gt;=pwm4) PORTC &amp;= ~LED4; else PORTC |= LED4;<br /><br />if(++cnt &gt;= 2000)<br />{<br />cnt = 0;<br />}<br />}[/syntax]<br />ctc.h<br />[syntax=c]#ifndef CTC_H_<br />#define CTC_H_<br /><br />#define LED1 (1&lt;&lt;PC2)<br />#define LED2 (1&lt;&lt;PC3)<br />#define LED3 (1&lt;&lt;PC4)<br />#define LED4 (1&lt;&lt;PC5)<br /><br /><br />volatile uint16_t pwm1, pwm2, pwm3, pwm4;<br /><br /><br />void init( void );<br /><br /><br />#endif /* CTC_H_ */[/syntax]<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />Podkreślam, że np gdy uruchamiam timer0 lub timer2 oddzielnie to działa - gdy uruchamiam oba timery razem to nie dziala. Działa/nie działa znaczy, ze dioda nie świeci we właściwy sposób. jedna z nich po prostu gaśnie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 5 minutach ]</span></strong><br /><br />Pod porty pc2-pc5 podpięte mam 4 diody. Chcę powyższym kodem regulować ich jasność. KAŻDĄ DIODĘ INNYM &quot;TIMEREM&quot;. <br />Wiem, że można zrobic to jedyn timerem, ale zależy mi na tej niezależności.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 12 paź 2015, o 19:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-10-12T19:37:00+01:00</updated>
<published>2015-10-12T19:37:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142228#p142228</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142228#p142228"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142228#p142228"><![CDATA[
Witam<br /><div class="quotetitle">grochal7 napisał(a):</div><div class="quotecontent"><br />Może napiszę co chcę zrobić.Chciałbym uruchomić 3 timery...   ... tak aby każdy z timerów kontrolował wypełnienie pwm.<br /></div><br />Jeśli te trzy timer'y chcesz wykorzystać w celach testowych to nie przyglądałem się Twojemu kodowi, lecz jeśli chcesz tylko mieć trzy niezależne kanały PWM to wystarczy Ci jeden timer i w nim umieścić wszystkie trzy kanały.<br />[syntax=c]ISR(TIMER2_COMP_vect)<br /><br />{<br /><br />      static uint8_t cnt;<br /><br />      (cnt&gt;=pwm1)? (OUT_PORT |=LED_1):(OUT_PORT &amp;= ~LED_1);<br /><br />      (cnt&gt;=pwm2)? (OUT_PORT |=LED_2):(OUT_PORT &amp;= ~LED_2);<br /><br />      (cnt&gt;=pwm3)? (OUT_PORT |=LED_3):(OUT_PORT &amp;= ~LED_3);<br /><br />      //(cnt&gt;=pwm4)? (OUT_PORT &amp;= ~LED_4):(OUT_PORT |=LED_4);<br /><br /><br />      cnt++;<br /><br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 12 paź 2015, o 19:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elsat1]]></name></author>
<updated>2015-10-12T19:30:54+01:00</updated>
<published>2015-10-12T19:30:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142226#p142226</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142226#p142226"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142226#p142226"><![CDATA[
Błąd możesz mieć w linijkach kodu, którego nie pokazujesz.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=151">elsat1</a> — 12 paź 2015, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-12T18:44:56+01:00</updated>
<published>2015-10-12T18:44:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142221#p142221</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142221#p142221"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142221#p142221"><![CDATA[
Tak, main to inny plik. w main jest podana wyżej pętla główna<br />[syntax=c]while(1)<br />        {<br />                pwm1=50;<br />                pwm4=50;<br /> <br />        }[/syntax]<br />zezwolenie na przerwania tzn sei(); znajduje się w pliku main.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 9 minutach ]</span></strong><br /><br />Może napiszę co chcę zrobić.<br />Chciałbym uruchomić 3 timery (w tym wykorzystać A oraz B timera1) tak aby każdy z timerów kontrolował wypełnienie pwm.<br />Działanie sprawdzam na diodach, dlatego też wyjścia pwm podpięte są do LED1-LED4.<br />Chcę przy tym, aby były w miarę możliwości niezależne (wiem ze A i B timera1 nie będą tak do końca - ale możliwie jak najbardziej niezależne)<br />PS. Jak trzeba będzie to mogę dołączyć i cały kod. Wydaje mi się, że to co jest wyżej wystarczy do sprawdzenia czy przypadkiem nie robię jakiegoś błędu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 12 paź 2015, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elsat1]]></name></author>
<updated>2015-10-12T18:40:47+01:00</updated>
<published>2015-10-12T18:40:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142220#p142220</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142220#p142220"/>
<title type="html"><![CDATA[Re: Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142220#p142220"><![CDATA[
A gdzie zezwolenie na przerwania ?  A main to inny plik ? Nie bardzo kumam jak to poukładałeś.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=151">elsat1</a> — 12 paź 2015, o 18:40</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[grochal7]]></name></author>
<updated>2015-10-12T18:18:26+01:00</updated>
<published>2015-10-12T18:18:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142219#p142219</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142219#p142219"/>
<title type="html"><![CDATA[Konfiguracja kilku timerów jednocześnie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13202&amp;p=142219#p142219"><![CDATA[
Hej,<br />czy jest jakiś problem z jednoczesnym użyciem timerów 0 1 i 2 na atmedze16?<br />Sam timer 0 działa, sam timer 2 działa a jak uruchamiam timer0 i 2 to już nie bardzo ^^<br />Timerem 1 jescze się nie zająłem ze względu, ze jest troszkę bardziej skomplikowany.<br />Poniżej kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#include &quot;ctc.h&quot;<br /><br />void init( void )<br />{<br />//ustawienie kanałów pwm jako wyjcia<br />DDRC |= LED1| LED2 | LED3 | LED4;<br /><br />//ustawienie stanu wysokiego<br />PORTC |= LED1| LED2 | LED3 | LED4;<br /><br />//TIMER 0<br />TCCR0 |=(1&lt;&lt;WGM01);//tryb ctc<br />TCCR0 |=(1&lt;&lt;CS00);//prescaler 1<br />OCR0 = 3;<br /><br />TIMSK |= (1&lt;&lt;OCIE0);//Output Compare Match Interrupt Enable<br /><br />//TIMER 1<br />/*<br />TCCR1B |= (1&lt;&lt;WGM12);   //Tryb CTC<br />TCCR1B |= (1&lt;&lt;CS11);       //Preskaler  =64<br />    OCR1A = 3;                          // dodatkowy podział częsttotliwości przez 125<br />    TIMSK |= (1&lt;&lt;OCIE1A);       // zezwolenie na przerwanie CompareMatch<br /><br />    //<br />*/<br /><br />//TIMER 2<br />TCCR2 |=(1&lt;&lt;WGM21);//TRYB CTC<br />TCCR2 |= (1&lt;&lt;CS20);//clk=8 000 000 ,PRESKALER 1<br />OCR2=3;//testowo<br />TIMSK |=(1&lt;&lt;OCIE2);<br /><br />}<br /><br />ISR(TIMER0_COMP_vect)<br />{<br />static uint16_t cnt;//licznik kanalow PWM<br />if(cnt0&gt;=pwm1) PORTC &amp;= ~LED1; else PORTC |= LED1;<br />if(++cnt &gt;= 2000)<br />{<br />cnt = 0;<br />}<br />}<br /><br />/*<br />ISR(TIMER1_COMPA_vect)<br />{<br />static uint16_t cnt;;//licznik kanalow PWM<br />if(cnt&gt;=pwm2) PORTC &amp;= ~LED2; else PORTC |= LED2;<br /><br />if(++cnt &gt;= 2000)<br />{<br />cnt = 0;<br />}<br />}<br />*/<br /><br />ISR(TIMER2_COMP_vect)<br />{<br />static uint16_t cnt;//licznik kanalow PWM<br />if(cnt&gt;=pwm4) PORTC &amp;= ~LED4; else PORTC |= LED4;<br /><br />if(++cnt &gt;= 2000)<br />{<br />cnt = 0;<br />}<br />}[/syntax]<br /><br /><br />W mainie po prostu:<br />[syntax=c]while(1)<br />{<br />pwm1=50;<br />pwm4=50;<br /><br />}[/syntax]<br /><br />W przypadku gdy oba timery są ustawione jak powyzej - dioda od timera0 całkiem gaśnie.<br />Gdy konfiguruję każdy z timerów z osobna - działa jak należy - zależnie od wartości pwmx diody świecą jasno lub ciemno.<br />Wydaje mi się, że timery powinny działąć równolegle. ale czemu u mnie nie działają?<br />Ktoś ma jakieś pomysły?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5293">grochal7</a> — 12 paź 2015, o 18:18</p><hr />
]]></content>
</entry>
</feed>