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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2021-04-11T22:28:13+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=23712&amp;mode</id>
<entry>
<author><name><![CDATA[antosV10]]></name></author>
<updated>2021-04-11T22:28:13+01:00</updated>
<published>2021-04-11T22:28:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231940#p231940</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231940#p231940"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231940#p231940"><![CDATA[
Faktycznie wartość była za duża myślałem, że rejestr 16 bitowy może trzymać wartości do max 65536. Na tej podstawie napisałem funkcję, która ma czekać określoną liczbę us, ale  znowu dioda zmienia swój stan w czasie dłuższym tak o 1, 2 s. Dlaczego mi to nie działa, skoro przy funkcja które czekają określoną liczbę milisekund lub sekund wszystko jest ok? Coś przeoczyłem w tej funkcji? W pętli głównej podaję jej jako argument liczbę 1milion bo dioda ma zmieniać swój stan co sekundę.<br /><br />[syntax=c]void wait_us(uint32_t us)<br />{<br />  static uint32_t counter;<br /><br />  while(1)<br />  {<br />    counter++;<br />    OCR1A = 16;<br />    TCCR1B |= (1 &lt;&lt; CS10);<br />    <br />    while(!(TIFR1 &amp; (1 &lt;&lt; OCF1A)));<br /><br />    TCCR1B &amp;= ~(1 &lt;&lt; CS10);<br />    TIFR1 |= (1 &lt;&lt; OCF1A);<br /><br />    if(counter == us)<br />    {<br />      counter = 0;<br />      break;<br />    }<br />  }<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21647">antosV10</a> — 11 kwi 2021, o 22:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zorro]]></name></author>
<updated>2021-04-11T12:02:18+01:00</updated>
<published>2021-04-11T12:02:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231917#p231917</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231917#p231917"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231917#p231917"><![CDATA[
Jaką wartość wpisałeś do rejestru porównania OCRx?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14587">zorro</a> — 11 kwi 2021, o 12:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[zorro]]></name></author>
<updated>2021-04-11T11:00:21+01:00</updated>
<published>2021-04-11T11:00:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231916#p231916</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231916#p231916"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231916#p231916"><![CDATA[
<div class="quotetitle">antosV10 napisał(a):</div><div class="quotecontent"><br />Zmieniłem w kodzie tylke wartość rejestru OCR1A  na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?<br /></div><br />Tylko, że licznik Timera liczy od zera.<br />Od 0-62466 = 62500<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br /><div class="quotetitle">zorro napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">antosV10 napisał(a):</div><div class="quotecontent">Zmieniłem w kodzie tylke wartość rejestru OCR1A  na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?<br /></div></div><br />Tylko, że licznik Timera liczy od zera.<br />Od 0-62466 bo nie przekraczasz 62536<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 7 minutach ]</span></strong><br /><br /><div class="quotetitle">zorro napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">antosV10 napisał(a):</div><div class="quotecontent">Zmieniłem w kodzie tylke wartość rejestru OCR1A  na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?<br /></div><br />Tylko, że licznik Timera liczy od zera.<br /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br /><div class="quotetitle">zorro napisał(a):</div><div class="quotecontent"><br /><div class="quotetitle">antosV10 napisał(a):</div><div class="quotecontent">Zmieniłem w kodzie tylke wartość rejestru OCR1A  na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?<br /></div></div><br />Tylko, że licznik Timera liczy od zera.<br />Od 0-62466 bo nie przekraczasz 62536</div><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 27 minutach ]</span></strong><br /><br /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 28 minutach ]</span></strong><br /><br /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14587">zorro</a> — 11 kwi 2021, o 11:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[antosV10]]></name></author>
<updated>2021-04-11T08:29:46+01:00</updated>
<published>2021-04-11T08:29:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231915#p231915</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231915#p231915"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231915#p231915"><![CDATA[
Zmieniłem w kodzie tylke wartość rejestru OCR1A  na 62499 i wszystko działa. Dlaczego, gdy był on ustawiony na 62500 dioda nie migała skoro jest ro rejestr 16-bitowy?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21647">antosV10</a> — 11 kwi 2021, o 08:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[antosV10]]></name></author>
<updated>2021-04-10T15:00:44+01:00</updated>
<published>2021-04-10T15:00:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231895#p231895</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231895#p231895"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231895#p231895"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Polecam ci gorąco Bluebooka<br /></div><br /><br />Zaglądnąłem do Bluebooka i faktycznie znalazłem taką funkcję w rozdziale dotyczącym pilota na podczerwień. Napisałem taki kod jak poniżej, żeby migać diodą co sekundę, ale dioda zapala się tylko raz na początku programu, a potem nic się nie dzieje? Sprawdzałem też kod z kilku stron na internecie i był bardzo podobny, ale także mi nie działają. <br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />void wait(void);<br /><br />int main(void)<br />{<br /><br />  DDRB |= (1 &lt;&lt; PB1);<br />  TCCR1B |= (1 &lt;&lt; WGM12);<br /><br />  while(1)<br />  {<br />    wait();<br />    PORTB ^= (1 &lt;&lt; PB1);<br />  }<br />}<br /><br />void wait(void)<br />{<br />  OCR1A = 62500; // dioda powinna migać co sekundę <br />  TCCR1B |= (1 &lt;&lt; CS12);<br /><br />  while(!(TIFR1 &amp; (1 &lt;&lt; OCF1A)));<br />  <br />  TCCR1B &amp;= ~(1 &lt;&lt; CS12);<br />  TIFR1 |= (1 &lt;&lt; OCF1A);<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21647">antosV10</a> — 10 kwi 2021, o 15:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2021-04-10T11:21:35+01:00</updated>
<published>2021-04-10T11:21:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231892#p231892</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231892#p231892"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231892#p231892"><![CDATA[
Polecam ci gorąco Bluebooka, wiele rzeczy by ci się wyjaśniło - nie tylko z języka C ale i z programowania AVR'ków<br /><br /><!-- m --><a class="postlink" href="https://atnel.pl/mikrokontrolery-avr-jezyk-c.html" >https://atnel.pl/mikrokontrolery-avr-jezyk-c.html</a><!-- m --><br /><br />A w tym kodzie skoro chcesz bazować na fladze OCF1A to po jakiego grzybka aktywujesz sprzętowe przerwanie w TIMSK1 i masz pustą procedurę? To jest bardzo ale to bardzo przekombinowana droga żeby w ten sposób migać diodą co sekundę.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 10 kwi 2021, o 11:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[antosV10]]></name></author>
<updated>2021-04-10T09:20:17+01:00</updated>
<published>2021-04-10T09:20:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231891#p231891</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231891#p231891"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231891#p231891"><![CDATA[
Dziękuję za pomoc i cenne uwagi <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> jeszcze chciałem dopytać czy taka funkcja jaką poniżej napisałem jest poprawna? Bo na pierwszy rzut oka wszystko działa ok ale chciałbym, żeby ktoś doświadczony na to spojrzał. Jak np użyję delay'a to dioda zmienia swój stan dokładnie co sekundę, a z tą funkcją zdecydowanie częściej.<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />void wait_ms(uint16_t ms);<br /><br />int main(void)<br />{<br /><br />  DDRB |= (1 &lt;&lt; PB1);<br />  <br />  /*** Inizjalizacja Timera1 czas odmirzany co 1ms <br />   * Tryb CTC OCR1A rejestr porównania, Preskaler = 8<br />   * F_CPU = 16MHz   ***/<br /><br />  TCCR1A |= (1 &lt;&lt; WGM10);<br />  TCCR1B |= (1 &lt;&lt; WGM12) | (1 &lt;&lt; CS11);<br />  TIMSK1 |= (1 &lt;&lt; OCIE1A);<br />  OCR1A = 2000;<br /><br />  sei();<br /><br />  while(1)<br />  {<br />    wait_ms(1000);<br />  }<br />}<br /><br />void wait_ms(uint16_t ms)<br />{<br />  static uint16_t counter;<br /><br />  while((TIFR1 &amp; (1 &lt;&lt; OCF1A)))<br />  {<br />    counter++;<br />    if(counter == ms)<br />    {<br />      counter = 0;<br />      PORTB ^= (1 &lt;&lt; PB1);<br /><br />      TIFR1 &amp;= ~(1 &lt;&lt; OCF1A);<br />    }<br /><br />    break;<br />  }<br />}<br /><br />ISR(TIMER1_COMPA_vect){}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21647">antosV10</a> — 10 kwi 2021, o 09:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Tom92]]></name></author>
<updated>2021-04-08T23:37:30+01:00</updated>
<published>2021-04-08T23:37:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231879#p231879</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231879#p231879"/>
<title type="html"><![CDATA[Re: Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231879#p231879"><![CDATA[
<div class="quotetitle">antosV10 napisał(a):</div><div class="quotecontent"><br />Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?<br /></div><br /><br />Ponieważ w warunku zatrzymujesz swój program na 1s delayem. Jak już korzystasz z timera to unikaj dalaya.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11336">Tom92</a> — 8 kwi 2021, o 23:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[antosV10]]></name></author>
<updated>2021-04-08T22:26:39+01:00</updated>
<published>2021-04-08T22:26:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231878#p231878</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231878#p231878"/>
<title type="html"><![CDATA[Dlaczego dioda zmienia swój stan w czasie o 1s dłuższym?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=23712&amp;p=231878#p231878"><![CDATA[
Witam, piszę taki testowy program, który ma migać diodą co 1s stworzyłem takie program jak poniżej i coś mi nie do końca działa, bo dioda powinna zmieniać swój stan co sekundę, a tutaj dzieje się to zawsze o sekundę dłużej czyli, np. w tym przypadku co 2s. Jak mogę naprawić i dlaczego tak się dzieje? Czy w ogóle sam zamysł, który tutaj przedstawiłem jest poprawny?<br /><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 />volatile uint16_t time_counter = 1000;<br />volatile uint8_t flag;<br /><br />int main(void)<br />{<br /><br />  DDRB |= (1 &lt;&lt; PB1);<br />  <br />  /*** Inizjalizacja Timera1 czas odmirzany co 1ms <br />   * Tryb CTC OCR1A rejestr porównania, Preskaler = 8<br />   * F_CPU = 16MHz   ***/<br /><br />  TCCR1A |= (1 &lt;&lt; WGM10);<br />  TCCR1B |= (1 &lt;&lt; WGM12) | (1 &lt;&lt; CS11);<br />  TIMSK1 |= (1 &lt;&lt; OCIE1A);<br />  OCR1A = 2000;<br /><br />  sei();<br /><br />  while(1)<br />  {<br />    if(time_counter &amp;&amp; !flag) <br />    {<br />      PORTB ^= (1 &lt;&lt; PB1);<br />      _delay_ms(1000);<br />    }<br /><br />  }<br /><br />}<br /><br />ISR(TIMER1_COMPA_vect)<br />{<br />  if(time_counter)<br />  {<br />    time_counter--;<br />    flag = 1;<br />  } <br />  else if(!time_counter)<br />  {<br />    time_counter = 1000;<br />    flag = 0;<br />  } <br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=21647">antosV10</a> — 8 kwi 2021, o 22:26</p><hr />
]]></content>
</entry>
</feed>