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

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

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=7269&amp;mode</id>
<entry>
<author><name><![CDATA[Arek1111111111]]></name></author>
<updated>2014-06-02T13:38:30+01:00</updated>
<published>2014-06-02T13:38:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83047#p83047</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83047#p83047"/>
<title type="html"><![CDATA[Re: Timer programowy i pętla for w avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83047#p83047"><![CDATA[
Faktycznie, teraz kod działa:) Dziękuje wszystkim.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3349">Arek1111111111</a> — 2 cze 2014, o 13:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-06-02T13:21:29+01:00</updated>
<published>2014-06-02T13:21:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83037#p83037</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83037#p83037"/>
<title type="html"><![CDATA[Re: Timer programowy i pętla for w avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83037#p83037"><![CDATA[
A może by zrezygnować z petli for i zrobić tak<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br />const uint8_t tab&#91;&#93; PROGMEM = {0, 128, 64, 160, 80, 40, 20,<br />10, 5, 2, 1, 0, 1, 2, 5, 10, 20, 40, 80, 160, 64, 128};<br />volatile uint8_t Timer1; /* timery programowe 100Hz */<br /><br /><br />int main(void)<br />{<br />TCCR2 |= (1&lt;&lt;WGM21); // tryb pracy CTC<br />TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); // preskaler = 1024<br />OCR2 = 107; // przerwanie porównania co 10ms (100Hz)<br />TIMSK |= (1&lt;&lt;OCIE2); // Odblokowanie przerwania CompareMatch<br /><br />uint8_t i;<br /><br />DDRA = 0xff;<br />PORTA = 0xff;<br />sei();<br />while(1)<br />{<br /><br />if(!Timer1)<br />{<br />Timer1 = 10;//100ms<br />PORTA = ~pgm_read_byte( &amp;tab&#91;i&#93; );<br />if(++i &gt; 21 ) i = 0;<br />}<br />}<br />}<br /><br /><br /><br />//procedura obsługi przerwań, timer programowy<br />ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br />n = Timer1; /* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />}[/syntax]<br /><br />Wg mnie to ta pętla jest nie potrzebna.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 2 cze 2014, o 13:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Arek1111111111]]></name></author>
<updated>2014-06-02T13:22:19+01:00</updated>
<published>2014-06-02T13:19:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83035#p83035</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83035#p83035"/>
<title type="html"><![CDATA[Re: Timer programowy i pętla for w avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83035#p83035"><![CDATA[
W  sposób kolegi szopler wszystko działa dopóki nie zastosuje w tym warunku if pętli for. Zapala się tylko jedna dioda i na tym staje zamiast zapalać pozostałe w kolejności.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3349">Arek1111111111</a> — 2 cze 2014, o 13:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sq8dsr]]></name></author>
<updated>2014-06-02T13:13:57+01:00</updated>
<published>2014-06-02T13:13:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83034#p83034</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83034#p83034"/>
<title type="html"><![CDATA[Re: Timer programowy i pętla for w avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83034#p83034"><![CDATA[
No tak, tylko że koledze chodziło o realizację pętli FOR z uwzględnieniem opóźnienia poszczególnych przebiegów pętli od timera.<br /><br />Jeśli będzie tak:<br />[syntax=c]while(1) {<br />                if (!Timer_10ms) {<br />                        Timer_10ms = 10;<br />                // Tu wstawiamy FOR<br />                }<br />}[/syntax]<br /><br />To uruchomienie pętli wykona się po spełnieniu warunku od timera programowego. I całą pętla FOR wykona się z pełną prędkością, bez opóźnień między poszczególnymi zwiększeniami swojego licznika. <br />A chyba nie o to chodzi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1589">sq8dsr</a> — 2 cze 2014, o 13:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2014-06-02T13:03:29+01:00</updated>
<published>2014-06-02T13:03:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83030#p83030</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83030#p83030"/>
<title type="html"><![CDATA[Re: Timer programowy i pętla for w avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83030#p83030"><![CDATA[
A czy mógłbyś  program wrzucić w znaczniki <em>Syntax</em> bo jakoś <span style="color: #FF0000"><strong>STRASZNIE</strong></span> się to czyta<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 2 cze 2014, o 13:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[szopler]]></name></author>
<updated>2014-06-02T13:13:21+01:00</updated>
<published>2014-06-02T13:02:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83029#p83029</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83029#p83029"/>
<title type="html"><![CDATA[Re: Timer programowy i pętla for w avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83029#p83029"><![CDATA[
1) Brak znaczników &quot;syntax&quot; - taki kod wrzucony jako tekst źle się czyta<br />2) While(Timer) - ?!<br /><br />[syntax=c]volatile uint8_t flaga;<br /><br />ISR(TIMER1_COMPA_vect) {<br />flaga = 1;<br />}[/syntax]<br />Natomiast w pętli głównej:<br />[syntax=c]while(1) {<br />if (flaga == 1) {<br />flaga = 0;<br />// kod do wykonania co 10ms np.<br />static uint8_t licznik;<br />liczba = pgm_read_byte(&amp;tab&#91;licznik&#93;);<br />PORTA = liczba; <br />licznik++;<br />if ( licznik &gt;= 22 ) licznik = 0;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=82">szopler</a> — 2 cze 2014, o 13:02</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Arek1111111111]]></name></author>
<updated>2014-06-02T12:53:20+01:00</updated>
<published>2014-06-02T12:53:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83026#p83026</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83026#p83026"/>
<title type="html"><![CDATA[Timer programowy i pętla for w avr]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7269&amp;p=83026#p83026"><![CDATA[
Witam, po obejrzeniu poradnika Mirka: <!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2014/05/mikrokontrolery-avr-jak-zaczac-wprawki.html" >http://mirekk36.blogspot.com/2014/05/mi ... rawki.html</a><!-- m -->,<br />Próbuje użyć do sterowania 8 diodami led podłączonymi katodami do portuA mikrokontrolera atmega32 taktowanego kwarcem11mhz.<br />Dane do wyświetlania odczytywane są z tablicy 22 elementów umieszczonych w pamięci FLASH, w pętli for co 100ms na porta ma być bodawany kolejny adres z tablicy.<br /> Problem jest z timerem aby działał nie zawieszając ani nie blokując programu głównego. Wzorowałem się również na projekcie wielozadaniowym z bb. Jeśli zastosuje w pętli for polecenie: while(Timer1); program działa całkowicie prawidłowo jednak polecenie to blokowałoby prace pozostałych części programu. Załączam przykładowy kod DZIAŁAJĄCEGO programu:<br />[syntax=c]#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /> const uint8_t tab&#91;&#93; PROGMEM = {0, 128, 64, 160,80, 40, 20,<br />10, 5, 2, 1, 0, 1, 2, 5, 10, 20, 40, 80, 160, 64, 128};<br /> volatile uint8_t Timer1;/* timery programowe 100Hz */<br /><br /><br />int main(void)<br />{<br />  TCCR2 |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />  TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />  OCR2 = 107;// przerwanie porównania co 10ms (100Hz)<br />  TIMSK |= (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br />  <br />DDRA = 0xff;<br />PORTA = 0xff;<br />sei();<br />  while(1)<br />  {<br /> {<br />      uint8_t i, liczba;<br />      for( i=0; i&lt;22; i++ )<br />      {<br />       Timer1 = 1;<br />        while(Timer1);                                       //tego polecenia chce się pozbyć<br />        liczba = pgm_read_byte( &amp;tab&#91;i&#93; );<br />        PORTA = ~liczba;<br />      }<br /> }<br />  }<br />}<br /><br /><br /><br />//procedura obsługi przerwań, timer programowy<br />ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />}<br /><br />próbowałem zmienić na coś takiego jednak nie działa:<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /> const uint8_t tab&#91;&#93; PROGMEM = {0, 128, 64, 160,80, 40, 20,<br />10, 5, 2, 1, 0, 1, 2, 5, 10, 20, 40, 80, 160, 64, 128};<br /> volatile uint8_t Timer1;/* timery programowe 100Hz */<br /> volatile uint8_t flaga;<br /><br />int main(void)<br />{<br />  TCCR2 |= (1&lt;&lt;WGM21);// tryb pracy CTC<br />  TCCR2 |= (1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20);// preskaler = 1024<br />  OCR2 = 107;// przerwanie porównania co 10ms (100Hz)<br />  TIMSK |= (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br /><br />DDRA = 0xff;<br />PORTA = 0xff;<br />sei();<br />  while(1)<br />  {<br /><br />      uint8_t i, liczba;<br />      if(flaga=1) //jesli wystapi flaga przerwanie programowego<br />                 {<br />              i=0;<br />//                  for( i=0; i&lt;22; i++ )<br />                  if(i&lt;22)<br />                  {<br />                   Timer1 = 10; //załaduj do timera programowego 10 czyli 100ms<br />//                  while(Timer1);<br />                 liczba = pgm_read_byte( &amp;tab&#91;i&#93; );  //czytaj ustawienie portów z pamięci FLASH<br />                  PORTA = ~liczba;                    //ustaw stan PORTA<br />                   flaga=0;       //zeruj flage przerwania<br />                         i++;<br />                  }<br />      }<br /><br />   }<br />}<br /><br /><br />//procedura obsługi przerwań, timer programowy<br />ISR(TIMER2_COMP_vect)<br />{<br />uint16_t n;<br />n = Timer1;/* 100Hz Timer1 */<br />if (n)<br />{<br />Timer1 = --n;<br />flaga = 1;    //ustawienie flagi przerwania programowego<br />}<br />}[/syntax]<br /><br /><span style="color: #FF0000">Kody umieszczamy w syntax</span> <span style="color: #00FF00">rezasurmar</span><br />Proszę o wasze uwagi co do tego kodu, zaznaczam że dopiero zaczynam zabawę w te klocki więc proszę o wyrozumiałość.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3349">Arek1111111111</a> — 2 cze 2014, o 12:53</p><hr />
]]></content>
</entry>
</feed>