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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-01-21T18:44:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=14258&amp;mode</id>
<entry>
<author><name><![CDATA[Bartek123]]></name></author>
<updated>2016-01-21T18:44:22+01:00</updated>
<published>2016-01-21T18:44:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151323#p151323</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151323#p151323"/>
<title type="html"><![CDATA[Re: Programowy pwm - błąd w programie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151323#p151323"><![CDATA[
Napisz jaki masz procek.Zrób tak wydaje mi się, że to będzie działać:<br />[syntax=c]#include &lt;stdint.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;def.h&quot;<br /> <br /> <br />int main(void)<br />{<br />       <br /> <br />            init();<br />                pwm_motor=50;<br />                pwm_led_y=75;<br />                pwm_led_r=10;<br />                pwm_led_g=125;<br />                sei();<br />               <br />                        while(1)<br />                        {<br />                        }<br /> <br />}[/syntax]<br />[syntax=c]#include &lt;stdint.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;def.h&quot;<br /> <br /> <br />volatile uint8_t pwm_led_g;<br />volatile uint8_t pwm_led_y;<br />volatile uint8_t pwm_led_r;<br />volatile uint8_t pwm_motor;<br />volatile uint8_t cnt;<br /> <br />void init(void){<br />        //*********Directions of points************//<br />       <br />        //Outputs<br />        DDRB |=LED_G|LED_R|LED_Y|MOTOR;<br />        //Turn off outputs on start<br />        PORTB &amp;=~(LED_G|LED_R|LED_Y|MOTOR);<br />       <br />        //Inputs<br />        DDRD &amp;=~(SW_UP|SW_DN);<br />        //Pull up to +5V<br />        PORTD |=SW_UP|SW_DN;<br /> <br />               <br />                /************************  Timer0 settings  **************************/<br />                TCCR0 |=(1&lt;&lt;CS01); //prescaler 8<br />                TIMSK |=(1&lt;&lt;TOIE0); // permission for interrupt (overflow)<br />                TCNT0 = 100; //init value of timer<br />               <br />                /*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br />               <br />        }<br />       <br />        //############ Procedure from Timer0 interrupt ############<br />        ISR(TIMER0_OVF_vect)<br />        {<br />                cnt++;  <br />                if(cnt&gt;=pwm_led_g) LED_G_ON; else LED_G_OFF;<br />               <br />                if(cnt&gt;=pwm_led_y) LED_Y_ON; else LED_Y_OFF;<br /> <br />                if(cnt&gt;=pwm_led_r) LED_R_ON; else LED_R_OFF;  <br />               <br />                if(cnt&gt;=pwm_motor) MOTOR_ON; else MOTOR_OFF;<br />                                 TCNT0 = 100; //init value of timer<br />        }<br />        //##############################################################################[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10617">Bartek123</a> — 21 sty 2016, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2016-01-21T16:23:08+01:00</updated>
<published>2016-01-21T16:23:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151309#p151309</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151309#p151309"/>
<title type="html"><![CDATA[Re: Programowy pwm - błąd w programie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151309#p151309"><![CDATA[
TCNT0 to pozostałość po innych próbach, usunąłem z przerwania ale nie z funkcji init(),mój błąd , to ma i tak wpływ tylko na pierwszy cykl. Sam tryb overflow jest dla mnie wystarczający i jednocześnie jest najprostszy.<br /><br />TCCR0 |=(1&lt;&lt;CS01)|(1&lt;&lt;CS00); //prescaler 64<br />Na 'oko' diody mrugają jedynie 2 razy szybciej<br />Przy konfiguracji :<br />TCCR0 |=(1&lt;&lt;CS01); //prescaler 8<br />Diody mrugają bardzo szybko ale nie widać charakterystycznego dla pwm przyciemnienia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3043">Kocon</a> — 21 sty 2016, o 16:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-01-21T16:17:53+01:00</updated>
<published>2016-01-21T16:17:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151306#p151306</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151306#p151306"/>
<title type="html"><![CDATA[Re: Programowy pwm - błąd w programie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151306#p151306"><![CDATA[
Teraz zauważyłem, że w przerwaniu nie ładujesz do TCNT0 początkowej wartości równej 125. To sprawia, że tylko pierwsze przerwanie wystąpi po odliczeniu 131 impulsów. Każde następne przerwanie wystąpi po odliczeniu 256 impulsów. Co jeszcze zmniejszy częstotliwość. <br /><br />Tryb Overflow to nie CTC. Tu trzeba w przerwaniu ustawiać początkową wartość licznika TCNT0.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 21 sty 2016, o 16:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Bartek123]]></name></author>
<updated>2016-01-21T16:16:42+01:00</updated>
<published>2016-01-21T16:16:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151305#p151305</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151305#p151305"/>
<title type="html"><![CDATA[Re: Programowy pwm - błąd w programie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151305#p151305"><![CDATA[
Jeśli ustawiłeś tryb normal to w przerwaniu musisz znowu napisać to: TCNT0 = 125; druga sprawa to taka, że bibliteki w nawiasach ostrych inkludujemy na samym górze, a w cudzysłowach pod nimi i jeszcze masz zbyt małą częstotliwość wykonywania przerwania więc to też popraw.(ja nie poprawiłem tej częstotliwości)<br />Kod powinien wyglądać tak:<br />[syntax=c]#include &lt;stdint.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &quot;def.h&quot;<br /> <br /> <br />volatile uint8_t pwm_led_g;<br />volatile uint8_t pwm_led_y;<br />volatile uint8_t pwm_led_r;<br />volatile uint8_t pwm_motor;<br />volatile uint8_t cnt;<br /> <br />void init(void){<br />        //*********Directions of points************//<br />       <br />        //Outputs<br />        DDRB |=LED_G|LED_R|LED_Y|MOTOR;<br />        //Turn off outputs on start<br />        PORTB &amp;=~(LED_G|LED_R|LED_Y|MOTOR);<br />       <br />        //Inputs<br />        DDRD &amp;=~(SW_UP|SW_DN);<br />        //Pull up to +5V<br />        PORTD |=SW_UP|SW_DN;<br /> <br />               <br />                /************************  Timer0 settings  **************************/<br />                TCCR0 |=(1&lt;&lt;CS02); //prescaler 256<br />                TIMSK |=(1&lt;&lt;TOIE0); // permission for interrupt (overflow)<br />                TCNT0 = 125; //init value of timer<br />               <br />                /*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br />               <br />        }<br />       <br />        //############ Procedure from Timer0 interrupt ############<br />        ISR(TIMER0_OVF_vect)<br />        {<br />                cnt++;  <br />                if(cnt&gt;=pwm_led_g) LED_G_ON; else LED_G_OFF;<br />               <br />                if(cnt&gt;=pwm_led_y) LED_Y_ON; else LED_Y_OFF;<br /> <br />                if(cnt&gt;=pwm_led_r) LED_R_ON; else LED_R_OFF;   <br />               <br />                if(cnt&gt;=pwm_motor) MOTOR_ON; else MOTOR_OFF;<br />                                 TCNT0 = 125; //init value of timer<br />        }<br />        //##############################################################################[/syntax]<br />[syntax=c]#include &lt;stdint.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;def.h&quot;<br /> <br /> <br />int main(void)<br />{<br />       <br /> <br />            init();<br />                pwm_motor=50;<br />                pwm_led_y=75;<br />                pwm_led_r=10;<br />                pwm_led_g=125;<br />                sei();<br />               <br />                        while(1)<br />                        {<br />                        }<br /> <br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10617">Bartek123</a> — 21 sty 2016, o 16:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2016-01-21T16:13:54+01:00</updated>
<published>2016-01-21T16:13:54+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151303#p151303</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151303#p151303"/>
<title type="html"><![CDATA[Re: Programowy pwm - błąd w programie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151303#p151303"><![CDATA[
Masz za małą częstotliwość PWM-a - 16000000/256(preskaler)/131(256-125) daje częstotliwość występowania przerwań równą ok. 477Hz. W przerwaniu zmienna cnt liczy od zera do 255. Częstotliwość PWM będzie równa 477Hz/256 czyli ok. 1,8Hz. <br /><br />Aby sprawdzić to co napisałem zmniejsz preskaler. Zwiększy to częstotliwość występowania przerwań a tym samym częstotliwość PWM. Możesz również skrócić cykl zliczania zmiennej cnt.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 21 sty 2016, o 16:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Kocon]]></name></author>
<updated>2016-01-21T14:42:12+01:00</updated>
<published>2016-01-21T14:42:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151299#p151299</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151299#p151299"/>
<title type="html"><![CDATA[Programowy pwm - błąd w programie]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=14258&amp;p=151299#p151299"><![CDATA[
Witam uprzejmie, potrzebuję zacząć projekt korzystający z programowego pwm. Poniżej dotychczasowy kod :<br />[syntax=c]#include &lt;stdint.h&gt;<br />#include &quot;def.h&quot;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br /><br /><br />int main(void)<br />{<br /><br /><br />    init();<br />pwm_motor=50;<br />pwm_led_y=75;<br />pwm_led_r=10;<br />pwm_led_g=125;<br />sei();<br /><br />while(1)<br />{<br />}<br /><br />}[/syntax]<br /><br />Oraz plik z funkcjami :<br /><br />[syntax=c]#include &lt;stdint.h&gt;<br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &quot;def.h&quot;<br />#include &lt;util/delay.h&gt;<br /><br /><br />volatile uint8_t pwm_led_g;<br />volatile uint8_t pwm_led_y;<br />volatile uint8_t pwm_led_r;<br />volatile uint8_t pwm_motor;<br />volatile uint8_t cnt;<br /><br />void init(void){<br />//*********Directions of points************//<br /><br />//Outputs<br />DDRB |=LED_G|LED_R|LED_Y|MOTOR;<br />//Turn off outputs on start<br />PORTB &amp;=~(LED_G|LED_R|LED_Y|MOTOR);<br /><br />//Inputs<br />DDRD &amp;=~(SW_UP|SW_DN);<br />//Pull up to +5V<br />PORTD |=SW_UP|SW_DN;<br /><br /><br />/************************  Timer0 settings  **************************/<br />TCCR0 |=(1&lt;&lt;CS02); //prescaler 256<br />TIMSK |=(1&lt;&lt;TOIE0); // permission for interrupt (overflow)<br />TCNT0 = 125; //init value of timer<br /><br />/*&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;*/<br /><br />}<br /><br />//############ Procedure from Timer0 interrupt ############<br />ISR(TIMER0_OVF_vect)<br />{<br />cnt++;  <br />if(cnt&gt;=pwm_led_g) LED_G_ON; else LED_G_OFF;<br /><br />if(cnt&gt;=pwm_led_y) LED_Y_ON; else LED_Y_OFF;<br /><br />if(cnt&gt;=pwm_led_r) LED_R_ON; else LED_R_OFF;<br /><br />if(cnt&gt;=pwm_motor) MOTOR_ON; else MOTOR_OFF;<br /> <br />}<br />//##############################################################################[/syntax]<br /><br />Trzeci plik jest jedynie z definicjami, nie ma chyba potrzeby żeby go wrzucać.<br />Oczekiwałem pwm na zdefiniowanych wyprowadzeniach zależnie od parametrów pwm_x<br /><br />Kwarc 16MHz, wszystko jest ustawione ok (sprawdziłem wprowadzając do pętli main prosty _delay i załączanie diod)<br /><br />Niestety diody nie świecą się tak jakbym tego oczekiwał a dzieje się tak :<br />[youtube]https://youtu.be/ht5-GLB_gWc[/youtube]<br /><br />Jest ktoś skłonny wyłapać błąd ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3043">Kocon</a> — 21 sty 2016, o 14:42</p><hr />
]]></content>
</entry>
</feed>