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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-02-18T13:50:31+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14567&amp;mode</id>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2016-02-18T13:50:31+01:00</updated>
<published>2016-02-18T13:50:31+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=154001#p154001</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=154001#p154001"/>
<title type="html"><![CDATA[Re: Pliki nagłówkowe i źródłowe - dziwne zachowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=154001#p154001"><![CDATA[
Witam,<br /><br />Przeczytałem, chyba zrozumiałem, zapamiętałem <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> dziękuję kicajek oraz mirekk36 <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Pozdrawiam<br />Piotr<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 18 lut 2016, o 13:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-02-18T12:35:30+01:00</updated>
<published>2016-02-18T12:35:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153996#p153996</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153996#p153996"/>
<title type="html"><![CDATA[Re: Pliki nagłówkowe i źródłowe - dziwne zachowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153996#p153996"><![CDATA[
Witam<br /><div class="quotetitle">amilo_pa napisał(a):</div><div class="quotecontent"><br />Jeżeli użyję zapisu TIMSK = (1&lt;&lt;OCIE2); to<br /></div><br />...<strong>zapiszę</strong> do rejestru tylko (1&lt;&lt;OCIE2)<br /> <div class="quotetitle">amilo_pa napisał(a):</div><div class="quotecontent"><br />TIMSK |= (1&lt;&lt;OCIE2);<br /></div><br />to <strong>dopiszę</strong>  (1&lt;&lt;OCIE2) do wcześniejszego zapisu.<br />W pierwszym przypadku po ustawieniu <br />[syntax=c]TIMSK |= (1&lt;&lt;OCIE0) <br />//a następnie <br />TIMSK = (1&lt;&lt;OCIE2)[/syntax]<br />pozostawał tylko drugi wpis - (1&lt;&lt;OCIE0) zostawało wyzerowane.<br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 18 lut 2016, o 12:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-02-18T10:13:15+01:00</updated>
<published>2016-02-18T10:13:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153989#p153989</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153989#p153989"/>
<title type="html"><![CDATA[Re: Pliki nagłówkowe i źródłowe - dziwne zachowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153989#p153989"><![CDATA[
<div class="quotetitle">amilo_pa napisał(a):</div><div class="quotecontent"><br />Jeżeli użyję zapisu TIMSK = (1&lt;&lt;OCIE2); to dokonam przesunięcia w lewo całego rejestru TIMSK w lewo<br /></div><br />O żesz sobie kolega teraz wymyślił .... przesunięcie rejestru<br /><br /><img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Widzę, że masz Bluebooka .... więc proszę poczytaj KONIECZNIE o przesunięciach bitowych i jak to działa bo bez zrozumienia tego - będziesz robił jeszcze gorsze kwiatki .... <br /><br />Zrozum - zapis<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">(1&lt;&lt;OCIE2) </div><br /><br />to tylko WYRAŻENIE w języku C ..... więc pierwsze co musisz zrobić to zobaczyć jaka jest jego wartość panie kochany więc jak to zrobić?<br /><br />jaką wartość reprezentuje OCIE2 ? no jak widać z noty 7 a więc mamy zapis<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">(1&lt;&lt;7)</div><br /><br />czyli ile to się równa ? <br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">(1&lt;&lt;7) = 128</div><br /><br />czyli ?<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TIMSK = 127;</div><br /><br />czyli ? czyli ustawiłeś pan bit OCIE2 ale skasowałeś wszystkie inne bity .... i jeśli robisz to po resecie procka to przecież nic się nie stanie bo przecież w TOIE2 było zero<br /><br />ale gdybyś zrobił tak:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TIMSK = (1&lt;&lt;TOIE2);<br />TIMSK = (1&lt;&lt;OCIE2);</div><br /><br />no to najpierw ustawiłbyś bit TOIE2 a w drugiej linijce skasowałbyś TOIE2 a ustawił OCIE2<br /><br />więc aby tego uniknąć warto używać operacji OR czyli<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">TIMSK |= (1&lt;&lt;TOIE2);<br />TIMSK |= (1&lt;&lt;OCIE2);</div><br /><br />oczywiście tu w pierwszej linijce nie jest to konieczne ale ja wolę dla bezpieczeństwa i kosztem małego nadmiaru tak właśnie ustawiać bity<br /><br />a tobie jeszcze raz polecam poczytać o przesunięciach i wyrażeniach w C bo na razie coś jeszcze mocno tego nie rozumiesz ok ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 18 lut 2016, o 10:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2016-02-18T09:28:49+01:00</updated>
<published>2016-02-18T09:28:49+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153987#p153987</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153987#p153987"/>
<title type="html"><![CDATA[Re: Pliki nagłówkowe i źródłowe - dziwne zachowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153987#p153987"><![CDATA[
Dziękuję za tak szybką odpowiedź <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Popraw mnie jeśli źle myślę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Jeżeli użyję zapisu TIMSK = (1&lt;&lt;OCIE2); to dokonam przesunięcia w lewo całego rejestru TIMSK w lewo - czyli w efekcie zepsuje całe ustawienia tego rejestru. Natomiast po użyciu kodu TIMSK |= (1&lt;&lt;OCIE2); efektem będzie wykonanie operacji logicznej OR pomiędzy rejestrem TIMSK a 7 bitem tego rejestru bez naruszenia pozostałych bitów tego rejestru. Dobrze kombinuje? <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br /><img src="https://obrazkiforum.atnel.pl/3824/814a2462a846dd5931dac8f19f1429cc.jpg" alt="Obrazek" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 18 lut 2016, o 09:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2016-02-18T00:04:21+01:00</updated>
<published>2016-02-18T00:04:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153976#p153976</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153976#p153976"/>
<title type="html"><![CDATA[Re: Pliki nagłówkowe i źródłowe - dziwne zachowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153976#p153976"><![CDATA[
Witam<br /><div class="quotetitle">amilo_pa napisał(a):</div><div class="quotecontent"><br />[syntax=c]TIMSK = (1&lt;&lt;OCIE2);[/syntax]<br /></div><br />Tutaj masz błąd.<br />A dla samoedukacji pomyśl dlaczego tak się dzieje jak opisałeś.<br />...no i zrób coś z tymi kolorowymi zdaniami  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 18 lut 2016, o 00:04</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[amilo_pa]]></name></author>
<updated>2016-02-18T09:21:37+01:00</updated>
<published>2016-02-17T23:42:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153972#p153972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153972#p153972"/>
<title type="html"><![CDATA[Pliki nagłówkowe i źródłowe - dziwne zachowanie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14567&amp;p=153972#p153972"><![CDATA[
Witam wszystkich <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Dzisiaj postanowiłem przerobić program z BB tak, aby można było sterować diodami RGB. <br />Podzieliłem główny program main.c na plik źródłowy led.c i nagłówkowy led.h. W pliku nagłówkowym zadeklarowałem funkcję <span style="color: #00BF40">void led_timer0_init (void);</span> odpowiedzialną za ustawienie Timera0 z przerwaniem 1ms, a w pliku źródłowym umieściłem jej definicje.<br />Dodatkowo utworzyłem plik o nazwie keys.c i keys.h i nich ustawiłem drugi timer (Timer2) do obsługi klawiszy (zgodnie z poradnikiem <a href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html"  class="postlink">http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-zwoka-czasowa-cd3.html</a><br /><br />Opis problemu (plik main.c):<br /><br />1. linia <span style="color: #0000FF">led_timer0_init();//zezwolenie na działanie timera PWM</span> znajduje się <strong>przed</strong> linią <span style="color: #0040BF">d_timer2_init();//zezwolenie na działanie funkcji inicjalizującej pracę Timera2</span>  - program nie działa (diody led nie przygasają i nie rozświetlają się)<br /><br />2. linia <span style="color: #0000FF">led_timer0_init();//zezwolenie na działanie timera PWM</span> znajduje się <strong>za</strong> linią <span style="color: #0040BF">d_timer2_init();//zezwolenie na działanie funkcji inicjalizującej pracę Timera2</span>  - program działa (diody led przygasają i rozświetlają się)<br /><br />Dlaczego tak się dzieje? ma znaczenie kolejnośc ustawiania timerów?<br /><br /><br />main.c<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br /><br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;KEYS/keys.h&quot;<br />#include &quot;LED/led.h&quot;<br /><br /><br />// główna funkcja programu main()<br />int main(void)<br />{<br /><br />led_timer0_init();//zezwolenie na działanie timera PWM<br />d_timer2_init();//zezwolenie na działanie funkcji inicjalizującej pracę Timera2<br />key_init(); //inicjalizacja klawiszy i diod<br />led_init();//zezwolenie na działanie diod led jako PWM<br />//d_key_call();//inicjalizacja funkcji wywołującej funkcje obsługu klawiszy<br /><br />_delay_ms(10);<br /><br />sei();// odblokowanie globalne przerwań<br /><br /><br /><br /><br />uint8_t i,flaga_up;// definicja zmiennej i na potrzeby pętli for()<br />flaga_up=0;<br />i=0;<br /><br />while(1)<br />{<br />// pętla rozjaśniająca 3 diody LED<br />if((!Timer4)&amp;&amp;(!Timer3)&amp;&amp;(!flaga_up)){<br />PORTB |= (LED4);<br />pwm1=i;<br />pwm2=i;<br />pwm3=i;<br /><br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />if(i&gt;50) Timer3=3;//podstawa czasu to 1ms<br />else Timer3=10;<br /><br />i++;// inkrementacja wartości mocy świecenia<br /><br />if (i==255){<br />pwm1=255;//maksymalne rozświetlenie diod LED<br />pwm2=255;<br />pwm3=255;<br />flaga_up=1;// ustawienie flagi odpowiedzialnej za osiągnięcie maksymalnej mocy świecena<br />Timer4=500;// rozświetlenie na maksimum przez 500ms<br />}<br />}<br /><br />// pętla stopniowo ściemniająca 3 diody LED<br /><br />if((!Timer4)&amp;&amp;(!Timer3)&amp;&amp; flaga_up){<br />PORTB &amp;= ~(LED4);<br />pwm1=i;<br />pwm2=i;<br />pwm3=i;<br />// W związku z dużą nieliniowością zależności prądu diod LED<br />// i jasności świecenia, wprowadzone jest zmienne opóźnienie<br />// przy wartościach bliskich zera aby zminimalizować ten efekt<br />if(i&gt;50) Timer3=3;<br />else Timer3=10;<br />i--;<br />if (i==0){<br /><br />pwm1=0;//całkowite wygaszenie diod LED<br />pwm2=0;<br />pwm3=0;<br /><br />flaga_up=0;// ustawienie flagi odpowiedzialnej za osiągnięcie maksymalnej mocy świecena<br />Timer4=500;// rozświetlenie na maksimum przez 500ms<br />}<br />}<br /><br />// przykładowy niezależny i nieblokujący proces<br />if( !Timer2 ) {<br />Timer2=500; //podstawą czasu jest 1ms więć 500*1ms =0,5s<br />PORTB ^= (LED5);<br />}<br />}<br />}[/syntax]<br /><br /><br />led.c<br />[syntax=c]#include &lt;avr/io.h&gt;//dołączenie głównego systemowego pliku nagłówkowego<br />#include &lt;util/delay.h&gt;//dołączenie pliku nagłówkowego do obsługi delay'a<br />#include &lt;avr/interrupt.h&gt;//dołączenie pliku nagłówkowego do obsługi przerwań<br /><br />#include &quot;led.h&quot;<br />// definicje dla preprocesora<br /><br /><br />void led_init (void){<br /><br />//***** PROGRAMOWY PWM - 3 KANAŁÓW *******<br />// ustawienie pinów kanałów programowych PWM jako WYJŚCIA<br />DDRB |= (LED1)|(LED2)|(LED3)|(LED4)|(LED5);<br />// wyłączenie diod LED podłączonych katodami do wyjść<br />PORTB |= (LED1)|(LED2)|(LED3)|(LED4)|(LED5);<br />}<br /><br />// ********************************************************* 1-sza wersja<br />void led_timer0_init (void){//definicja Timera0 odpowiedzialnego za sprzętowy sygnał PWM<br /><br />// ustawienia TIMER0 w tryb CTC<br />TCCR0 |= (1&lt;&lt;WGM01);// tryb  CTC<br />TCCR0 |= (1&lt;&lt;CS00);// preskaler = 1<br />OCR0 = 199;// dodatkowy podział częsttotliwości przez 200<br />TIMSK |= (1&lt;&lt;OCIE0);// zezwolenie na przerwanie CompareMatch<br />}<br /><br />// ciało procedury obsługi przerwania Compare Match Timera2<br />ISR( TIMER0_COMP_vect )<br />{<br />static uint8_t cnt; // definicja naszego licznika PWM<br /><br />// bezpośrednie sterowanie wyjściami kanałów PWM<br />if(cnt&gt;=pwm1) PORTB |= (LED1); else PORTB &amp;= ~(LED1);<br />if(cnt&gt;=pwm2) PORTB |= (LED2); else PORTB &amp;= ~(LED2);<br />if(cnt&gt;=pwm3) PORTB |= (LED3); else PORTB &amp;= ~(LED3);<br /><br />cnt++;// zwiększanie licznika o 1<br />}<br />&#91;/code&#93;<br /><br /><br />led.h<br />&#91;code&#93;#ifndef LED_LED_H_<br />#define LED_LED_H_<br /><br />// definicje zmiennych do sterowania 6 kanałami programowych PWM<br />// zmienne typu uint8_t, rozdzielczość 8-bitowa<br />volatile uint8_t pwm1, pwm2, pwm3;<br /><br /><br />// konfiguracja portu i pinów z podłączonymi diodamy sygnalizacyjnymi<br />#define LED1 (1&lt;&lt;PB0)//makro podłączenia diody LED1<br />#define LED2 (1&lt;&lt;PB1)<br />#define LED3 (1&lt;&lt;PB2)<br />#define LED4 (1&lt;&lt;PB3)<br />#define LED5 (1&lt;&lt;PB4)<br /><br /><br />void led_init (void);// deklaracja funkcji inicjalizującej pracę diod LED (diod PWM)<br />void led_timer0_init (void);//deklaracja Timera0 odpowiedzialnego za sprzętowy sygnał PWM<br /><br /><br />#endif /* LED_LED_H_ */[/syntax]<br /><br /><br /><br /><br />keys.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 /><br /><br />#include &quot;keys.h&quot;<br />#include &quot;../LED/led.h&quot;<br /><br /><br />// własne funkcje użytkownika<br />void change_led1(void) {<br />PORTB ^= LED1;<br />}<br /><br />void change_led2(void) {<br />PORTB ^= LED2;<br />}<br /><br /><br />void pusta (void){};//definicja funkcji która nic nie robi<br /><br />//definicja funkcji inicjalizującej ustawinie portów uP<br />void key_init (void){<br />PORTC |= KEY1|KEY2|KEY3|KEY4;// podciągamy linie klawiszy do VCC<br />}<br /><br />//deklaracja funkcji obsługującej klawisza 1<br />void button_init1(TBUTTON *butt);<br /><br />// ****** Definicje funkcji obsługujące klawisze<br />//definicja funkcji obsługującej klawisza przesuń w lewo<br />void button_init1 (TBUTTON *butt){<br />butt-&gt;KPIN = &amp;PINC;<br />butt-&gt;LPIN = &amp;PORTB;<br />butt-&gt;key_mask = KEY1;<br />butt-&gt;led_mask = LED1;<br />butt-&gt;wait_time_s = 1;<br />butt-&gt;kfun1 = change_led1;<br />butt-&gt;kfun2 = change_led2;<br />butt-&gt;kfunlong  = change_led2;//funkcja która jest realizowana po wciśnięciu i przytrzymaniu klawisza<br />butt-&gt;bistab = 1;//znmienna określająca pracę klawisza: 0 - monostabilny, 1 - bistabilny<br />}<br /><br />//Definicja funkcji wywołującej funkcje obsługu klawiszy<br />void d_key_call(void){<br />button_init1(&amp;button);//wywołanie funkcji obsługującej klawisza 1<br />}<br /><br />void key_press( TBUTTON * btn ) {<br />register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);//wykonanie maski na danym klawiszy - sprawdzenie czy został wcinięty<br /><br />if( !btn-&gt;klock &amp;&amp; !key_press ) {//jeżeli klawisz wcinięty (key_press=0) oraz czy klawisz był wczeniej zwolniony (klock=0) to wykonaj:<br />btn-&gt;klock=1;//zainicjalizuj zmienną klock wartocią 1<br /><br /><br />// reakcja na PRESS krótkie wcinięcie klawisza<br />if(btn-&gt;bistab){//jeżeli klawisz ma działać jak bistabilny<br />if (!btn-&gt;flag_bistab){//jeżeli flag_bistab = 0<br />if(btn-&gt;kfun1) btn-&gt;kfun1();//sprawdź czy pierwsza funkcja nie jest pusta, jeli nie jest to ją wykonaj<br />btn-&gt;flag_bistab=1;//ustaw flag_bistab<br />}<br />else{<br />if(btn-&gt;kfun2) btn-&gt;kfun2();//sprawdź czy pierwsza funkcja nie jest pusta, jeli nie jest to ją wykonaj<br />btn-&gt;flag_bistab=0;// wyzeruj flag_bistab<br />}<br />}//jeżeli klawisz ma działać jako monostabliny<br />else if(btn-&gt;kfun1) btn-&gt;kfun1();//sprawdź czy pierwsza funkcja nie jest pusta, jeli nie jest to ją wykonaj<br /><br /><br />btn-&gt;flag=1;//ustaw flage<br />Timer1 = (btn-&gt;wait_time_s*1000);//zainicjalizuj Timer1 wartocią zapisaną w wait_time_s<br />*btn-&gt;LPIN &amp;= ~btn-&gt;led_mask;//załącz diode<br /><br />}<br />else if( btn-&gt;klock &amp;&amp; key_press ) {//zwolnienie klawisza (key_press = 0) oraz klock = 1 spowoduje zwiększanie sie klock<br />(btn-&gt;klock)++;//do wartosci 255 po czym zmieni się na 0 - ma to wyeliminować ewentualne drganie styków<br />if( !btn-&gt;klock ) {//po wyzerowaniu zmiennej klock (przekręceniu się z 255 na 0) wyzeruj Timer1 i flage<br />Timer1=0;<br />btn-&gt;flag=0;<br />*btn-&gt;LPIN |= btn-&gt;led_mask;//wyłącz diode<br />}<br />}<br />else if( btn-&gt;flag &amp;&amp; !Timer1 ) {//długotrwałe wcinięcie klawisza spowoduje wykonanie kfun2<br />// reakcja na dłuższe wcinięcie klawisza<br />if(btn-&gt;kfunlong) btn-&gt;kfunlong();//sprawdza czy kfun2 nie jest pusta, jeli nie jest to ją wykona<br />btn-&gt;flag=0;//zerowanie flagi<br />}<br />}<br /><br /><br /><br />//*** Obsługa przerwania od TIMER2 CompareM<br />ISR(TIMER2_COMP_vect) {<br />uint16_t n;<br /><br />n = Timer1;/* 1000Hz Timer1 - 1ms*/<br />if (n) Timer1 = --n;<br />n = Timer2; /* 1000Hz Timer2  1ms*/<br />if (n) Timer2 = --n;<br />n = Timer3;/*Timer3  */<br />if(n) Timer3 = --n;<br />n = Timer4;/*Timer3  */<br />if(n) Timer4 = --n;<br /><br />}<br /><br />//---------------------------------------------------<br />//definicja funkcji inicjalizującej pracę Timera2<br />void d_timer2_init (void){<br />/* Timer2 – konfigurcajca silnika timerów programowych */<br />TCCR2 |= (1&lt;&lt;WGM21); // tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22); // preskaler = 64<br />OCR2 = 126; // (125+1) - przerwanie porównania co 1ms (1000Hz)<br />TIMSK = (1&lt;&lt;OCIE2); // Odblokowanie przerwania CompareMatch<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3824">amilo_pa</a> — 17 lut 2016, o 23:42</p><hr />
]]></content>
</entry>
</feed>