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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-11-21T16:21:58+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=13647&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-21T16:21:58+01:00</updated>
<published>2015-11-21T16:21:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145994#p145994</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145994#p145994"/>
<title type="html"><![CDATA[Re: Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145994#p145994"><![CDATA[
No to teraz masz przynajmniej jeden problem rozwiązany (inicjalizacja przerwania jest OK) - czyli poprawnie użyte przerwanie w trybie CTC <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... Zatem możesz szukać już błędu spokojnie w innych częściach swojego kodu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2015, o 16:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzynier]]></name></author>
<updated>2015-11-21T16:09:36+01:00</updated>
<published>2015-11-21T16:09:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145992#p145992</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145992#p145992"/>
<title type="html"><![CDATA[Re: Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145992#p145992"><![CDATA[
Być może nie do końca, nie mam zbytnio wprawy w czytaniu noty katalogowej, a najbardziej mylące są dla mnie opisy rejestrów oznaczone jako <em>[...]register A</em> czy <em>[...] register B</em>. Tak więc moja nowa inicjalizacja timera:<br /><br />[syntax=c]//inicjalizacia timera 1 - symulacja silnika<br />TCCR1B |= (1 &lt;&lt; WGM12); // tryb CTC<br />OCR1A = 30625;<br />TCCR1B |= (1 &lt;&lt; CS11)| (1 &lt;&lt; CS10); //prescaler 64<br />TIMSK1 |= (1 &lt;&lt; OCIE1A); //włączenie przerwania od CTC[/syntax]<br /><br />Poniżej przerwanie:<br /><br />[syntax=c]ISR(TIMER1_COMPA_vect)<br /><br />{<br /><br />if (start) {<br /><br />switch (buf2) {<br /><br />case 1:<br /><br />T_PAR1_ON;<br />T_PAR2_OFF;<br />T_PAR3_OFF;<br />T_PAR4_OFF;<br />SLED1_OFF;<br />SLED2_ON;<br /><br /><br />break;<br /><br />case 2:<br /><br />T_PAR1_ON;<br />T_PAR2_OFF;<br />T_PAR3_OFF;<br />T_PAR4_OFF;<br />SLED1_ON;<br />SLED2_OFF;<br /><br />break;<br /><br />case 3:<br /><br />T_PAR1_OFF;<br />T_PAR2_ON;<br />T_PAR3_OFF;<br />T_PAR4_OFF;<br />SLED1_OFF;<br />SLED2_ON;<br /><br />break;<br /><br />case 4:<br /><br />T_PAR1_OFF;<br />T_PAR2_ON;<br />T_PAR3_OFF;<br />T_PAR4_OFF;<br />SLED1_ON;<br />SLED2_OFF;<br /><br />break;<br /><br />case 5:<br /><br />T_PAR1_OFF;<br />T_PAR2_OFF;<br />T_PAR3_ON;<br />T_PAR4_OFF;<br />SLED1_OFF;<br />SLED2_ON;<br /><br />break;<br /><br />case 6:<br /><br />T_PAR1_OFF;<br />T_PAR2_OFF;<br />T_PAR3_ON;<br />T_PAR4_OFF;<br />SLED1_ON;<br />SLED2_OFF;<br /><br />break;<br /><br />case 7:<br /><br />T_PAR1_OFF;<br />T_PAR2_OFF;<br />T_PAR3_OFF;<br />T_PAR4_ON;<br />SLED1_OFF;<br />SLED2_ON;<br /><br />break;<br /><br />case 8:<br /><br />T_PAR1_OFF;<br />T_PAR2_OFF;<br />T_PAR3_OFF;<br />T_PAR4_ON;<br />SLED1_ON;<br />SLED2_OFF;<br /><br />break;<br /><br />}<br /><br />if (par1 == 1) {<br />buf2++;<br />if (buf2 &gt; 8)<br />buf2 = 1;<br />} else {<br />buf2--;<br />if (buf2 &lt; 1)<br />buf2 = 8;<br /><br />}<br /><br />}<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11496">krzynier</a> — 21 lis 2015, o 16:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-21T15:56:53+01:00</updated>
<published>2015-11-21T15:56:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145991#p145991</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145991#p145991"/>
<title type="html"><![CDATA[Re: Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145991#p145991"><![CDATA[
<div class="quotetitle">krzynier napisał(a):</div><div class="quotecontent"><br />Zmiana kanału B na kanał A nie przynosi rezultatów<br /></div><br />A wiesz o co chodzi z tymi kanałami A i B ? ..... to pokaż po swoich zmianach teraz kod inicjalizacji twojego timera1 i kod przerwania<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2015, o 15:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzynier]]></name></author>
<updated>2015-11-21T15:37:00+01:00</updated>
<published>2015-11-21T15:37:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145988#p145988</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145988#p145988"/>
<title type="html"><![CDATA[Re: Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145988#p145988"><![CDATA[
Właściwie to zrobiłem to chyba z rozpędu, skopiowałem konfigurację rejestrów timera z innego programu i tak zostało:) Zmiana kanału B na kanał A nie przynosi rezultatów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11496">krzynier</a> — 21 lis 2015, o 15:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[kicajek]]></name></author>
<updated>2015-11-21T15:30:13+01:00</updated>
<published>2015-11-21T15:30:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145987#p145987</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145987#p145987"/>
<title type="html"><![CDATA[Re: Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145987#p145987"><![CDATA[
<div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />powiedz po co używasz TIMER1_<strong>COMPB</strong>_vect ? .....<strong> B ???</strong> dlaczego ?<br /></div><br />Kol.Mirek nie pytał dlaczego TIMER1 wogóle, tylko dlaczego B a nie<strong> A</strong><br /><br />Pozdr.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=826">kicajek</a> — 21 lis 2015, o 15:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzynier]]></name></author>
<updated>2015-11-21T15:14:41+01:00</updated>
<published>2015-11-21T15:14:41+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145982#p145982</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145982#p145982"/>
<title type="html"><![CDATA[Re: Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145982#p145982"><![CDATA[
Przyznam, że nie wiem czemu użycie TIMER1_COMPB_vect mogłoby być przyczyną problemu. Taki był mój zamysł, uznałem że w wypadku mojego programu, użycie przerwania od Timera1 do sterowania paskiem diod jest najprostszym rozwiązaniem. Timer 2 mam już zajęty do obsługi wyświetlaczy siedmiosegmentowych. Dodam że działanie tego paska led przebiega zgodnie z oczekiwaniami, poza tym felernym przyspieszaniem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11496">krzynier</a> — 21 lis 2015, o 15:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2015-11-21T14:46:20+01:00</updated>
<published>2015-11-21T14:46:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145979#p145979</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145979#p145979"/>
<title type="html"><![CDATA[Re: Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145979#p145979"><![CDATA[
<div class="quotetitle">krzynier napisał(a):</div><div class="quotecontent"><br />Proszę o nakierowanie w znalezieniu błędu<br /></div><br />proszę<br /><br />- powiedz po co używasz TIMER1_COMPB_vect ? ..... B ??? dlaczego ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 21 lis 2015, o 14:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[krzynier]]></name></author>
<updated>2015-11-21T14:36:37+01:00</updated>
<published>2015-11-21T14:36:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145978#p145978</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145978#p145978"/>
<title type="html"><![CDATA[Zmniejszanie wartości OCR1A - błędne działanie programu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=13647&amp;p=145978#p145978"><![CDATA[
Witam.<br />Projektuję prosty układ na podstawie ATMegi328, jedną z części tego układu jest pasek kilku diod LED, który ma stopniowo zwiększać częstotliwość migania diod do osiągnięcia zadanej wartości w ustalonym czasie. Obsługa paska LED zrealizowana jest przez przerwanie generowane przez TIMER1 skonfigurowany następująco:<br />[syntax=c]//inicjalizacia timera 1 - symulacja silnika<br />TCCR1B |= (1 &lt;&lt; WGM12); // tryb CTC<br />OCR1A = 30625;<br />TCCR1B |= (1 &lt;&lt; CS11)| (1 &lt;&lt; CS10); //prescaler 64<br />TIMSK1 |= (1 &lt;&lt; OCIE1B); //włączenie przerwania od CTC[/syntax]<br />Przerwanie zrealizuje prostą funkcję switch przełączającą stany diod:<br />[syntax=c]ISR(TIMER1_COMPB_vect)<br /><br />{<br /><br />if (start) {<br /><br />switch (buf2) {<br /><br />case 1:<br /><br />T_PAR1_ON;<br />T_PAR2_OFF;<br />T_PAR3_OFF;<br />T_PAR4_OFF;<br />SLED1_OFF;<br />SLED2_ON;<br /><br /><br />break;<br /><br />case 2:<br /><br />T_PAR1_ON;<br />T_PAR2_OFF;<br />T_PAR3_OFF;<br />T_PAR4_OFF;<br />SLED1_ON;<br />SLED2_OFF;<br /><br />break;<br />//&#91;...&#93; w sumie mam 8 diod więc pozwolę sobie pominąć fragment kodu dla zaoszczędzenia miejsca<br />}[/syntax]<br /><br />Po wciśnięciu przycisku start, diody mają &quot;rozpędzić się&quot; do zadanej prędkości. Zrealizowałem to w następujący sposób:<br /><br />[syntax=c]liczba = 50; //liczba symbolizuje z jaką częstotliwością ma docelowo migać pasek diod<br />liczbabuf=liczba; //zmienna utworzona na potrzeby reszty programu<br />if(KEYSTART) //Wciśnięcie przycisku start<br />{<br />                         if (!start)<br />{<br />start = 1;  //uaktywnia funkcję napisaną w przerwaniu<br />liczba= 1; <br />while(liczba != liczbabuf) //pętla wykonująca się dopóki liczba nie osiągnie wartości zadanej<br />{<br />OCR1A = 8000000 / (64 * 1.0 * liczba) - 1; //ustalam częstotliwość wykonywania przerwania<br /><br />if(!Timer1) //timer programowy zaimplementowany w oddzielnym przerwaniu<br />{<br />Timer1=((par5*1000)/(1.0*liczbabuf))/5; //par5 jest zmienną określającą przybliżony czas w jakim diody powinny się rozpędzić do prędkości docelowej<br />liczba++;<br />}<br />} <br />                        }<br />}[/syntax]<br /><br />Z kodu wynika, że wartość OCRA1 jest skokowo obniżana, co powoduje zwiększenie częstotliwości występowania przerwania. Niestety nie działa to prawidłowo, podczas przyspieszania program w przerwaniu dostaje chwilowych zwiech w losowych momentach, co skutkuje chwilowym zatrzymaniem przesuwającego się paska. Analogicznie napisałem funkcję działającą w drugą stronę, powodującą hamowanie diod, działa ona zgodnie z zamierzeniami bez żadnych zawieszeń. <br />Proszę o nakierowanie w znalezieniu błędu, oraz o wyrozumiałość, gdyż jest to jeden z moich pierwszych projektów.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11496">krzynier</a> — 21 lis 2015, o 14:36</p><hr />
]]></content>
</entry>
</feed>