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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2012-09-16T07:26:39+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=1539&amp;mode</id>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2012-09-16T07:26:39+01:00</updated>
<published>2012-09-16T07:26:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15234#p15234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15234#p15234"/>
<title type="html"><![CDATA[Re: Delay ~1ms z użyciem timera]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15234#p15234"><![CDATA[
Szczegóły projkektu.. <br />No ma to działać bez funkcji blokującej (Delay_ms) i ma tworzyć efekty na diodzie rgb<br /><br />No może źle powiedziałem że się nie nada..<br />Wydaje mi się że 2gi sposób będzie lepszy.<br /><strong>Sposób 1</strong> (ten proponowany przez  MichalXY<br />//ustawiamy przerwanie tak, że sekundy inkrementują się co 1ms<br />[syntax=c]<br />uint8_t krok1=1,krok2=0,krok3=0,pomoc=0;<br />while(1){<br />if( 0 == (sekundy%10) ){   //co 10 ms gdy reszta z dzielenia modulo 10 = 0 <br />       if(krok1){<br />       OCR0A+= 1;//zwieksz jasnosc red<br />       if(OCR0A=255) {krok1=0; krok2=1;}<br />       }<br />    <br />      if(krok2){<br />      pomoc++;<br />      if(pomoc==100){pomoc=0;krok2=0;krok3=1;} //czyli po 10*100ms=1s zrob krok 3<br /><br />    if(krok3){<br />    OCR0A-= 1;//zmniejsz jasnosc red<br />    OCR0B +=1; //zwieksz jasnoc green<br />   if(OCR0A ==0 &amp;&amp; OCR1B==155){krok3=0;krok4=1;}<br /> // i tak dalej te kroki<br />}<br />}<br />/////////////////////////////////////////////////////<br />/* pełni funkcję timera programowego wyznaczającego podstawę czasu = 1ms */<br />ISR(TIMER0_COMP_vect)<br />{<br /><br />sekundy++;/* zwiększ licznik sekund */<br />if(sekundy&gt;59) sekundy=0; /* jeśli ilość sekund &gt; 59 - wyzeruj */<br /><br />}<br />}<br />    <br />[/syntax]<br /><br /><strong>Sposób nr 2</strong><br /><br />[syntax=c]    <br />volatile uint8_t Timer1,Timer2;<br /> <br />/********** KONFIGURACJA TIMERA2 do wygenerowania przerwania ****************/<br />TCCR2 |=(1&lt;&lt;WGM21); //TRYB CTC<br />TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); //Presclaer = 1024<br />OCR2 = 108; //Przerwanie porownaiania co 1ms (1000hz)<br />TIMSK = (1&lt;&lt;OCIE2); //Odblokowanie przerwania COmpare Match<br />/*********************** INICJALIZACJA WYSW I RC5 ***************************/<br /> <br />uint8_t krok1=1,krok2=0,krok3=0;<br />    while(1){<br />     <br />      if(!Timer1){<br />      Timer1=10;// 10ms przerwy, aby oko ladnie widzialo rozjasnianie<br />     <br />       if(krok1){<br />         OCR0A+= 1;//zwieksz jasnosc red<br />           if(OCR0A=255) {krok1=0; krok2=1;}<br />       }<br />     <br />       if(Krok2){<br />    // tu czekaj przez 1 s<br />    // jesi odczekas sekunde to krok2=0, krok3=1;<br />      }<br />     <br />      if(krok3){<br />    OCR0A-= 1;//zmniejsz jasnosc red<br />    OCR0B +=1; //zwieksz jasnoc green<br />       if(OCR0A ==0 &amp;&amp; OCR1B==155){krok3=0;krok4=1;}<br />    }<br />        //i tak dalej...<br />    }<br />     <br /><br /><br />///////////////////////////////////////////////////////<br />ISR(TIMER2_COMP_vect){<br /> <br />uint16_t x;<br />x = Timer1;                             // 1000Hz Timer1<br />if (x) Timer1 = --x;<br />x = Timer2;                             // 1000Hz Timer2<br />if (x) Timer2 = --x;<br />}<br />[/syntax]<br /><br /><br />Sposób 2gi chyba lepszy <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 16 wrz 2012, o 07:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2012-09-15T17:28:20+01:00</updated>
<published>2012-09-15T17:28:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15213#p15213</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15213#p15213"/>
<title type="html"><![CDATA[Re: Delay ~1ms z użyciem timera]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15213#p15213"><![CDATA[
MichalXY, akurat te rozwiązanie się dla mnie nie sprawdzi, ale zastosuje podobne(pisałem o tym w pierwszym poście)<br />Dzięki za rady<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 15 wrz 2012, o 17:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[MichalXY]]></name></author>
<updated>2012-09-15T16:01:11+01:00</updated>
<published>2012-09-15T16:01:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15206#p15206</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15206#p15206"/>
<title type="html"><![CDATA[Re: Delay ~1ms z użyciem timera]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15206#p15206"><![CDATA[
Kolego xamrex a jakbyś spróbował wykorzystać timery programowe tak jak w przykładzie z 1-wire w Mirkowej książce, nie było by żadnego blokowania...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=226">MichalXY</a> — 15 wrz 2012, o 16:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2012-09-15T07:05:57+01:00</updated>
<published>2012-09-15T07:05:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15136#p15136</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15136#p15136"/>
<title type="html"><![CDATA[Re: Delay ~1ms z użyciem timera]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15136#p15136"><![CDATA[
GwynBleidD ale używałeś delay_ms??Czy masz to na timerze?<br />Bo głównie mi o to chodzi<br /><br /><br />Nie wiem czy masz przyciski (aby zmienić tryb)..<br />Bo tu jest wg. mnie największy problem z użyciem bokującej funkcji deay_ms<br /><br />No bo spójrzmy, jeśli mamy 2  tryby:<br />1-rozjaśnia czerwoną, potem zieloną i na końcu niebieską (co da barwę białą))<br />2- rozjaśnia czerwoną, potem ją gasi, rozjaśnia zieoną potem gasi i rozjaśnia niebieską i potem gaśi..<br /><br />No to taki prosty kodzik:<br />[syntax=c]<br />if (tryb==1){<br />  for (uint8_t i=0;i&lt;255;i++){<br />      R++;<br />      _delay_ms(10);<br />  }<br /> <br />  for (uint8_t i=0;i&lt;255;i++){<br />      G++;<br />      _delay_ms(10);<br />  }<br /><br />  for (uint8_t i=0;i&lt;255;i++){<br />      B++;<br />      _delay_ms(10);<br />  }<br />}<br /><br /> if(tryb==2){<br />     for (uint8_t i=0;i&lt;255;i++){<br />      R++;<br />      _delay_ms(10);<br />  }<br />  for (uint8_t i=0;i&lt;255;i++){<br />      R--;<br />      _delay_ms(10);<br />  }<br />  for (uint8_t i=0;i&lt;255;i++){<br />      G++;<br />      _delay_ms(10);<br />  }<br />  for (uint8_t i=0;i&lt;255;i++){<br />      G--;<br />      _delay_ms(10);<br />  }<br />  for (uint8_t i=0;i&lt;255;i++){<br />      B++;<br />      _delay_ms(10);<br />  }<br />  for (uint8_t i=0;i&lt;255;i++){<br />      B--;<br />      _delay_ms(10);<br />  }<br /><br /> }<br />[/syntax]<br /><br /><br />No i teraz gdybyśmy 'byli' w połowie wykonywania trybu 2, i przyszłaby informacja, że zmienił się tryb z 2 na 1, to i tak musieibyśmy czekać na wykonanie się całgo trybu 2, dopiero po tym, procek mógły obsużyć krok1.<br /><br />Także chyba muszę to zrobić na timerze..<br />Tyko chciałbym wiedzieć, czy też używałeś timera do generowania opóźnienia, albo użyłeś delay_ms ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=74">xamrex</a> — 15 wrz 2012, o 07:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2012-09-15T01:06:07+01:00</updated>
<published>2012-09-15T01:06:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15133#p15133</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15133#p15133"/>
<title type="html"><![CDATA[Re: Delay ~1ms z użyciem timera]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15133#p15133"><![CDATA[
Dokładnie - tzn zrobić to można na 1001 sposobów, i ciężko mi nie tylko z uwagi na już bardzo późną porę ale i też na to że takie rozwiązanie zwykle mocno dopasowuje się do aktualnego projektu .... to pomimo wszystko kolega GwynBleid - patrząc ogólnie na opis - podał jedno z wielu rozwiązań. Spróbuj to prześledzić ...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 wrz 2012, o 01:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[xamrex]]></name></author>
<updated>2012-09-14T20:44:25+01:00</updated>
<published>2012-09-14T20:44:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15121#p15121</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15121#p15121"/>
<title type="html"><![CDATA[Delay ~1ms z użyciem timera]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=1539&amp;p=15121#p15121"><![CDATA[
Witam,<br />Jak już pewnie większość z was wie, biorę się za lampkę RGB.<br /><br />Przeważnie możemy spotkać takie kody:<br />[syntax=c]for (i=0;i&lt;255;i++)<br />{<br />R += 1;<br />_delay_ms(opoznienie);<br />}<br />_delay_ms(1000);<br />for (i=0;i&lt;255;i++)<br />{<br />R -= 1;<br />G += 1;<br />_delay_ms(opoznienie);<br />}<br />[/syntax]<br /><br />Użyta jest tu funkcja deay_ms.<br />Tej funkcji ja użyć nie mogę(nie mogę blokować uc)<br /><br />Padło na timer 16bitowy(tylko taki mam wolny ;D)<br />No i teraz w jaki sposób to ugryźć?<br /><br />Ja  myślę sobie tak:<br />Zrobić podobnie jak jest w książce:<br />[syntax=c]<br />volatile uint8_t Timer1,Timer2;<br /><br />/********** KONFIGURACJA TIMERA2 do wygenerowania przerwania ****************/<br />TCCR2 |=(1&lt;&lt;WGM21); //TRYB CTC<br />TCCR2 |=(1&lt;&lt;CS22)|(1&lt;&lt;CS21)|(1&lt;&lt;CS20); //Presclaer = 1024<br />OCR2 = 108; //Przerwanie porownaiania co 1ms (1000hz)<br />TIMSK = (1&lt;&lt;OCIE2); //Odblokowanie przerwania COmpare Match<br />/*********************** INICJALIZACJA WYSW I RC5 ***************************/<br /><br />while(1){<br /><br />  if(!Timer1){<br />    Timer1=10;// 10ms przerwy, aby oko ladnie widzialo rozjasnianie<br />     OCR0A+= 1;//zwieksz jasnosc<br />   }<br />}<br /><br /><br /><br />ISR(TIMER2_COMP_vect){<br /><br />uint16_t x;<br />x = Timer1;// 1000Hz Timer1<br />if (x) Timer1 = --x;<br />x = Timer2;// 1000Hz Timer2<br />if (x) Timer2 = --x;<br />}<br />[/syntax]<br /><br /><br />Tylko w takim wypadku jest naprawdę dużo kombinowania, proszę spojrzeć jeśli OCR0A dojdzie do wartości max (255), czyi dioda Red będzie świeciła maksymalnie, to następnie musimy poczekać 1000ms, potem ją(czerwoną) przyciemniać a rozjaśniać zieloną..<br />Teraz aby tego dokonać to musiałbym zrobić w pętli while jakieś zmienne pomocnicze: krok1, krok2, krok3... itp..<br /><br />[syntax=c]<br />uint8_t krok1=1,krok2=0,krok3=0;<br />while(1){<br /><br />  if(!Timer1){<br />  Timer1=10;// 10ms przerwy, aby oko ladnie widzialo rozjasnianie<br /><br />   if(krok1){<br />     OCR0A+= 1;//zwieksz jasnosc red<br />       if(OCR0A=255) {krok1=0; krok2=1;}<br />   }<br /><br />   if(Krok2){<br />// tu czekaj przez 1 s<br />// jesi odczekas sekunde to krok2=0, krok3=1;<br />  }<br /><br />  if(krok3){<br />OCR0A-= 1;//zmniejsz jasnosc red<br />OCR0B +=1; //zwieksz jasnoc green<br />   if(OCR0A ==0 &amp;&amp; OCR1B==155){krok3=0;krok4=1;}<br />}<br />    //i tak dalej...<br />}<br />[/syntax]<br /><br />Czy da sie moze zrobić to jakos prosciej??<br />Może w zły sposób się za to biorę??<br />Byłbym wdzięczny, gdyby w tym temacie wypowiedział się <strong>Mirek</strong> <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=74">xamrex</a> — 14 wrz 2012, o 20:44</p><hr />
]]></content>
</entry>
</feed>