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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-07-20T19:25:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=822&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-07-20T19:25:15+01:00</updated>
<published>2012-07-20T19:25:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=10382#p10382</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=10382#p10382"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=10382#p10382"><![CDATA[
<div class="quotetitle">cs3 napisał(a):</div><div class="quotecontent"><br />Witam, <br />nie wiem czy dobrze pytam ale czy te zadania co podałeś to są do zrobienia na jednym timerze (np. Timer0)? W tym timerze, inkrementowana jest co pewien czas (np. 100 razy na sekundę) wartość Timer1 i w pętli while(1) wykonywane jest np. zapalanie LED co 1 sekundę i PWM. Chyba to źle rozumiem :&gt;<br /></div><br /><br />Poczytaj rozdział O Wstępie do systemów czasu rzeczywistego w pierwszej książce<br /><br /><!-- 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 />to zrozumiesz o co chodzi w tym zadanku ok ? <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=54">mirekk36</a> — 20 lip 2012, o 19:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[cs3]]></name></author>
<updated>2012-07-20T18:44:05+01:00</updated>
<published>2012-07-20T18:44:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=10381#p10381</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=10381#p10381"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=10381#p10381"><![CDATA[
Witam, <br />nie wiem czy dobrze pytam ale czy te zadania co podałeś to są do zrobienia na jednym timerze (np. Timer0)? W tym timerze, inkrementowana jest co pewien czas (np. 100 razy na sekundę) wartość Timer1 i w pętli while(1) wykonywane jest np. zapalanie LED co 1 sekundę i PWM. Chyba to źle rozumiem :&gt;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=456">cs3</a> — 20 lip 2012, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-07T16:14:03+01:00</updated>
<published>2012-02-07T16:14:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2467#p2467</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2467#p2467"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2467#p2467"><![CDATA[
<div class="quotetitle">DidekxD napisał(a):</div><div class="quotecontent"><br />Działa bez problemowo. A co do dwóch timerów to wiedziałem że wystarczy jeden. Po prostu w razie wu użyłem dwóch.<br /><br />Tak też dziękuje za pomoc i przy okazji pokazanie uproszczonego zamiennika pętli for() na moje potrzeby <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />Tylko, żebyś dobrze zrozumiał co chciałem przekazać. Bo to nie o to chodzi, że tym sposobem można wykorzystać tylko jeden timer programowy. Ty w swoich kodach próbowałeś wykorzystać je w ogóle niezgodnie z przeznaczeniem. One miały być w twoich kodach niejako ekwiwalentem funkcji _delay_ms() a tak nie można bo sam widziałeś do czego to prowadzi.<br /><br />I dlatego też to co pokazałem nie jest absolutnie pokazaniem uproszczonego zamiennika pętli for(). Stosujesz niestety na razie takie jeszcze proste &quot;kalki&quot; myślowe (co poniekąd rozumiem) .... ale staraj się tego unikać bo to wprowadza cię w błąd coraz dalej.<br /><br />Pokazałem sposób wykorzystania timera programowego do realizacji twojego celu ale w ogóle w oderwaniu od prób zastępowania czegoś w twoim kodzie. Po prostu tu podchodzimy całkiem inaczej. Wyznaczamy sobie grupy zadań, które będą się wykonywały z zadaną rozdzielczością czasową. Co nie ma nic wspólnego z zastępowaniem wszelakich pętli w tym for().<br /><br />Dlatego w celu lepszego zrozumienia tego proponuję ci rozbudować ten kod np o takie zadanie.<br /><br />1. ma się wykonywać to co dotychczas (rozjaśnianie i ściemnianie diody LED przez PWM)<br />2. na wyświetlaczu LCD ma sobie działać licznik, który będzie zliczał tyknięcia ale równo co 500ms<br />3. inna dioda LED ma sobie migać równo co 1 sekundę.<br /><br />Jak to zrobisz to nie ma bata - połkniesz do końca bakcyla i zrozumiesz to do końca. Bo jak widzisz, mówię tu o założeniach wg których niezależnie od siebie mają się wykonywać jakby 3 różne procesy ale w tym samym czasie <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=54">mirekk36</a> — 7 lut 2012, o 16:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-07T15:54:01+01:00</updated>
<published>2012-02-07T15:54:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2466#p2466</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2466#p2466"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2466#p2466"><![CDATA[
Działa bez problemowo. A co do dwóch timerów to wiedziałem że wystarczy jeden. Po prostu w razie wu użyłem dwóch.<br /><br />Tak też dziękuje za pomoc i przy okazji pokazanie uproszczonego zamiennika pętli for() na moje potrzeby <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=146">DidekxD</a> — 7 lut 2012, o 15:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-07T08:54:02+01:00</updated>
<published>2012-02-07T08:54:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2451#p2451</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2451#p2451"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2451#p2451"><![CDATA[
Nie, nie, nie panie kolego - to nadal błędne założenia co do działania timerów programowych a nawet w tym twoim programie niepotrzebne są dwa timery programowe. To że użyłeś tych dwóch co najwyżej nieco niweluje przypadkowość <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Ale program całkowicie źle działa ... <br /><br />rozważ takie podejście, poniżej definicja 2 zmiennych narzędziowych a jeszcze niżej fragment działania JEDNEGO timera programowego, który realizuje ci płynne rozjaśnianie i ściemnianie <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Idź w takim kierunku myślenia o sposobach zastosowań timerów programowych - bo ty jeszcze (co widać z poprzednich przykładów masz na razie w głowie taką prostą kalkę myślową i) cały czas kojarzysz timery programowe jako COŚ co ma wprost zastąpić _delsy_ms() ... a to nie tak <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Całkiem inaczej ...<br /><br />zobacz - po co mi pętle for() w takim przypadku ? Przeanalizuj dokładnie co ja tu zrobiłem. <br /><br />[syntax=c]uint8_t kierunek, my_pwm;<br /><br />   while(1) {<br /><br />      // ***** tu działa timer programowy<br />      if( !Timer1 ) {<br />         if( kierunek ) {<br />            if( my_pwm &lt; 255 ) my_pwm++; else kierunek=0;<br />         } else {<br />            if( my_pwm &gt; 0 ) my_pwm--; else kierunek=1;<br />         }<br />         Timer1=10;<br />      }<br />      // ****** koniec timera programowego<br /><br />   } // koniec while(1)[/syntax]<br /><br />Odpaliłem timer programowy i równo co określony czas realizuję działania. Rozdzielczość czasową na poziomie wyznaczonym przez Timer1 mam zapewnioną <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> Krótko i na temat.<br /><br />Sprawdź jaki będziesz miał efekt na swojej diodzie LED.<br /><br />Aha - no i teraz wyobraź sobie, że możesz w tej samej pętli while(1) odpalić drugi albo i trzeci timer programowy i na podobnej zasadzie także płynnie ale także całkowicie niezależnie jakby w jednym czasie realizować całkiem inne zadania ... i to jest największą zaletą takich mechanizmów. Przy czym każdy timer programowy może działać z własną rozdzielczością czasową!!!<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 7 lut 2012, o 08:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-07T00:44:23+01:00</updated>
<published>2012-02-07T00:44:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2449#p2449</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2449#p2449"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2449#p2449"><![CDATA[
Tak tego nie przewidziałem aczkolwiek już coś moje myśli wokoło tego krążyły. Dziękuje za poradę problem rozwiązany aczkolwiek sądzę że to jest złe rozwiązanie bo działa tak jak funkcja delay zatrzymująca mi program w pętli puki się nie wykona. Tak też uważam że moje rozwiązanie na szybko w warunkach if które jest powyżej jest lepsze. Tak sadzę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br />Dla Ciekawskich podam jak powinien wyglądać kod. Działający kod.<br /><br />[syntax=c]for(uint8_t i = 0;i&lt;254;)<br />{<br />if(!Timer1) // opóźnienie timerem programowym 10ms<br />{<br />Timer1=1;// 10ms<br />OCR1A = i;// wypełnienie PWM<br />i++;// zwiększenie zmiennej po planowym opóźnieniu<br />}<br />}<br />for(uint8_t i = 255;i&gt;1;)<br />{<br /><br />if(!Timer2){<br />Timer2=1;<br />OCR1A = i;<br />i--;<br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=146">DidekxD</a> — 7 lut 2012, o 00:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-06T23:56:38+01:00</updated>
<published>2012-02-06T23:56:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2448#p2448</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2448#p2448"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2448#p2448"><![CDATA[
No dobrze - to tu widać twój podstawowy błąd rozumowania z tą pętlą for(). Ona w jednym i drugim przypadku wykonuje się tysiące razy szybciej niż to co jest w wywołaniu timera programowego, który odpali się co 1ms. Pomyśl. Dlatego czasem zdarzy się, że w całej pętli while trafi się wykonanie warunki if() z timerem programowym a czasem nie, stąd jakieś skokowe i całkiem przypadkowe wartości zmiennej i trafiają do OCR1A.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 lut 2012, o 23:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-06T23:33:57+01:00</updated>
<published>2012-02-06T23:33:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2447#p2447</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2447#p2447"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2447#p2447"><![CDATA[
To tak jeśli zamieszczę OCR1A=i w if(!Timer1) to dioda wyraźnie miga i i nic poza tym. jeśli zrobię tak jak w przykładach wyżej czyli poza ifem to po prostu tak jak by się zawiesza na powiedzmy OCR1A=127.<br /><br />[syntax=c]                            for(uint8_t i = 0;i&lt;254;i++)<br />                            {<br />                                    OCR1A = i;<br />                                    if(!Timer1) Timer1=1;   //Programowy timer<br />                            }<br />[/syntax]<br /><br /><br />[syntax=c]                            for(uint8_t i = 0;i&lt;254;i++)<br />                            {<br />                                    if(!Timer1)<br />                                    {<br />                                          Timer1=1;   //Programowy timer<br />                                          OCR1A = i;<br />                                     } <br />                            }<br />[/syntax]<br /><br /><br />Nie wiem jak mógłbym to lepiej wytłumaczyć.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=146">DidekxD</a> — 6 lut 2012, o 23:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-02-06T23:15:06+01:00</updated>
<published>2012-02-06T23:15:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2444#p2444</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2444#p2444"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2444#p2444"><![CDATA[
mi się po prostu wydaje ze źle wyliczył czas wykonania pętli i stąd brak płynności<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=58">SunRiver</a> — 6 lut 2012, o 23:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-06T23:07:28+01:00</updated>
<published>2012-02-06T23:07:28+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2442#p2442</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2442#p2442"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2442#p2442"><![CDATA[
Hmm musiałbym chyba próbować jakoś odpalić twój kod żeby zrozumieć czemu nie możesz uzyskać płynnego sterowania PWM, ale nie za bardzo mam możliwość i czas niestety <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> Napisz chociaż w skrócie o co chodzi z tym brakiem płynności ? Zawiesza się coś czy jak ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 lut 2012, o 23:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-06T22:20:24+01:00</updated>
<published>2012-02-06T22:20:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2437#p2437</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2437#p2437"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2437#p2437"><![CDATA[
Raczej nic nie wspominałem o while() mi chodzi jedynie o to czemu nie mogę uzyskać płynnego wysterowania wypełnieniem PWM dla diody w dwóch pętlach for() przy użyciu programowych timerów(opóźnień) gdy przy użyciu '_delay_ms(10);' działa pięknie. Może teraz jaśniej trochę objaśniłem <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=146">DidekxD</a> — 6 lut 2012, o 22:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-02-06T21:10:38+01:00</updated>
<published>2012-02-06T21:10:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2421#p2421</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2421#p2421"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2421#p2421"><![CDATA[
No właśnie mnie ciężko się wypowiedzieć o tym rozwiązaniu bo ani z opisu nie wiem do czego służy a o kompletnym braku komentarzy sam napisałeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie wspomnę o lekkim bałaganie w kodzie.<br /><br />Ale tak ogólnie wydaje się że samo zastosowanie timerów programowych OK, tylko co to ma wspólnego z pętlą for() vs while() ? nie wiem za bardzo o co chodzi - jak pisałem wcześniej.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 6 lut 2012, o 21:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2012-02-06T20:16:37+01:00</updated>
<published>2012-02-06T20:16:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2406#p2406</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2406#p2406"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2406#p2406"><![CDATA[
Ujmę to tak teoria ma nie wiele wspólnego z praktyką <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br />Ale ogólnie dobre myślenie -- zawsze jakiś no delay no-nie <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=58">SunRiver</a> — 6 lut 2012, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-06T20:12:56+01:00</updated>
<published>2012-02-06T20:12:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2405#p2405</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2405#p2405"/>
<title type="html"><![CDATA[Re: Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2405#p2405"><![CDATA[
Rozwiązałem problem za pomocą paru zmiennych i warunków if. Aczkolwiek zastanawiam się czemu to nie działa z pętlą for...<br />Poniżej moje obejście problemu za pomocą pętli if. Robione na szybko.<br /><br />[syntax=c] static uint8_t i,b=0;<br /> uint8_t a=1;<br />while(1)<br />{<br />//if(!Timer1)<br />//{<br />//Timer1=100;<br />//PORTC ^= (1&lt;&lt;PC0);<br />//}<br /><br />if(i&lt;254 &amp;&amp; a==1)<br />{<br />if(!Timer1)<br />{<br />//_delay_ms(1);<br />Timer1=1;<br />OCR1A = b++;<br />if(b==255) a=0;<br />}<br />i++;<br />}<br />else i=255;<br /><br />if(i&gt;1 &amp;&amp; a==0)<br />{<br />if(!Timer1)<br />{<br />//_delay_ms(1);<br />Timer1=1;<br />OCR1A = b--;<br />if(b==0) a=1;<br />}<br />i--;<br />}<br />else i=0;[/syntax]<br /><br /><br />Z góry przepraszam za brak komentarzy aczkolwiek jak wspominałem, pisałem to na szybko.<br />Tak w ogóle co Panowie sądzicie o takim teoretycznym rozwiązaniu ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=146">DidekxD</a> — 6 lut 2012, o 20:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[DidekxD]]></name></author>
<updated>2012-02-06T19:45:46+01:00</updated>
<published>2012-02-06T19:45:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2395#p2395</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2395#p2395"/>
<title type="html"><![CDATA[Sprzętowy Timer, pętla for, opóźnienie.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=822&amp;p=2395#p2395"><![CDATA[
Witam.<br /><br />Mam mały problem z zaadoptowaniem opóźnienia programowego timera w pętli for.<br /><br />[syntax=c]for(uint8_t i = 0;i&lt;254;i++)<br />{<br />OCR1A = i;<br />if(!Timer1) Timer1=1;   //Programowy timer<br />//_delay_ms(10);          <br />}[/syntax] <br /><br /><br />Jak widać zamieniłem Delaya timerem programowym i o ile takie coś jak poniżej działa. I ładnie co sekundę zapala i gasi mi diodę led to po wyżej dzieją się jakieś cyrki.<br /><br />[syntax=c]if(!Timer1)<br />{<br />Timer1=100;<br />PORTC ^= (1&lt;&lt;PC0);<br />}[/syntax]<br /><br />W gwoli formalności podam że z opóźnieniem delay działa normalnie ta pętla. Procek to Atmega8 (mam od kumpla).<br />Poniżej kody do programowego timera.<br /><br />[syntax=c]// programowe timery<br />volatile uint16_t Timer1, Timer2;  // 100Hz<br />[/syntax]<br /><br />[syntax=c]/************* PROGRAMOWE TIMERY ***************/<br />TCCR2 |= (1&lt;&lt;WGM21);// tryb CTC<br />TCCR2 |= (1&lt;&lt;CS20)|(1&lt;&lt;CS21)|(1&lt;&lt;CS22); // Preskaler 1024<br />OCR2 = 78; // Przerwanie porównania co 10ms (100Hz)<br />TIMSK |= (1&lt;&lt;OCIE2);// Odblokowanie przerwania CompareMatch<br />sei();// Zezwolenie na wykonywanie przerwań<br />/************* KONIEC ***************/[/syntax]<br /><br />[syntax=c]ISR(TIMER2_COMP_vect)<br />{<br />uint16_t x;<br />x = Timer1;// 100Hz Timer1<br />if (x) Timer1 = --x;<br />x = Timer2;// 100Hz Timer2<br />if (x) Timer2 = --x;<br />}[/syntax]<br /><br /><br />Zegar taktowany wewnętrznym generatorem(chyba tak się to nazywało ^^) 8 000 000Hz<br />Bardzo jestem ciekaw czemu to nie bangla z pętlą for.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=146">DidekxD</a> — 6 lut 2012, o 19:45</p><hr />
]]></content>
</entry>
</feed>