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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-01-06T19:31:39+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=19822&amp;mode</id>
<entry>
<author><name><![CDATA[Manekj]]></name></author>
<updated>2018-01-06T19:31:39+01:00</updated>
<published>2018-01-06T19:31:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201603#p201603</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201603#p201603"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201603#p201603"><![CDATA[
Dziękuję za wyjaśnienia związane z operatorami.<br /><br />Od poprzedniego posta walczę z zrozumieniem timerów i dla ćwiczeń przerobiłem przykład z tej strony, co podał Pan mirekk36<br /><br /><div class="quotetitle"><b>Quote:</b></div><div class="quotecontent"><br />Zainteresuj się po pierwsze moim blogiem a szczególnie tym artykułem:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/ob" >http://mirekk36.blogspot.com/2012/10/ob</a><!-- m --> ... w-cd2.html<br /></div> dokładnie z trzeciej części.<br /><br />Kod przerobiłem z ATmega32  na swój procesor  ATmega328P (F-CPU 16MHz). Starałem się aby wcięcia były poprawne, ale nie wiem czy wszędzie takie są. <br /><br />[syntax=c]/*<br /> <br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED1 (1&lt;&lt;PD6) //port6<br />#define LED2 (1&lt;&lt;PD2) //port2<br />#define LED3 (1&lt;&lt;PD7) //port7<br />#define KEY1 (1&lt;&lt;PB4) //port12<br /><br />typedef struct {<br />volatile uint8_t *KPIN;<br />uint8_t key_mask;<br />uint8_t wait_time_s;<br />void (*kfun1)(void);<br />void (*kfun2)(void);<br />uint8_t klock;<br />uint8_t flag;<br />} TBUTTON;<br /><br />// timery programowe<br />volatile uint16_t Timer1, Timer2;<br /><br />// własne funkcje użytkownika<br />void change_led1(void) {<br />PORTD ^= LED1;<br />}<br /><br />void change_led2(void) {<br />PORTD ^= LED2;<br />}<br /><br />// funkcja obsługi pojedynczych klawiszy<br />void key_press( TBUTTON * btn );<br /><br /><br />TBUTTON button; // definicja KLAWISZA<br /><br />//------------------------------------------------------------------<br />int main(void) {<br /><br />PORTB |= KEY1;// podciągamy linie klawiszy do VCC<br />DDRD |= LED1|LED2|LED3;// piny LED jako WYjścia<br /><br />/* Timer2 – konfigurcajca silnika timerów programowych */<br />TCCR1A|= (1&lt;&lt;WGM12);// tryb pracy CTC<br />TCCR1B|= (1&lt;&lt;CS12)|(1&lt;&lt;CS10); // preskaler = 1024<br />OCR1A    = F_CPU / 1024ul / 155ul; //przerwanie co ~100Hz (100,8064516129032)<br /><br />        //OCR1A = 108;// przerwanie porównania co 10ms (100Hz)<br />TIMSK1 = (1&lt;&lt;OCIE1A); // Odblokowanie przerwania CompareMatch<br /><br />button.KPIN = &amp;PINB;<br />button.key_mask = KEY1;<br />button.wait_time_s = 3;<br />button.kfun1 = change_led1;<br />button.kfun2 = change_led2;<br /><br />sei();<br /><br />while(1) {<br /><br />key_press( &amp;button );<br /><br />// przykładowy niezależny i nieblokujący proces<br />if( !Timer2 ) {<br />Timer2=1;<br />PORTD ^= LED3;<br />}<br /><br />}<br /><br />}<br />//------------------------------------------------------------------<br /><br /><br />void key_press( TBUTTON * btn ) {<br /><br />register uint8_t key_press = (*btn-&gt;KPIN &amp; btn-&gt;key_mask);<br /><br />if( !btn-&gt;klock &amp;&amp; !key_press ) {<br />btn-&gt;klock=1;<br /><br />// reakcja na PRESS krótkie wcinięcie klawisza<br />if(btn-&gt;kfun1) btn-&gt;kfun1();<br />btn-&gt;flag=1;<br />Timer1 = (btn-&gt;wait_time_s*100)/10;<br /><br />}<br />else if( btn-&gt;klock &amp;&amp; key_press ) {<br />(btn-&gt;klock)++;<br />if( !btn-&gt;klock ) {<br />Timer1=0;<br />btn-&gt;flag=0;<br />}<br />} else if( btn-&gt;flag &amp;&amp; !Timer1 ) {<br />// reakcja na dłuższe wcinięcie klawisza<br />if(btn-&gt;kfun2) btn-&gt;kfun2();<br />btn-&gt;flag=0;<br />}<br /><br />}<br /><br />//*** przerwanie Timer2 CompareM<br />ISR(TIMER1_COMPA_vect) {<br /><br />uint16_t n;<br /><br />n = Timer1;/* 100Hz Timer1 */<br />if (n) Timer1 = --n;<br />n = Timer2;/* 100Hz Timer2 */<br />if (n) Timer2 = --n;<br />}[/syntax]<br /><br />Mo i nie działa, a przynajmniej nie tak jak powinien.<br /><br />Zastosowałem Timer 16 Bitowy.<br />Ustawienia szukałem w noce katalogowej ATmegi328P po kolei:<br /><br />Strona 172 ustawienie trybu CTC:<br /><a href="https://obrazkiforum.atnel.pl/16570/c942c9a080a1a034076b95fac69363d2.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16570/c942c9a080a1a034076b95fac69363d2.png" alt="Obrazek" /></a><br /><br />Strona 173 ustawienie prescaler:<br /><br /><a href="https://obrazkiforum.atnel.pl/16570/5d494ecd1430f7de6e1d81feb476d14d.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16570/5d494ecd1430f7de6e1d81feb476d14d.png" alt="Obrazek" /></a><br /><br /><br />Strona 184 ustawienie przerwania CompareMatch i tu wystąpił problem po parunastu próbach doszedłem jak to ustawić:<br /><br /><a href="https://obrazkiforum.atnel.pl/16570/26d5cef047d07484b1c491dd6690c9b6.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16570/26d5cef047d07484b1c491dd6690c9b6.png" alt="Obrazek" /></a><br /><br />i przeszukałem AVR Device Explorer<br /><br /><a href="https://obrazkiforum.atnel.pl/16570/ce89337e42ab04557fa6b33bfa8205f7.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16570/ce89337e42ab04557fa6b33bfa8205f7.PNG" alt="Obrazek" /></a><br /><br />oraz<br /><br /><a href="https://obrazkiforum.atnel.pl/16570/14b8d77fb32c5878c80bd2af7e07cc2b.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16570/14b8d77fb32c5878c80bd2af7e07cc2b.PNG" alt="Obrazek" /></a><br /><br /><br />niestety nie znalazłem wzmianki w nocie ja ustawić TIMSK1 oraz jaki rejestr ustawić tak aby kompilator nie zgłaszał błędu.  <br />Ustawiłem tak:<br />[syntax=c]TIMSK1 = (1&lt;&lt;OCIE1A); // Odblokowanie przerwania CompareMatch[/syntax]<br />inne ustawienia kompilator nie przyjmował dlatego opisałem na rzutach, co zmieniłem aby kompilator chciał to kompilować opisy z noty nie działały.<br /><br /><br />Czyli całe ustawienie timera TC1 16bit wygląda tak:<br />[syntax=c]/* Timer2 – konfigurcajca silnika timerów programowych */<br />TCCR1A|= (1&lt;&lt;WGM12);// tryb pracy CTC<br />TCCR1B|= (1&lt;&lt;CS12)|(1&lt;&lt;CS10); // preskaler = 1024<br />OCR1A    = F_CPU / 1024ul / 155ul; //przerwanie co ~100Hz (100,8064516129032)<br />//OCR1A = 108;// przerwanie porównania co 10ms (100Hz)<br />TIMSK1 = (1&lt;&lt;OCIE1A); // Odblokowanie przerwania CompareMatch[/syntax]<br /><br /><br />Przestawiam schemat jak to podłączyłem:<br /><br /><a href="https://obrazkiforum.atnel.pl/16570/9bd745a3224609274a7f96e32bf3a142.PNG"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/16570/9bd745a3224609274a7f96e32bf3a142.PNG" alt="Obrazek" /></a><br /><br /><br />I teraz jak to działa:<br /><br />Po skompilowaniu i wgraniu w do procesora mrugnie dioda LED3 (1&lt;&lt;PD7), a po chwili miga , co około 4s i nie blokuje się gdy nacisnę przycisk czyli działa, ale jakoś bardzo długo.<br /><br /><br />Po krótkim naciśnięciu przycisku KEY1 (1&lt;&lt;PB4) zmienia mi się tylko stan diody LED1, a po dłuższym nienacinaniu przycisku nie dzieje się nic, a miała zapalać się dioda LED2. <br /><br />Według opisu Pana mirekk36 po krótkim naciśnięciu inicjalizujemy zmienna &quot;flag&quot; po naciśnięciu i odczekaniu ustalonego czasu (wait_time_s = 3;) powinna zrealizować się druga akcja czyli zaświecić LED2. I teraz nie wiem czy ta część dobrze zrozumiałem Aktualnie 2 akcja nie działa.<br /><br />Mogę liczyć na doprecyzowanie, co jest nie tak z tymi moimi ustawieniami?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16570">Manekj</a> — 6 sty 2018, o 19:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2017-12-27T22:15:19+01:00</updated>
<published>2017-12-27T22:15:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201145#p201145</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201145#p201145"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201145#p201145"><![CDATA[
<div class="quotetitle">roske napisał(a):</div><div class="quotecontent"><br />Marhef czy ja Cię jakoś obraziłem, albo ogólniej: czy moja odpowiedź wzbudziła w Tobie jakiekolwiek negatywne odczucia?<br /></div>Nie, sam pisałem z głowy, więc nie wiedziałem, czy dobrze piszę. Stąd pytanie o priorytety operatorów. A uwaga, który pin jest ustawiany, żeby wskazać, na podstawie czego wysnułem taki wniosek.<br />Gdyby Twoja wypowiedź była obraźliwa, odezwałbym się na pw. Staram się nie kłócić na forum.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 27 gru 2017, o 22:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-12-27T20:48:48+01:00</updated>
<published>2017-12-27T20:48:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201136#p201136</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201136#p201136"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201136#p201136"><![CDATA[
<div class="quotetitle">roske napisał(a):</div><div class="quotecontent"><br />Masz rację - odszczekuję<br /></div><br />Na tym forum nawet w stosunku do samego siebie wypadałoby stosować mniej agresywne wypowiedzi<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 27 gru 2017, o 20:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2017-12-27T20:33:32+01:00</updated>
<published>2017-12-27T20:33:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201129#p201129</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201129#p201129"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201129#p201129"><![CDATA[
<div class="quotetitle">Manekj napisał(a):</div><div class="quotecontent"><br />Dlaczego nie chce działać dioda podpięta pod PD2? Nie rozumiem tego <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /></div>Autor twierdzi inaczej <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br />Przecinek ma niższy priorytet niż &quot;|=&quot;?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 27 gru 2017, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Manekj]]></name></author>
<updated>2017-12-27T17:23:24+01:00</updated>
<published>2017-12-27T17:23:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201119#p201119</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201119#p201119"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201119#p201119"><![CDATA[
Dziękuję jeszcze muszę sporo poczytać i zapamiętać.<br />I przede wszystkim najtrudniejsze dla mnie to nauczyć się czytać kod.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16570">Manekj</a> — 27 gru 2017, o 17:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2017-12-27T16:26:03+01:00</updated>
<published>2017-12-27T16:26:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201117#p201117</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201117#p201117"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201117#p201117"><![CDATA[
<div class="quotetitle">Manekj napisał(a):</div><div class="quotecontent"><br />Ok. A dlaczego kompilator nie stwierdził, że jest coś nie tak... jest więcej takich zapisów gdzie nie można używać przecinka?<br /></div>Przecinek jest operatorem. Opis pod linkiem: <!-- m --><a class="postlink" href="https://pl.wikibooks.org/wiki/C/Operatory#Operator_przecinek" >https://pl.wikibooks.org/wiki/C/Operato ... _przecinek</a><!-- m --><br />A dlaczego kompilator nie zwrócił błędu? Bo go nie ma. Wg podanego opisu, wykonują się poszczególne działania, czyli ustawiasz kierunek/zmieniasz wartość dla pinu LED. Natomiast sam zapis LED_1 nie robi w zasadzie nic.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 27 gru 2017, o 16:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Manekj]]></name></author>
<updated>2017-12-27T16:17:22+01:00</updated>
<published>2017-12-27T16:17:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201116#p201116</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201116#p201116"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201116#p201116"><![CDATA[
Ok dziękuje.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16570">Manekj</a> — 27 gru 2017, o 16:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[ciamciak]]></name></author>
<updated>2017-12-27T16:14:44+01:00</updated>
<published>2017-12-27T16:14:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201115#p201115</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201115#p201115"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201115#p201115"><![CDATA[
Poza tablicami i argumentami funkcji, to raczej nigdzie nie można.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1254">ciamciak</a> — 27 gru 2017, o 16:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Manekj]]></name></author>
<updated>2017-12-27T16:06:07+01:00</updated>
<published>2017-12-27T16:06:07+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201114#p201114</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201114#p201114"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201114#p201114"><![CDATA[
Ok. A dlaczego kompilator nie stwierdził, że jest coś nie tak... jest więcej takich zapisów gdzie nie można używać przecinka?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16570">Manekj</a> — 27 gru 2017, o 16:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Marhef]]></name></author>
<updated>2017-12-27T15:41:29+01:00</updated>
<published>2017-12-27T15:41:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201111#p201111</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201111#p201111"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201111#p201111"><![CDATA[
Linia 20 i linia 31.<br />Nie możesz tak zapisać. Powinno być:[syntax=c]DDRD |= LED | LED_1;[/syntax]analogicznie dla drugiej wymienionej linijki.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=12752">Marhef</a> — 27 gru 2017, o 15:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Manekj]]></name></author>
<updated>2017-12-27T15:03:32+01:00</updated>
<published>2017-12-27T15:03:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201108#p201108</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201108#p201108"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=201108#p201108"><![CDATA[
Poczytałem oglądałem i mam kolejne pytania:<br /><br />kod z bloga o drganiach styków;<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-10-05<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED (1&lt;&lt;PD6)<br /><br />#define KEY1 (1&lt;&lt;PB4)<br /><br />uint8_t key_lock;<br /><br /><br />int main(void) {<br /><br /> PORTB |= KEY1;  // podciągamy linie klawiszy do VCC<br /> DDRD |= LED;   // pin LED jako WYjście<br /><br />// oczekiwanie na ustalenie się stanu wysokiego na wejściu klawisza<br /> _delay_ms(10);<br /><br /> while(1) {<br /><br />  if( !key_lock &amp;&amp; !(PINB &amp; KEY1 ) ) {<br />   key_lock=1;<br /><br />   // reakcja na PRESS (wcinięcie przycisku)<br />   PORTD ^= LED;<br /><br /><br />  } else if( key_lock &amp;&amp; (PINB &amp; KEY1 ) ) key_lock++;<br /><br /> }<br /><br /><br />}[/syntax]<br /><br />Działa jak najbardziej.<br /><br />Chciałem dopiąć kolejną diodę do tego kodu i już nie działa dlaczego? Nie widzę błędu swojego mimo usilnych prób zrozumienia dlaczego tak to działać nie chce;<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2012-10-05<br /> *       Autor: Mirosław Kardaś<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define LED (1&lt;&lt;PD6)<br />#define LED_1  (1&lt;&lt;PD2)<br />#define KEY1 (1&lt;&lt;PB4)<br /><br />uint8_t key_lock;<br /><br /><br />int main(void) {<br /><br /> PORTB |= KEY1;  // podciągamy linie klawiszy do VCC<br /> DDRD |= LED, LED_1;   // pin LED jako WYjście<br /><br />// oczekiwanie na ustalenie się stanu wysokiego na wejściu klawisza<br /> _delay_ms(10);<br /><br /> while(1) {<br /><br />  if( !key_lock &amp;&amp; !(PINB &amp; KEY1 ) ) {<br />   key_lock=1;<br /><br />   // reakcja na PRESS (wcinięcie przycisku)<br />   PORTD ^= LED, LED_1;<br /><br /><br />  } else if( key_lock &amp;&amp; (PINB &amp; KEY1 ) ) key_lock++;<br /><br /> }<br /><br /><br />}[/syntax]<br /><br />Dlaczego nie chce działać dioda podpięta pod PD2? Nie rozumiem tego <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16570">Manekj</a> — 27 gru 2017, o 15:03</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Manekj]]></name></author>
<updated>2017-12-17T18:21:17+01:00</updated>
<published>2017-12-17T18:21:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200721#p200721</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200721#p200721"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200721#p200721"><![CDATA[
Ok dziękuję za podpowiedzi i za linki.<br />Zabieram się za czytanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16570">Manekj</a> — 17 gru 2017, o 18:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-12-17T15:36:43+01:00</updated>
<published>2017-12-17T15:36:43+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200710#p200710</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200710#p200710"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200710#p200710"><![CDATA[
[syntax=c]    if (KEY_DOWN) {<br />       _delay_ms(80);<br />       if(KEY_DOWN){<br />           pwm2();<br />       }else if (KEY_DOWN){<br />           _delay_ms(80);<br />           if(KEY_DOWN){<br />                   pwm1();<br />         }<br />      }<br />    }[/syntax]<br /><br />Jak się robi tak tragiczne wcięcia w kodzie to nie dziwota, że się swojego BABOLA nie widzi. Pomijam już fakt, że tragicznie podchodzisz do obsługi przycisków no ale ok ... jak się uprzeć to tak też można - tyle że ty przez te wcięcia nie widzisz, że schowałeś obsługę drugiego przycisku &quot;w brzuchu&quot; obsługi pierwszego przycisku - o ile ja też dobrze widzę - bo ciężko coś dojrzeć przy takich wcięciach jak mówię.<br /><br />Zainteresuj się po pierwsze moim blogiem a szczególnie tym artykułem:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html" >http://mirekk36.blogspot.com/2012/10/ob ... w-cd2.html</a><!-- m --><br /><br />i zrób obsługę przycisków jak się należy <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> a zobaczysz, że pójdzie ci później z górki<br /><br />a ogólnie jeśli chodzi o pisanie takiego kodu to polecam obserwuj bieżący poradnik:<br /><br /><!-- m --><a class="postlink" href="http://mirekk36.blogspot.com/2017/12/audi-avr-kierunkowskazy-dynamiczne.html" >http://mirekk36.blogspot.com/2017/12/au ... iczne.html</a><!-- m --><br /><br />bo będzie w nim mnóstwo szczególnie dla ciebie interesujących informacji jak podchodzić do programowania NIEBLOKUJĄCEGO - bez żadnych kocich delayów <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> — 17 gru 2017, o 15:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[micky]]></name></author>
<updated>2017-12-17T15:32:48+01:00</updated>
<published>2017-12-17T15:32:48+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200708#p200708</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200708#p200708"/>
<title type="html"><![CDATA[Re: Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200708#p200708"><![CDATA[
Żeby zlikwidować pik przy pwm=0 musisz ustawić PWM w trybie zanegowanym i odpowiednio sterować.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1546">micky</a> — 17 gru 2017, o 15:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Manekj]]></name></author>
<updated>2017-12-17T15:22:05+01:00</updated>
<published>2017-12-17T15:22:05+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200703#p200703</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200703#p200703"/>
<title type="html"><![CDATA[Prośba o analizę kodu]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=19822&amp;p=200703#p200703"><![CDATA[
Witam.<br /><br />Proszę o analizę kodu (procesor ATmega328p) <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br /><br /><br /><br />// definicje PWM<br />#define pwm_A  (1&lt;&lt;PD6)  //wyjscie OC0A kanał diody zielonej<br />//#define pwm_B  (1&lt;&lt;PD5)  //wyjscie OC0B kanał diody niebieskiej<br />//#define pwm_C  (1&lt;&lt;PB3)  //wyjscie OC2A kanał diody czerwonej<br />//#define pwm_D  (1&lt;&lt;PD3)  //wyjscie OC2B kanał diod białych<br /><br />// definicja diody A<br />#define LED_A  (1&lt;&lt;PD7)                    // wyjscie LED_1<br />#define LED_A_ON PORTD |= LED_A        // włącz diodę led<br />#define LED_A_OFF PORTD &amp;= ~LED_A        // wyłącz diodę led<br /><br /><br />// definicja diody B<br />#define LED_B  (1&lt;&lt;PD2)               // wyjscie LED_2<br />#define LED_B_ON PORTD |= LED_B       // włącz diodę led<br />#define LED_B_OFF PORTD &amp;= ~LED_B     // wyłącz diodę led<br /><br /><br /> // definicje dla klawiszy<br />#define Klawisz_A  (1&lt;&lt;PD4)  //Klawisz 1 PIN4<br />#define Klawisz_B  (1&lt;&lt;PB0)  //Klawisz 2 PIN8<br />#define Klawisz_C  (1&lt;&lt;PB4)  //Klawisz 3 PIN12<br />#define KEY_DOWN !(PINB &amp; Klawisz_C)  //definicja wcisnięcia klawisza<br /><br /><br /><br />//dekraracja funkcji<br />void pwm1(void);<br />void pwm2(void);<br /><br /><br />//definicja zmiennych<br />volatile uint8_t  przekaznik;<br />volatile uint8_t  i;<br />volatile uint8_t  k;<br /><br /><br /><br /><br /><br />//główna  funkcja programu<br />int main(void)<br /><br />{<br />DDRD |= pwm_A;<br /><br />DDRD |= LED_A | LED_B;<br />PORTD |= Klawisz_A;<br />PORTB |= Klawisz_B | Klawisz_C;<br /><br /><br />//konfiguracja przerwania<br />    PCICR |= (1&lt;&lt;PCIE2) | (1&lt;&lt;PCMSK0);  //zezwolenie na przerwanie PCINT2<br />    PCMSK2 |= (1&lt;&lt;PCINT20); //przerwanie na pinie PD7<br />    PCMSK0 |= Klawisz_B | Klawisz_C;  //przerwanie na pinie PB0<br /><br />    //konfiguracja FASTPWM<br />    TCCR0A |= (1&lt;&lt;WGM01) | (1&lt;&lt;WGM00);<br />    TCCR0A |= (1&lt;&lt;COM0A1)| (1&lt;&lt;COM0B1);<br />    //preskaler<br />    TCCR0A |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00);<br /><br />    //Ustawienie TCCR0B trybu PWM<br />    TCCR0B |= (1&lt;&lt;WGM01) | (1&lt;&lt;WGM00); //tryb 3 Fast PWM TOP=0xFF<br />    TCCR0B |= (1&lt;&lt;COM0A1)|(1&lt;&lt;COM0B1); //Clear OC0B on Compare Match, set OC0B at BOTTOM, (non-inverting mode)<br /><br />    //preskaler<br />    TCCR0B |= (1&lt;&lt;CS01) | (1&lt;&lt;CS00); //clkI/O/8 (From prescaler)<br /><br />    OCR0A = 0; //wyjście PD6<br />    OCR0B = 0;<br /><br /><br /><br /><br /><br /><br /><br />sei();<br /><br />  while(1)<br />  {<br /><br />    if (KEY_DOWN) {<br />       _delay_ms(80);<br />       if(KEY_DOWN){<br />       pwm2();<br />       }else if (KEY_DOWN){<br />       _delay_ms(80);<br />       if(KEY_DOWN){<br />       pwm1();<br />     }<br />      }<br />    }<br />  }<br />}<br /><br /><br /><br /><br /><br />// procedury obsłógi przerwań dla klawisza A<br />ISR( PCINT2_vect ){<br /><br />if( ! (PIND &amp; Klawisz_A) ){<br />_delay_ms(80);<br />przekaznik=0;<br />LED_A_ON;<br />  }else<br />   {<br />  LED_A_OFF;<br />   }<br /><br />}<br />// procedury obsłógi przerwań dla klawisza B<br />ISR( PCINT0_vect ){<br /><br />   if( ! (PINB &amp; Klawisz_B) ) {<br />    _delay_ms(80);<br />    przekaznik=1;<br />    LED_B_ON;<br />      }else<br />       {<br />      LED_B_OFF;<br />       }<br /><br />}<br /><br />//definicje funkcji<br />void pwm1(void) {<br /><br />for(i=255; i&gt;0; i=i+50)<br />{<br />OCR0A= i;           //kanał diody zielonej 1 poziom<br />_delay_ms(50);<br />}<br /><br />for(i=0; i&lt;255; i=i-80)<br />{<br />OCR0A = i;<br />_delay_ms(50);<br />}<br /><br />}<br /><br />void pwm2(void) {<br /><br />for(k=255; k&gt;0; k=k+20)<br />{<br />OCR0A= k;           //kanał diody zielonej 2 poziom<br />_delay_ms(50);<br />}<br /><br />for(k=0; k&lt;255; k=k-50)<br />{<br />OCR0A = k;<br />_delay_ms(50);<br />}<br /><br />}[/syntax]<br /><br />Program ma na zadanie sterować dwoma przekaźnikami oraz przełączać za pomocą jednego przycisku, po kolei pwm1 i pwm2 ... docelowo chcę dorobić jeszcze z trzy szybkości zmian PWM.<br />Problem pojawił się podczas obsługi 1 przycisku:<br />[syntax=c]while(1)<br />  {<br /><br />    if (KEY_DOWN) {<br />       _delay_ms(80);   //drgania styków <br />       if(KEY_DOWN){<br />       pwm2();<br />       }else if (KEY_DOWN){<br />       _delay_ms(80);  //drgania styków <br />       if(KEY_DOWN){<br />       pwm1();<br />     }<br />      }<br />    }<br />  }<br />}[/syntax]<br /> <br /><br />Niby działa, ale nie do końca, bo zamiast po naciśnięciu włączyć &quot;pwm2&quot;, a przy następnym naciśnięciu włączyć &quot;pwm1&quot; to od razu przełącza do &quot;pwm1&quot;.<br /><br />Próbowałem różnych wariacji kodu, ale wynik zawsze był taki sam czyli wykonuje się pierwsza pętla i zaraz po niej druga. W skrajnych przypadkach nie działo się nic.<br />A i jeszcze jeden mały problem z PWM po zainicjowaniu cały czas na wyjściu mam pik około 3V, co skutkuje świeceniem diody.<br />Czy to jest normalne podczas kiedy OCR0A jest ustawione na 0?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16570">Manekj</a> — 17 gru 2017, o 15:22</p><hr />
]]></content>
</entry>
</feed>