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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14095&amp;mode</id>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-02-09T22:14:33+01:00</updated>
<published>2016-02-09T22:14:33+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=153201#p153201</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=153201#p153201"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=153201#p153201"><![CDATA[
Prescaler zmieniłem dla siebie aby było co 1 sek bo gdy było 1024 to wychodziło z liczbą po przecinku.<br />I faktycznie najpierw wykonuje się przerwanie B a potem A trwają tyle samo czyli 1 sek tylko jedno wyprzeda drugie o 0,5 sek.<br />Dziękuje Jacek!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 9 lut 2016, o 22:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-02-02T12:35:11+01:00</updated>
<published>2016-02-02T12:35:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152431#p152431</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152431#p152431"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152431#p152431"><![CDATA[
<div class="quotetitle">elektronikq napisał(a):</div><div class="quotecontent"><br />Ale np. jeśli w OCR1B jest 50% tego co w OCR1A to po prostu przerwanie będzie przesunięte o 0,5 sekundy względem siebie?<br /></div><br />Dokładnie tak.<br /><br />Jeśli chcesz użyć przerwań od kanału A i B to muszą być dwie funkcje obsługi przerwań.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 2 lut 2016, o 12:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-02-02T00:09:05+01:00</updated>
<published>2016-02-02T00:09:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152399#p152399</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152399#p152399"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152399#p152399"><![CDATA[
Czyli niech wykonują się co 1 sekundę oba. Ale np. jeśli w OCR1B jest 50% tego co w OCR1A to po prostu przerwanie będzie przesunięte o 0,5 sekundy względem siebie?<br />Jak używamy dwóch OCR to muszą być dwie obsługi przerwań? 2 przerwania (A i B) na 1 timerze?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 2 lut 2016, o 00:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-02-01T23:42:28+01:00</updated>
<published>2016-02-01T23:42:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152391#p152391</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152391#p152391"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152391#p152391"><![CDATA[
Wcześniej napisałem, że obydwa będą się wykonywać z tą samą częstotliwością. Jeśli przerwanie CompA będzie się wykonywać raz na sekundę to przerwanie CompB też będzie się wykonywać raz na sekundę.<br /><br />Widać to nawet na zrzutach ekranu, które wkleiłem. Obydwa przebiegi mają taka samą długość.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 1 lut 2016, o 23:42</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-02-01T23:31:44+01:00</updated>
<published>2016-02-01T23:31:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152388#p152388</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152388#p152388"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152388#p152388"><![CDATA[
[syntax=c]ISR(TIMER1_COMPA_vect)<br />    {<br />            PORTC ^= LED1;<br />    }<br />     <br />    ISR(TIMER1_COMPB_vect)<br />    {<br />            PORTC ^= LED2;<br />    }[/syntax]<br />Jedno przerwanie od OCR1A a drugie przerwanie od OCR1B? Jedno np. może się wykonać 1 raz / 1 s a drugie 1 raz / 4 sek?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 1 lut 2016, o 23:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-01-31T21:03:14+01:00</updated>
<published>2016-01-31T21:03:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152247#p152247</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152247#p152247"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152247#p152247"><![CDATA[
To, że procek ma rejestry TCCR1A i TCCR1B nie ma nic wspólnego z rejestrami OCR1A i OCR1B. To nie jest tak, że TCCR1A jest od OCR1A a TCCR1B od OCR1B.<br /><br />W tym temacie troszkę na ten temat napisałem <!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic14342.html#p152082" >topic14342.html#p152082</a><!-- l --><br /><br />W trybie CTC możesz uruchomić przerwanie Compare Match A i Compare Match B. Tylko, że obydwa przerwania będą się wywoływać z tą samą częstotliwością i jeśli wartości w OCR1A i OCR1B będą różne, to przerwania będą przesunięte względem siebie.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 40 minutach ]</span></strong><br /><br />Aby pokazać o co chodzi z tym przesunięciem napisałem prościutki program<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;PC0)<br />    #define LED2    (1&lt;&lt;PC1)<br />     <br />    int main(void)<br />    {<br />     <br />            TCCR1B |= (1&lt;&lt;WGM12);                           //CTC<br />            TCCR1B |= (1&lt;&lt;CS12) | (1&lt;&lt;CS10);        //preskaler 1024<br />            OCR1A = 1562;<br />            OCR1B = 781;<br />            TIMSK |= (1&lt;&lt;OCIE1A) | (1&lt;&lt;OCIE1B);<br />     <br />            //PC0 i PC1 jako wyjścia - LED1 i LED2<br />            DDRC |= LED1 | LED2;<br />     <br />            sei();<br />     <br />            while(1)<br />            {<br />     <br />            }<br />    }<br />     <br />    ISR(TIMER1_COMPA_vect)<br />    {<br />            PORTC ^= LED1;<br />    }<br />     <br />    ISR(TIMER1_COMPB_vect)<br />    {<br />            PORTC ^= LED2;<br />    }[/syntax]<br />Przerwania wywoływane co ok. 100ms (taktowanie 16MHz)<br /><br />OCR1B = 50%OCR1A<br /><a href="https://obrazkiforum.atnel.pl/204/6f735b90730bef22b97939a8ee2de4bc.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/204/6f735b90730bef22b97939a8ee2de4bc.png" alt="Obrazek" /></a><br /><br />OCR1B = 25%OCR1A<br /><a href="https://obrazkiforum.atnel.pl/204/c7381ff43fafed8aaa658a5a93806431.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/204/c7381ff43fafed8aaa658a5a93806431.png" alt="Obrazek" /></a><br /><br />OCR1B = 75%OCR1A<br /><a href="https://obrazkiforum.atnel.pl/204/be265a1b137076ae1174bfa7490e1674.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/204/be265a1b137076ae1174bfa7490e1674.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 31 sty 2016, o 21:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-31T20:39:48+01:00</updated>
<published>2016-01-31T20:39:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152242#p152242</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152242#p152242"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=152242#p152242"><![CDATA[
Zrobiłem to troszkę inaczej ale działa tak jak chciałem i zrobiłem to ze zrozumieniem. W ogóle jaka radocha jak to się rozumie aż chce się iść dalej.<br /><br />Mam 2 pytania jeszcze:<br /><br />Jeśli wpiszę TCCR1A &amp;= ~(CS10|CS11|CS12); to wyzeruje te bity i zatrzymam timer?<br />I czy mogę uruchomić dwa przerwania z jednego timera?<br />Chodzi o to, że mam TCCR1A i TCCR1B? Użyć muszę dwóch rejestrów OCR1A i OCR1B przy tym OCR1A&gt;OCR1B, to pewnie i dwóch OCIE a z zezwoleniem na przerwanie też 2xTIMSK? A ile trzeba przerwań do kodu wstawić? Chodzi mi o polecenie: ISR ()<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 31 sty 2016, o 20:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ogon]]></name></author>
<updated>2016-01-24T23:54:17+01:00</updated>
<published>2016-01-24T23:54:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=151629#p151629</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=151629#p151629"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=151629#p151629"><![CDATA[
<div class="quotetitle">zoom napisał(a):</div><div class="quotecontent"><br />Dlaczego kolega użył uint16_t?<br /></div><br />Zmienna <div class="quotetitle">zoom napisał(a):</div><div class="quotecontent"><br />timer1000ms=1000;<br /></div> przekracza zakres zmiennej 8 bitowej(255 jeżeli jest unsigned) dlatego musi byś zadeklarowana jako uint16_t. To samo dotyczy się liczników. Zmienna musi pomieścić zakres zliczania w danym liczniku. Po przekroczeniu zakresu zaczyna liczyć od 0 więc jeżeli użyjesz uitn8_t zamiast 16_t licznik nie będzie działał tak jak należy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=9745">ogon</a> — 24 sty 2016, o 23:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-24T23:01:41+01:00</updated>
<published>2016-01-24T23:01:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=151622#p151622</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=151622#p151622"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=151622#p151622"><![CDATA[
U mnie przerwanie raz na 1. Rozumiem, że przerwanie raz na sekundę mi wyzeruje zmienną timer1000ms bo jest dekrementacja? Czy przerwanie 1 raz na sekundę będzie  za wolne? Raz na sekundę będzie mi z 1000 odliczać w dół czyli 999, 998, 997 etc. Dlaczego kolega dał 1000 w tej zmiennej?<br /><br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />jeśli przycisk był wciśnięty i minie sekunda czyli timer 1000 razy odliczy 1ms<br /></div><br />Czyli mam ustawić 1000 razy na sekundę?<br /><br />I zmienna timer która ma wartość 10 to ona za szybko nie zjedzie do wartości 0? Pytam, ponieważ, pętla while wykonuje się szybko.<br /><br />Mój kod:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#define KEY_DOWN (1&lt;&lt;PC0)<br />#define LED (1&lt;&lt;PC1)<br />volatile uint16_t timer1000ms, timer;<br />timer=10; //będziemy odliczać 10sek<br />uint8_t keylock; <br />    int main(void)<br />    DDRC |= LED;<br />    PORTC |= KEY_DOWN|LED;<br />    TCCR1B |= (1&lt;&lt;WGM12);<br />    TCCR1B |= (1&lt;&lt;CS12);<br />    OCR1A = 30; //1000 na sekundę <br />  <br />    TIMSK |= (1&lt;&lt;OCIE1A); <br />    while(1)<br />    int flaga;<br />    {<br />    if(!keylock &amp;&amp; !(PINC&amp;KEY_DOWN))  // tu musisz dać obsługę przycisku<br />    {<br />    keylock=1;<br />    flaga=1; //ustaw flagę<br />    timer1000ms=1000;<br />                                                 <br />        if((flaga==1)&amp;&amp;(timer1000ms == 0)) // jeśli przycisk był wciśnięty i minie sekunda czyli timer 1000 razy odliczy 1ms<br />        {<br />          timer1000ms = 1000; // resetujemy timer, by mógł odliczać dalej<br />          timer--;  // minęła sekunda, więc odejmujemy ją od timera<br />              if(timer==0) // jeśli w końcu minie 10 sek<br />                   {<br />                    timer=10; //resetujemy timer<br />                    flaga=0; //zerujemy flagę<br />                    PORTC &amp;= ~LED;<br />         }<br />                   }<br />               else if (keylock &amp;&amp; (PINC&amp;KEY_DOWN)) keylock++;<br />                       ISR(TIMER1_COMPA_vect)<br />                           {<br />                                   if(timer1000ms)  timer1000ms--;<br />                           }[/syntax]<br /><br />Jesli chodzi o resetowanie timera to chyba się resetuje na 0 jakieś bity? Wiem, że mogę użyć timera 8 bitowego ale chodzi bardziej o składnie.<br />Jeśli w main napiszę key=10; to z automatu jest to zmienna int? czyli ten zapis równoważy się int key=10;?<br /><br />Dlaczego kolega użył uint16_t?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 24 sty 2016, o 23:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2016-01-13T08:08:54+01:00</updated>
<published>2016-01-13T08:08:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150430#p150430</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150430#p150430"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150430#p150430"><![CDATA[
Sorry, wlazło z innego projektu, zapomniałem wykasować.<br /><br />Generalnie po wciśnięciu przycisku (spróbuj to opanować z tekstem o przyciskach na blogu Mirka) ustaw sobie jakąś flagę.<br /><br />Będą potrzebne zmienne - przed main zadeklaruj.<br />[syntax=c]volatile uint16_t timer1000ms, timer;<br />timer=10; //będziemy odliczać 10sek[/syntax]<br /><br />W funkcji main:<br />[syntax=c]sei();   //zezwolenie na przerwania<br />   while(1)<br />                   {<br />                            if(przycisk_został_wciśnięty)  // tu musisz dać obsługę przycisku<br />                            {<br /> flaga=1; //ustaw flagę<br />                                        timer1000ms = 1000; // resetujemy timer, by mógł odliczać<br />       }<br /><br />                            if((flaga==1)&amp;&amp;(timer1000ms == 0)) // jeśli przycisk był wciśnięty i minie sekunda czyli timer 1000 razy odliczy 1ms<br />                            {<br />                                           timer1000ms = 1000; // resetujemy timer, by mógł odliczać dalej<br />           timer--;  // minęła sekunda, więc odejmujemy ją od timera<br />    if(timer==0) // jeśli w końcu minie 10 sek<br />                                           { <br />            timer=10; //resetujemy timer<br />                    flaga=0; //zerujemy flagę<br />            Twoja_funkcja();<br />                   }<br />                            }    <br />                   }[/syntax]<br /><br />No i na końcu za funkcją main obsługa przerwania, o którym była mowa:<br /><br />[syntax=c]ISR(TIMER0_COMP_vect)<br />    {<br />            if(timer1000ms)  timer1000ms--;<br />    }[/syntax]<br /><br />To taka moja ogólna wizja, zarys. Mam nadzieję, że nie zrobiłem jakiegoś strasznego babola, jakby co może ktoś bardziej doświadczony się odezwie.<br />W tym momencie po wciśnięciu przycisku czekam, aż dziesięć razy wykona się zliczenie 1000ms.<br />Po tym czasie wykonuje się jakaś Twoja funkcja.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=685">zoom</a> — 13 sty 2016, o 08:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-12T22:18:29+01:00</updated>
<published>2016-01-12T22:18:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150398#p150398</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150398#p150398"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150398#p150398"><![CDATA[
Dziękuje wszystkim za wkład w ten temat.<br />[syntax=c]if(timer100ms == 0)<br />                        {<br />                                timer100ms = 100 ;<br />                                Twoja_funkcja();<br />                        }<br /> <br />                        nRF_RX_EVENT()[/syntax]<br /><br />Co oznacza nRF_RX_EVENT() ? Czy ja mogę sobie od tak pisać timer100ms? Jaki to timer? Mniej więcej idee rozumiem ale ten program raczej nie wykonuje tego co bym chciał.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 12 sty 2016, o 22:18</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2016-01-13T07:41:47+01:00</updated>
<published>2016-01-12T22:00:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150391#p150391</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150391#p150391"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150391#p150391"><![CDATA[
np. dla atmegi32 z zegarem 11,0592MHz ustawianie timera co 1ms wygląda tak:<br /><br /> [syntax=c]//inicjalizacja timera programowego co 1ms<br />    TCCR0 |= (1&lt;&lt;WGM01) | (1&lt;&lt;CS01) | (1&lt;&lt;CS00);<br />    TIMSK |= (1&lt;&lt;OCIE0);<br />   OCR0 = 84;[/syntax]<br /><br />potem tak zliczasz impulsy z przerwań i liczysz czas (timer programowy):<br /><br />[syntax=c]//zezwolenie na przerwania<br />    sei();<br />while(1)<br />{<br /><br />if(timer100ms == 0)<br />{<br />timer100ms = 100 ;<br />                                Twoja_funkcja();<br />}<br /><br />}[/syntax]<br /><br />A tu obsługa przerwania:<br />[syntax=c]ISR(TIMER0_COMP_vect)<br />{<br />if(timer100ms)timer100ms--;<br />}[/syntax]<br /><br />do tego obsługa przycisku - polecam poradniki Mirka <a href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html"  class="postlink">LINK</a>.<br /><br />Przykład nie jest wprost, postaraj się dopasować to do swojego taktowania. Na dziś już nie mam siły myśleć, żeby dokładniej Ci podać. Spróbuj, na pewno wiele Ci to da, jak samodzielnie do czegoś dojdziesz <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=685">zoom</a> — 12 sty 2016, o 22:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-12T20:55:09+01:00</updated>
<published>2016-01-12T20:55:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150372#p150372</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150372#p150372"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150372#p150372"><![CDATA[
Chcę zrobić taki licznik. Program się wykonuje. I ja wciskam przycisk lub spełnione zostanie jakieś wyrażenie i odliczone zostaje 10 sek i zostaje włączona np. lampka.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 12 sty 2016, o 20:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2016-01-12T19:13:52+01:00</updated>
<published>2016-01-12T19:13:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150347#p150347</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150347#p150347"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150347#p150347"><![CDATA[
Może rozwiń jak dokładnie program ma zadziałać. Jaki przycisk, jaki warunek, jakie przerwanie?<br />Chodzi Ci o to, że po naciśnięciu przycisku rusza timer odliczający 10 sek, który po osiągnięciu odpowiedniej wartości wygeneruje przerwanie?<br />Czyli naciśnięcie przycisku i po 10 sek przerwanie?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=685">zoom</a> — 12 sty 2016, o 19:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-12T19:07:11+01:00</updated>
<published>2016-01-12T19:07:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150346#p150346</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150346#p150346"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=150346#p150346"><![CDATA[
A czy trudne jest zrobienie aby np. po spełnieniu warunku lub naciśnięcia przycisku program odczekał 10 sek i uruchomił przerwanie? W kodzie przerwania muszę to określić?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 12 sty 2016, o 19:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-01-06T19:10:12+01:00</updated>
<published>2016-01-06T19:10:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149825#p149825</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149825#p149825"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149825#p149825"><![CDATA[
<div class="quotetitle">elektronikq napisał(a):</div><div class="quotecontent"><br />Dlaczego z OCIE1B i OCR1B nie działało?<br /></div><br />Bo wartość w OCR1A musi być większa niż OCR1B. Było już kilka razy o tym na forum<br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic7416.html#p84379" >topic7416.html#p84379</a><!-- l --><br /><!-- l --><a class="postlink-local" href="http://forum.atnel.pl/topic4162.html" >topic4162.html</a><!-- l --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 6 sty 2016, o 19:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2016-01-06T17:09:34+01:00</updated>
<published>2016-01-06T17:09:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149814#p149814</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149814#p149814"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149814#p149814"><![CDATA[
Jak nie masz żadnej książki pod ręką, to poszukaj w sieci o pętli &quot;while&quot;. Po krótce, zapis &quot;while(1)&quot; oznacza pętlę nieskończoną, jakbyś wpisał &quot;while(0)&quot; to pętla nigdy by się nie wykonała, jedynka to &quot;prawda&quot;, zero to &quot;fałsz&quot;. Pętla główna &quot;while(1)&quot; jest właśnie po to, aby program działał tak jak to zaplanowaliśmy i wykonywał zadania w nieskończoność <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> . Oczywiście nic nie stoi na przeszkodzie żeby tworzyć warunki z użyciem pętli &quot;while&quot;, pytanie tylko czy to ma sens gdy chodzi o pętlę główną programu, bo jak warunek osiągnie swoją graniczną wartość to pozostaje reset procka.<br /><br />Osobiście polecam Mirka niebieską książkę. Naprawdę, prościej zasad działania AVR-ów i samego C nie da się chyba wytłumaczyć. Jak dla mnie &quot;Blue Book&quot; jest mistrzostwem, jeśli chodzi o wytłumaczenie podstaw języka C na AVR, ale i nie tylko na AVR-y.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=758">Marcin_G</a> — 6 sty 2016, o 17:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-06T16:34:28+01:00</updated>
<published>2016-01-06T16:34:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149811#p149811</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149811#p149811"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149811#p149811"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br /><br />    int main(void)<br />    {<br />    DDRC |= (1&lt;&lt;PC7)|(1&lt;&lt;PC0);<br />    PORTC |= (1&lt;&lt;PC7);<br /><br />    TCCR1B |= (1&lt;&lt;WGM12);<br />    TCCR1B |= (1&lt;&lt;CS12);<br />    OCR1A = 15624;<br />    TIMSK |= (1&lt;&lt;OCIE1A);<br />    sei();<br />    PORTC &amp;= ~(1&lt;&lt;PC7);<br />while(1){}<br />   }<br />    ISR(TIMER1_COMPA_vect)<br />        {<br /><br />PORTC ^=(1&lt;&lt;PC0);<br />        }[/syntax]<br /><br />I teraz miga mi dioda podłączona PC0 a PC7 świeci się cały czas. Bo zrozumiałem to tak, że program główny się wykonuje i jak następuje przerwanie to program główny co się z nim dzieje? Jest zatrzymywany czy wykonuje się cały czas a do tego jeszcze przerwanie się wykonują.<br />Na końcu funkcji nie ma informacji o wyłączeniu przerwań i tej procedury zakończenia.<br />Czyli funkcje zostaje zrealizowana tylko raz i kończy swoje działanie. Natomiast jeśli jest pętla to ciało funkcji jest wykonywane cały czas czy tylko raz potem dochodzi do pętli while(1) i pętla cały czas się wykonuje więc funkcja nigdy się nie skończy?<br />A jak byśmy mieli:<br />x=1<br />while (x&lt;9)<br />to pętla wykona się 8 razy i funkcja zakończy swoje działanie?<br />Nie bardzo rozumiałem to while(1) {}<br /> bo w nawiasach pętli nie było nic jak taka pętla działa? Po prostu jej zadanie to niedopuszczenie funkcji aby się skończyła? Bo pętla nic w sobie nie ma ale funkcja widzie, że pętla jest nieskończona i funkcja nie dojdzie do końca?<br /><br /><strong>Dlaczego z OCIE1B i OCR1B nie działało?</strong><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 6 sty 2016, o 16:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2016-01-06T16:10:25+01:00</updated>
<published>2016-01-06T16:10:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149808#p149808</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149808#p149808"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149808#p149808"><![CDATA[
<div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Dlaczego bez: while(1) to nie działa?<br /></div><br />Polecam ci na prawdę zacząć od książki bo tam masz wszystko .... <!-- m --><a class="postlink" href="http://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >http://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />dlaczego nie działa? .... a jak chcesz żeby działało ? skoro nie ma pętli głównej która jest PODSTAWĄ DZIAŁANIA KAŻDEGO projektu w C ? Bez niej ... mówisz prockowi - zrób po kolei to co napisałem w main() i zakończ całkowicie działanie programu. I procek to grzecznie wykonuje - nawet przerwania wyłącza. Teraz jaśniej ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 sty 2016, o 16:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-06T16:06:26+01:00</updated>
<published>2016-01-06T16:06:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149806#p149806</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149806#p149806"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149806#p149806"><![CDATA[
[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br /><br />    int main(void)<br />    {<br />    DDRC |= (1&lt;&lt;PC7);<br />    PORTC |= (1&lt;&lt;PC7);<br /><br />    TCCR1B |= (1&lt;&lt;WGM12);<br />    TCCR1B |= (1&lt;&lt;CS12);<br />    OCR1A = 15624;<br />    TIMSK |= (1&lt;&lt;OCIE1A);<br />    sei();<br />    PORTC &amp;= ~(1&lt;&lt;PC7);<br /><br />   }<br />    ISR(TIMER1_COMPA_vect)<br />        {<br />            PORTC ^=(1&lt;&lt;PC7);<br />        }[/syntax]<br /><br />Dlaczego bez: while(1) to nie działa? I dlaczego jak było użyte OCR1B, OCIE1B i <br />    ISR(TIMER1_COMPB_vect) to nie działało?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 6 sty 2016, o 16:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Gelten]]></name></author>
<updated>2016-01-06T15:52:58+01:00</updated>
<published>2016-01-06T15:52:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149804#p149804</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149804#p149804"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149804#p149804"><![CDATA[
Ponieważ w pętli <strong>while()</strong> cały czas robisz <strong>PORTC &amp;= ~(1&lt;&lt;PC7)</strong>. Co z tego, że Timer będzie zamieniał stan portu z częstotliwością 2 Hz, jak uC będzie to robił z częstotliwością kilkaset tysięcy Hz. Funkcje main() zrób raczej tak:<br />[syntax=c]int main(void)<br />    {<br />        DDRC |= (1&lt;&lt;PC7);<br />        PORTC |= (1&lt;&lt;PC7);<br /> <br />        TCCR1B |= (1&lt;&lt;WGM12);<br />        TCCR1B |= (1&lt;&lt;CS12);<br />        OCR1A = 15624;<br />        TIMSK |= (1&lt;&lt;OCIE1A);<br />        sei();<br /><br />        PORTC &amp;= ~(1&lt;&lt;PC7);<br /> <br />        while(1) {}<br />       <br />    }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=5228">Gelten</a> — 6 sty 2016, o 15:52</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[elektronikq]]></name></author>
<updated>2016-01-06T15:31:41+01:00</updated>
<published>2016-01-06T15:31:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149799#p149799</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149799#p149799"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149799#p149799"><![CDATA[
Żeby ustawić CTC musiałem ustawić 1 w WGM12. A ten jest w rejestrze TCCR1B. Więc myślałem, że trzeba używać rejestrów porównania OCR1B a nie A.<br />Pozmieniałem:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />    #include &lt;avr/interrupt.h&gt;<br /><br />    int main(void)<br />    {<br />    DDRC |= (1&lt;&lt;PC7);<br />    PORTC |= (1&lt;&lt;PC7);<br /><br />    TCCR1B |= (1&lt;&lt;WGM12);<br />    TCCR1B |= (1&lt;&lt;CS12);<br />    OCR1A = 15624;<br />    TIMSK |= (1&lt;&lt;OCIE1A);<br />    sei();<br /><br />    while(1)<br />    {<br />    PORTC &amp;= ~(1&lt;&lt;PC7);<br />    }<br />   }<br />    ISR(TIMER1_COMPA_vect)<br />        {<br />            PORTC ^=(1&lt;&lt;PC7);<br />        }[/syntax]<br />Dioda świeci cały czas.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11544">elektronikq</a> — 6 sty 2016, o 15:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2016-01-06T14:38:20+01:00</updated>
<published>2016-01-06T14:38:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149794#p149794</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149794#p149794"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149794#p149794"><![CDATA[
Przed chwilą wrzuciłem Twój kod do procka, i w takiej jak Ty masz postaci dioda cały czas świeci. <br />Jednak jak dokonałem drobnych zmian, miga <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Zmiany są następujące:<br /><br />OCR1B na OCR1A<br />OCIE1B na OCIE1A<br />ISR(TIMER1_COMPA_vect)<br /><br />Z pętli głównej też wyrzuć załączanie diody. Zostaw ją pustą.<br /><br />No i teraz niech ktoś mądrzejszy napisze dlaczego nie działa wektor B. Kilka razy już się z tym problemem spotkałem, ale zawsze w sytuacji gdy miałem już uruchomiony wektor A, i tłumaczyłem to sobie tym że pewnie mam coś źle z czasami poustawiane i wchodzą sobie w paradę. No a że timerów w AVR-ach sporo, a moje projekty &quot;zabawkowe&quot; to załączałem inny <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=758">Marcin_G</a> — 6 sty 2016, o 14:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zoom]]></name></author>
<updated>2016-01-06T14:03:58+01:00</updated>
<published>2016-01-06T14:03:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149791#p149791</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149791#p149791"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149791#p149791"><![CDATA[
[syntax=c]ISR(TIMER1_COMPB_vect)<br />    {<br />        PORTC ^=(1&lt;&lt;PC7);<br />    }[/syntax]<br />Wywal to z maina jak mówi Marcin_G.<br />Po prostu umieść to na końcu.<br />I to właśnie będzie funkcja obsługi przerwania. Jak przerwanie nastąpi, to program automatycznie wykona tą funkcję.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=685">zoom</a> — 6 sty 2016, o 14:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marcin_G]]></name></author>
<updated>2016-01-06T14:01:13+01:00</updated>
<published>2016-01-06T14:01:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149790#p149790</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149790#p149790"/>
<title type="html"><![CDATA[Re: Timer i miganie diodą]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14095&amp;p=149790#p149790"><![CDATA[
Nie tworzysz funkcji do obsługi przerwania. Po prostu wektor przerwania który masz teraz w &quot;main&quot; przenosisz po za &quot;main&quot;.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=758">Marcin_G</a> — 6 sty 2016, o 14:01</p><hr />
]]></content>
</entry>
</feed>