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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-01-12T00:49:15+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=17047&amp;mode</id>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2017-01-12T00:49:15+01:00</updated>
<published>2017-01-12T00:49:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179682#p179682</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179682#p179682"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179682#p179682"><![CDATA[
Co się tyczy tego długiego warunku (oj długi) to myślałem sobie tak jeśli klawisz1_wciśnięty i ledy zgaszone to warunek zostanie spełniony i wykona się led_on (ledy zapalą się do góry ) a jeśli nie zostanie spełniony to wykona się else led_off ( ledy zgasną z góry na dół ) i w ten sam sposób tylko    odwrotnie klawisz2_wciśnięty , z tego myślę flaga spełnia podobne zadanie .<br />No i próbowałem dopisać kolejną część kodu no i frytki , myślę że muszę oddzielić klawisz1 od klawisz2.<br />Moja wesoła twórczość : <br />[syntax=c]while(1) {<br /><br />                    if( key1() &amp;&amp; !flaga ) {<br />                            i= 0;<br />                            flaga=1;<br />                            flaga1=0;<br />                  //          PORTA = 0xFF;<br />                  //          PORTC = 0xFF;<br />                    }<br />                    else if (key1() &amp;&amp; flaga ) {<br />                            i= 0;<br />                            flaga=0;<br />                            flaga1=0;<br />                    //        PORTA = 0x00;<br />                    //        PORTC = 0x00;<br />                    }<br />                    if(flaga){<br />                        led_on(1);<br />                    }<br />                    else if(!flaga){<br />                         led_off(0);<br />                    }<br /><br /><br />//----------------------------------<br />                    if( key2() &amp;&amp; !flaga1 ) {<br />   i= 0;<br />   flaga1=1;<br />   flaga=0;<br />//   PORTA = 0xFF;<br />//       PORTC = 0xFF;<br /><br />   }<br />   else if (key2()&amp;&amp; flaga1 ) {<br />   i= 0;<br />   flaga1=0;<br />   flaga=0;<br />//   PORTA = 0x00;<br />   //           PORTC = 0x00;<br /><br />   }<br /><br />   if(flaga1){<br />   led_on(0);<br /><br />   }<br />   else if(!flaga1){<br /><br />led_off(1);<br />   }[/syntax] <br />Co się dotyczy #if to urzywam Eclips’a no i właśnie perzy #if KEYS_FLOW == 1 mam ten fragment wyszarzony.<br /><a href="https://obrazkiforum.atnel.pl/14180/42cef6ab98cf7d70d51762672dc98e17.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/14180/42cef6ab98cf7d70d51762672dc98e17.png" alt="Obrazek" /></a><br /><br />Proszę o podpowieć.<br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 12 sty 2017, o 00:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-01-10T01:44:27+01:00</updated>
<published>2017-01-10T01:44:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179532#p179532</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179532#p179532"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179532#p179532"><![CDATA[
Poczytaj jeszcze w BB o instrukcjach warunkowych kompilatora i o operatorach logicznych.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Tą linijkę:<br />[syntax=c]if( key1() &amp;&amp; !flaga1 )[/syntax]<br />można zapisać jako:<br />[syntax=c]if( key1() &amp;&amp; (flaga1 == 0) )[/syntax]<br />Natomiast tą:<br />[syntax=c]if( key1() &amp;&amp; flaga1 )[/syntax]<br />można zapisać jako:<br />[syntax=c]if( key1() &amp;&amp; (flaga1 != 0) )[/syntax]<br /><br />Działać będzie dokładnie tak samo. <br /><br />Musisz użyć operatora porównania ==, a nie przypisania =, zobacz na przykład w moim kodzie jest:<br />[syntax=c]#define KEYS_FLOW  1                            //1-klawisze aktywne dopiero gdy wszystkie diody LED są zapalone lub wygaszone, 0-możliwość zapalania i gaszenia w &quot;locie&quot;<br />#if KEYS_FLOW == 1<br />        if(( PORT_LED == LEDS_OFF) || (PORT_LED == LEDS_ON )) {                         //warunek sparawdzający czy wszystkie diody są zapalone lub wygaszone<br />#endif[/syntax]<br />Jeżeli KEYS_FLOW jest 1, to ten fragment kodu, króry jest pomiędzy #if i #endif skompiluje się, jeśli nie to kompilator nie będzie brał tego fragmentu kodu w ogóle pod uwagę. Jeżeli używasz Eclipse'a to, gdy zamiast 1 wpiszesz np.0 to między innymi ten fragment kodu pięknie się wyszarzy.<br /><br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />No a jeśli po wciśnięciu przycisku program miał by rozpoznać czy ledy są załączone czy zgaszone to można by napisać if (key1() &amp;&amp; !flaga &amp;&amp;(PORTA &amp;&amp; PORTC)).<br /></div><br />Jeśli już to raczej tak:<br />[syntax=c]if ( key1() &amp;&amp; !flaga &amp;&amp; ( ((PORTA==0xff) &amp;&amp; (PORTC==0xff)) || ((PORTA==0x00) &amp;&amp; (PORTC==0x00)) ) )[/syntax]<br />Tylko po co taki długi, rozbudowany warunek?  <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=7157">anshar</a> — 10 sty 2017, o 01:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2017-01-10T00:48:59+01:00</updated>
<published>2017-01-10T00:48:59+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179529#p179529</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179529#p179529"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179529#p179529"><![CDATA[
Jeśli dobrze rozumiem  if( key1() &amp;&amp; !flaga ) to przycisk wciśnięty flaga=0 negacja '!' =1 a ja próbowałem wpisywać <br />flaga=0 lub flaga=1 zamiast   !flaga. No a jeśli po wciśnięciu przycisku program miał by rozpoznać czy ledy są załączone czy zgaszone to można by napisać  if (key1() &amp;&amp; !flaga &amp;&amp;(PORTA &amp;&amp; PORTC)).<br />Teraz muszę jeszcze odwrucić gaszenie led_off i jeszcze jedno w twoim kodzie użyłeś #if czytałem w BB ale nie do końca jest to dla mnie zrozumiałe.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 10 sty 2017, o 00:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-01-10T00:00:09+01:00</updated>
<published>2017-01-10T00:00:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179528#p179528</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179528#p179528"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179528#p179528"><![CDATA[
Zapomniałeś o sprawdzaniu flaga1, zobacz:<br />[syntax=c]while(1) {<br />     <br />            if( key1() &amp;&amp; !flaga1 ) {<br />                    i= 0;<br />                    flaga1=1;<br />            }   <br />            else if (key1() &amp;&amp; flaga1 ) {<br />                    i= 0;<br />                    flaga1=0;<br />            }  <br />            <br />            if(flaga1){<br />                led_on(1);  <br />                <br />            }<br />            else if(!flaga1) {<br />                 led_off(1);<br />            }  <br />             <br />        }[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 10 sty 2017, o 00:00</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2017-01-09T23:43:15+01:00</updated>
<published>2017-01-09T23:43:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179527#p179527</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179527#p179527"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179527#p179527"><![CDATA[
Napisałem kod w ten sposób i program nie działa poprawnie , po dopisaniu else if program żyje własnym życiem to znaczy<br />po wgraniu if  key1() , flaga=1,  led_on działa poprawnie dopisałem else if kompilcja przebiegła pomyślnie ale diody zapalają się <br />co druga. <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /> <br /><br />[syntax=c]while(1) {<br /><br />        if( key1() ) {    //załączanie<br />        i= 0;<br />        flaga = 1;<br />        }<br />        if(flaga) led_on(1);<br />        <br />     else if(key1()) {     //gaszenie<br />      i= 0;<br />      flaga =0;<br />     }<br />     if(flaga) led_off(1);[/syntax]<br />Proszę i dziękuje za podpowiedź.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 9 sty 2017, o 23:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2017-01-08T13:55:55+01:00</updated>
<published>2017-01-08T13:55:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179386#p179386</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179386#p179386"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179386#p179386"><![CDATA[
Chciałem kolegę anshar zapytać jak on to wykombinował, ale gdzieś wyszedł.<br />Spróbuję zatem sam podpowiedzieć, najwyżej mnie poprawi. <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br /><br />Myślę, że można to zrobić tak:<br />Jeżeli przycisk wciśnięty i flaga1 jest równa 0 to ustaw tą flagę na 1.<br />Jeżeli przycisk wciśnięty i flaga1 jest równa 1 to ustaw tą flagę na 0.<br /><br />Jeżeli flaga1 jest równa 1 to zapal diody LED.<br />Jeżeli flaga1 jest równa 0 to zgaś diody LED.<br /><br />W twoim kodzie LED_ON i LED_OFF mają zawsze te same wartości i są niepotrzebne. Flaga2 również. <br />Zwróć uwagę na kolejność wykonywania instukcji warunkowych.<br />Stosuj: <br />if(warunek1) {jakieś_instrukcje_do_wykonania}<br />else if(warunek2 {jakieś_instrukcje_do_wykonania}<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 8 sty 2017, o 13:55</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2017-01-07T20:14:44+01:00</updated>
<published>2017-01-07T20:14:44+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179339#p179339</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179339#p179339"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=179339#p179339"><![CDATA[
Próbuje napisać własny program do sterowania oświetlenia led-schody podobny do działania kodu <br />‘anshara’ ale jak zwykle stanąłem w miejscu.<br />Działanie kodu ma być następujące:<br />if (przycisk wciśnięty  i  LED_ON )<br />Ledy zapalają się do góry –  <br />else  ( jeśli ledy świecą wykonuje się else i ledy gasną )<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />#define KEY1_PIN (1&lt;&lt;PD7)<br />#define KEY2_PIN (1&lt;&lt;PD6)<br />#define KEY1_DOWN !(PIND &amp; KEY1_PIN)<br />#define KEY2_DOWN !(PIND &amp; KEY2_PIN)<br /><br /><br />#define LEDS_OFF 0xFF<br />#define LEDS_ON  0x00<br /><br />uint8_t i, flaga1 , flaga2  ;<br /><br />uint8_t key1(void);<br />uint8_t key2(void);<br /><br />void delay ( uint16_t ms );<br /><br />void led_off(uint8_t efekt);<br />void led_on(uint8_t efekt);<br /><br />int main(void){<br /><br />        DDRA = 0xFF;<br />        PORTA = 0xFF;<br />        DDRC = 0xFF;<br />        PORTC = 0xFF;<br />        PORTD |= KEY1_PIN | KEY2_PIN;<br /><br /><br />        _delay_ms(5);<br /><br /><br />    while(1) {<br /><br />        if( key1() &amp;&amp; LEDS_OFF ) {    //załączanie<br />        i= 0;<br />        flaga1=1;<br />        }<br />     if(flaga1){<br />     led_on(1);<br />     }<br /><br />     else {<br />     if (key1() &amp;&amp; LEDS_ON ){     //gaszenie <br />      i= 0;<br />      flaga2=1;<br />     }<br />     }<br />    if(flaga2){<br /><br />    led_off(1);<br />    }<br /><br /><br />//----------------------------------<br />//------------------------------------<br />        }<br />}<br /><br />void led_on(uint8_t efekt) {      //zapalanie diod LED<br /><br /> if(efekt){<br />    PORTC &amp;= ~( 128 &gt;&gt; i); //zapalenie diod od lewej do prawej<br />    if(i&gt;7)PORTA &amp;= ~( 128 &gt;&gt; (i-8));<br /><br />    }<br />    else {<br />    PORTA &amp;= ~( 1 &lt;&lt; i); //zapalenie diod od prawej do lewej<br />    if(i&gt;7)PORTC &amp;= ~( 1 &lt;&lt; (i-8));<br />    }<br /><br />    i++;<br />    delay(120);<br />}<br /><br />void led_off(uint8_t efekt) {   //gaszenie diod LED<br /><br />    if(efekt){<br />    PORTC |= ( 128 &gt;&gt; i); //zgaszenie diod od lewej do prawej<br />    if(i&gt;7)PORTA |= ( 128 &gt;&gt; (i-8));<br />    }<br />    else {<br />    PORTA  |= ( 1 &lt;&lt; i); //zgaszenie diod od prawej do lewej<br />    if(i&gt;7)PORTC |= ( 1 &lt;&lt; (i-8));<br />    }<br />    i++;<br />    delay(70);<br />}<br />//-----------------------------------------------<br />uint8_t key1(void) {<br /><br />        if( KEY1_DOWN ) {<br />                _delay_ms(80);<br />                if( KEY1_DOWN ) return 1;<br />        }<br />        return 0;<br />}<br /><br />uint8_t key2(void) {<br /><br />        if( KEY2_DOWN ) {<br />                _delay_ms(80);<br />                if( KEY2_DOWN ) return 1;<br />        }<br />        return 0;<br />}<br /><br />void delay( uint16_t ms ) {<br />        while( ms-- ) {<br />                _delay_ms(1);<br />        }<br />}[/syntax]<br />Proszę o podpowiedz   <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  <br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 7 sty 2017, o 20:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro69]]></name></author>
<updated>2016-12-29T07:41:30+01:00</updated>
<published>2016-12-29T07:41:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178459#p178459</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178459#p178459"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178459#p178459"><![CDATA[
Cześć.<br />Nie przyjrzałem sie dokladnie,<br />Ale może<br /> if key1 flaga_zapal=1<br />if key2 flaga_zapal=0<br />if flaga_zapal ledon(1); else led_ooff;<br /><br />Wykorzystać flagi.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 1 minucie ]</span></strong><br /><br />Sorka za greźmolenie, piszę z telefonu.<img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=11549">Daro69</a> — 29 gru 2016, o 07:41</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-12-29T00:39:36+01:00</updated>
<published>2016-12-29T00:39:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178451#p178451</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178451#p178451"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178451#p178451"><![CDATA[
Próbuje przerobić kod kolegi ‘anshara’ tylko z wykorzystaniu  ‘if’ ale znowu staniałem w miejscu .<br />Myślałem że jak wpisze warunek  if  (key1(1))  to wykona się    led_ on   a tu kicha kompilacja przeszła bez błędu ale nie ten efekt po wciśnięciu klawisza zapala się tylko jedna dioda przy kolejnym wciśnięciu następna i tak dalej<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#define KEY1_PIN (1&lt;&lt;PD7)<br />#define KEY2_PIN (1&lt;&lt;PD6)<br />#define KEY1_DOWN !(PIND &amp; KEY1_PIN)<br />#define KEY2_DOWN !(PIND &amp; KEY2_PIN)<br /><br />uint8_t key1(void);<br />uint8_t key2(void);<br /><br />void delay ( uint16_t ms );<br /><br />void led_off(uint8_t efekt);<br />void led_on(uint8_t efekt);<br /><br />int main(void){<br /><br />        DDRA = 0xFF;<br />        PORTA = 0xFF;<br />        DDRC = 0xFF;<br />        PORTC = 0xFF;<br />        PORTD |= KEY1_PIN | KEY2_PIN;<br /><br /><br />        _delay_ms(5);<br /><br /><br />        while(1) {<br /><br />        if(key1())<br />        {<br /><br />        led_on(1);<br />        }<br /><br />//----------------------------------<br />//------------------------------------<br />        }<br />}<br /><br />void led_on(uint8_t efekt) {      //zapalanie diod LED<br /><br />          if(efekt) PORTC &amp;= ~( 128 &gt;&gt; i);<br />           if(i&gt;7)PORTA &amp;= ~( 128 &gt;&gt; (i-8));<br /><br />                     i++;<br />                     delay(200);<br /> }<br /><br />void led_off(uint8_t efekt) {  //gaszenie diod LED<br /><br />     if(efekt) PORTC |= ( 128&gt;&gt; i);<br />     if(i&gt;7)PORTA |= ( 128 &gt;&gt; (i-8));<br /><br />                     i++;<br />                     delay(200);<br />}<br /><br /><br />uint8_t key1(void) {<br /><br />        if( KEY1_DOWN ) {<br />                _delay_ms(80);<br />                if( KEY1_DOWN ) return 1;<br />        }<br />        return 0;<br />}<br /><br />uint8_t key2(void) {<br /><br />        if( KEY2_DOWN ) {<br />                _delay_ms(80);<br />                if( KEY2_DOWN ) return 1;<br />        }<br />        return 0;<br />}<br /><br />void delay( uint16_t ms ) {<br />        while( ms-- ) {<br />                _delay_ms(1);<br />        }<br />}[/syntax]<br />Diody mają zapalać się przy wciśnięciu key1 od 1-16 . <br />Pozd.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 29 gru 2016, o 00:39</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-26T11:28:32+01:00</updated>
<published>2016-12-26T11:28:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178242#p178242</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178242#p178242"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178242#p178242"><![CDATA[
<div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />Mam problem z wywołaniem funkcji typu void<br /></div><br />Funkcje do zapalania i gaszenia diod LED masz zadeklarowane z argumentami, a wywołujesz je bez żadnych argumentów. <br />Zamiast led_on(); powinno być led_on(1); <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=7157">anshar</a> — 26 gru 2016, o 11:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-12-26T02:19:55+01:00</updated>
<published>2016-12-26T02:19:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178234#p178234</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178234#p178234"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=178234#p178234"><![CDATA[
Mam problem z wywołaniem funkcji typu void     program zapala i gaśi 16 diod  klawisz1_wcisniety  zapala 16 diod klawisz2_wcisniety gasi 16 diod.<br />Proszę o pomoc i jeśli to możliwe o krótkie wyjaśnienie z góry dziękuję .<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#define KEY1_PIN (1&lt;&lt;PD7)<br />#define KEY2_PIN (1&lt;&lt;PD6)<br />#define KEY1_DOWN !(PIND &amp; KEY1_PIN)<br />#define KEY2_DOWN !(PIND &amp; KEY2_PIN)<br /><br /><br />uint8_t i,  flaga , flaga1 ;<br /><br /><br />uint8_t klawisz1_wcisniety(void);<br />uint8_t klawisz2_wcisniety(void);<br /><br />void delay ( uint16_t ms );<br /><br /><br />void led_off(uint8_t efekt);<br />void led_on(uint8_t efekt);<br /><br />int main(void){<br /><br /><br /><br />        DDRA = 0xFF;<br />        PORTA = 0xFF;<br />        DDRC = 0xFF;<br />        PORTC = 0xFF;<br />        PORTD |= KEY1_PIN | KEY2_PIN;<br /><br /><br />        _delay_ms(5);<br /><br /><br />        while(1) {<br /><br />                if( klawisz1_wcisniety() ) {<br />                    i = 0;<br />                        flaga = 1;<br />                        flaga1 = 0;<br />                        PORTA = 0xFF;<br />                        PORTC = 0xFF;<br /><br /><br />                }<br />//--------------------------------------------<br />                if( flaga ) {<br />                led_on();    //wywołanie funkcji typu void<br />             <br />}<br /><br />//---------------------------------------------<br /><br /><br />                if ( klawisz2_wcisniety() ) {<br />                    i = 0;<br />                    flaga = 0;<br />                    flaga1 = 1;<br />                    PORTA = 0x00;<br />                    PORTC = 0x00;<br /><br />                }<br /><br />                if (flaga1) {<br />                 led_off(); //wywołanie funkcji typu void<br /><br />                }<br /><br /><br />//------------------------------------<br />        }<br />}<br /><br />void led_on(uint8_t efekt) {      //zapalanie diod LED<br /><br />  if(efekt) PORTC &amp;= ~( 128 &gt;&gt; i);<br />  if(i&gt;7)PORTA &amp;= ~( 128 &gt;&gt; (i-8));<br />             i++;<br />             delay(200);<br /><br /><br /><br /><br />}<br /><br />void led_off(uint8_t efekt) {  //gaszenie diod LED <br /><br />if(efekt) PORTC |= ( 128 &gt;&gt; i);<br />          if (i&gt;7) PORTA |= (128&gt;&gt;(i-8));<br />i++;<br />delay(100);<br />              <br />}<br /><br /><br />uint8_t klawisz1_wcisniety(void) {<br /><br />        if( KEY1_DOWN ) {<br />                _delay_ms(80);<br />                if( KEY1_DOWN ) return 1;<br />        }<br />        return 0;<br />}<br /><br />uint8_t klawisz2_wcisniety(void) {<br /><br />        if( KEY2_DOWN ) {<br />                _delay_ms(80);<br />                if( KEY2_DOWN ) return 1;<br />        }<br />        return 0;<br />}<br /><br />void delay( uint16_t ms ) {<br />        while( ms-- ) {<br />                _delay_ms(1);<br />        }<br />}[/syntax]<br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 26 gru 2016, o 02:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[wat1970]]></name></author>
<updated>2016-12-17T12:45:37+01:00</updated>
<published>2016-12-17T12:45:37+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177721#p177721</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177721#p177721"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177721#p177721"><![CDATA[
Szanowny Kolego Daro68 sterownik schodów zrobisz fajnie na układzie WS2803, układy można łączyć szeregowo więc ilość schodów od 1 do miliona. Występuje w obudowie DIP. Jeden układ obsłuży 18 szt schodów na każdym wyjściu masz PWM 8-bitowe. Czyli sterowanie robisz ładnie z efektem rozjaśniania/ściemniania.<br />Układ jest prosty w oprogramowaniu, popędzisz go Atmega 8 lub ATtiny lub czymkolwiek co ma w nazwie mikrokontroler.<br />Tu masz jakiś pierwszy lepszy przykład z sieci : <!-- m --><a class="postlink" href="http://www.jarzebski.pl/arduino/komponenty/sterownik-led-ws2803.html" >http://www.jarzebski.pl/arduino/kompone ... s2803.html</a><!-- m -->.<br />Mnie żona nie pozwoliła wieszać na schodach elektroniki dlatego sterownik schodów pozostaje tylko w sferze marzeń <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2179">wat1970</a> — 17 gru 2016, o 12:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-16T10:49:24+01:00</updated>
<published>2016-12-16T10:49:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177643#p177643</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177643#p177643"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177643#p177643"><![CDATA[
<div class="quotetitle">mczarny napisał(a):</div><div class="quotecontent"><br />Wiem - wywraca to kod do góry nogami<br /></div><br />E tam, wcale nie wywraca,  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />  drobna modyfikacja i proszę mamy po SPI:<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br />/* ------ konfiguracja ----- */<br />#define KEY_ON_OFF 1//1-włączenie i wyłączenie diod LED tym samym klawiszem, 0-tylko włączenie diod LED (wyłączenie tylko drugim klawiszem)<br />#define KEYS_FLOW  1//1-klawisze aktywne dopiero gdy wszystkie diody LED są zapalone lub wygaszone, 0-możliwość zapalania i gaszenia w &quot;locie&quot;<br />#define LED_ON_SPEED 250//szybkość zapalania diod<br />#define LED_OFF_SPEED 100//szybkość gaszenia diod<br />#define LED_SLOW_DOWN1//1-spowolnienie zapalania/gaszenia diod, 0-bez spowolnienia<br />#define USE_SPI 1//1-SPI, 0-bez SPI wykorzystując jeden cały port dla 8 diod<br />/* ------------------------- */<br /><br />#define PORT_KEY1 PORTC//przycisk/czujka nr1<br />#define PIN_KEY1 PINC<br />#define KEY1 (1&lt;&lt;PC6)<br /><br />#define PORT_KEY2 PORTC//przycisk/czujka nr2<br />#define PIN_KEY2 PINC<br />#define KEY2 (1&lt;&lt;PC7)<br /><br />#if USE_SPI == 1<br />#define MOSI PB5//   &lt;---- A (SER IN)<br />#define SCK PB7//   &lt;---- SHIFT CLOCK (SC)<br />#define CS PB4// &lt;---- LATCH CLOCK (LC)<br />#else<br />#define DDR_LED DDRA//osiem diod LED<br />#define PORT_LED PORTA<br />#endif<br /><br />#define LEDS_OFF 0xFF<br />#define LEDS_ON0x00<br /><br /><br />uint8_t bajt = 0;//zmienna globalna przechowująca stan diod LED na potrzeby funkcji leds() i keys_press()<br />uint16_t Timer1, Timer2;//timer programowy<br />uint8_t key_lock1, key_lock2;//zmienne dla potrzeb eliminacji drgań styków http://mirekk36.blogspot.co.uk/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html<br /><br />typedef enum { key1_on, key2_on, key1_off, key2_off } t_keys_state;//definicja nowego typu wyliczeniowego enum o nazwie t_keys_state<br />t_keys_state keys_state = key1_off;//inicjalizacja zmiennej keys_state<br /><br /><br />uint8_t keys_press( void );//obsługa klawiszy<br />void leds( uint8_t choice, uint8_t reset); //zapalanie/gaszenie diod LED<br />void delay( uint16_t ms );//funkcja &quot;własnego&quot; delaya<br />#if USE_SPI == 1<br />void SendSpi( uint8_t bajt );// funkcja wysyałająca bajt po SPI<br />#endif<br /><br />int main(void) {<br /><br />#if USE_SPI == 1<br />DDRB |= (1&lt;&lt;MOSI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);//linie SPI jako wyjścia<br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR)|(1&lt;&lt;SPR1); //aktywacja  SPI, tryb pracy Master, prêdkoœæ zegara Fosc/64<br />#else<br />DDR_LED = LEDS_OFF;//ustawienie całego portu jako wyjscia dla diod LED<br />PORT_LED = LEDS_OFF;//wygaszenie diod LED podłączonych anodami do Vcc<br />#endif<br />PORT_KEY1 |= KEY1;//podciągnięcie linii klawiszy do Vcc<br />PORT_KEY2 |= KEY2;<br /><br />_delay_ms(5);<br /><br /><br />while(1) {<br /><br />uint8_t rst = keys_press();//obsługa klawiszy<br /><br />leds( keys_state, rst );//obsługa diod LED<br /><br />delay(1);<br /><br />}<br />}<br /><br />void leds( uint8_t choice, uint8_t reset) {<br /><br />static uint8_t i = 0;<br />//static uint8_t bajt = 0;<br />uint16_t speed = 0;<br /><br />if(reset) i = 0;<br /><br />if( !Timer1 ) {<br /><br />switch(keys_state) {<br /><br />case key1_on:<br /><br />bajt &amp;= ~( 128 &gt;&gt; i); //zapalenie diod od lewej do prawej<br />speed = LED_ON_SPEED;<br />break;<br />case key2_on:<br />bajt &amp;= ~( 1 &lt;&lt; i); //zapalenie diod od prawej do lewej<br />speed = LED_ON_SPEED;<br />break;<br />case key2_off:<br />bajt |= ( 128 &gt;&gt; i); //zgaszenie diod od lewej do prawej<br />speed = LED_OFF_SPEED;<br />break;<br />case key1_off:<br />bajt |= ( 1 &lt;&lt; i);  //zgaszenie diod od prawej do lewej<br />speed = LED_OFF_SPEED;<br />break;<br />//default: break;<br />}<br /><br />#if USE_SPI == 1<br />SendSpi( bajt );<br />#else<br />PORT_LED = bajt;<br />#endif<br /><br />if(i&lt;8) i++;<br />#if LED_SLOW_DOWN == 1<br />Timer1 = speed + i * (speed / 4);//Timer1 = LED_ON_SPEED gdy diody są zapalane, Timer1 = LED_OFF_SPEED gdy diody są gaszone (ze spowolnieniem)<br />#else<br />Timer1 = speed;//Timer1 = LED_ON_SPEED gdy diody są zapalane, Timer1 = LED_OFF_SPEED gdy diody są gaszone (bez spowonlienia)<br />#endif<br /><br />}<br /><br />}<br /><br />uint8_t keys_press( void ){ //obsługa klawiszy, źródło: http://mirekk36.blogspot.co.uk/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html<br /><br />uint8_t stan_key1 = PIN_KEY1;<br />uint8_t stan_key2 = PIN_KEY2;<br /><br />#if KEYS_FLOW == 1<br />if(( bajt == LEDS_OFF) || (bajt == LEDS_ON )) {//warunek sparawdzający czy wszystkie diody są zapalone lub wygaszone<br />#endif<br />if( !key_lock1 &amp;&amp; !(stan_key1 &amp; KEY1 ) ) {<br />key_lock1 = 250;<br /><br />if( key2_on ==  keys_state) keys_state = key1_off;//spowoduje wyłączenie<br /><br />#if KEY_ON_OFF == 1<br />else if( key1_on ==  keys_state) keys_state = key1_off;//spowoduje wyłaczenie tym samym klawiszem<br />#endif<br /><br />else keys_state = key1_on;//spowoduje włączenie<br /><br />return 1;//1 gdy klawisz został wciśnięty<br />}<br />else if( key_lock1 &amp;&amp; (stan_key1 &amp; KEY1) )key_lock1--;<br /><br />if( !key_lock2 &amp;&amp; !(stan_key2 &amp; KEY2 ) ) {<br /><br />key_lock2 = 250;<br /><br />if( key1_on ==  keys_state) keys_state = key2_off;//spowoduje wyłączenie<br /><br />#if KEY_ON_OFF == 1<br />else if( key2_on ==  keys_state) keys_state = key2_off;//spowoduje wyłaczenie tym samym klawiszem<br />#endif<br /><br />else keys_state = key2_on;//spowoduje włączenie<br /><br />return 1;//1 gdy klawisz został wciśnięty<br />}<br />else if( key_lock2 &amp;&amp; (stan_key2 &amp; KEY2) ) key_lock2--;<br /><br />#if KEYS_FLOW == 1<br />}<br />#endif<br /><br />return 0;//0 gdy klawisz nie został wciśnięty<br />}<br /><br /><br />void delay( uint16_t ms ) {//&quot;własny&quot; delay z wykorzystaniem _delay_ms(), docelowo lepiej użyć timer sprzętowy<br />uint16_t n;<br /><br />while( ms-- ) {<br /><br />_delay_ms(1);<br /><br />n = Timer1;<br />if(n) Timer1 = --n;<br /><br />}<br />}<br /><br />#if USE_SPI == 1<br />void SendSpi( uint8_t bajt ) {<br /><br />SPDR = bajt;<br /><br />while( !(SPSR &amp; (1&lt;&lt;SPIF)) );<br /><br />PORTB |= (1&lt;&lt;CS);<br /><br />PORTB &amp;= ~(1&lt;&lt;CS);<br />}<br />#endif[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 16 gru 2016, o 10:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AsmGoth]]></name></author>
<updated>2016-12-16T09:35:45+01:00</updated>
<published>2016-12-16T09:35:45+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177629#p177629</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177629#p177629"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177629#p177629"><![CDATA[
Jeśli sterownik ma działać tylko do tego celu to nie ma co dokładać dodatkowej elektroniki bo portów i tak nie zabraknie. A przybędzie dodatkowy punkt/element potencjalnej awarii <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Co innego jeśli będziemy chcieli te porty wykorzystać jeszcze do innych celów i będzie nam ich brakować. Bo tak możemy zaraz dojść do tego, że można dorzucić CAN, modbus czy inny RS-485 i sterować tym czym sobie zapragniemy choćby włącznikiem dzwonkowym przy furtce gdy dom jest w trybie &quot;Dziecko spi&quot;, zeby dzwonek nie dzwonił tylko LEDy na schodach zrobiły nam kilkukrotna &quot;linijke diodowa&quot; informując, że listonosz najnowszy numer Atnel Mikroprocesory przyniósł <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=15714">AsmGoth</a> — 16 gru 2016, o 09:35</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2016-12-16T09:13:14+01:00</updated>
<published>2016-12-16T09:13:14+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177628#p177628</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177628#p177628"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177628#p177628"><![CDATA[
cześć<br />Kolega <strong>anshar</strong> się napracował i pięknie wytłumaczył jak działa kod, ale ja poszedłbym w kierunku rejestrów przesuwnych i wtedy w miejsce zajętych dwóch portów (16 pinów) korzystamy tylko z trzech pinów do transmisji SPI.<br />Wiem - wywraca to kod do góry nogami ale przy okazji można nauczyć się czegoś nowego a sam sposób jak to zrobić jest w BB - str.312<br /><br />pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 16 gru 2016, o 09:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-16T02:12:06+01:00</updated>
<published>2016-12-16T02:12:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177617#p177617</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177617#p177617"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177617#p177617"><![CDATA[
<div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />różnica między if i endif<br /></div><br />Znowu odeślę ciebie do BB, bo tam wszystko jest. W twardej oprawie na str.141 masz podrozdział 3.6.6. Dyrektywy kompilacji warunkowej.<br />Jest to bardzo proste, zobacz...<br />W kodzie mam na przykład:<br />[syntax=c]#define LED_SLOW_DOWN   1                       //1-spowolnienie zapalania/gaszenia diod, 0-bez spowolnienia[/syntax]<br />Jest to dyrektywa preprocesora, wszędzie gdzie wystąpi teraz LED_SLOW_DOWN automatycznie zostanie podstawiona tam wartość 1. Mam nadzieję, że to dla ciebie jasne. <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Dalej:<br />[syntax=c]#if LED_SLOW_DOWN == 1   //sprawdzamy czy LED_SLOW_DOWN jest równe 1 <br />                Timer1 = speed + i * (speed / 4);     //wykonujemy tą linię kodu (w tym przypadku ze spowolnieniem zapalania/gaszenia diod)<br />#else                                   //jeśli nie <br />                Timer1 = speed;                              //to wykonujemy tą linijkę kodu (bez spowolnienia)<br />#endif                                 //koniec sprawdzania, koniec warunku[/syntax]<br /><br />Chodzi o to, że pisząc ten kod, nie wiedziałem, czy chcesz aby diody się zapalały/gasiły z tą samą prędkością czy życzysz sobie, by stopniowo zapalały/gasily się wolniej. Dlatego masz opcję do wyboru gdy wpiszesz 1, czyli spowolnienie zapalania/gaszenia diod, a gdy 0 (może być w tym przypadku dowolna cyfra, byle nie była równa 1) to będą się zapalać/gasić bez spowolnienia, z tą samą prędkością. <br />W eclipsie działa to tak, że linia/linie kodu, które są niektywne, nie są brane pod uwage do kompilacji programu, są wyszarzone. Od razu widzisz, które linie kodu zostaną skompilowane, a które nie. Fajne?!<br /><br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />Wspomniałeś coś o kodzie na 16 stopni no i właśnie problem jak dodać np. port PC do portu PD żeby diody zapalały się kolejno<br />(podpowiedz mile wskazana)<br /></div><br />Interesuje nas tak na prawdę funkcja void leds( uint8_t choice, uint8_t reset)<br />Powołałem tam zmienną statyczną i z każdym wywołaniem tej funkcji inkrementuję tą zmienną o 1, i++; <br />Mamy 8 diod, więc ta zmienna powinna przyjmować wartości od 0 do 7, prawda? Dlatego na końcu dałem if(i&lt;8) i++; czyli inkrementuję tą zmienną tylko wtedy, gdy jest mniejsza od 8. <br />Teraz chcemy mieć 16 diod, więc ta zmienna musi przyjmować wartości od 0 do 15. Czyli damy warunek if(i&lt;16) i++;<br />Dalej w kodzie mamy:<br />[syntax=c]PORT_LED &amp;= ~( 128 &gt;&gt; i);        //zapalenie diod od lewej do prawej[/syntax]<br />A tak na prawdę to jest to:<br />[syntax=c]PORTA  &amp;= ~( 128 &gt;&gt; i);[/syntax]<br />OK, diody na porcie A zapalają się po kolei.<br />Dodajemy kolejne 8 diod, tym razem na porcie D.<br />[syntax=c]PORTD &amp;= ~( 128 &gt;&gt; i );[/syntax]<br />No dobra, tylko, że jak tak zrobimy to owszem diody będą się zapalały ale na dwóch portach jednocześnie (równolegle), a my chcemy, by zapały się po kolei, no to jak już się pewnie domyślasz musimy dać jakiegoś if'a, bo przecież diody mają się zapalać dopiero dla naszego i większego od 7, czyli:<br />[syntax=c]PORTA &amp;= ~( 128 &gt;&gt; i); //zapalenie diod od lewej do prawej na porcie A<br />if(i&gt;7) PORTD &amp;= ~( 128 &gt;&gt; (i-8)); //zapalenie diod od lewej do prawej na porcie D[/syntax]<br />A po co jest jeszcze i-8? <br />Inkrementujemy naszą zmienną i od 0 do 15, a nasze wyświetlanie z przesunięciem bitowym działa prawidłowo dla i w zakresie od 0 do 7, a nie od 8 do 15, dlatego odejmuję jeszcze 8.<br />Proste?<br />Identycznie trzeba zrobić dla zapalania diod od prawej do lewej i dwóch pozostałych do gaszenia, no może nie do końca tak samo, bardzo podobnie. <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=7157">anshar</a> — 16 gru 2016, o 02:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-12-16T00:51:56+01:00</updated>
<published>2016-12-16T00:51:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177616#p177616</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177616#p177616"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177616#p177616"><![CDATA[
W moim przypadku gotowce są uzupełnieniem BB mam wtedy szerszy zakres wiedzy zawartej w nim i lepiej mogę zrozumieć.<br />Na początku BB jest tam dużo teoria i dla osoby uczącej się od zera jest to pewien kłopot. <br />Wspomniałeś coś o kodzie na 16 stopni no i właśnie problem jak dodać np. port PC do portu PD żeby diody zapalały się kolejno<br />(podpowiedz mile wskazana) . Wracając do twojego kodu takie rzeczy jak np.switch,if,endif mogę zobaczyć ich zastosowanie i rozmieszenie w programie jest to bardzo cenne i jeszcze jedno różnica między if i endif<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 16 gru 2016, o 00:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-15T22:58:58+01:00</updated>
<published>2016-12-15T22:58:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177610#p177610</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177610#p177610"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177610#p177610"><![CDATA[
Jakiś tam kod jest, <img src="https://forum.atnel.pl/images/smilies/icon_rolleyes.gif" alt=":roll:" title="Udaje, że to nie on" />  ale dla tylko 8 diod. Ty przecież potrzebujesz dla 16, prawda? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Proponuję zatem, gdy już ten kod przetrawisz to przerób go sobie na 16 diod, albo dla wprawy napisz od podstaw nowy i wtedy potraktuj moje rozwiązanie jako przykład, jao jedno z wielu. Przecież to samo można napisać na wiele sposobów. Pewnie dużo prościej i czytelniej.<br /><br />Nie bardzo rozumiem o jakim rozmieszczeniu jakich nawiasów piszesz.  <img src="https://forum.atnel.pl/images/smilies/icon_e_surprised.gif" alt=":o" title="Zdziwiony" /> O co kaman?<br /><br />Co do ULN2803 to będziesz potrzebował ze dwie takie sztuki dla 16 listew diodowych. Myślę, że to ma szanse działać.<br /><br />Faktycznie nie powinienem ci tego kodu dawać, no ale jak już napisałem to szkoda, by się takie arcydzieło zmarnowało!  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> <br />Pozdrawiam.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 2 minutach ]</span></strong><br /><br />Byłbym zapomniał. W razie czego dla 16 diod już mam napisany.  <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=7157">anshar</a> — 15 gru 2016, o 22:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-12-15T22:20:32+01:00</updated>
<published>2016-12-15T22:20:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177606#p177606</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177606#p177606"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177606#p177606"><![CDATA[
Kolego ‘anshar’ trochę zostałem zaskoczony twoim kodem ponieważ moim celem było najpierw lepsze poznanie ‘C’ a potem napisanie własnego kodu ale kod już jest z czego się bardzo cieszę  <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />  ,<br />a teraz pochylam się nad i analizuje choć nie które miejsca muszę dobrze przetrawić.<br />Ogólnie kod jest dla mnie zrozumiały  mam jaszcze problem gdzie co rozmieścić jaki nawias<br />ale widzę już małe postępy.<br />A co się tyczy schodów to :<br />taśma led 30cm x 16 stopni = około 5m/ 2A , zasilanie 12V i myślałem nad układem ULN2803.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 15 gru 2016, o 22:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[AsmGoth]]></name></author>
<updated>2016-12-14T23:05:08+01:00</updated>
<published>2016-12-14T23:05:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177539#p177539</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177539#p177539"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177539#p177539"><![CDATA[
16 schodow czy 16 stopni ? <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> chyba stopni <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Jakie diody ? bo wydajnosc pradowa za duza nie jest z takiego avra a jedna raczej bedzie marnym swiatlem ;P<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=15714">AsmGoth</a> — 14 gru 2016, o 23:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-14T22:59:52+01:00</updated>
<published>2016-12-14T22:59:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177537#p177537</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177537#p177537"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177537#p177537"><![CDATA[
Szczerze to myślałem, że ty to piszesz tak do testów, do nauki. <br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />program ma obsługiwać 16 schodów<br /></div><br />Jak ma wyglądać to oświetenie? Napisz coś więcej, bo tak to trochę wróżenie z fusów. <br />Ma to być jedna zwykła dioda led na każdy ze schodów czy ma ich być więcej?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=7157">anshar</a> — 14 gru 2016, o 22:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[czarekgr]]></name></author>
<updated>2016-12-14T20:26:40+01:00</updated>
<published>2016-12-14T20:26:40+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177504#p177504</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177504#p177504"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177504#p177504"><![CDATA[
<div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />Proszę o pomoc próbuje napisać program do oświetlenia schodów ale nie umiem <br />połączyć dwóch opcji oświecania i gaszenia w gore z oświecaniem i gaszeniem <br />w dół  :<br />klawisz1_wcisniety - zapala ledy w górę<br />klawisz2_wcisniety - gasi ledy  w górę<br /><br />klawisz3_wcisniety - zapala ledy w dół<br />klawisz4_wcisniety - gasi ledy  w dół<br /></div><br /><br />A może lepiej nie 4, ale 2 przyciski?<br />Jak się się nie świeci to przycisk zapala, a jak się świeci to gasi.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14311">czarekgr</a> — 14 gru 2016, o 20:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Daro68]]></name></author>
<updated>2016-12-14T20:23:47+01:00</updated>
<published>2016-12-14T20:23:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177503#p177503</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177503#p177503"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177503#p177503"><![CDATA[
Dziękuje za podpowiedz dotyczącą ‘enum,’ zajrzałem do BB i wszystko się wyjaśniło .<br />Mam jeszcze jedno pytanie program ma obsługiwać 16 schodów więc co lepiej <br />zastosować rejestr przesuwny 74HC595 albo samo atmege np. 32 i port PC + PD.<br /><br />Pozdrawiam.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14180">Daro68</a> — 14 gru 2016, o 20:23</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-14T19:30:12+01:00</updated>
<published>2016-12-14T19:30:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177499#p177499</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177499#p177499"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177499#p177499"><![CDATA[
Poniżej wersja druga, trochę poprawiona:  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;util/delay.h&gt;<br /><br /><br />#define PORT_KEY1 PORTC//przycisk/czujka nr1<br />#define PIN_KEY1 PINC<br />#define KEY1 (1&lt;&lt;PC6)<br /><br />#define PORT_KEY2 PORTC//przycisk/czujka nr2<br />#define PIN_KEY2 PINC<br />#define KEY2 (1&lt;&lt;PC7)<br /><br />#define DDR_LED DDRA//osiem diod LED<br />#define PORT_LED PORTA<br />#define LEDS_OFF 0xFF<br />#define LEDS_ON0x00<br /><br /><br />/* ------ konfiguracja ----- */<br />#define KEY_ON_OFF 1//1-włączenie i wyłączenie diod LED tym samym klawiszem, 0-tylko włączenie diod LED (wyłączenie tylko drugim klawiszem)<br />#define KEYS_FLOW  1//1-klawisze aktywne dopiero gdy wszystkie diody LED są zapalone lub wygaszone, 0-możliwość zapalania i gaszenia w &quot;locie&quot;<br />#define LED_ON_SPEED 250//szybkość zapalania diod<br />#define LED_OFF_SPEED 100//szybkość gaszenia diod<br />#define LED_SLOW_DOWN1//1-spowolnienie zapalania/gaszenia diod, 0-bez spowolnienia<br />/* ------------------------- */<br /><br /><br />uint16_t Timer1;//timer programowy<br />uint8_t key_lock1, key_lock2;//zmienne dla potrzeb eliminacji drgań styków http://mirekk36.blogspot.co.uk/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html<br /><br />typedef enum { key1_on, key2_on, key1_off, key2_off } t_keys_state;//definicja nowego typu wyliczeniowego enum o nazwie t_keys_state<br />t_keys_state keys_state = key1_off;//inicjalizacja zmiennej keys_state<br /><br />uint8_t keys_press( void );//obsługa klawiszy<br />void leds( uint8_t choice, uint8_t reset); //zapalanie/gaszenie diod LED<br />void delay( uint16_t ms );//funkcja &quot;własnego&quot; delaya<br /><br /><br />int main(void) {<br /><br />DDR_LED = LEDS_OFF;//ustawienie całego portu jako wyjscia dla diod LED<br />PORT_LED = LEDS_OFF;//wygaszenie diod LED podłączonych anodami do Vcc<br /><br />PORT_KEY1 |= KEY1;//podciągnięcie linii klawiszy do Vcc<br />PORT_KEY2 |= KEY2;<br /><br />_delay_ms(5);<br /><br /><br />while(1) {<br /><br />uint8_t rst = keys_press();//obsługa klawiszy<br /><br />leds( keys_state, rst );//obsługa diod LED<br /><br />delay(1);<br /><br />}<br />}<br /><br />void leds( uint8_t choice, uint8_t reset) {<br /><br />static uint8_t i = 0;<br />uint16_t speed = 0;<br />if(reset) i = 0;<br /><br />if( !Timer1 ) {<br /><br />switch(keys_state) {<br /><br />case key1_on:<br />PORT_LED &amp;= ~( 128 &gt;&gt; i); //zapalenie diod od lewej do prawej<br />speed = LED_ON_SPEED;<br />break;<br />case key2_on:<br />PORT_LED &amp;= ~( 1 &lt;&lt; i); //zapalenie diod od prawej do lewej<br />speed = LED_ON_SPEED;<br />break;<br />case key2_off:<br />PORT_LED |= ( 128 &gt;&gt; i); //zgaszenie diod od lewej do prawej<br />speed = LED_OFF_SPEED;<br />break;<br />case key1_off:<br />PORT_LED |= ( 1 &lt;&lt; i);  //zgaszenie diod od prawej do lewej<br />speed = LED_OFF_SPEED;<br />break;<br />//default: break;<br />}<br /><br />if(i&lt;8) i++;<br />#if LED_SLOW_DOWN == 1<br />Timer1 = speed + i * (speed / 4);//Timer1 = LED_ON_SPEED gdy diody są zapalane, Timer1 = LED_OFF_SPEED gdy diody są gaszone (ze spowolnieniem)<br />#else<br />Timer1 = speed;//Timer1 = LED_ON_SPEED gdy diody są zapalane, Timer1 = LED_OFF_SPEED gdy diody są gaszone (bez spowonlienia)<br />#endif<br /><br />}<br /><br />}<br /><br />uint8_t keys_press( void ){ //obsługa klawiszy, źródło: http://mirekk36.blogspot.co.uk/2012/10/obsuga-klawiszy-drgania-stykow-cd2.html<br /><br />uint8_t stan_key1 = PIN_KEY1;<br />uint8_t stan_key2 = PIN_KEY2;<br /><br />#if KEYS_FLOW == 1<br />if(( PORT_LED == LEDS_OFF) || (PORT_LED == LEDS_ON )) {//warunek sparawdzający czy wszystkie diody są zapalone lub wygaszone<br />#endif<br />if( !key_lock1 &amp;&amp; !(stan_key1 &amp; KEY1 ) ) {<br />key_lock1 = 250;<br /><br />if( key2_on ==  keys_state) keys_state = key1_off;//spowoduje wyłączenie<br /><br />#if KEY_ON_OFF == 1<br />else if( key1_on ==  keys_state) keys_state = key1_off;//spowoduje wyłaczenie tym samym klawiszem<br />#endif<br /><br />else keys_state = key1_on;//spowoduje włączenie<br /><br />return 1;//1 gdy klawisz został wciśnięty<br />}<br />else if( key_lock1 &amp;&amp; (stan_key1 &amp; KEY1) )key_lock1--;<br /><br />if( !key_lock2 &amp;&amp; !(stan_key2 &amp; KEY2 ) ) {<br /><br />key_lock2 = 250;<br /><br />if( key1_on ==  keys_state) keys_state = key2_off;//spowoduje wyłączenie<br /><br />#if KEY_ON_OFF == 1<br />else if( key2_on ==  keys_state) keys_state = key2_off;//spowoduje wyłaczenie tym samym klawiszem<br />#endif<br /><br />else keys_state = key2_on;//spowoduje włączenie<br /><br />return 1;//1 gdy klawisz został wciśnięty<br />}<br />else if( key_lock2 &amp;&amp; (stan_key2 &amp; KEY2) ) key_lock2--;<br /><br />#if KEYS_FLOW == 1<br />}<br />#endif<br /><br />return 0;//0 gdy klawisz nie został wciśnięty<br />}<br /><br /><br />void delay( uint16_t ms ) {//&quot;własny&quot; delay z wykorzystaniem _delay_ms(), docelowo lepiej użyć timer sprzętowy<br />uint16_t n;<br /><br />while( ms-- ) {<br /><br />_delay_ms(1);<br /><br />n = Timer1;<br />if(n) Timer1 = --n;<br /><br />}<br />}[/syntax]<br />@Daro68 <br />Daj znać czy ci się podoba i czy rozumiesz co się tutaj dzieje w tym kodzie. W razie czego pytaj.  <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=7157">anshar</a> — 14 gru 2016, o 19:30</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[anshar]]></name></author>
<updated>2016-12-13T21:35:04+01:00</updated>
<published>2016-12-13T21:35:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177418#p177418</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177418#p177418"/>
<title type="html"><![CDATA[Re: Program led shcody]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17047&amp;p=177418#p177418"><![CDATA[
<div class="quotetitle">AsmGoth napisał(a):</div><div class="quotecontent"><br />Z drugiej strony - idealne do wymuszania aktywnosci fizycznej ;P<br /></div><br />No jak ktoś lubi... to sobie pobiegnie, światła wyłączy, poczeka chwilę, światła włączy i zbiegnie na dół by je sobie wyłączyć. Świetna gimnastyk z samego rana!  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />Program który przedstawił kolega ‘anshar’ <img src="https://forum.atnel.pl/images/smilies/icon_eek.gif" alt=":shock:" title="Zaszokowany" /> jest to ten efekt który chciałem uzyskać,<br /></div><br />Bardzo mi miło. <br /><div class="quotetitle">Daro68 napisał(a):</div><div class="quotecontent"><br />Jeśli mogę jeszcze mogę spytać co oznacza „enum”<br /></div><br />Enum to typ wyliczeniowy, masz wszystko pięknie opisane w BB (Podstawy języka C, Typy wyliczeniowe enum, str84-86 w twardej oprawie.  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: kilkunastu sekundach ]</span></strong><br /><br /><div class="quotetitle">Daro69 napisał(a):</div><div class="quotecontent"><br />Od tego momentu istnieje zmienna keys_state = 2 . (key1_off) <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /></div><br /><br />Dokładnie tak! Prawda, że łatwiej?  <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=7157">anshar</a> — 13 gru 2016, o 21:35</p><hr />
]]></content>
</entry>
</feed>