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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-06T17:01:01+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3459&amp;mode</id>
<entry>
<author><name><![CDATA[robert95]]></name></author>
<updated>2013-07-06T17:01:01+01:00</updated>
<published>2013-07-06T17:01:01+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40975#p40975</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40975#p40975"/>
<title type="html"><![CDATA[Re: PWM - sterowanie poprzez klawisze.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40975#p40975"><![CDATA[
Wystarczyło tylko zmienić definicje preprocesora dla KEY_MORE i KEY_LESS - rzeczywiście głupi błąd.. Przy sprawdzaniu warunków zawsze był prawdziwy i ot cała tajemnica, dzięki. <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=1427">robert95</a> — 6 lip 2013, o 17:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sz4t4n]]></name></author>
<updated>2013-07-06T14:56:08+01:00</updated>
<published>2013-07-06T14:56:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40972#p40972</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40972#p40972"/>
<title type="html"><![CDATA[Re: PWM - sterowanie poprzez klawisze.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40972#p40972"><![CDATA[
Cześć,<br /><br />w definicji zmień :<br /><br />[syntax=c]#define KEY_MORE PB0                    // przycisk zwiększający i --&gt; PWM<br />#define KEY_LESS PB1                    // przycisk zmniejszający i --&gt; PWM[/syntax]<br /><br />na :<br /><br />[syntax=c]#define KEY_MORE (1&lt;&lt;PB0)                    // przycisk zwiększający i --&gt; PWM<br />#define KEY_LESS (1&lt;&lt;PB1)                    // przycisk zmniejszający i --&gt; PWM[/syntax]<br /><br /><br />Wejścia/Wyjścia:<br /><br />[syntax=c]DDRB &amp;= ~(KEY_MORE | KEY_LESS );             // micro-switch'e jako WEjścia<br /> PORTB |= KEY_MORE | KEY_LESS;                 // podciągnięcie do VCC[/syntax]<br /><br />a pętle główną proponuje zrobić tak :<br /><br />[syntax=c]for(;;)<br />        {<br />         pwm1 = i;<br />         pwm2 = i;<br />         pwm3 = i;<br />         pwm4 = i;<br />         pwm5 = i;<br />         pwm6 = i;<br /><br />             if( keyCheck(KEY_MORE) ) i++;<br />             if( keyCheck(KEY_LESS) )   i--;<br /><br />        }[/syntax]<br /><br />no i zmieniłbym to for(;;) na while(1), jakoś tak ładniej wygląda <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=377">sz4t4n</a> — 6 lip 2013, o 14:56</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[robert95]]></name></author>
<updated>2013-07-06T14:14:37+01:00</updated>
<published>2013-07-06T14:14:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40966#p40966</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40966#p40966"/>
<title type="html"><![CDATA[PWM - sterowanie poprzez klawisze.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3459&amp;p=40966#p40966"><![CDATA[
Witam.<br />Dziś postanowiłem napisać program, którego zadaniem byłoby:<br />- po wciśnięciu klawisza KEY_MORE rozjaśniać diody LED<br />- po wciśnięciu klawisza KEY_LESS ściemniać diody LED<br /><br />Założenie było stosunkowo proste i takowe zadanie również wydawało mi się dość łatwe.<br />Postanowiłem, że skorzystam z procesora Atmega32 (na płytce testowej EvB), wybrałem TIMER2 - tryb CTC. Stwierdziłem, że timer ośmio-bitowy będzie wystarczający. Taktowanie procesora w moim przypadku to 16MHz - również wystarczające, w zupełności. Wbrew moim założeniom prawie nic nie zgrało się z moim planem - krótko mówiąc &quot;ja sobie, diody sobie.&quot;<br />Diody rozjaśniają się powoli (wolniej niż założyłem) i ściemniają po pewnym czasie, nawet dość długim (ok. 1min), ale nie stopniowo lecz nagle. Szukam błędu w kodzie od godziny i nic nie mogę znaleźć, co jest zapewne wynikiem tego, że jestem początkujący. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />Oto program:<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />volatile uint8_t pwm1, pwm2, pwm3, pwm4, pwm5, pwm6 ;<br /><br />#define KEY_MORE PB0// przycisk zwiększający i --&gt; PWM<br />#define KEY_LESS PB1// przycisk zmniejszający i --&gt; PWM<br /><br />uint8_t keyCheck(uint8_t);<br /><br />int main(void)<br />{<br />//***************************************************<br />// Ustawienia TIMER/COUNTER 2 (8 Bit)  - TRYB CTC   |---------------------------------------------------<br />//***************************************************<br />TCCR2 |= (1&lt;&lt;WGM21);// Timer/Counter 2 - tryb CTC<br /><br />OCR2 = 200;<br />TCCR2 |= (1&lt;&lt;CS20);// Preskaler = 1<br />TIMSK |= (1&lt;&lt;OCIE2);// Zezwolenie na przerwanie Compare Match<br />// --------------------------------------- KONIEC USTAWIEŃ TIMERA ----------------------------------------<br /><br />DDRC |= (1&lt;&lt;PC0) | (1&lt;&lt;PC1) | (1&lt;&lt;PC2) | (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5);// ustawienie pinów portu c jako WYjscia<br />PORTC |= (1&lt;&lt;PC0) | (1&lt;&lt;PC1) | (1&lt;&lt;PC2) | (1&lt;&lt;PC3) | (1&lt;&lt;PC4) | (1&lt;&lt;PC5);// zgaś wszystkie diody<br /><br />DDRB &amp;= ~( (1&lt;&lt;KEY_MORE) | (1&lt;&lt;KEY_LESS) );// micro-switch'e jako WEjścia<br />PORTB |= (1&lt;&lt;KEY_MORE) | (1&lt;&lt;KEY_LESS);// podciągnięcie do VCC<br /><br />sei();//odblokowanie globalne przerwań<br />uint8_t i = 0;//definicja zmiennej, która odpowiada za wartość pwm<br /><br />for(;;)<br />{<br /><br /><br />if( keyCheck(KEY_MORE) )<br />{<br />while( keyCheck(KEY_MORE) )<br />{<br />pwm1 = i;<br />pwm2 = i;<br />pwm3 = i;<br />pwm4 = i;<br />pwm5 = i;<br />pwm6 = i;<br />i++;<br />_delay_ms(3);<br />}<br />}<br /><br />if( keyCheck(KEY_LESS) )<br />{<br />while( keyCheck(KEY_LESS) )<br />{<br />pwm1 = i;<br />pwm2 = i;<br />pwm3 = i;<br />pwm4 = i;<br />pwm5 = i;<br />pwm6 = i;<br />i--;<br />_delay_ms(3);<br />}<br />}<br />}<br /><br />}<br /><br />uint8_t keyCheck(uint8_t klawisz)<br />{<br />if( !(PINB &amp; klawisz) )<br />{<br />_delay_ms(80);<br />if( !(PINB &amp; klawisz) )<br />{<br />return 1;<br />}<br />}<br /><br />return 0;<br />}<br /><br />// ciało procedury przerwania ISR() Compare Match Timera2<br />ISR( TIMER2_COMP_vect )<br />{<br />static uint8_t cnt;// zmienna cnt będzie zliczała od 0 do 255 (tak jak OCRx w sprzętowym Fast-PWM)<br /><br /><br />//bezpośrednie sterowanie wyjściami kanałów PWM<br />if(cnt&gt;=pwm1) PORTC |= (1&lt;&lt;PC0); else PORTC &amp;= ~(1&lt;&lt;PC0);<br />if(cnt&gt;=pwm2) PORTC |= (1&lt;&lt;PC1); else PORTC &amp;= ~(1&lt;&lt;PC1);<br />if(cnt&gt;=pwm3) PORTC |= (1&lt;&lt;PC2); else PORTC &amp;= ~(1&lt;&lt;PC2);<br />if(cnt&gt;=pwm4) PORTC |= (1&lt;&lt;PC3); else PORTC &amp;= ~(1&lt;&lt;PC3);<br />if(cnt&gt;=pwm5) PORTC |= (1&lt;&lt;PC4); else PORTC &amp;= ~(1&lt;&lt;PC4);<br />if(cnt&gt;=pwm6) PORTC |= (1&lt;&lt;PC5); else PORTC &amp;= ~(1&lt;&lt;PC5);<br /><br />cnt++;//zwiększanie wartości cnt (0...255,0...255...)<br />}[/syntax]<br /><br />Przepraszam za ubogie komentarze, ale program był robiony &quot;na szybko&quot;, gdyż miał być to przedsmak zastosowania tego toku myślenia dla wysterowania przerobionego mikroserwa na silnik DC z przekładnią poprzez PWM z mostkiem H (L293D) - 600mA to wystarczająco jak na taki silnik, a specjalne wejście umożliwia sterowanie PWM silnikiem, fajna sprawa, ale co z tego jak program nie działa (po prostu ja go źle napisałem, proszę nie myśleć, że mam pretensje to uC <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />).<br /><br />Moja prośbę kieruję do osób, które mogłyby przejrzeć kod i stwierdzić gdzie mogłem popełnić ew. błąd. <br />Pozdrawiam, robert95.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1427">robert95</a> — 6 lip 2013, o 14:14</p><hr />
]]></content>
</entry>
</feed>